From 50de6abb5d2a3862e46e23c91a7f9f326d6dae2f Mon Sep 17 00:00:00 2001 From: Minimata Date: Sun, 15 Mar 2026 21:26:59 +0100 Subject: [PATCH] mana bar --- forge/effects/RManaRegen.cs | 2 +- .../player_controller/PlayerController.tscn | 19 ++++++++++++++++ scenes/player_controller/PlayerUi.cs | 22 +++++++++++++------ .../resources/forge_empowered_action.tres | 2 +- .../resources/player_mana_regen.tres | 2 +- .../scripts/PlayerController.cs | 7 +++++- scenes/ui/healthbar/Healthbar.cs | 9 ++++++-- scenes/ui/healthbar/healthbar.tscn | 2 +- tests/player/PlayerControllerUnitTest.cs | 2 +- 9 files changed, 52 insertions(+), 15 deletions(-) diff --git a/forge/effects/RManaRegen.cs b/forge/effects/RManaRegen.cs index cd021631..c449abac 100644 --- a/forge/effects/RManaRegen.cs +++ b/forge/effects/RManaRegen.cs @@ -13,7 +13,7 @@ public partial class RManaRegen(float manaRegenRate, float frequency) : Resource [Export(PropertyHint.Range, "0,100,0.1,or_greater")] public float ManaRegenRate { get; set; } = manaRegenRate; - [Export(PropertyHint.Range, "0.01,1,0.1,or_greater")] + [Export(PropertyHint.Range, "0.01,1,0.01,or_greater")] public float Frequency { get; set; } = frequency; public RManaRegen() : this(1.0f, 0.1f) diff --git a/scenes/player_controller/PlayerController.tscn b/scenes/player_controller/PlayerController.tscn index 733cda69..590fba06 100644 --- a/scenes/player_controller/PlayerController.tscn +++ b/scenes/player_controller/PlayerController.tscn @@ -111,6 +111,9 @@ radius = 1.5 [sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_2q0ik"] blend_mode = 1 +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_n24vh"] +bg_color = Color(0.15869555, 0.64034444, 0.906125, 1) + [node name="Player" type="CharacterBody3D" unique_id=709076448] collision_mask = 272 script = ExtResource("1_poq2x") @@ -555,6 +558,22 @@ offset_bottom = -71.99939 grow_horizontal = 2 grow_vertical = 0 +[node name="Manabar" parent="UI" unique_id=1713862004 instance=ExtResource("47_76kmc")] +unique_name_in_owner = true +layout_mode = 1 +anchors_preset = 7 +anchor_left = 0.5 +anchor_top = 1.0 +anchor_right = 0.5 +anchor_bottom = 1.0 +offset_left = -859.0 +offset_top = -84.0 +offset_right = -347.0 +offset_bottom = -72.0 +grow_horizontal = 2 +grow_vertical = 0 +BarStyle = SubResource("StyleBoxFlat_n24vh") + [node name="StateChart" type="Node" parent="." unique_id=1675830632] script = ExtResource("25_wv70j") metadata/_custom_type_script = "uid://couw105c3bde4" diff --git a/scenes/player_controller/PlayerUi.cs b/scenes/player_controller/PlayerUi.cs index bb9bf0f0..8fa422a0 100644 --- a/scenes/player_controller/PlayerUi.cs +++ b/scenes/player_controller/PlayerUi.cs @@ -5,9 +5,10 @@ using Movementtests.interfaces; [GlobalClass, Icon("res://assets/ui/IconGodotNode/control/icon_text_panel.png")] public partial class PlayerUi : Control { - internal TextureRect[] _dashIcons = new TextureRect[3]; - private TextureRect _enemyTarget; - private Healthbar _healthbar; + internal TextureRect[] DashIcons = new TextureRect[3]; + private TextureRect _enemyTarget = null!; + private Healthbar _healthbar = null!; + private Healthbar _manabar = null!; public enum TargetState { @@ -25,12 +26,13 @@ public partial class PlayerUi : Control public override void _Ready() { - _dashIcons[0] = GetNode("%Dash1"); - _dashIcons[1] = GetNode("%Dash2"); - _dashIcons[2] = GetNode("%Dash3"); + DashIcons[0] = GetNode("%Dash1"); + DashIcons[1] = GetNode("%Dash2"); + DashIcons[2] = GetNode("%Dash3"); _enemyTarget = GetNode("%EnemyTarget"); _healthbar = GetNode("%Healthbar"); + _manabar = GetNode("%Manabar"); } public void Initialize(float initialHealth) @@ -59,7 +61,7 @@ public partial class PlayerUi : Control public void SetNumberOfDashesLeft(int numberOfDashes) { int index = 1; - foreach (var dashIcon in _dashIcons) + foreach (var dashIcon in DashIcons) { dashIcon.SetVisible(index <= numberOfDashes); index++; @@ -70,4 +72,10 @@ public partial class PlayerUi : Control { _healthbar.CurrentHealth = healthChanged.CurrentHealth; } + + public void OnManaChanged(float newValue) + { + _manabar.CurrentHealth = newValue; + GD.Print("mana changed"); + } } diff --git a/scenes/player_controller/resources/forge_empowered_action.tres b/scenes/player_controller/resources/forge_empowered_action.tres index deffa2b2..4918b929 100644 --- a/scenes/player_controller/resources/forge_empowered_action.tres +++ b/scenes/player_controller/resources/forge_empowered_action.tres @@ -6,5 +6,5 @@ script = ExtResource("1_1rxoq") Cost = 50.0 Cooldown = 1.0 -ManaRegenPause = 3.0 +ManaRegenPause = 2.0 metadata/_custom_type_script = "uid://d0l07gcx1ef18" diff --git a/scenes/player_controller/resources/player_mana_regen.tres b/scenes/player_controller/resources/player_mana_regen.tres index a1678fc8..81c1a290 100644 --- a/scenes/player_controller/resources/player_mana_regen.tres +++ b/scenes/player_controller/resources/player_mana_regen.tres @@ -5,5 +5,5 @@ [resource] script = ExtResource("1_ecb1p") ManaRegenRate = 20.0 -Frequency = 0.1 +Frequency = 0.05 metadata/_custom_type_script = "uid://di04jvuqp0h7m" diff --git a/scenes/player_controller/scripts/PlayerController.cs b/scenes/player_controller/scripts/PlayerController.cs index 5145bd75..4b3646bf 100644 --- a/scenes/player_controller/scripts/PlayerController.cs +++ b/scenes/player_controller/scripts/PlayerController.cs @@ -2309,13 +2309,18 @@ public partial class PlayerController : CharacterBody3D, HandleEnemyTargeting(); } + private float _oldMana = 100; public override void _Process(double delta) { // Manage head and camera movement LookAround(delta); EffectsManager.UpdateEffects(delta); - GD.Print(Attributes["PlayerAttributeSet.Mana"].CurrentValue); + // TODO: change for actual Cue + var currentMana = Attributes["PlayerAttributeSet.Mana"].CurrentValue; + if (Mathf.Abs(currentMana - _oldMana) > Mathf.Epsilon) + PlayerUi.OnManaChanged(currentMana); + _oldMana = currentMana; } /////////////////////////// diff --git a/scenes/ui/healthbar/Healthbar.cs b/scenes/ui/healthbar/Healthbar.cs index 9b99e80e..07083ff9 100644 --- a/scenes/ui/healthbar/Healthbar.cs +++ b/scenes/ui/healthbar/Healthbar.cs @@ -4,8 +4,10 @@ using System; [GlobalClass, Icon("res://assets/ui/IconGodotNode/control/icon_heart.png")] public partial class Healthbar : ProgressBar { - private Timer _damageCatchUpTimer; - private ProgressBar _damagedHealth; + private Timer _damageCatchUpTimer = null!; + private ProgressBar _damagedHealth = null!; + + [Export] public StyleBox? BarStyle; private float _currentHealth; public float CurrentHealth @@ -21,6 +23,9 @@ public partial class Healthbar : ProgressBar _damageCatchUpTimer.Timeout += OnDamageCatchUp; Visible = false; + + if (BarStyle != null) + AddThemeStyleboxOverride("fill", BarStyle); } public void Initialize(float initialHealth) diff --git a/scenes/ui/healthbar/healthbar.tscn b/scenes/ui/healthbar/healthbar.tscn index 32a086c8..d02cac8a 100644 --- a/scenes/ui/healthbar/healthbar.tscn +++ b/scenes/ui/healthbar/healthbar.tscn @@ -5,7 +5,7 @@ [sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_0sgot"] [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_0k5hr"] -bg_color = Color(0.698864, 0.047356047, 0, 1) +bg_color = Color(0.69803923, 0.047058824, 0, 1) [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_0sgot"] bg_color = Color(0.14767182, 0.14767182, 0.14767176, 1) diff --git a/tests/player/PlayerControllerUnitTest.cs b/tests/player/PlayerControllerUnitTest.cs index c41fe8fc..a32d4cec 100644 --- a/tests/player/PlayerControllerUnitTest.cs +++ b/tests/player/PlayerControllerUnitTest.cs @@ -99,7 +99,7 @@ public class PlayerControllerUnitTest { var mockUi = new PlayerUi(); var dashIcons = new TextureRect[3] { new TextureRect(), new TextureRect(), new TextureRect() }; - mockUi._dashIcons = dashIcons; + mockUi.DashIcons = dashIcons; _player.PlayerUi = mockUi;