100 lines
2.9 KiB
GDScript
100 lines
2.9 KiB
GDScript
class_name ShopUI
|
|
extends Panel
|
|
|
|
@onready var money_label: Label = $Money
|
|
|
|
var controller: XRController3D = null
|
|
var other_controller: XRController3D = null
|
|
const INPUT_TOGGLE_COOLDOWN := 0.15
|
|
|
|
var enabled: bool = false: set = _set_enabled
|
|
|
|
var _last_toggle_time := 0.0
|
|
var viewport: XRToolsViewport2DIn3D
|
|
|
|
func _ready() -> void:
|
|
detect_hand_from_xr_ancestor()
|
|
|
|
if controller:
|
|
controller.button_pressed.connect(_on_controller_button_pressed)
|
|
if other_controller:
|
|
other_controller.button_pressed.connect(_on_other_controller_button_pressed)
|
|
Signals.station_bought.connect(_on_station_bought)
|
|
viewport = get_parent().get_parent() as XRToolsViewport2DIn3D
|
|
if not viewport:
|
|
SweetLogger.error("{0} could not find XRToolsViewport2DIn3D grandparent", [name])
|
|
enabled = false
|
|
|
|
|
|
func _process(_delta: float) -> void:
|
|
money_label.text = str(GameManager.money) + "$"
|
|
|
|
|
|
func toggle_shop():
|
|
if GameManager.game_state == GameManager.GameState.BUILDING:
|
|
SweetLogger.debug("Toggle shop")
|
|
enabled = !enabled
|
|
SweetLogger.debug("Money={0} label text={1}", [GameManager.money, money_label.text])
|
|
|
|
|
|
|
|
func _set_enabled(value: bool) -> void:
|
|
enabled = value
|
|
visible = value
|
|
if viewport:
|
|
viewport.enabled = value
|
|
|
|
_set_poke_enabled_for_controller(other_controller, value)
|
|
|
|
|
|
|
|
func _set_poke_enabled_for_controller(controller_node: XRController3D, value: bool) -> void:
|
|
if not controller_node:
|
|
return
|
|
|
|
var poke_node = Helper.find_first_child_of_type(controller_node, XRToolsPoke)
|
|
if poke_node:
|
|
SweetLogger.debug("Poke enabled: {0} on {1}", [value, poke_node.name])
|
|
poke_node.enabled = value
|
|
poke_node.visible = value
|
|
else:
|
|
SweetLogger.debug("Poke not found on {0}", [controller_node.name])
|
|
|
|
# For some reason, this is called every frame the button is down. So we need our own timer.
|
|
func _on_controller_button_pressed(button_name: String) -> void:
|
|
var now := Time.get_ticks_msec() / 1000.0
|
|
if now - _last_toggle_time < INPUT_TOGGLE_COOLDOWN:
|
|
return
|
|
|
|
_last_toggle_time = now
|
|
if button_name == "ax_button":
|
|
toggle_shop()
|
|
|
|
|
|
func _on_other_controller_button_pressed(button_name: String) -> void:
|
|
# If user opens menu on other hand. Close this one.
|
|
if enabled and button_name == "ax_button":
|
|
enabled = false
|
|
|
|
|
|
func _on_station_bought(_instance) -> void:
|
|
enabled = false
|
|
money_label.text = str(GameManager.money) + "$"
|
|
SweetLogger.debug("New money: {0}", [GameManager.money])
|
|
|
|
|
|
func detect_hand_from_xr_ancestor() -> void:
|
|
controller = XRHelpers.get_xr_controller(self)
|
|
if not controller:
|
|
SweetLogger.error("{0} could not find XRController3D ancestor", [name])
|
|
return
|
|
|
|
var left_controller := XRHelpers.get_left_controller(self)
|
|
var right_controller := XRHelpers.get_right_controller(self)
|
|
|
|
if controller == left_controller:
|
|
other_controller = right_controller
|
|
elif controller == right_controller:
|
|
other_controller = left_controller
|
|
SweetLogger.debug("Detected hand: {0}", [controller.get_tracker_hand()])
|