Files
riversong-code-showcase/Source/Riversong/Game/CommonServices/Signals/SignalBus.cs
2026-05-21 16:04:49 +02:00

31 lines
774 B
C#

using System;
namespace DanieleMarotta.RiversongCodeShowcase
{
public class SignalBus : ISignalBus, IDisposable
{
private readonly ListMultiDictionary<Type, Delegate> _subscribers = new();
public void Dispose()
{
_subscribers.Clear();
}
public void Raise<T>(T signal)
{
if (!_subscribers.TryGetValues(typeof(T), out var handlers)) return;
foreach (var handler in handlers) ((Action<T>)handler).Invoke(signal);
}
public void Subscribe<T>(Action<T> handler)
{
_subscribers.Add(typeof(T), handler);
}
public void Unsubscribe<T>(Action<T> handler)
{
_subscribers.Remove(typeof(T), handler);
}
}
}