using Babushka.scripts.CSharp.Common.Services;
using Godot;
using Godot.Collections;
namespace Babushka.scripts.CSharp.Common.CharacterControls;
///
/// Defines an Node with a used for detecting nodes.
///
public partial class Detector : Area2D
{
[Export] private bool _active = true;
///
/// Called when entering an interactionArea node.
///
[Signal] public delegate void InteractableEnteredEventHandler();
///
/// Called when exiting an interactionArea node.
///
[Signal] public delegate void InteractableExitedEventHandler();
public bool IsActive
{
get => _active;
set
{
Visible = value;
_active = value;
}
}
public override void _Ready()
{
AreaEntered += OnEnteredInteractable;
AreaExited += OnExitedInteractable;
}
///
/// Called every time this node enters an Area2D.
///
///
public void OnEnteredInteractable(Area2D area)
{
if (!_active || !InputService.Instance.InputEnabled)
return;
if (area is DetectableInteractionArea interactionArea2D)
{
EmitSignal(SignalName.InteractableEntered);
}
}
///
/// Called whenever this node exits an Area2D.
///
///
public void OnExitedInteractable(Area2D area)
{
if (!_active || !InputService.Instance.InputEnabled)
return;
if (area is DetectableInteractionArea interactionArea2D)
{
EmitSignal(SignalName.InteractableExited);
}
}
}