From ba21b30a4d2233654a33414c4b589b25219fd0c4 Mon Sep 17 00:00:00 2001 From: Marco Date: Thu, 20 Feb 2025 14:09:42 +0100 Subject: [PATCH] Resource provider --- Scenes/Actors/ActorEnemyTest.tscn | 7 ++- .../Actors/ActorResourceProvider.cs | 51 +++++++++++++++++++ Scripts/PlayerMovement.cs | 2 +- 3 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 Scripts/Components/Actors/ActorResourceProvider.cs diff --git a/Scenes/Actors/ActorEnemyTest.tscn b/Scenes/Actors/ActorEnemyTest.tscn index da552368..0ba676a2 100644 --- a/Scenes/Actors/ActorEnemyTest.tscn +++ b/Scenes/Actors/ActorEnemyTest.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=36 format=3 uid="uid://bqjcwxene73l2"] +[gd_scene load_steps=37 format=3 uid="uid://bqjcwxene73l2"] [ext_resource type="Script" path="res://Scripts/Components/Actors/Actor.cs" id="1_k5cyk"] [ext_resource type="Texture2D" uid="uid://hukxr2e63gky" path="res://Sprites/Actors/Robot3.png" id="2_wt8wl"] @@ -8,6 +8,7 @@ [ext_resource type="Script" path="res://Scripts/Components/Actors/ActorAi.cs" id="6_jlcsg"] [ext_resource type="Script" path="res://Scripts/Components/Actors/EnemyNavigationMovement.cs" id="7_fvl12"] [ext_resource type="Script" path="res://Scripts/Components/ProximityPlayerDetection.cs" id="8_62r5q"] +[ext_resource type="Script" path="res://Scripts/Components/Actors/ActorResourceProvider.cs" id="9_2ocwk"] [sub_resource type="AtlasTexture" id="AtlasTexture_spe0p"] atlas = ExtResource("2_wt8wl") @@ -277,6 +278,10 @@ avoidance_enabled = true debug_enabled = true debug_path_custom_color = Color(1, 0, 0, 1) +[node name="HealthProvider" type="Node2D" parent="."] +script = ExtResource("9_2ocwk") +ResourceName = "Health" + [connection signal="area_entered" from="PlayerDetection" to="PlayerDetection" method="_on_area_entered"] [connection signal="area_exited" from="PlayerDetection" to="PlayerDetection" method="_on_area_exited"] [connection signal="velocity_computed" from="NavigationAgent2D" to="NavigationMovementProvider" method="_on_navigation_agent_2d_velocity_computed"] diff --git a/Scripts/Components/Actors/ActorResourceProvider.cs b/Scripts/Components/Actors/ActorResourceProvider.cs new file mode 100644 index 00000000..8179bd7e --- /dev/null +++ b/Scripts/Components/Actors/ActorResourceProvider.cs @@ -0,0 +1,51 @@ +using Godot; + +namespace Cirno.Scripts.Components.Actors; + +public partial class ActorResourceProvider : Node2D +{ + [Export] + public string ResourceName { get; private set; } + + [Export] + public float MaxResource { get; set; } = 10f; + + private float _currentResource = 0f; + + [Signal] + public delegate void ResourceChangedEventHandler(float newValue, float maxValue); + + [Signal] + public delegate void ResourceMaxedEventHandler(float maxValue); + + [Signal] + public delegate void ResourceDepletedEventHandler(); + + public float CurrentResource + { + get => _currentResource; + set + { + if (_currentResource != value) + { + _currentResource = value; + + if (_currentResource > MaxResource) { + _currentResource = MaxResource; + EmitSignal(SignalName.ResourceMaxed, MaxResource); + } + else if (_currentResource <= 0) + { + EmitSignal(SignalName.ResourceDepleted); + } + + EmitSignal(SignalName.ResourceChanged, _currentResource, MaxResource); + } + } + } + + public void FillResource() + { + CurrentResource = MaxResource; + } +} \ No newline at end of file diff --git a/Scripts/PlayerMovement.cs b/Scripts/PlayerMovement.cs index 952926d0..d95aa525 100644 --- a/Scripts/PlayerMovement.cs +++ b/Scripts/PlayerMovement.cs @@ -69,7 +69,7 @@ public partial class PlayerMovement : CharacterBody2D, IDestructible private bool _canMove = true; [Signal] - public delegate void HealthChangedEventHandler(float newHealth, float MaxHealth); + public delegate void HealthChangedEventHandler(float newHealth, float maxHealth); [Signal] public delegate void ShieldChangedEventHandler(float newShield, float maxShield);