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); } } }