class_name Controls extends Control const DRAFT_BUILDING_SCENE = preload("uid://87u3upovcueb") var rem_tween: Tween var hand_tween: Tween var es_tween: Tween var draft_building: Building @onready var turn_label: Label = %TurnLabel @onready var player_display: PlayerDisplay = %PlayerDisplay @onready var submit_button: Button = %Submit @onready var pass_button: Button = %Pass @onready var undo_button: Button = %Undo @onready var pause_button: Button = %Pause @onready var play_button: Button = %Play @onready var rem_button: Button = %RealEstateMarket @onready var start_walls: Button = %StartWalls @onready var stop_walls: Button = %StopWalls @onready var cancel_placement_button: Button = %CancelPlacement @onready var blueprints_container: Container = %BlueprintsContainer @onready var draft_container: Container = %DraftContainer @onready var hand: Hand = %Hand @onready var fast_1: Button = %FastForward1 @onready var fast_2: Button = %FastForward2 @onready var fast_4: Button = %FastForward4 @onready var fast_10: Button = %FastForward10 @onready var draft_cost_container: Container = %DraftCost @onready var draft_cost_spinner: SpinBox = %BuildingDraftCost func give_hand(buildings: Array[Building]) -> void: hand.give_buildings(buildings) print_debug("this sucks!") await get_tree().process_frame await get_tree().process_frame _show_hand() func reset_turn() -> void: get_tree().call_group("Pausable", "pause") submit_button.show() pause_button.hide() play_button.hide() func set_info() -> void: turn_label.text = ( "%d.%d" % [Globals.board_game.current_board_state.day, Globals.board_game.current_board_state.turn] ) player_display.set_players(Globals.board_game.current_board_state.players) func check_controls_enabled() -> void: #print(Globals.board_game.current_board_state.current_player.id == Globals.game.this_player.id) #print(Globals.board_game.current_board_state.state != BoardState.State.PLAY) #print(Globals.board_game.pending_board_state != null) if Globals.board_game.current_board_state.current_player.id == Globals.game.this_player.id: if Globals.board_game.current_board_state.state != BoardState.State.PLAY: pass_button.hide() submit_button.show() rem_button.disabled = true submit_button.disabled = Globals.board_game.pending_board_state == null else: if Globals.board_game.pending_board_state != null: pass_button.hide() submit_button.show() submit_button.disabled = false undo_button.disabled = false rem_button.disabled = true else: pass_button.show() submit_button.hide() submit_button.disabled = true pass_button.disabled = Globals.board_game.is_playing_day undo_button.disabled = true rem_button.disabled = false else: pass_button.show() submit_button.hide() rem_button.disabled = true pass_button.disabled = true undo_button.disabled = true submit_button.disabled = true # TODO: Fix undo # undo_button.disabled = true func set_board_state(board_state: BoardState) -> void: for child in draft_container.get_children(): child.queue_free() for building in board_state.real_estate_market: var db: DraftBuilding = DRAFT_BUILDING_SCENE.instantiate() draft_container.add_child(db) db.set_building(building.duplicate()) db.building_selector.select_building.connect(handle_building_selected) func end_day() -> void: undo_button.hide() play_button.hide() pause_button.show() pass_button.hide() submit_button.hide() rem_button.disabled = true func _on_pass_pressed(): Globals.board_game.handle_pass() func _on_submit_pressed(): Globals.board_game.handle_board_state_confirmed() func _on_undo_pressed(): Globals.board_game.reset_turn() func _on_pause_pressed(): get_tree().call_group("Pausable", "pause") play_button.show() pause_button.hide() func _on_play_pressed(): get_tree().call_group("Pausable", "unpause") play_button.hide() pause_button.show() func _on_blueprints_pressed(): _show_real_estate_market() func handle_tile_selected(tile: Tile): if ( tile.cost <= Globals.board_game.current_board_state.current_player.money and ( Globals.board_game.current_board_state.current_player.build_actions_taken < Globals.board_game.current_board_state.current_player.building_permits ) ): _hide_real_estate_market() Globals.board_game.select_tile(tile) func handle_building_selected(building: Building) -> void: if ( building.cost <= Globals.board_game.current_board_state.current_player.money and ( Globals.board_game.current_board_state.current_player.build_actions_taken < Globals.board_game.current_board_state.current_player.building_permits ) ): _hide_real_estate_market() Globals.board_game.select_building(building) func _on_walls_pressed(): Globals.board_game.place_walls() if start_walls.visible: start_walls.hide() stop_walls.show() else: start_walls.show() stop_walls.hide() _hide_real_estate_market() func _hide_real_estate_market() -> void: if is_instance_valid(rem_tween): rem_tween.kill() rem_tween = create_tween() rem_tween.set_ignore_time_scale(true) rem_tween.set_trans(Tween.TRANS_BACK) rem_tween.tween_property(blueprints_container, "offset_bottom", 0, 0.5) func _show_real_estate_market() -> void: if is_instance_valid(rem_tween): rem_tween.kill() rem_tween = create_tween() rem_tween.set_ignore_time_scale(true) rem_tween.set_trans(Tween.TRANS_BACK) rem_tween.tween_property( blueprints_container, "offset_bottom", blueprints_container.size.y, 0.5 ) func _hide_hand() -> void: if is_instance_valid(hand_tween): hand_tween.kill() hand_tween = create_tween() hand_tween.set_ignore_time_scale(true) hand_tween.set_trans(Tween.TRANS_BACK) hand_tween.tween_property(hand, "offset_top", 0, 0.5) func _show_hand() -> void: if is_instance_valid(hand_tween): hand_tween.kill() hand_tween = create_tween() hand_tween.set_ignore_time_scale(true) hand_tween.set_trans(Tween.TRANS_BACK) hand_tween.tween_property(hand, "offset_top", -hand.size.y, 0.5) func _on_fast_forward_1_pressed(): Engine.time_scale = 2 fast_1.hide() fast_2.show() fast_4.hide() fast_10.hide() func _on_fast_forward_2_pressed(): Engine.time_scale = 4 fast_1.hide() fast_2.hide() fast_4.show() fast_10.hide() func _on_fast_forward_4_pressed(): Engine.time_scale = 10 fast_1.hide() fast_2.hide() fast_4.hide() fast_10.show() func _on_fast_forward_10_pressed(): Engine.time_scale = 1 fast_1.show() fast_2.hide() fast_4.hide() fast_10.hide() func _on_cancel_placement_pressed(): Globals.board_game.cancel_placement() _hide_real_estate_market() func _on_hand_building_selected(building: Building) -> void: for selector in hand.buildings_container.get_children(): if selector.get_child(0) != building: selector.hide() draft_building = building draft_cost_container.show() func _on_set_draft_cost_pressed(): _hide_hand() draft_cost_container.hide() draft_building.cost = roundi(draft_cost_spinner.value) Globals.board_game.add_building_to_draft.rpc(draft_building.serialize()) func _on_sell_building_permit_pressed(): Globals.board_game.sell_building_permit() _hide_real_estate_market()