clockwork-city/resources/board_state.gd

57 lines
1.6 KiB
GDScript3
Raw Normal View History

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