using Godot;
using EinSoftworks.Events;
namespace Voider;
///
/// Autoload singleton that provides access to the ConfigurableEventManager
///
public partial class EventManager : Node
{
private static EventManager _instance;
public static EventManager Instance => _instance;
private ConfigurableEventManager _eventManager;
public override void _Ready()
{
_instance = this;
_eventManager = new ConfigurableEventManager();
}
///
/// Raise a game event using the resource's EventName
///
public void RaiseEvent(GameEventResource eventResource)
{
if (eventResource?.EventName != null)
{
_eventManager.Raise(eventResource.EventName);
}
}
///
/// Raise a game event by name
///
public void RaiseEvent(string eventName)
{
_eventManager.Raise(eventName);
}
///
/// Subscribe to a game event using the resource's EventName
///
public void Subscribe(GameEventResource eventResource, System.Action callback)
{
if (eventResource?.EventName != null)
{
_eventManager.Subscribe(eventResource.EventName, callback);
}
}
///
/// Subscribe to a game event by name
///
public void Subscribe(string eventName, System.Action callback)
{
_eventManager.Subscribe(eventName, callback);
}
///
/// Unsubscribe from a game event using the resource's EventName
///
public void Unsubscribe(GameEventResource eventResource, System.Action callback)
{
if (eventResource?.EventName != null)
{
_eventManager.Unsubscribe(eventResource.EventName, callback);
}
}
///
/// Unsubscribe from a game event by name
///
public void Unsubscribe(string eventName, System.Action callback)
{
_eventManager.Unsubscribe(eventName, callback);
}
}