diff --git a/scenes/entities/plants/aloe.tscn b/scenes/entities/plants/aloe.tscn index c4c75a4..00dfc9e 100644 --- a/scenes/entities/plants/aloe.tscn +++ b/scenes/entities/plants/aloe.tscn @@ -84,6 +84,8 @@ graph_offset = Vector2(-78.082, -71.7578) size = Vector2(22, 32) [node name="Aloe" instance=ExtResource("1_n25yi")] +MaxHP = 30.0 +_effectImmunities = Array[Resource]([]) [node name="Sprite2D" parent="." index="0"] position = Vector2(9, -14) diff --git a/scenes/entities/plants/garlic.tscn b/scenes/entities/plants/garlic.tscn index 67c316e..bd855b0 100644 --- a/scenes/entities/plants/garlic.tscn +++ b/scenes/entities/plants/garlic.tscn @@ -50,7 +50,8 @@ blend_mode = 1 size = Vector2(32, 29) [node name="Garlic" instance=ExtResource("1_5i0e6")] -_maxHP = 200 +MaxHP = 200.0 +_effectImmunities = Array[Resource]([]) [node name="Sprite2D" parent="." index="0"] texture = ExtResource("2_w2jbi") diff --git a/scenes/entities/plants/peashooter.tscn b/scenes/entities/plants/peashooter.tscn index 7ba01a0..edf0cfe 100644 --- a/scenes/entities/plants/peashooter.tscn +++ b/scenes/entities/plants/peashooter.tscn @@ -62,6 +62,8 @@ resource_local_to_scene = true size = Vector2(20, 44) [node name="Peashooter" instance=ExtResource("1_pyk3o")] +MaxHP = 30.0 +_effectImmunities = Array[Resource]([]) [node name="Sprite2D" parent="." index="0"] texture = ExtResource("2_14qlx") diff --git a/scenes/entities/plants/potato_mine.tscn b/scenes/entities/plants/potato_mine.tscn index 03dee1e..c53e617 100644 --- a/scenes/entities/plants/potato_mine.tscn +++ b/scenes/entities/plants/potato_mine.tscn @@ -68,7 +68,8 @@ size = Vector2(15, 27) size = Vector2(34, 19) [node name="Potato mine" instance=ExtResource("1_dj7ul")] -_maxHP = 20 +MaxHP = 20.0 +_effectImmunities = Array[Resource]([]) [node name="Sprite2D" parent="." index="0"] texture = ExtResource("2_sneas") diff --git a/scenes/entities/plants/spikeweed.tscn b/scenes/entities/plants/spikeweed.tscn index 9b96cff..d44984d 100644 --- a/scenes/entities/plants/spikeweed.tscn +++ b/scenes/entities/plants/spikeweed.tscn @@ -26,6 +26,8 @@ blend_mode = 1 size = Vector2(49, 38) [node name="Spikeweed" instance=ExtResource("1_vmbvr")] +MaxHP = 30.0 +_effectImmunities = Array[Resource]([]) [node name="Sprite2D" parent="." index="0"] texture = ExtResource("2_ffrjr") diff --git a/scenes/entities/plants/sunflower.tscn b/scenes/entities/plants/sunflower.tscn index 2f23a96..045bc2f 100644 --- a/scenes/entities/plants/sunflower.tscn +++ b/scenes/entities/plants/sunflower.tscn @@ -55,13 +55,14 @@ transitions = ["Start", "sunflower_idle", SubResource("AnimationNodeStateMachine size = Vector2(26, 48) [node name="Sunflower" instance=ExtResource("1_bikjn")] -_maxHP = 30 +MaxHP = 30.0 +_effectImmunities = Array[Resource]([]) [node name="Sprite2D" parent="." index="0"] texture = ExtResource("2_fwcda") hframes = 9 vframes = 2 -frame = 1 +frame = 4 [node name="AnimationPlayer" parent="." index="1"] libraries = { diff --git a/scenes/entities/plants/wallnut.tscn b/scenes/entities/plants/wallnut.tscn index 84a0d9e..dc796e0 100644 --- a/scenes/entities/plants/wallnut.tscn +++ b/scenes/entities/plants/wallnut.tscn @@ -28,12 +28,14 @@ blend_mode = 1 size = Vector2(33, 46) [node name="Wallnut" instance=ExtResource("1_fluxn")] -_maxHP = 600 +MaxHP = 600.0 +_effectImmunities = Array[Resource]([]) [node name="Sprite2D" parent="." index="0"] texture = ExtResource("2_o5tda") hframes = 12 vframes = 3 +frame = 3 [node name="AnimationPlayer" parent="." index="1"] libraries = { diff --git a/scripts/components/Entity.cs b/scripts/components/Entity.cs index 2ef34ec..121bded 100644 --- a/scripts/components/Entity.cs +++ b/scripts/components/Entity.cs @@ -19,7 +19,7 @@ public partial class Entity : Node2D EmitSignal(SignalName.OnDamaged); if (HP <= 0) { - Kill(); + KillByDamage(); } } @@ -29,6 +29,11 @@ public partial class Entity : Node2D HP += amount; } + public virtual void KillByDamage() + { + Kill(); + } + public virtual void Kill() { QueueFree(); diff --git a/scripts/components/level/PoolContainer.cs b/scripts/components/level/PoolContainer.cs index 2714860..b5765fd 100644 --- a/scripts/components/level/PoolContainer.cs +++ b/scripts/components/level/PoolContainer.cs @@ -23,12 +23,12 @@ public partial class PoolContainer : Node2D public static PoolContainer Instance { get; private set; } - public Dictionary[] EntityField = { new(), new(), new() }; + public Dictionary[] EntityField = { new(), new(), new() }; public override void _Ready() { Instance = this; } - public bool TryGetEntity(Vector2 key, out IEntity result, int layer = 1) + public bool TryGetEntity(Vector2 key, out Entity result, int layer = 1) { if (EntityField[layer].ContainsKey(key)) { diff --git a/scripts/components/plants/LoseZone.cs b/scripts/components/plants/LoseZone.cs index 53e71fa..18ab886 100644 --- a/scripts/components/plants/LoseZone.cs +++ b/scripts/components/plants/LoseZone.cs @@ -4,10 +4,11 @@ namespace Newlon.Components.Plants; public partial class LoseZone : RuntimePlantData { - public override void TakeDamage(int amount, Node origin, Utility.DamageTypes damageType = Utility.DamageTypes.PHYSICAL) - { + public override void TakeDamage(float amount, Node origin) + { + + } - } public override void Kill() { diff --git a/scripts/components/plants/ReturnEffect.cs b/scripts/components/plants/ReturnEffect.cs index 149e8b5..c481de1 100644 --- a/scripts/components/plants/ReturnEffect.cs +++ b/scripts/components/plants/ReturnEffect.cs @@ -11,6 +11,7 @@ public partial class ReturnEffect : Node public void OnDamageRecieved(int delta,Node origin) { + if (delta >= 0) return; if (origin is RuntimeZombieData zombie) { zombie.GiveEffect(_effectToReturn); diff --git a/scripts/components/plants/RuntimePlantData.cs b/scripts/components/plants/RuntimePlantData.cs index ce189c5..6968e5d 100644 --- a/scripts/components/plants/RuntimePlantData.cs +++ b/scripts/components/plants/RuntimePlantData.cs @@ -7,64 +7,19 @@ namespace Newlon.Components.Plants; // Data that plant stores during runtime // -public partial class RuntimePlantData : Node2D, IEntity +public partial class RuntimePlantData : Entity { - [Export] - private int _maxHP; - private int _hp; - public int Hp => _hp; - public int MaxHp => _maxHP; public int Line { get; set; } public PlantResource Resource; - - private AudioStream eatenSound; - - [Signal] - public delegate void OnHPChangedEventHandler(int amount, Node origin); - - public override void _Ready() + private AudioStream eatenSound = ResourceLoader.Load("res://assets/audio/sfx/gulp.mp3"); + public override void KillByDamage() { - _hp = _maxHP; - eatenSound = ResourceLoader.Load("res://assets/audio/sfx/gulp.mp3"); + AudioSequencer.Play("plant_eaten", eatenSound); + base.KillByDamage(); } - - public virtual void Heal(int amount, Node origin) - { - _hp += amount; - - EmitSignal(SignalName.OnHPChanged, amount, origin); - - if (MaxHp > 0) - { - _hp = MaxHp; - } - } - - public virtual void TakeDamage(int amount, Node origin, Utility.DamageTypes damageType = Utility.DamageTypes.PHYSICAL) - { - _hp -= amount; - - EmitSignal(SignalName.OnHPChanged, -amount, origin); - - if (_hp <= 0) - { - Kill(); - AudioSequencer.Play("plant_eaten", eatenSound); - } - } - public virtual void Kill() + public override void Kill() { PoolContainer.Instance.EntityField[Resource.Layer].Remove(GlobalPosition); QueueFree(); } - - public virtual void DisableBrain() - { - GetNode("Behaviour").ProcessMode = ProcessModeEnum.Disabled; - } - - public virtual void EnableBrain() - { - GetNode("Behaviour").ProcessMode = ProcessModeEnum.Inherit; - } } diff --git a/scripts/components/plants/behaviours/AloeBehaviour.cs b/scripts/components/plants/behaviours/AloeBehaviour.cs index 323f8ab..f9dde56 100644 --- a/scripts/components/plants/behaviours/AloeBehaviour.cs +++ b/scripts/components/plants/behaviours/AloeBehaviour.cs @@ -22,7 +22,7 @@ public partial class AloeBehaviour : BaseBehaviour var checkPos = GetParent().GlobalPosition + Vector2.Right * Utility.TileWidth; if(_charge && PoolContainer.Instance.TryGetEntity(checkPos, out RuntimePlantData plantData)) { - if((float)plantData.Hp / (float)plantData.MaxHp < _hpTreshold) + if((float)plantData.HP / (float)plantData.MaxHP < _hpTreshold) { _charge = false; _tree.Set("parameters/conditions/heal",true); @@ -36,7 +36,7 @@ public partial class AloeBehaviour : BaseBehaviour var checkPos = GetParent().GlobalPosition + Vector2.Right * Utility.TileWidth; if (PoolContainer.Instance.TryGetEntity(checkPos, out RuntimePlantData plantData)) { - plantData.Heal(3000 + 25 * plantData.MaxHp, GetParent()); + plantData.Heal(3000 + 25 * plantData.MaxHP, GetParent()); } } diff --git a/scripts/components/plants/behaviours/HpBasedBehaviour.cs b/scripts/components/plants/behaviours/HpBasedBehaviour.cs index d49af31..a234287 100644 --- a/scripts/components/plants/behaviours/HpBasedBehaviour.cs +++ b/scripts/components/plants/behaviours/HpBasedBehaviour.cs @@ -13,6 +13,6 @@ public partial class HpBasedBehaviour : BaseBehaviour public void OnHPChanged(int amount,Node origin) { - _tree.Set("parameters/blend_position",(float)_data.Hp/_data.MaxHp); + _tree.Set("parameters/blend_position",(float)_data.HP/_data.MaxHP); } }