extends Node # UIManager - Handles all UI setup and updates const item_tex = [ preload("res://assets/textures/player_board_and_blue_print/tile_null.tres"), preload("res://assets/textures/player_board_and_blue_print/tile_heart.tres"), preload("res://assets/textures/player_board_and_blue_print/tile_diamond.tres"), preload("res://assets/textures/player_board_and_blue_print/tile_star.tres"), preload("res://assets/textures/player_board_and_blue_print/tile_coin.tres") ] # Node references - will be set by Main var action_menu var move_button var grab_button var put_button var randomize_button var arrange_button var playerboard_ui var local_player_character enum ActionState { NONE, MOVING, GRABBING, PUTTING, RANDOMIZING, ARRANGING, PLACING_OBSTACLE } var current_action_state = ActionState.NONE func initialize(main_node): # Get node references from main scene action_menu = main_node.get_node("ActionMenu") move_button = main_node.get_node("ActionMenu/ActionButtonContainer/MoveButton") grab_button = main_node.get_node("ActionMenu/ActionButtonContainer/GrabButton") put_button = main_node.get_node("ActionMenu/ActionButtonContainer/PutButton") randomize_button = main_node.get_node("ActionMenu/ActionButtonContainer/RandomizeButton") arrange_button = main_node.get_node("ActionMenu/ActionButtonContainer/ArrangeButton") playerboard_ui = main_node.get_node("PlayerboardUI") func setup_action_buttons(action_state_callback): move_button.pressed.connect(func(): action_state_callback.call(ActionState.MOVING)) grab_button.pressed.connect(func(): action_state_callback.call(ActionState.GRABBING)) put_button.pressed.connect(func(): if local_player_character: local_player_character.auto_put_item() ) randomize_button.pressed.connect(func(): action_state_callback.call(ActionState.RANDOMIZING)) arrange_button.pressed.connect(func(): if local_player_character and local_player_character.action_points >= 2: action_state_callback.call(ActionState.ARRANGING) ) func setup_playerboard_ui(): for child in playerboard_ui.get_children(): child.queue_free() playerboard_ui.columns = 5 for i in range(25): var slot = TextureRect.new() var highlight_rect = TextureRect.new() var hr_tex = load("res://assets/models/pboard/HighlightRect.tres") var select_rect = TextureRect.new() var sr_tex = load("res://assets/models/pboard/SelectRect.tres") var adjacent_rect = TextureRect.new() var ar_tex = load("res://assets/models/pboard/AdjacentRect.tres") slot.custom_minimum_size = Vector2(36, 36) slot.texture = item_tex[0] playerboard_ui.add_child(slot, true) highlight_rect.texture = hr_tex highlight_rect.size = Vector2(36, 36) select_rect.texture = sr_tex select_rect.size = Vector2(36, 36) adjacent_rect.texture = ar_tex adjacent_rect.size = Vector2(36, 36) slot.add_child(highlight_rect) slot.add_child(select_rect) slot.add_child(adjacent_rect) slot.get_child(0).hide() slot.get_child(1).hide() slot.get_child(2).hide() func update_playerboard_ui(): if not local_player_character: return for i in range(25): var slot = playerboard_ui.get_child(i) # Safety check: Ensure playerboard has enough items if i >= local_player_character.playerboard.size(): continue var item = local_player_character.playerboard[i] slot.texture = item_tex[0] match item: 7: slot.texture = item_tex[1] 8: slot.texture = item_tex[2] 9: slot.texture = item_tex[3] 10: slot.texture = item_tex[4] func update_button_states(): if not local_player_character or local_player_character.is_in_group("Bots"): move_button.visible = false grab_button.visible = false put_button.visible = false randomize_button.visible = false arrange_button.visible = false return move_button.visible = true grab_button.visible = true put_button.visible = true randomize_button.visible = true arrange_button.visible = true move_button.disabled = false grab_button.disabled = false put_button.disabled = false arrange_button.disabled = false func set_local_player(player): local_player_character = player