class_name BoardState enum State { INITIAL_SETUP, DRAFT, PLAY } 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 func get_this_player_index() -> int: return players.find_custom(func(p: Player) -> bool: return p.id == Globals.game.this_player.id) func get_current_player_index() -> int: return players.find_custom(func(p: Player) -> bool: return p.id == current_player.id) func serialize() -> Dictionary: var result = {} result["day"] = day result["turn"] = turn result["state"] = state result["players_passed"] = players_passed 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()) 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.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)) return result