cirnogodot/Scripts/Interactables/AlarmBox3D.cs

60 lines
1.6 KiB
C#
Raw Normal View History

2025-06-24 15:00:27 +02:00
using Godot;
namespace Cirno.Scripts.Interactables;
[Tool]
public partial class AlarmBox3D : Interactable3D
{
2025-06-27 15:06:33 +02:00
private AnimationPlayer _animationPlayer;
public StringName FlashAnimationName { get; private set; } = "Flash";
2025-06-24 15:00:27 +02:00
[Signal] public delegate void OnActivatedEventHandler(ActivationType activationType);
2025-06-27 15:06:33 +02:00
[Signal]
public delegate void PlayActivationSoundEventHandler();
2025-06-24 15:00:27 +02:00
public override void _Ready()
{
if (Engine.IsEditorHint()) return;
2025-06-27 15:06:33 +02:00
_animationPlayer = GetNode<AnimationPlayer>("AnimationPlayer");
//CallDeferred(MethodName.InitDeferred);
InitDeferred();
}
2025-06-24 15:00:27 +02:00
2025-06-27 15:06:33 +02:00
private void InitDeferred()
{
2025-06-24 15:00:27 +02:00
if (AlarmManager.Instance is not null)
{
AlarmManager.Instance.AlarmEnabled3D += OnAlarmEnabled3D;
2025-06-27 15:06:33 +02:00
AlarmManager.Instance.AlarmDisabled += InstanceOnAlarmDisabled;
2025-06-24 15:00:27 +02:00
}
}
2025-06-27 15:06:33 +02:00
private void InstanceOnAlarmDisabled()
{
_animationPlayer.Stop();
}
2025-06-24 15:00:27 +02:00
private void OnAlarmEnabled3D(Vector3 location)
{
// TODO: set animation, make blinky
GD.Print($"Enabled alarm in box {this.Name}");
2025-06-27 15:06:33 +02:00
_animationPlayer.Play(FlashAnimationName);
2025-06-24 15:00:27 +02:00
}
public override bool Activate(ActivationType activationType = ActivationType.Toggle)
{
EmitSignal(SignalName.OnActivated, (int)activationType);
2025-06-27 15:06:33 +02:00
EmitSignalPlayActivationSound();
2025-06-24 15:00:27 +02:00
if (AlarmManager.Instance is not null)
{
2025-06-27 15:06:33 +02:00
//_activationSound?.Play();
2025-06-24 15:00:27 +02:00
AlarmManager.Instance.DisableAlarm();
}
return true;
}
}