diff --git a/assets/models/tiles/tile_star.tres b/assets/models/tiles/tile_star.tres index c81ab90..496df7b 100644 --- a/assets/models/tiles/tile_star.tres +++ b/assets/models/tiles/tile_star.tres @@ -1,6 +1,6 @@ [gd_resource type="ArrayMesh" format=4 uid="uid://cv4bedhida00g"] -[ext_resource type="Texture2D" uid="uid://dqpr1nug528ml" path="res://assets/textures/tile_star_holo.png" id="1_max3p"] +[ext_resource type="Texture2D" uid="uid://ho2ba1pl835k" path="res://assets/textures/tile_star.png" id="1_max3p"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ra1lt"] resource_name = "boost" diff --git a/scenes/main.gd b/scenes/main.gd index 11621a8..303c481 100644 --- a/scenes/main.gd +++ b/scenes/main.gd @@ -1075,13 +1075,15 @@ func sync_full_grid_data(data: PackedInt32Array): func _on_timer_updated(time_remaining: float): # Update standalone timer display - var time_text = str(int(time_remaining)) - - var timer_panel = get_node_or_null("GoalsTimer") - if timer_panel: - var timer_label = timer_panel.get_node_or_null("VBox/TimerLabel") - if timer_label: - timer_label.text = time_text + # DISABLED: Now used for PowerUp Cooldown (handled in UIManager) + # var time_text = str(int(time_remaining)) + # + # var timer_panel = get_node_or_null("GoalsTimer") + # if timer_panel: + # var timer_label = timer_panel.get_node_or_null("VBox/TimerLabel") + # if timer_label: + # timer_label.text = time_text + pass func _on_score_updated(peer_id: int, new_score: int): # Update player's score display diff --git a/scenes/main.tscn b/scenes/main.tscn index 28f378e..d8334bf 100644 --- a/scenes/main.tscn +++ b/scenes/main.tscn @@ -9496,25 +9496,15 @@ text = "0" horizontal_alignment = 2 [node name="GoalsTimer" type="PanelContainer" parent="." unique_id=2106663301] -offset_left = 145.0 -offset_top = 28.0 -offset_right = 222.0 -offset_bottom = 105.0 +offset_left = 160.0 +offset_top = 130.0 +offset_right = 192.0 +offset_bottom = 158.0 -[node name="VBox" type="VBoxContainer" parent="GoalsTimer" unique_id=231693109] +[node name="TimerLabel" type="Label" parent="GoalsTimer" unique_id=466345203] layout_mode = 2 -alignment = 1 - -[node name="TimerLabel" type="Label" parent="GoalsTimer/VBox" unique_id=466345203] -layout_mode = 2 -theme_override_font_sizes/font_size = 32 -text = "60" -horizontal_alignment = 1 - -[node name="SuffixLabel" type="Label" parent="GoalsTimer/VBox" unique_id=1276360987] -layout_mode = 2 -theme_override_font_sizes/font_size = 12 -text = "seconds" +theme_override_font_sizes/font_size = 14 +text = "00" horizontal_alignment = 1 [node name="GlobalMatchTimer" type="PanelContainer" parent="." unique_id=1714357974] diff --git a/scripts/managers/powerup_manager.gd b/scripts/managers/powerup_manager.gd index 2b7eb10..d6196b7 100644 --- a/scripts/managers/powerup_manager.gd +++ b/scripts/managers/powerup_manager.gd @@ -121,6 +121,22 @@ func get_max_points() -> int: func get_fill_percentage() -> float: return current_boost / MAX_BOOST +func get_time_until_full() -> float: + if current_boost >= MAX_BOOST: + return 0.0 + + # Calculate remaining points needed + var remaining = MAX_BOOST - current_boost + + # Get current fill rate + var level_idx = clamp(current_level - 1, 0, FILL_TIMES.size() - 1) + var fill_time = FILL_TIMES[level_idx] + var current_rate = MAX_BOOST / fill_time + + if current_rate <= 0: return 0.0 + + return remaining / current_rate + func get_bars() -> int: """Returns the number of filled segments (0-4).""" # Each bar is 25 points (100 / 4) diff --git a/scripts/managers/ui_manager.gd b/scripts/managers/ui_manager.gd index 487034b..8748131 100644 --- a/scripts/managers/ui_manager.gd +++ b/scripts/managers/ui_manager.gd @@ -26,6 +26,7 @@ var victory_ui_instance var playerboard_ui var action_menu_instance var powerup_inventory_ui +var timer_label: Label var local_player_character var _previous_playerboard_state: Array = [] @@ -235,6 +236,8 @@ func _connect_powerup_manager_deferred(player): powerup_manager.points_changed.connect(_on_powerup_points_changed) # Initialize bar with current values update_powerup_bar(powerup_manager.get_points(), powerup_manager.get_max_points()) + # Force initial label update + _on_powerup_points_changed(powerup_manager.get_points(), powerup_manager.get_max_points()) else: push_warning("[UIManager] PowerUpManager not found on player after 0.8s wait") @@ -294,6 +297,7 @@ func update_powerup_bar(current_points: int, _max_points: int): var _previous_bars: int = 0 func _on_powerup_points_changed(current: int, max_points: int): + if current % 10 == 0: print("[UIManager] Points changed: ", current) # Calculate based on max points (100) / 4 segments = 25 points per segment var new_bars = int(current / 25.0) @@ -307,6 +311,17 @@ func _on_powerup_points_changed(current: int, max_points: int): _previous_bars = new_bars update_powerup_bar(current, max_points) + + # Update Safety: Check if timer_label is valid + if timer_label and local_player_character and local_player_character.powerup_manager: + var time_left = local_player_character.powerup_manager.get_time_until_full() + if time_left <= 0: + timer_label.text = " READY " + timer_label.add_theme_color_override("font_color", Color(0.3, 0.9, 0.3)) # Green + else: + # User request: "Do it on int not float" + timer_label.text = str(int(ceil(time_left))) + "s" + timer_label.add_theme_color_override("font_color", Color(1.0, 0.85, 0.2)) # Gold func _pulse_segment(segment: Panel): """Create a visual pulse effect on a powerup segment.""" @@ -371,13 +386,13 @@ func setup_timer_labels(main_node): goals_timer.add_theme_stylebox_override("panel", style) # Style the timer label - var timer_label = goals_timer.get_node_or_null("VBox/TimerLabel") - if timer_label: - timer_label.add_theme_color_override("font_color", Color(1.0, 0.85, 0.2)) - - var suffix_label = goals_timer.get_node_or_null("VBox/SuffixLabel") - if suffix_label: - suffix_label.add_theme_color_override("font_color", Color(0.7, 0.7, 0.7)) + var t_label = goals_timer.get_node_or_null("TimerLabel") + if t_label: + timer_label = t_label # Store reference + t_label.add_theme_color_override("font_color", Color(1.0, 0.85, 0.2)) + print("[UIManager] SUCCESS: Found and stored TimerLabel reference.") + else: + print("[UIManager] ERROR: GoalsTimer found but TimerLabel NOT found at node/TimerLabel") # Method to update leaderboard with all players in match func initialize_leaderboard_with_players(players: Array):