mirror of
https://gitlab.com/MaddoScientisto/cirnogodot.git
synced 2026-06-01 10:55:35 +00:00
65 lines
1.5 KiB
C#
65 lines
1.5 KiB
C#
using Godot;
|
|
|
|
namespace Cirno.Scripts.Components;
|
|
|
|
public partial class AlarmTrigger : Node2D
|
|
{
|
|
private AlarmManager _alarmManager;
|
|
|
|
[Export]
|
|
public AlarmTriggerType TriggerType { get; private set; }
|
|
|
|
[Export] public float ActivationRange { get; private set; } = 200f;
|
|
|
|
[Export]
|
|
public Node2D Target { get; private set; }
|
|
|
|
[Export] public ActivationType ActivationType { get; private set; }
|
|
|
|
public override void _Ready()
|
|
{
|
|
_alarmManager = this.GetAlarmManager(); //AlarmManager.Instance;
|
|
if (TriggerType is AlarmTriggerType.OnEnabled)
|
|
{
|
|
_alarmManager.AlarmEnabled += AlarmManagerOnAlarmEnabled;
|
|
}
|
|
else
|
|
{
|
|
_alarmManager.AlarmDisabled += AlarmManagerOnAlarmDisabled;
|
|
}
|
|
}
|
|
|
|
public override void _ExitTree()
|
|
{
|
|
_alarmManager.AlarmEnabled -= AlarmManagerOnAlarmEnabled;
|
|
_alarmManager.AlarmDisabled -= AlarmManagerOnAlarmDisabled;
|
|
}
|
|
|
|
private void AlarmManagerOnAlarmDisabled()
|
|
{
|
|
Activate();
|
|
}
|
|
|
|
private void AlarmManagerOnAlarmEnabled(Vector2 location)
|
|
{
|
|
if (this.GlobalPosition.DistanceTo(location) <= ActivationRange)
|
|
{
|
|
Activate();
|
|
}
|
|
}
|
|
|
|
private void Activate()
|
|
{
|
|
if (Target is IActivable activatable)
|
|
{
|
|
activatable.Activate(ActivationType);
|
|
}
|
|
}
|
|
|
|
public enum AlarmTriggerType
|
|
{
|
|
OnEnabled,
|
|
OnDisabled
|
|
}
|
|
}
|
|
|