From 817bd96433e97116a535746593c505c0c032ac99 Mon Sep 17 00:00:00 2001 From: Gabriel Kaszewski Date: Fri, 15 Aug 2025 03:15:54 +0200 Subject: [PATCH] Refactor HUD and MainMenu components to use Node attribute for better scene integration --- features/ui/hud/Hud.cs | 6 +++--- {objects/ui => features/ui/hud}/hud.tscn | 18 +++++++++--------- features/ui/menus/MainMenu.cs | 13 ++++++------- features/ui/menus/main_menu.tscn | 19 +++++++++---------- objects/entities/brick_player.tscn | 2 +- objects/level/base_level.tscn | 3 --- objects/level/ui_layer.tscn | 2 +- scenes/level_village_1.tscn | 7 ------- 8 files changed, 29 insertions(+), 41 deletions(-) rename {objects/ui => features/ui/hud}/hud.tscn (74%) diff --git a/features/ui/hud/Hud.cs b/features/ui/hud/Hud.cs index 99a08aa..3774e21 100644 --- a/features/ui/hud/Hud.cs +++ b/features/ui/hud/Hud.cs @@ -12,9 +12,9 @@ public partial class Hud : Node public override void _Notification(int what) => this.Notify(what); [Export] public HealthComponent Health { get; set; } = null!; - [Export] public Label CoinsLabel { get; set; } = null!; - [Export] public ProgressBar HealthBar { get; set; } = null!; - [Export] public Label LivesLabel { get; set; } = null!; + [Node] public Label CoinsLabel { get; set; } = null!; + [Node] public ProgressBar HealthBar { get; set; } = null!; + [Node] public Label LivesLabel { get; set; } = null!; [Dependency] public PlayerRepository Player => this.DependOn(); diff --git a/objects/ui/hud.tscn b/features/ui/hud/hud.tscn similarity index 74% rename from objects/ui/hud.tscn rename to features/ui/hud/hud.tscn index 8fea845..af324c9 100644 --- a/objects/ui/hud.tscn +++ b/features/ui/hud/hud.tscn @@ -1,7 +1,7 @@ [gd_scene load_steps=8 format=3 uid="uid://byxf45ukq82pe"] [ext_resource type="LabelSettings" uid="uid://rvn5ivivfvv6" path="res://resources/ui/hud_label_settings.tres" id="1_4dsh5"] -[ext_resource type="Script" uid="uid://c3pde84b3kdco" path="res://scripts/ui/hud.gd" id="1_ueofj"] +[ext_resource type="Script" uid="uid://c1uwe5e1cfdxl" path="res://features/ui/hud/Hud.cs" id="1_m4pq7"] [ext_resource type="FontFile" uid="uid://xm0vbusjr7b7" path="res://fonts/PressStart2P-Regular.ttf" id="1_ygmwt"] [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_mmcdi"] @@ -16,7 +16,7 @@ bg_color = Color(0.47451, 0.47451, 0.47451, 1) [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_22dp1"] bg_color = Color(0.858824, 0.254902, 0.380392, 1) -[node name="HUD" type="Control" node_paths=PackedStringArray("coins_label", "health_progressbar", "lives_label")] +[node name="HUD" type="Control"] layout_mode = 3 anchors_preset = 15 anchor_right = 1.0 @@ -25,10 +25,7 @@ grow_horizontal = 2 grow_vertical = 2 size_flags_horizontal = 4 size_flags_vertical = 4 -script = ExtResource("1_ueofj") -coins_label = NodePath("PanelContainer/MarginContainer/HBoxContainer/Coins label") -health_progressbar = NodePath("PanelContainer/MarginContainer/HBoxContainer/ProgressBar") -lives_label = NodePath("PanelContainer/MarginContainer/HBoxContainer/Lives") +script = ExtResource("1_m4pq7") [node name="PanelContainer" type="PanelContainer" parent="."] layout_mode = 1 @@ -57,7 +54,8 @@ text = "HEALTH_LABEL" label_settings = ExtResource("1_4dsh5") uppercase = true -[node name="ProgressBar" type="ProgressBar" parent="PanelContainer/MarginContainer/HBoxContainer"] +[node name="HealthBar" type="ProgressBar" parent="PanelContainer/MarginContainer/HBoxContainer"] +unique_name_in_owner = true visible = false layout_mode = 2 size_flags_horizontal = 3 @@ -69,7 +67,8 @@ step = 0.1 value = 60.0 show_percentage = false -[node name="Lives" type="Label" parent="PanelContainer/MarginContainer/HBoxContainer"] +[node name="LivesLabel" type="Label" parent="PanelContainer/MarginContainer/HBoxContainer"] +unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 3 text = "LIVES_LABEL" @@ -77,7 +76,8 @@ label_settings = ExtResource("1_4dsh5") horizontal_alignment = 1 uppercase = true -[node name="Coins label" type="Label" parent="PanelContainer/MarginContainer/HBoxContainer"] +[node name="CoinsLabel" type="Label" parent="PanelContainer/MarginContainer/HBoxContainer"] +unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 3 text = "COINS_LABEL" diff --git a/features/ui/menus/MainMenu.cs b/features/ui/menus/MainMenu.cs index 9e77e2c..79f21f7 100644 --- a/features/ui/menus/MainMenu.cs +++ b/features/ui/menus/MainMenu.cs @@ -12,13 +12,12 @@ public partial class MainMenu : Control { public override void _Notification(int what) => this.Notify(what); - [Export] public Control MainMenuControl { get; set; } = null!; - [Export] public Button NewGameButton { get; set; } = null!; - [Export] public Button ContinueButton { get; set; } = null!; - [Export] public Button SettingsButton { get; set; } = null!; - [Export] public Button CreditsButton { get; set; } = null!; - [Export] public Button ExitButton { get; set; } = null!; - [Export] public Label VersionLabel { get; set; } = null!; + [Node] public Button NewGameButton { get; set; } = null!; + [Node] public Button ContinueButton { get; set; } = null!; + [Node] public Button SettingsButton { get; set; } = null!; + [Node] public Button CreditsButton { get; set; } = null!; + [Node] public Button ExitButton { get; set; } = null!; + [Node] public Label VersionLabel { get; set; } = null!; [Export] public Control SettingsControl { get; set; } = null!; [Export] public Control CreditsControl { get; set; } = null!; diff --git a/features/ui/menus/main_menu.tscn b/features/ui/menus/main_menu.tscn index ae61493..21d1c8b 100644 --- a/features/ui/menus/main_menu.tscn +++ b/features/ui/menus/main_menu.tscn @@ -5,7 +5,7 @@ [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_qv2q0"] bg_color = Color(0, 0, 0, 1) -[node name="MainMenu" type="Control" node_paths=PackedStringArray("MainMenuControl", "NewGameButton", "ContinueButton", "SettingsButton", "CreditsButton", "ExitButton", "VersionLabel")] +[node name="MainMenu" type="Control"] layout_mode = 3 anchors_preset = 15 anchor_right = 1.0 @@ -13,13 +13,6 @@ anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 script = ExtResource("1_q8hru") -MainMenuControl = NodePath(".") -NewGameButton = NodePath("PanelContainer/MarginContainer/VBoxContainer/NewGameButton") -ContinueButton = NodePath("PanelContainer/MarginContainer/VBoxContainer/ContinueButton") -SettingsButton = NodePath("PanelContainer/MarginContainer/VBoxContainer/SettingsButton") -CreditsButton = NodePath("PanelContainer/MarginContainer/VBoxContainer/CreditsButton") -ExitButton = NodePath("PanelContainer/MarginContainer/VBoxContainer/QuitButton") -VersionLabel = NodePath("PanelContainer/MarginContainer/VBoxContainer/version") [node name="PanelContainer" type="PanelContainer" parent="."] layout_mode = 1 @@ -53,31 +46,37 @@ layout_mode = 2 size_flags_vertical = 3 [node name="ContinueButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer"] +unique_name_in_owner = true layout_mode = 2 text = "CONTINUE_BUTTON" flat = true [node name="NewGameButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer"] +unique_name_in_owner = true layout_mode = 2 text = "NEW_GAME_BUTTON" flat = true [node name="SettingsButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer"] +unique_name_in_owner = true layout_mode = 2 text = "SETTINGS_BUTTON" flat = true [node name="CreditsButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer"] +unique_name_in_owner = true layout_mode = 2 text = "CREDITS_BUTTON" flat = true -[node name="QuitButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer"] +[node name="ExitButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer"] +unique_name_in_owner = true layout_mode = 2 text = "QUIT_BUTTON" flat = true -[node name="version" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer"] +[node name="VersionLabel" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer"] +unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 0 size_flags_vertical = 8 diff --git a/objects/entities/brick_player.tscn b/objects/entities/brick_player.tscn index 706e1a8..ea28a6a 100644 --- a/objects/entities/brick_player.tscn +++ b/objects/entities/brick_player.tscn @@ -32,7 +32,7 @@ [ext_resource type="PackedScene" uid="uid://bg76mtpcmfm2j" path="res://objects/ui/charging_bar_layer.tscn" id="28_3f5nm"] [ext_resource type="PackedScene" uid="uid://b12tppjkkqpt4" path="res://objects/fxs/hit_particles.tscn" id="28_jh5m0"] [ext_resource type="Script" uid="uid://ceq8n7yw7qxpi" path="res://scripts/components/hit_component.gd" id="29_jh5m0"] -[ext_resource type="Script" uid="uid://c1wtrgw0x77xo" path="res://scripts/components/platform_movement.gd" id="31_xoue7"] +[ext_resource type="Script" uid="uid://cflncpa377l8l" path="res://scripts/components/platform_movement.gd" id="31_xoue7"] [ext_resource type="AudioStream" uid="uid://dyev46uqusimi" path="res://sfx/shoot.wav" id="32_x2b7c"] [ext_resource type="Script" uid="uid://d1ctdx52gskv1" path="res://scripts/components/ship_shooter.gd" id="34_gwc8i"] [ext_resource type="PackedScene" uid="uid://dtem8jgcyoqar" path="res://objects/entities/green_laser.tscn" id="36_oxudy"] diff --git a/objects/level/base_level.tscn b/objects/level/base_level.tscn index 9dfeca6..9091e02 100644 --- a/objects/level/base_level.tscn +++ b/objects/level/base_level.tscn @@ -62,9 +62,6 @@ process_material = SubResource("ParticleProcessMaterial_lgb3u") [node name="UI Layer" parent="." instance=ExtResource("2_lbnsn")] -[node name="HUD" parent="UI Layer" index="0" node_paths=PackedStringArray("player_health")] -player_health = NodePath("../../Brick Player/HealthComponent") - [node name="DeathScreen" parent="UI Layer" index="1" node_paths=PackedStringArray("nodes_to_disable")] current_level = ExtResource("4_c2yv5") nodes_to_disable = [NodePath("../../Brick Player")] diff --git a/objects/level/ui_layer.tscn b/objects/level/ui_layer.tscn index 219e5a3..aba6231 100644 --- a/objects/level/ui_layer.tscn +++ b/objects/level/ui_layer.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=11 format=3 uid="uid://6foggu31cu14"] -[ext_resource type="PackedScene" uid="uid://byxf45ukq82pe" path="res://objects/ui/hud.tscn" id="1_tgtfe"] +[ext_resource type="PackedScene" uid="uid://byxf45ukq82pe" path="res://features/ui/hud/hud.tscn" id="1_tgtfe"] [ext_resource type="PackedScene" uid="uid://dulkm3ah4tm0u" path="res://objects/ui/death_screen.tscn" id="2_ln68j"] [ext_resource type="Script" uid="uid://cp68km8bykymb" path="res://scripts/resources/level_resource.gd" id="3_5kt5k"] [ext_resource type="PackedScene" uid="uid://wmw6gaisyrvx" path="res://objects/ui/game_over_screen.tscn" id="4_11xmk"] diff --git a/scenes/level_village_1.tscn b/scenes/level_village_1.tscn index 960c277..ebac3bd 100644 --- a/scenes/level_village_1.tscn +++ b/scenes/level_village_1.tscn @@ -66,9 +66,6 @@ process_material = SubResource("ParticleProcessMaterial_lgb3u") [node name="UI Layer" parent="." instance=ExtResource("3_4fsls")] -[node name="HUD" parent="UI Layer" index="0" node_paths=PackedStringArray("player_health")] -player_health = NodePath("../../Brick Player/HealthComponent") - [node name="DeathScreen" parent="UI Layer" index="1" node_paths=PackedStringArray("nodes_to_disable")] current_level = ExtResource("4_onnch") nodes_to_disable = [NodePath("../../Brick Player")] @@ -77,10 +74,6 @@ nodes_to_disable = [NodePath("../../Brick Player")] skill_unlocker = NodePath("../../Brick Player/SkillUnlockerComponent") components_to_disable = [NodePath("../../Brick Player")] -[node name="Pause menu" parent="UI Layer" index="4" node_paths=PackedStringArray("PauseMenuControl", "SettingsControl")] -PauseMenuControl = NodePath(".") -SettingsControl = NodePath("../Settings menu") - [node name="Global Light" parent="." instance=ExtResource("4_mc58c")] [node name="Camera2D" parent="." instance=ExtResource("5_sskgn")]