diff --git a/Scenes/Actors/FairyGuard_New.tscn b/Scenes/Actors/FairyGuard_New.tscn index de84270b..ce241d92 100644 --- a/Scenes/Actors/FairyGuard_New.tscn +++ b/Scenes/Actors/FairyGuard_New.tscn @@ -110,7 +110,7 @@ debug_path_custom_color = Color(1, 0, 0, 1) [node name="HealthProvider" type="Node2D" parent="."] script = ExtResource("9_fyr27") ResourceName = "Health" -MaxResource = 6.0 +_maxResource = 3.0 [node name="EnemyWeapon" parent="." instance=ExtResource("10_yktta")] WeaponData = ExtResource("11_kuimj") diff --git a/Scenes/Actors/Fairy_New.tscn b/Scenes/Actors/Fairy_New.tscn index 89a4f0eb..d3fd24fc 100644 --- a/Scenes/Actors/Fairy_New.tscn +++ b/Scenes/Actors/Fairy_New.tscn @@ -79,7 +79,7 @@ debug_path_custom_color = Color(1, 0, 0, 1) [node name="HealthProvider" type="Node2D" parent="."] script = ExtResource("9_4h871") ResourceName = "Health" -MaxResource = 6.0 +_maxResource = 2.0 [node name="EnemyWeapon" parent="." instance=ExtResource("10_nc74c")] WeaponData = ExtResource("11_y6dmo") diff --git a/Scenes/Actors/fsm_player.tscn b/Scenes/Actors/fsm_player.tscn index 2b2454e8..3546d01a 100644 --- a/Scenes/Actors/fsm_player.tscn +++ b/Scenes/Actors/fsm_player.tscn @@ -355,12 +355,12 @@ _shieldProvider = NodePath("ShieldProvider") [node name="HealthProvider" type="Node2D" parent="DamageReceiver"] script = ExtResource("15_5qlss") ResourceName = "Health" -MaxResource = 32.0 +_maxResource = 32.0 [node name="ShieldProvider" type="Node2D" parent="DamageReceiver"] script = ExtResource("15_5qlss") ResourceName = "Shield" -MaxResource = 32.0 +_maxResource = 32.0 [node name="CollisionShape2D" type="CollisionShape2D" parent="DamageReceiver"] shape = SubResource("CircleShape2D_igu66") diff --git a/Scenes/Maps/PlayerFSMTest.tscn b/Scenes/Maps/PlayerFSMTest.tscn index 3ff929f3..9b21466a 100644 --- a/Scenes/Maps/PlayerFSMTest.tscn +++ b/Scenes/Maps/PlayerFSMTest.tscn @@ -61,7 +61,7 @@ [sub_resource type="Resource" id="Resource_6wo78"] script = ExtResource("4_u1i8n") EggIndex = 0 -StartingEquipment = Array[ExtResource("5_u1i8n")]([]) +StartingEquipment = [] [sub_resource type="RectangleShape2D" id="RectangleShape2D_rff8l"] size = Vector2(30, 52.5) diff --git a/Scripts/Components/Actors/ActorResourceProvider.cs b/Scripts/Components/Actors/ActorResourceProvider.cs index ee7b5914..4c94f3f4 100644 --- a/Scripts/Components/Actors/ActorResourceProvider.cs +++ b/Scripts/Components/Actors/ActorResourceProvider.cs @@ -7,11 +7,33 @@ public partial class ActorResourceProvider : Node2D [Export] public string ResourceName { get; private set; } - [Export] - public float MaxResource { get; set; } = 10f; + public float MaxResource + { + get => _maxResource; + set + { + if (_maxResource == value) return; + + if (value > _currentResource) + { + EmitSignal(SignalName.ResourceIncreased, _currentResource, _currentResource, value); + } + else if (value < _currentResource) + { + EmitSignal(SignalName.ResourceDecreased, _currentResource, _currentResource, value); + } + + _maxResource = value; + + EmitSignal(SignalName.ResourceChanged, _currentResource, value); + } + } private float _currentResource = 0f; + [Export] + private float _maxResource = 10f; + [Signal] public delegate void ResourceChangedEventHandler(float newValue, float maxValue); diff --git a/Scripts/Components/Actors/PlayerDamageReceiver.cs b/Scripts/Components/Actors/PlayerDamageReceiver.cs index cdd4f8c5..a62c07e5 100644 --- a/Scripts/Components/Actors/PlayerDamageReceiver.cs +++ b/Scripts/Components/Actors/PlayerDamageReceiver.cs @@ -12,11 +12,23 @@ public partial class PlayerDamageReceiver : Area2D public bool Invulnerable { get; private set; } = false; [Export] public BulletOwner BulletGroup { get; set; } = BulletOwner.Player; + [ExportCategory("Extensions")] + [Export] public StringName HealthExtendName { get; private set; } = "HEALTH_EXTEND"; + [Export] public StringName ShieldExtendName { get; private set; } = "SHIELD_EXTEND"; + + [Export] public float BaseHealth { get; private set; } = 32f; + [Export] public float BaseShield { get; private set; } = 32f; + + [Export] public float HealthExtendAmount { get; private set; } = 4f; + [Export] public float ShieldExtendAmount { get; private set; } = 4f; + + [ExportCategory("Providers")] [Export] private ActorResourceProvider _healthProvider; [Export] private ActorResourceProvider _shieldProvider; - + + [ExportCategory("Damage Types")] [Export] public StringName AcidGroupName { get; private set; } = "Acid"; [Signal] @@ -81,6 +93,27 @@ public partial class PlayerDamageReceiver : Area2D //if (!Enabled) return; EmitSignal(SignalName.Death); }; + + // Set max resources based on inventory + SetMaxResources(); + + InventoryManager.Instance.ItemAdded += (item, amount) => + { + if (item.ItemKey != HealthExtendName && item.ItemKey != ShieldExtendName) return; + + SetMaxResources(); + }; + } + + private void SetMaxResources() + { + var healthExtends = InventoryManager.Instance.GetItemCount(HealthExtendName); + + var shieldExtends = InventoryManager.Instance.GetItemCount(ShieldExtendName); + + _healthProvider.MaxResource = BaseHealth + (healthExtends * HealthExtendAmount); + + _shieldProvider.MaxResource = BaseShield + (shieldExtends * ShieldExtendAmount); } public void RefillHealth()