feat: turrents and explosions

This commit is contained in:
redglow
2026-07-21 21:53:18 +02:00
parent e7dbb9cabb
commit bc7297c6bc
18 changed files with 277 additions and 15 deletions
+17 -4
View File
@@ -12,8 +12,9 @@ public partial class Target : Node2D, ITarget
private readonly Subject<Unit> _timedOut = new();
[Export] public required Area2D CollisionArea;
[Export] public required Sprite2D Image;
[Export] public double TimeOutDurationInSeconds;
[Export] public required Timer TimeOutTimer;
[Export] private PackedScene _explosionPackedScene = null!;
[Inject] private ILevel _level = null!;
[Inject] private ITargetCollector _targetCollector = null!;
@@ -25,7 +26,8 @@ public partial class Target : Node2D, ITarget
{
Image.Visible = true;
CollisionArea.Monitoring = true;
TimeOutTimer.Start(TimeOutDurationInSeconds);
CollisionArea.Monitorable = true;
TimeOutTimer.Start(_level.SpawnDuration.TotalSeconds);
}
public override void _Ready()
@@ -39,18 +41,29 @@ public partial class Target : Node2D, ITarget
_hit.Dispose();
}
// todo: hook to collision
private void OnAreaEntered(Area2D _)
{
OnHit();
}
private void OnHit()
{
Disable();
TimeOutTimer.Stop();
_hit.OnNext(Unit.Default);
var explosion = (GpuParticles2D)_explosionPackedScene.Instantiate();
explosion.GlobalPosition = GlobalPosition;
explosion.Emitting = true;
GetTree().CurrentScene.AddChild(explosion);
}
private void Disable()
{
Image.Visible = false;
CollisionArea.Monitoring = false;
// can't se monitoring/monitorable when inside the collision code, like during OnHit
CollisionArea.SetDeferred(Area2D.PropertyName.Monitoring, false);
CollisionArea.SetDeferred(Area2D.PropertyName.Monitorable, false);
}
private void OnTimeout()