134 lines
3.9 KiB
GDScript
134 lines
3.9 KiB
GDScript
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)
|
|
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
|