cirnogodot/Scripts/Components/Actors/DeathAnimationHandler.cs

65 lines
1.5 KiB
C#
Raw Normal View History

2025-02-23 19:19:12 +01:00
using Cirno.Scripts.Resources;
using Godot;
namespace Cirno.Scripts.Components.Actors;
public partial class DeathAnimationHandler : ActorModule
{
protected Actor _actor;
[Export] public BulletResource ExplosionData { get; set; }
[Export] public PackedScene ExplosionParticles { get; set; }
[Export] public PackedScene DebrisScene { get; set; }
public override void Init(Actor actor)
{
_actor = actor;
_actor.OnDeath += ParentOnOnDeath;
}
protected virtual void ParentOnOnDeath()
{
CreateExplosion();
CreateParticles();
CreateDebris();
_actor.QueueFree();
}
public override void Update(double delta)
{
}
public override void PhysicsUpdate(double delta)
{
}
private void CreateExplosion()
{
if (ExplosionData == null) return;
var explosion = _actor.CreateSibling<Bullet>(ExplosionData.BulletScene);
explosion.Speed = 0;
2025-06-19 17:55:23 +02:00
explosion.Initialize(ExplosionData.MakeBullet(_actor.GlobalPosition));
2025-02-23 19:19:12 +01:00
}
private void CreateParticles()
{
if (ExplosionParticles == null) {
return;
}
var particle = _actor.CreateSibling<GpuParticles2D>(ExplosionParticles);
if (particle == null) return;
particle.Emitting = true;
}
private void CreateDebris()
{
if (DebrisScene == null) return;
2025-03-12 13:57:25 +01:00
_actor.CreateSibling<Node2D>(DebrisScene);
2025-02-23 19:19:12 +01:00
}
}