diff --git a/Engine.Core/Helpers/Event.cs b/Engine.Core/Helpers/Event.cs index 121b637..08a6e80 100644 --- a/Engine.Core/Helpers/Event.cs +++ b/Engine.Core/Helpers/Event.cs @@ -3,6 +3,27 @@ using System.Collections.Generic; namespace Syntriax.Engine.Core; +public class Event +{ + private readonly List listeners = new(8); + + public void AddListener(EventHandler listener) => listeners.Add(listener); + public void RemoveListener(EventHandler listener) => listeners.Remove(listener); + public void Clear() => listeners.Clear(); + public void Invoke() + { + for (int i = 0; i < listeners.Count; i++) + try { listeners[i].Invoke(); } + catch (Exception exception) + { + string methodCallRepresentation = $"{listeners[i].Method.DeclaringType?.FullName}.{listeners[i].Method.Name}()"; + Console.WriteLine($"Unexpected exception on invocation of method {methodCallRepresentation}:{Environment.NewLine}{exception.InnerException}"); + } + } + + public delegate void EventHandler(); +} + public class Event { private readonly List listeners = new(8);