additional package setup

This commit is contained in:
2025-11-16 18:31:17 -05:00
parent 3da42beb46
commit 2ca8077013
55 changed files with 1746 additions and 12 deletions

View File

@@ -0,0 +1,59 @@
using System;
using System.Collections.Generic;
namespace Boxfriend.Utils
{
public class EventManager : Singleton<EventManager>
{
public delegate void Event(object arg, object sender);
private readonly Dictionary<string, Event> _events = new ();
public void RegisterEvent(string name)
{
if (_events.ContainsKey(name))
throw new ArgumentException($"Event {name} already registered");
_events.Add(name, null);
}
public void RegisterEvent (string name, Event callback)
{
if (_events.ContainsKey(name))
throw new ArgumentException($"Event {name} already registered");
_events.Add(name, callback);
}
public void UnregisterEvent(string name)
{
if (!_events.ContainsKey(name))
throw new ArgumentException($"Event {name} not registered");
_events.Remove(name);
}
public void SubscribeEvent (string name, Event callback)
{
if (!_events.ContainsKey(name))
throw new ArgumentException($"Event {name} not registered");
_events[name] += callback ?? throw new ArgumentNullException($"Event {name} callback is null");
}
public void UnsubscribeEvent (string name, Event callback)
{
if (!_events.ContainsKey(name))
throw new ArgumentException($"Event {name} not registered");
_events[name] -= callback ?? throw new ArgumentNullException($"Event {name} callback is null");
}
public void InvokeEvent (string name, object arg, object sender)
{
if (!_events.ContainsKey(name))
throw new ArgumentException($"Event {name} not registered");
_events[name]?.Invoke(arg, sender);
}
}
}