newlon/scripts/projectiles/LinearProjectile.cs
2025-07-25 18:48:49 +05:00

48 lines
1.2 KiB
C#

using Godot;
using Newlon.Components.Level;
using Newlon.Systems.Effects;
using Newlon.Components;
namespace Newlon.Projectiles;
//
// 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 * FieldParams.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, GlobalPosition, GlobalRotation);
QueueFree();
}
}
}