cirnogodot/Scripts/Actors/3D/SecurityCamera3D.cs

51 lines
1.5 KiB
C#
Raw Normal View History

2025-06-30 10:02:37 +02:00
using System;
using Cirno.Scripts.Utils;
using Godot;
using Godot.Collections;
2025-06-27 15:06:33 +02:00
namespace Cirno.Scripts.Actors._3D;
2025-06-30 10:02:37 +02:00
[Tool]
2025-06-27 15:06:33 +02:00
public partial class SecurityCamera3D : Destructible3D
{
[Export] public StringName SweepAnimation { get; private set; } = "SweepLoop";
2025-06-30 10:02:37 +02:00
[Export] public string TargetGroup { get; private set; }
[Export] public ActivationType ActivationType { get; set; } = ActivationType.Toggle;
2025-06-27 15:06:33 +02:00
[Signal]
public delegate void AnimationStartEventHandler(string animationName);
2025-06-30 10:02:37 +02:00
[Signal]
public delegate void OnActivatedEventHandler(ActivationType activationType);
public void _func_godot_apply_properties(Dictionary<string, string> props)
{
TargetGroup = props["target"];
if (props.TryGetValue("activationtype", out var type))
{
var t = Enum.TryParse(type, true, out ActivationType activationType);
if (t)
{
ActivationType = activationType;
}
}
}
2025-06-27 15:06:33 +02:00
public override void _Ready()
{
if (Engine.IsEditorHint()) return;
EmitSignalAnimationStart(SweepAnimation);
}
public void OnBodySighted(Node3D body)
{
if (Engine.IsEditorHint()) return;
GD.Print($"{body.Name} Sighted!");
AlarmManager.Instance?.SoundAlarm(this.GlobalPosition);
2025-06-30 10:02:37 +02:00
if (!string.IsNullOrWhiteSpace(TargetGroup))
{
ActivationHelper.UseTargets(this, TargetGroup);
}
2025-06-27 15:06:33 +02:00
}
}