Wave enemies (#9)
* Add enemy wave management and path following components * cleanup
This commit is contained in:
52
scripts/components/WaveTriggerComponent.cs
Normal file
52
scripts/components/WaveTriggerComponent.cs
Normal file
@@ -0,0 +1,52 @@
|
||||
using Godot;
|
||||
|
||||
namespace Mr.BrickAdventures.scripts.components;
|
||||
|
||||
[GlobalClass]
|
||||
public partial class WaveTriggerComponent : Node
|
||||
{
|
||||
[Export] public Area2D TriggerArea { get; set; }
|
||||
[Export] public EnemyWaveManager WaveManager { get; set; }
|
||||
[Export] public ChaseLevelComponent ChaserToPause { get; set; } // Optional
|
||||
[Export] public bool PauseChaser { get; set; } = true;
|
||||
|
||||
private bool _hasBeenTriggered = false;
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
if (TriggerArea == null || WaveManager == null)
|
||||
{
|
||||
GD.PrintErr("WaveTriggerComponent is missing a TriggerArea or WaveManager.");
|
||||
SetProcess(false);
|
||||
return;
|
||||
}
|
||||
|
||||
TriggerArea.BodyEntered += OnPlayerEntered;
|
||||
WaveManager.WaveCompleted += OnWaveCompleted;
|
||||
}
|
||||
|
||||
private void OnPlayerEntered(Node2D body)
|
||||
{
|
||||
if (body is PlayerController && !_hasBeenTriggered)
|
||||
{
|
||||
_hasBeenTriggered = true;
|
||||
|
||||
if (PauseChaser && ChaserToPause != null)
|
||||
{
|
||||
ChaserToPause.SetChasing(false);
|
||||
}
|
||||
|
||||
WaveManager.StartWave();
|
||||
TriggerArea.QueueFree();
|
||||
}
|
||||
}
|
||||
|
||||
private void OnWaveCompleted()
|
||||
{
|
||||
GD.Print("Wave completed!");
|
||||
if (PauseChaser && ChaserToPause != null)
|
||||
{
|
||||
ChaserToPause.SetChasing(true);
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user