using Godot; using Newlon.Components.Level; namespace Newlon.Components.Plants.Behaviours; public partial class AloeBehaviour : BaseBehaviour { [Export] private float _hpTreshold = 0.25f; private Timer _timer; private bool _charge = true; private PackedScene particlesPacked = ResourceLoader.Load("uid://b3na62o5pu1gt"); public override void _Ready() { base._Ready(); _timer = GetNode("Timer"); } public override void _Process(double delta) { _tree.Set("parameters/Tree/conditions/charged",_charge); var checkPos = GetParent().GlobalPosition + Vector2.Right * FieldParams.TileWidth; if(_charge && PoolContainer.Instance.TryGetEntity(checkPos, out RuntimePlantData plantData)) { if((float)plantData.HP / (float)plantData.MaxHP < _hpTreshold) { _charge = false; _tree.Set("parameters/Tree/conditions/heal",true); _timer.Start(); } } } public void Heal() { var checkPos = GetParent().GlobalPosition + Vector2.Right * FieldParams.TileWidth; if (PoolContainer.Instance.TryGetEntity(checkPos, out RuntimePlantData plantData)) { plantData.Heal(300, GetParent()); var particles = particlesPacked.Instantiate(); PoolContainer.Instance.Particles.AddChild(particles); particles.GlobalPosition = plantData.GlobalPosition; } } public void OnTimeout() { _charge = true; } }