cirnogodot/Scripts/Components/AlarmTrigger.cs

65 lines
1.5 KiB
C#
Raw Normal View History

2025-02-21 18:57:00 +01:00
using Godot;
namespace Cirno.Scripts.Components;
public partial class AlarmTrigger : Node2D
{
private AlarmManager _alarmManager;
[Export]
public AlarmTriggerType TriggerType { get; private set; }
2025-03-27 17:42:45 +01:00
[Export] public float ActivationRange { get; private set; } = 200f;
2025-02-21 18:57:00 +01:00
[Export]
public Node2D Target { get; private set; }
2025-03-27 17:42:45 +01:00
[Export] public ActivationType ActivationType { get; private set; }
2025-02-21 18:57:00 +01:00
public override void _Ready()
{
_alarmManager = this.GetAlarmManager(); //AlarmManager.Instance;
if (TriggerType is AlarmTriggerType.OnEnabled)
{
_alarmManager.AlarmEnabled += AlarmManagerOnAlarmEnabled;
}
else
{
_alarmManager.AlarmDisabled += AlarmManagerOnAlarmDisabled;
}
}
2025-03-27 21:13:22 +01:00
public override void _ExitTree()
{
_alarmManager.AlarmEnabled -= AlarmManagerOnAlarmEnabled;
2025-03-27 21:16:25 +01:00
_alarmManager.AlarmDisabled -= AlarmManagerOnAlarmDisabled;
2025-03-27 21:13:22 +01:00
}
2025-02-21 18:57:00 +01:00
private void AlarmManagerOnAlarmDisabled()
{
Activate();
}
private void AlarmManagerOnAlarmEnabled(Vector2 location)
{
2025-03-27 17:42:45 +01:00
if (this.GlobalPosition.DistanceTo(location) <= ActivationRange)
{
Activate();
}
2025-02-21 18:57:00 +01:00
}
private void Activate()
{
if (Target is IActivable activatable)
{
2025-03-27 17:42:45 +01:00
activatable.Activate(ActivationType);
2025-02-21 18:57:00 +01:00
}
}
public enum AlarmTriggerType
{
OnEnabled,
OnDisabled
}
}