chore: cleanup

This commit is contained in:
redglow
2026-07-29 11:05:27 +02:00
parent 2c0a3f47a4
commit 5c4519ed26
20 changed files with 110 additions and 70 deletions
+13 -8
View File
@@ -10,31 +10,36 @@ namespace GodotHostTest.Game.Target;
public partial class TargetSpawner : Node2D, ITargetCollector, ITargetSpawner
{
private readonly List<ITarget> _availableTargets = [];
private readonly Subject<ITarget> _targetSpawned = new();
[Export] public required Timer Timer;
[Inject] private ILevel _level = null!;
[Inject] private ITargetEventBus _targetEventBus = null!;
/// <inheritdoc />
public void NewTarget(ITarget target)
{
// record the target as available
_availableTargets.Add(target);
target.Hit.Merge(target.TimedOut).Select(_ => target).Subscribe(MakeTargetAvailable).AddTo(this);
// whenever the target gets disabled, mark it as available again
target.Hit.Merge(target.TimedOut)
.Select(_ => target)
.Subscribe(_availableTargets.Add)
.AddTo(this);
}
public Observable<ITarget> TargetSpawned => _targetSpawned.AsObservable();
public override void _Ready()
{
// inform the target event bus that there's a new target spawner
_targetEventBus.NewTargetSpawner(this);
Spawn();
Timer.Start(_level.TimeBetweenSpawns.TotalSeconds);
}
private void MakeTargetAvailable(ITarget target)
{
_availableTargets.Add(target);
// spawn every total seconds (and immediately spawn something at ready)
Timer.Start(_level.TimeBetweenSpawns.TotalSeconds);
Spawn();
}
private void OnTimer()