newlon/scripts/entities/plants/behaviours/AloeBehaviour.cs
2025-07-30 03:52:34 +05:00

51 lines
1.4 KiB
C#

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<PackedScene>("uid://b3na62o5pu1gt");
public override void _Ready()
{
base._Ready();
_timer = GetNode<Timer>("Timer");
}
public override void _Process(double delta)
{
_tree.Set("parameters/Tree/conditions/charged",_charge);
var checkPos = GetParent<Node2D>().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<Node2D>().GlobalPosition + Vector2.Right * FieldParams.TileWidth;
if (PoolContainer.Instance.TryGetEntity(checkPos, out RuntimePlantData plantData))
{
plantData.Heal(300, GetParent());
var particles = particlesPacked.Instantiate<Node2D>();
PoolContainer.Instance.Particles.AddChild(particles);
particles.GlobalPosition = plantData.GlobalPosition;
}
}
public void OnTimeout()
{
_charge = true;
}
}