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 * FieldParams.TileWidth); } public void OnAreaEntered(Area2D area) { if (used == true) return; var entity = area.GetParent(); if (entity != null) { entity.TakeDamage(_damage,this); used = true; if (_impactEffect != null) entity.GiveEffect(_impactEffect); PoolContainer.Instance.SpawnParticles(particles, GlobalPosition, GlobalRotation); QueueFree(); } } }