extends Building var money: int = 0: set(value): money = value _set_money_label() @onready var money_label: Label = %MoneyLabel func can_citizen_enter(coord: Vector2i, direction: Board.Direction) -> bool: var up_adjustment := Board.get_next_direction(Board.Direction.UP, get_rotation_count()) var right_adjustment := Board.get_next_direction(Board.Direction.RIGHT, get_rotation_count()) var heading_1 := Board.get_next_direction(Board.Direction.DOWN, get_rotation_count()) var heading_2 := Board.get_next_direction(Board.Direction.LEFT, get_rotation_count()) var heading_3 := Board.get_next_direction(Board.Direction.RIGHT, get_rotation_count()) var entrance_1 := starting_coord + Board.get_direction_vector(up_adjustment) var entrance_2 := ( starting_coord + Board.get_direction_vector(right_adjustment) + Board.get_direction_vector(up_adjustment) ) return ( (coord == entrance_1 and direction == heading_1) or (coord == entrance_2 and direction == heading_1) or (coord == entrance_1 and direction == heading_2) or (coord == entrance_2 and direction == heading_3) ) func get_tile_coords() -> Array[Vector2i]: var result: Array[Vector2i] = [] result.push_back(starting_coord) result.push_back( starting_coord + Vector2i(Vector2.LEFT.rotated(deg_to_rad(90 * get_rotation_count()))) ) result.push_back( ( starting_coord + Vector2i(Vector2.LEFT.rotated(deg_to_rad(90 * get_rotation_count()))) + Vector2i(Vector2.UP.rotated(deg_to_rad(90 * get_rotation_count()))) ) ) result.push_back( starting_coord + Vector2i(Vector2.RIGHT.rotated(deg_to_rad(90 * get_rotation_count()))) ) result.push_back( ( starting_coord + Vector2i(Vector2.RIGHT.rotated(deg_to_rad(90 * get_rotation_count()))) + Vector2i(Vector2.RIGHT.rotated(deg_to_rad(90 * get_rotation_count()))) ) ) result.push_back( ( starting_coord + Vector2i(Vector2.RIGHT.rotated(deg_to_rad(90 * get_rotation_count()))) + Vector2i(Vector2.RIGHT.rotated(deg_to_rad(90 * get_rotation_count()))) + Vector2i(Vector2.UP.rotated(deg_to_rad(90 * get_rotation_count()))) ) ) return result func get_direction_queue(_citizen: Citizen) -> Array[Board.Direction]: return [Board.Direction.NONE] func activate(citizen: Citizen) -> void: if citizen.get_status_count(Citizen.Status.ARMED) > 0: citizen.money += money citizen.play_money_animation() citizen.remove_status(Citizen.Status.ARMED) money = 0 elif citizen.money > 0: money += citizen.money func handle_post_turn_actions() -> void: Globals.board_game.current_board_state.citizens_starting_money += floori(money / 20.0) money = money % 20 func _ready() -> void: _set_money_label() func _set_money_label() -> void: if is_node_ready(): money_label.text = "$%d / $20" % money