51 lines
1.4 KiB
C#
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;
|
|
}
|
|
}
|