2026-04-20 13:03:39 -05:00
|
|
|
class_name BoardState
|
|
|
|
|
|
2026-04-24 12:19:34 -05:00
|
|
|
enum State { INITIAL_SETUP, DRAFT, PLAY, PLACING_SPAWNS, DESTROYING_BUILDINGS }
|
2026-04-20 13:03:39 -05:00
|
|
|
|
|
|
|
|
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
|
2026-04-24 12:19:34 -05:00
|
|
|
var real_estate_market: Array[Building] = []
|
|
|
|
|
var spawn_placements: int = 0
|
2026-04-29 13:59:35 -05:00
|
|
|
var buildings_to_destroy: int = 0
|
2026-04-24 12:19:34 -05:00
|
|
|
var citizens_starting_money: int = 0
|
2026-04-20 13:03:39 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
func get_this_player_index() -> int:
|
2026-04-24 12:19:34 -05:00
|
|
|
return get_player_index(Globals.game.this_player)
|
2026-04-20 13:03:39 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
func get_current_player_index() -> int:
|
2026-04-24 12:19:34 -05:00
|
|
|
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)
|
2026-04-20 13:03:39 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
func serialize() -> Dictionary:
|
|
|
|
|
var result = {}
|
|
|
|
|
result["day"] = day
|
|
|
|
|
result["turn"] = turn
|
|
|
|
|
result["state"] = state
|
|
|
|
|
result["players_passed"] = players_passed
|
2026-04-24 12:19:34 -05:00
|
|
|
result["spawn_placements"] = spawn_placements
|
2026-04-29 13:59:35 -05:00
|
|
|
result["buildings_to_destroy"] = buildings_to_destroy
|
2026-04-24 12:19:34 -05:00
|
|
|
result["citizens_starting_money"] = citizens_starting_money
|
2026-04-20 13:03:39 -05:00
|
|
|
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())
|
2026-04-24 12:19:34 -05:00
|
|
|
result["real_estate_market"] = []
|
|
|
|
|
for db in real_estate_market:
|
|
|
|
|
result["real_estate_market"].append(db.serialize())
|
2026-04-20 13:03:39 -05:00
|
|
|
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"]
|
2026-04-24 12:19:34 -05:00
|
|
|
result.spawn_placements = data["spawn_placements"]
|
2026-04-29 13:59:35 -05:00
|
|
|
result.buildings_to_destroy = data["buildings_to_destroy"]
|
2026-04-24 12:19:34 -05:00
|
|
|
result.citizens_starting_money = data["citizens_starting_money"]
|
2026-04-20 13:03:39 -05:00
|
|
|
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))
|
2026-04-24 12:19:34 -05:00
|
|
|
for db in data["real_estate_market"]:
|
|
|
|
|
result.real_estate_market.append(Building.deserialize(db))
|
2026-04-20 13:03:39 -05:00
|
|
|
return result
|