feat: turrents and explosions
This commit is contained in:
+17
-4
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user