generated from krampus/template-godot4
57 lines
1.6 KiB
GDScript
57 lines
1.6 KiB
GDScript
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
|