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 buildings_to_destroy: 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["buildings_to_destroy"] = buildings_to_destroy 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.buildings_to_destroy = data["buildings_to_destroy"] 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