feat: introduce special power-up manager with inventory and associated UI
This commit is contained in:
@@ -84,6 +84,17 @@ func _setup_btn(effect_id: int, btn: Button):
|
||||
|
||||
|
||||
|
||||
# Add Cooldown Overlay
|
||||
if not btn.has_node("CooldownOverlay"):
|
||||
var overlay = ColorRect.new()
|
||||
overlay.name = "CooldownOverlay"
|
||||
overlay.mouse_filter = Control.MOUSE_FILTER_IGNORE
|
||||
overlay.color = Color(0, 0, 0, 0.6) # Semi-transparent black
|
||||
overlay.set_anchors_preset(Control.PRESET_FULL_RECT)
|
||||
overlay.anchor_top = 1.0 # Start empty at bottom
|
||||
overlay.grow_vertical = Control.GROW_DIRECTION_BEGIN
|
||||
btn.add_child(overlay)
|
||||
|
||||
# Add Keyboard Shortcut Label
|
||||
if not btn.has_node("ShortcutLabel"):
|
||||
var sc_lbl = Label.new()
|
||||
@@ -148,6 +159,21 @@ func _on_player_child_entered(node: Node, player_node: Node):
|
||||
if player_node.child_entered_tree.is_connected(_on_player_child_entered):
|
||||
player_node.child_entered_tree.disconnect(_on_player_child_entered)
|
||||
|
||||
func _on_global_cooldown_updated(time_left: float, max_time: float):
|
||||
for effect in icon_containers:
|
||||
var btn = icon_containers[effect]
|
||||
var overlay = btn.get_node_or_null("CooldownOverlay")
|
||||
if overlay:
|
||||
if time_left > 0:
|
||||
overlay.visible = true
|
||||
overlay.anchor_top = 1.0 - (time_left / max_time)
|
||||
btn.disabled = true
|
||||
else:
|
||||
overlay.visible = false
|
||||
overlay.anchor_top = 1.0
|
||||
if special_manager_ref and special_manager_ref.inventory.get(effect, false):
|
||||
btn.disabled = false
|
||||
|
||||
func _connect_special_manager(special_manager):
|
||||
special_manager_ref = special_manager
|
||||
print("[PowerUpUI] Connected to SpecialTilesManager")
|
||||
@@ -159,12 +185,14 @@ func _connect_special_manager(special_manager):
|
||||
if not special_manager.is_connected("inventory_updated", _on_inventory_updated):
|
||||
special_manager.connect("inventory_updated", _on_inventory_updated)
|
||||
|
||||
if not special_manager.is_connected("global_cooldown_updated", _on_global_cooldown_updated):
|
||||
special_manager.connect("global_cooldown_updated", _on_global_cooldown_updated)
|
||||
|
||||
# Initial State Sync
|
||||
if icon_containers.is_empty():
|
||||
print("[PowerUpUI] Warning: Icon containers empty during setup. Attempting _ready logic now...")
|
||||
var container = get_node_or_null("Container")
|
||||
if container:
|
||||
# Fix: Use correct IDs 0-3 here too
|
||||
_setup_btn(0, container.get_node_or_null("SpeedBtn"))
|
||||
_setup_btn(1, container.get_node_or_null("FreezeAreaBtn"))
|
||||
_setup_btn(2, container.get_node_or_null("WallBtn"))
|
||||
@@ -206,6 +234,11 @@ func _on_inventory_updated(inventory: Dictionary):
|
||||
# Single slot logic: Only the owned one is visible
|
||||
btn.visible = has_item
|
||||
if has_item:
|
||||
btn.disabled = false # Individual cooldown logic might disable it later
|
||||
# Check global cooldown before enabling
|
||||
var is_cooling = false
|
||||
if special_manager_ref and special_manager_ref.global_cooldown_timer > 0:
|
||||
is_cooling = true
|
||||
|
||||
btn.disabled = is_cooling
|
||||
btn.modulate = Color.WHITE
|
||||
_update_btn_shortcut(effect, btn)
|
||||
|
||||
Reference in New Issue
Block a user