using Godot;
using Newlon.Components.Level;
using Newlon.Systems.Effects;

namespace Newlon.Components;

//
// Projectile that travels from left to right
//

public partial class LinearProjectile : Area2D, IProjectile
{
    [Export(hintString: "suffix:tile/sec")]
    private float _speed;
    [Export]
    private int _damage;
    [Export]
    private Effect _impactEffect;
    [Export]
    private PackedScene particles;
    private int _line;
    private bool used = false;
    public int Line { get => _line; set {  _line = value; } }
    

    public override void _PhysicsProcess(double delta)
    {
        Translate(Transform.X * _speed * (float)delta * Utility.TileWidth);
    }

    public void OnAreaEntered(Area2D area)
    {
        if (used == true) return;
        var entity = area.GetParent<Entity>();
        if (entity != null)
        {
            entity.TakeDamage(_damage,this);
            used = true;
            if (_impactEffect != null)
                entity.GiveEffect(_impactEffect);

            PoolContainer.Instance.SpawnParticles(particles, GlobalTransform);

            QueueFree();
        }
    }
}
