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;
|
|
|
|
|
|
_alarmManager.AlarmDisabled += AlarmManagerOnAlarmDisabled;
|
|
|
|
|
|
}
|
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
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|