clockwork-city/resources/board_state.gd
duncgibbs 14e2073322
All checks were successful
linting & formatting / build (push) Successful in 25s
itch.io publish action / build (web, html) (push) Successful in 3m51s
mostly implements networked board state; but also adds voting and a few buildings
2026-04-24 12:19:34 -05:00

73 lines
2.2 KiB
GDScript

class_name BoardState
enum State { INITIAL_SETUP, DRAFT, PLAY, PLACING_SPAWNS, DESTROYING_BUILDINGS }
var day: int = 0
var turn: int = 0
var state: State = State.INITIAL_SETUP
var current_player: Player
var players: Array[Player] = []
var tiles: Array[Tile] = []
var buildings: Array[Building] = []
var players_passed: int = 0
var real_estate_market: Array[Building] = []
var spawn_placements: int = 0
var citizens_starting_money: int = 0
func get_this_player_index() -> int:
return get_player_index(Globals.game.this_player)
func get_current_player_index() -> int:
return get_player_index(current_player)
func get_player_index(player: Player) -> int:
return players.find_custom(func(p: Player) -> bool: return p.id == player.id)
func serialize() -> Dictionary:
var result = {}
result["day"] = day
result["turn"] = turn
result["state"] = state
result["players_passed"] = players_passed
result["spawn_placements"] = spawn_placements
result["citizens_starting_money"] = citizens_starting_money
result["current_player"] = current_player.serialize()
result["players"] = []
for p in players:
result["players"].append(p.serialize())
result["tiles"] = []
for t in tiles:
if is_instance_valid(t):
result["tiles"].append(t.serialize())
result["buildings"] = []
for b in buildings:
result["buildings"].append(b.serialize())
result["real_estate_market"] = []
for db in real_estate_market:
result["real_estate_market"].append(db.serialize())
return result
static func deserialize(data: Dictionary) -> BoardState:
var result = BoardState.new()
result.day = data["day"]
result.turn = data["turn"]
result.state = data["state"]
result.players_passed = data["players_passed"]
result.spawn_placements = data["spawn_placements"]
result.citizens_starting_money = data["citizens_starting_money"]
result.current_player = Player.deserialize(data["current_player"])
for p in data["players"]:
result.players.append(Player.deserialize(p))
for t in data["tiles"]:
result.tiles.append(Tile.deserialize(t))
for b in data["buildings"]:
result.buildings.append(Building.deserialize(b))
for db in data["real_estate_market"]:
result.real_estate_market.append(Building.deserialize(db))
return result