From 03c90ce9f7ec4ea4dead12f838c7de2d28e8253f Mon Sep 17 00:00:00 2001 From: Tornado Tech <54727692+Tornado-Technology@users.noreply.github.com> Date: Sat, 13 Jul 2024 00:03:26 +1000 Subject: [PATCH] Clean up event bus --- .../Graphics/Event/MainWindowClosedEvent.cs | 2 +- .../Graphics/Event/WindowClosed.cs | 3 +- .../Graphics/Event/WindowFocusChangedEvent.cs | 3 +- Hypercube.Client/Runtimes/Runtime.cs | 4 +- .../Realisation/EventBus/EntitiesEventBus.cs | 4 +- .../Realisation/Events/ComponentAdded.cs | 3 +- .../Realisation/Events/EntityAdded.cs | 6 +- .../Realisation/Events/EntityRemoved.cs | 6 +- Hypercube.Shared/EventBus/EventBus.cs | 143 ++++++++++-------- .../Events/Broadcast/BroadcastRegistration.cs | 4 +- Hypercube.Shared/EventBus/Events/EventData.cs | 13 -- .../EventBus/Events/EventHandler.cs | 4 - .../EventBus/Events/EventRegistration.cs | 31 ++++ .../CancellableEventArgs.cs} | 6 +- .../EventBus/Events/Events/EventArgs.cs | 3 + .../EventBus/Events/Events/IEventArgs.cs | 3 + .../Exceptions/UnregisteredEventException.cs | 4 + .../Events/Handlers/EventRefHandler.cs | 3 + .../EventBus/Events/Handlers/RefHandler.cs | 3 + Hypercube.Shared/EventBus/IEventBus.cs | 4 +- .../Event/RuntimeInitializationEvent.cs | 2 +- .../Runtimes/Event/RuntimeShutdownEvent.cs | 2 +- .../Runtimes/Event/RuntimeStartupEvent.cs | 2 +- .../Runtimes/Loop/Event/InputFrameEvent.cs | 6 +- .../Runtimes/Loop/Event/RenderFrameEvent.cs | 2 +- .../Runtimes/Loop/Event/TickFrameEvent.cs | 6 +- .../Runtimes/Loop/Event/UpdateFrameEvent.cs | 2 +- Hypercube.Shared/Scenes/Events/SceneAdded.cs | 6 +- .../Scenes/Events/SceneDeleted.cs | 6 +- .../Utilities/Helpers/PathHelpers.cs | 4 +- .../EventBus/EventBusRaiseTests.cs | 1 + .../EventBus/EventBusRefClassTests.cs | 2 +- .../EventBus/EventBusRefStructTests.cs | 1 + .../EventBus/EventBusUnsubscribeTests.cs | 1 + 34 files changed, 180 insertions(+), 115 deletions(-) delete mode 100644 Hypercube.Shared/EventBus/Events/EventData.cs delete mode 100644 Hypercube.Shared/EventBus/Events/EventHandler.cs create mode 100644 Hypercube.Shared/EventBus/Events/EventRegistration.cs rename Hypercube.Shared/EventBus/Events/{IEventArgs.cs => Events/CancellableEventArgs.cs} (65%) create mode 100644 Hypercube.Shared/EventBus/Events/Events/EventArgs.cs create mode 100644 Hypercube.Shared/EventBus/Events/Events/IEventArgs.cs create mode 100644 Hypercube.Shared/EventBus/Events/Exceptions/UnregisteredEventException.cs create mode 100644 Hypercube.Shared/EventBus/Events/Handlers/EventRefHandler.cs create mode 100644 Hypercube.Shared/EventBus/Events/Handlers/RefHandler.cs diff --git a/Hypercube.Client/Graphics/Event/MainWindowClosedEvent.cs b/Hypercube.Client/Graphics/Event/MainWindowClosedEvent.cs index 1372c1e..477c7b0 100644 --- a/Hypercube.Client/Graphics/Event/MainWindowClosedEvent.cs +++ b/Hypercube.Client/Graphics/Event/MainWindowClosedEvent.cs @@ -1,5 +1,5 @@ using Hypercube.Client.Graphics.Windows; -using Hypercube.Shared.EventBus.Events; +using Hypercube.Shared.EventBus.Events.Events; namespace Hypercube.Client.Graphics.Event; diff --git a/Hypercube.Client/Graphics/Event/WindowClosed.cs b/Hypercube.Client/Graphics/Event/WindowClosed.cs index f7d2b31..744b64c 100644 --- a/Hypercube.Client/Graphics/Event/WindowClosed.cs +++ b/Hypercube.Client/Graphics/Event/WindowClosed.cs @@ -1,8 +1,9 @@ using Hypercube.Client.Graphics.Windows; +using Hypercube.Shared.EventBus.Events.Events; namespace Hypercube.Client.Graphics.Event; -public readonly struct WindowClosedEvent(WindowRegistration registration) +public readonly struct WindowClosedEvent(WindowRegistration registration) : IEventArgs { public readonly WindowRegistration Registration = registration; } \ No newline at end of file diff --git a/Hypercube.Client/Graphics/Event/WindowFocusChangedEvent.cs b/Hypercube.Client/Graphics/Event/WindowFocusChangedEvent.cs index 3628687..3311ecf 100644 --- a/Hypercube.Client/Graphics/Event/WindowFocusChangedEvent.cs +++ b/Hypercube.Client/Graphics/Event/WindowFocusChangedEvent.cs @@ -1,5 +1,6 @@ using Hypercube.Client.Graphics.Windows; +using Hypercube.Shared.EventBus.Events.Events; namespace Hypercube.Client.Graphics.Event; -public readonly record struct WindowFocusChangedEvent(WindowRegistration Registration, bool Focused); \ No newline at end of file +public readonly record struct WindowFocusChangedEvent(WindowRegistration Registration, bool Focused) : IEventArgs; \ No newline at end of file diff --git a/Hypercube.Client/Runtimes/Runtime.cs b/Hypercube.Client/Runtimes/Runtime.cs index aa5e832..7627118 100644 --- a/Hypercube.Client/Runtimes/Runtime.cs +++ b/Hypercube.Client/Runtimes/Runtime.cs @@ -1,6 +1,4 @@ -using Hypercube.Client.Graphics; -using Hypercube.Client.Graphics.Event; -using Hypercube.Client.Graphics.Rendering; +using Hypercube.Client.Graphics.Event; using Hypercube.Client.Runtimes.Loop; using Hypercube.Shared.Dependency; using Hypercube.Shared.EventBus; diff --git a/Hypercube.Shared/Entities/Realisation/EventBus/EntitiesEventBus.cs b/Hypercube.Shared/Entities/Realisation/EventBus/EntitiesEventBus.cs index 4b21b4f..a8754da 100644 --- a/Hypercube.Shared/Entities/Realisation/EventBus/EntitiesEventBus.cs +++ b/Hypercube.Shared/Entities/Realisation/EventBus/EntitiesEventBus.cs @@ -1,4 +1,6 @@ using Hypercube.Shared.EventBus.Events; +using Hypercube.Shared.EventBus.Events.Events; +using Hypercube.Shared.EventBus.Events.Handlers; namespace Hypercube.Shared.Entities.Realisation.EventBus; @@ -14,7 +16,7 @@ public void Subscribe(IEventSubscriber subscriber, EventRefHandler refHand throw new NotImplementedException(); } - public void Raise(object receiver) + public void Raise(IEventArgs receiver) { throw new NotImplementedException(); } diff --git a/Hypercube.Shared/Entities/Realisation/Events/ComponentAdded.cs b/Hypercube.Shared/Entities/Realisation/Events/ComponentAdded.cs index 1919f2e..6677226 100644 --- a/Hypercube.Shared/Entities/Realisation/Events/ComponentAdded.cs +++ b/Hypercube.Shared/Entities/Realisation/Events/ComponentAdded.cs @@ -1,5 +1,6 @@ using Hypercube.Shared.Entities.Realisation.Components; +using Hypercube.Shared.EventBus.Events.Events; namespace Hypercube.Shared.Entities.Realisation.Events; -public readonly record struct ComponentAdded(EntityUid EntityUid, IComponent Component); \ No newline at end of file +public readonly record struct ComponentAdded(EntityUid EntityUid, IComponent Component) : IEventArgs; \ No newline at end of file diff --git a/Hypercube.Shared/Entities/Realisation/Events/EntityAdded.cs b/Hypercube.Shared/Entities/Realisation/Events/EntityAdded.cs index b4bfa6a..01666e7 100644 --- a/Hypercube.Shared/Entities/Realisation/Events/EntityAdded.cs +++ b/Hypercube.Shared/Entities/Realisation/Events/EntityAdded.cs @@ -1,3 +1,5 @@ -namespace Hypercube.Shared.Entities.Realisation.Events; +using Hypercube.Shared.EventBus.Events.Events; -public readonly record struct EntityAdded(EntityUid EntityUid); \ No newline at end of file +namespace Hypercube.Shared.Entities.Realisation.Events; + +public readonly record struct EntityAdded(EntityUid EntityUid) : IEventArgs; \ No newline at end of file diff --git a/Hypercube.Shared/Entities/Realisation/Events/EntityRemoved.cs b/Hypercube.Shared/Entities/Realisation/Events/EntityRemoved.cs index edaa062..da7a3af 100644 --- a/Hypercube.Shared/Entities/Realisation/Events/EntityRemoved.cs +++ b/Hypercube.Shared/Entities/Realisation/Events/EntityRemoved.cs @@ -1,3 +1,5 @@ -namespace Hypercube.Shared.Entities.Realisation.Events; +using Hypercube.Shared.EventBus.Events.Events; -public readonly record struct EntityRemoved(EntityUid EntityUid); \ No newline at end of file +namespace Hypercube.Shared.Entities.Realisation.Events; + +public readonly record struct EntityRemoved(EntityUid EntityUid) : IEventArgs; \ No newline at end of file diff --git a/Hypercube.Shared/EventBus/EventBus.cs b/Hypercube.Shared/EventBus/EventBus.cs index 1e0d10e..ad84ac1 100644 --- a/Hypercube.Shared/EventBus/EventBus.cs +++ b/Hypercube.Shared/EventBus/EventBus.cs @@ -1,14 +1,35 @@ using System.Runtime.CompilerServices; using Hypercube.Shared.EventBus.Events; using Hypercube.Shared.EventBus.Events.Broadcast; +using Hypercube.Shared.EventBus.Events.Events; +using Hypercube.Shared.EventBus.Events.Exceptions; +using Hypercube.Shared.EventBus.Events.Handlers; namespace Hypercube.Shared.EventBus; public sealed class EventBus : IEventBus { - private readonly Dictionary _eventData = new(); + private readonly Dictionary _eventRegistration = new(); private readonly Dictionary> _inverseEventSubscriptions = new(); + public void Raise(ref T receiver) where T : IEventArgs + { + ProcessEvent(ref Unsafe.As(ref receiver), typeof(T)); + } + + public void Raise(T receiver) where T : IEventArgs + { + ProcessEvent(ref Unsafe.As(ref receiver), typeof(T)); + } + + public void Raise(IEventArgs eventArgs) + { + var eventType = eventArgs.GetType(); + ref var unitRef = ref ExtractUnitRef(ref eventArgs, eventType); + + ProcessEvent(ref unitRef, eventType); + } + public void Subscribe(IEventSubscriber subscriber, EventRefHandler refHandler) where T : IEventArgs { SubscribeEventCommon(subscriber, (ref Unit ev) => @@ -18,6 +39,8 @@ public void Subscribe(IEventSubscriber subscriber, EventRefHandler refHand }, refHandler); } + /// Throws when subscriber is null + /// private void SubscribeEventCommon(IEventSubscriber subscriber, RefHandler refHandler, object equality) where T : IEventArgs { @@ -26,96 +49,92 @@ private void SubscribeEventCommon(IEventSubscriber subscriber, RefHandler ref var eventType = typeof(T); var subscription = new BroadcastRegistration(refHandler, equality); - var subscriptions = GetEventData(eventType); - if (subscriptions.BroadcastRegistrations.Contains(subscription)) - throw new InvalidOperationException(); - - subscriptions.BroadcastRegistrations.Add(subscription); - - Dictionary? inverseSubs; - if (!_inverseEventSubscriptions.TryGetValue(subscriber, out inverseSubs)) - { - inverseSubs = new Dictionary(); - _inverseEventSubscriptions[subscriber] = inverseSubs; - } + var subscriptions = GetEventRegistration(eventType); + subscriptions.Add(subscription); - if (!inverseSubs.TryAdd(eventType, subscription)) - throw new InvalidOperationException(); - } - - private EventData GetEventData(Type eventType) - { - if (_eventData.TryGetValue(eventType, out var found)) - return found; + var inverseSubscriptions = GetEventInverseSubscription(subscriber); + if (inverseSubscriptions.TryAdd(eventType, subscription)) + return; - var list = new List(); - var data = new EventData(list); - - return _eventData[eventType] = data; + throw new InvalidOperationException(); } + /// Throws when subscriber is null + /// public void Unsubscribe(IEventSubscriber subscriber) where T : IEventArgs { ArgumentNullException.ThrowIfNull(subscriber); + var eventType = typeof(T); - if (_inverseEventSubscriptions.TryGetValue(subscriber, out var inverse) - && inverse.TryGetValue(eventType, out var tuple)) - UnsubscribeEvent(eventType, tuple, subscriber); - } - - private void UnsubscribeEvent(Type evType, BroadcastRegistration tuple, IEventSubscriber subscriber) - { - if (_eventData.TryGetValue(evType, out var subs) && - subs.BroadcastRegistrations.Contains(tuple)) - { - subs.BroadcastRegistrations.Remove(tuple); - } + var inverseSubscriptions = GetEventInverseSubscription(subscriber); + if (!inverseSubscriptions.TryGetValue(eventType, out var registration)) + throw new InvalidOperationException(); - if (_inverseEventSubscriptions.TryGetValue(subscriber, out var inverse) && inverse.ContainsKey(evType)) - inverse.Remove(evType); + Unsubscribe(eventType, registration, subscriber); } - public void Raise(object receiver) + /// + /// + private void Unsubscribe(Type eventType, BroadcastRegistration registration, IEventSubscriber subscriber) { - ArgumentNullException.ThrowIfNull(receiver); - - var evType = receiver.GetType(); - ref var unitRef = ref ExtractUnitRef(ref receiver, evType); + var eventRegistration = GetEventRegistration(eventType, false); + eventRegistration.Remove(registration); - ProcessEvent(ref unitRef, evType); - } - public void Raise(ref T receiver) where T : IEventArgs - { - ProcessEvent(ref Unsafe.As(ref receiver), typeof(T)); - } - - public void Raise(T receiver) where T : IEventArgs - { - ProcessEvent(ref Unsafe.As(ref receiver), typeof(T)); + var inverseSubscriptions = GetEventInverseSubscription(subscriber, false); + inverseSubscriptions.Remove(eventType); } - private void ProcessEvent(ref Unit unitRef, Type evType) + private void ProcessEvent(ref Unit unitRef, Type eventType) { - if (!_eventData!.TryGetValue(evType, out var data)) + if (!_eventRegistration.TryGetValue(eventType, out var registration)) return; - ProcessEventCore(ref unitRef, data); + ProcessEventCore(ref unitRef, registration); } - private void ProcessEventCore(ref Unit unitRef, EventData data) + private void ProcessEventCore(ref Unit unitRef, EventRegistration registration) { - foreach (var handler in data.BroadcastRegistrations) + foreach (var handler in registration.BroadcastRegistrations) { handler.Handler(ref unitRef); } } + /// Type of event whose registration we want to receive. + /// Allows you to control the automatic registration of an event if it does not exist. + /// If autoRegistration is false, it will throw an exception if registration is not found. + private EventRegistration GetEventRegistration(Type eventType, bool autoRegistration = true) + { + if (_eventRegistration.TryGetValue(eventType, out var found)) + return found; + + if (!autoRegistration) + throw new UnregisteredEventException(eventType); + + return _eventRegistration[eventType] = new EventRegistration(); + } + + /// + private Dictionary GetEventInverseSubscription(IEventSubscriber subscriber, bool creating = true) + { + if (_inverseEventSubscriptions.TryGetValue(subscriber, out var subscriptions)) + return subscriptions; + + if (!creating) + throw new InvalidOperationException(); + + return _inverseEventSubscriptions[subscriber] = new Dictionary(); + } + [MethodImpl(MethodImplOptions.AggressiveInlining)] - private static ref Unit ExtractUnitRef(ref object obj, Type objType) + private static ref Unit ExtractUnitRef(ref IEventArgs eventArgs, Type objType) { + //return ref Unsafe.As(ref eventArgs); + + // Why not only unit? return ref objType.IsValueType - ? ref Unsafe.As(ref obj).Value - : ref Unsafe.As(ref obj); + ? ref Unsafe.As(ref eventArgs).Value + : ref Unsafe.As(ref eventArgs); } } \ No newline at end of file diff --git a/Hypercube.Shared/EventBus/Events/Broadcast/BroadcastRegistration.cs b/Hypercube.Shared/EventBus/Events/Broadcast/BroadcastRegistration.cs index c3b9979..09a8e1a 100644 --- a/Hypercube.Shared/EventBus/Events/Broadcast/BroadcastRegistration.cs +++ b/Hypercube.Shared/EventBus/Events/Broadcast/BroadcastRegistration.cs @@ -1,4 +1,6 @@ -namespace Hypercube.Shared.EventBus.Events.Broadcast; +using Hypercube.Shared.EventBus.Events.Handlers; + +namespace Hypercube.Shared.EventBus.Events.Broadcast; public sealed class BroadcastRegistration : IEquatable { diff --git a/Hypercube.Shared/EventBus/Events/EventData.cs b/Hypercube.Shared/EventBus/Events/EventData.cs deleted file mode 100644 index aba4166..0000000 --- a/Hypercube.Shared/EventBus/Events/EventData.cs +++ /dev/null @@ -1,13 +0,0 @@ -using Hypercube.Shared.EventBus.Events.Broadcast; - -namespace Hypercube.Shared.EventBus.Events; - -public class EventData -{ - public List BroadcastRegistrations; - - public EventData(List broadcastRegistrations) - { - BroadcastRegistrations = broadcastRegistrations; - } -} \ No newline at end of file diff --git a/Hypercube.Shared/EventBus/Events/EventHandler.cs b/Hypercube.Shared/EventBus/Events/EventHandler.cs deleted file mode 100644 index 0689142..0000000 --- a/Hypercube.Shared/EventBus/Events/EventHandler.cs +++ /dev/null @@ -1,4 +0,0 @@ -namespace Hypercube.Shared.EventBus.Events; - -public delegate void RefHandler(ref Unit ev); -public delegate void EventRefHandler(ref T ev); \ No newline at end of file diff --git a/Hypercube.Shared/EventBus/Events/EventRegistration.cs b/Hypercube.Shared/EventBus/Events/EventRegistration.cs new file mode 100644 index 0000000..35d1a53 --- /dev/null +++ b/Hypercube.Shared/EventBus/Events/EventRegistration.cs @@ -0,0 +1,31 @@ +using Hypercube.Shared.EventBus.Events.Broadcast; + +namespace Hypercube.Shared.EventBus.Events; + +/// +/// Saves information about a specific event. +/// +public readonly struct EventRegistration() +{ + private readonly HashSet _broadcastRegistrations = new(); + + public IReadOnlySet BroadcastRegistrations => _broadcastRegistrations; + + /// + public void Add(BroadcastRegistration registration) + { + if (_broadcastRegistrations.Contains(registration)) + throw new InvalidOperationException(); + + _broadcastRegistrations.Add(registration); + } + + /// + public void Remove(BroadcastRegistration registration) + { + if (!_broadcastRegistrations.Contains(registration)) + throw new InvalidOperationException(); + + _broadcastRegistrations.Remove(registration); + } +} \ No newline at end of file diff --git a/Hypercube.Shared/EventBus/Events/IEventArgs.cs b/Hypercube.Shared/EventBus/Events/Events/CancellableEventArgs.cs similarity index 65% rename from Hypercube.Shared/EventBus/Events/IEventArgs.cs rename to Hypercube.Shared/EventBus/Events/Events/CancellableEventArgs.cs index 09ee291..a4d72cf 100644 --- a/Hypercube.Shared/EventBus/Events/IEventArgs.cs +++ b/Hypercube.Shared/EventBus/Events/Events/CancellableEventArgs.cs @@ -1,8 +1,4 @@ -namespace Hypercube.Shared.EventBus.Events; - -public interface IEventArgs; - -public abstract class EventArgs : IEventArgs; +namespace Hypercube.Shared.EventBus.Events.Events; public abstract class CancellableEventArgs : EventArgs { diff --git a/Hypercube.Shared/EventBus/Events/Events/EventArgs.cs b/Hypercube.Shared/EventBus/Events/Events/EventArgs.cs new file mode 100644 index 0000000..2f13048 --- /dev/null +++ b/Hypercube.Shared/EventBus/Events/Events/EventArgs.cs @@ -0,0 +1,3 @@ +namespace Hypercube.Shared.EventBus.Events.Events; + +public abstract class EventArgs : IEventArgs; \ No newline at end of file diff --git a/Hypercube.Shared/EventBus/Events/Events/IEventArgs.cs b/Hypercube.Shared/EventBus/Events/Events/IEventArgs.cs new file mode 100644 index 0000000..dae40dd --- /dev/null +++ b/Hypercube.Shared/EventBus/Events/Events/IEventArgs.cs @@ -0,0 +1,3 @@ +namespace Hypercube.Shared.EventBus.Events.Events; + +public interface IEventArgs; \ No newline at end of file diff --git a/Hypercube.Shared/EventBus/Events/Exceptions/UnregisteredEventException.cs b/Hypercube.Shared/EventBus/Events/Exceptions/UnregisteredEventException.cs new file mode 100644 index 0000000..8280ee4 --- /dev/null +++ b/Hypercube.Shared/EventBus/Events/Exceptions/UnregisteredEventException.cs @@ -0,0 +1,4 @@ +namespace Hypercube.Shared.EventBus.Events.Exceptions; + +public sealed class UnregisteredEventException(Type registrationType) : + Exception($"Attempted to resolve unregistered event {registrationType.FullName}."); \ No newline at end of file diff --git a/Hypercube.Shared/EventBus/Events/Handlers/EventRefHandler.cs b/Hypercube.Shared/EventBus/Events/Handlers/EventRefHandler.cs new file mode 100644 index 0000000..5ec59ce --- /dev/null +++ b/Hypercube.Shared/EventBus/Events/Handlers/EventRefHandler.cs @@ -0,0 +1,3 @@ +namespace Hypercube.Shared.EventBus.Events.Handlers; + +public delegate void EventRefHandler(ref T ev); \ No newline at end of file diff --git a/Hypercube.Shared/EventBus/Events/Handlers/RefHandler.cs b/Hypercube.Shared/EventBus/Events/Handlers/RefHandler.cs new file mode 100644 index 0000000..c890a3e --- /dev/null +++ b/Hypercube.Shared/EventBus/Events/Handlers/RefHandler.cs @@ -0,0 +1,3 @@ +namespace Hypercube.Shared.EventBus.Events.Handlers; + +public delegate void RefHandler(ref Unit ev); \ No newline at end of file diff --git a/Hypercube.Shared/EventBus/IEventBus.cs b/Hypercube.Shared/EventBus/IEventBus.cs index d7adfce..5bfffc8 100644 --- a/Hypercube.Shared/EventBus/IEventBus.cs +++ b/Hypercube.Shared/EventBus/IEventBus.cs @@ -1,4 +1,6 @@ using Hypercube.Shared.EventBus.Events; +using Hypercube.Shared.EventBus.Events.Events; +using Hypercube.Shared.EventBus.Events.Handlers; namespace Hypercube.Shared.EventBus; @@ -10,7 +12,7 @@ public interface IEventBus { void Raise(ref T receiver) where T : IEventArgs; void Raise(T receiver) where T : IEventArgs; - void Raise(object receiver); + void Raise(IEventArgs eventArgs); void Subscribe(IEventSubscriber subscriber, EventRefHandler refHandler) where T : IEventArgs; void Unsubscribe(IEventSubscriber subscriber) where T : IEventArgs; } \ No newline at end of file diff --git a/Hypercube.Shared/Runtimes/Event/RuntimeInitializationEvent.cs b/Hypercube.Shared/Runtimes/Event/RuntimeInitializationEvent.cs index bffad53..3a909e7 100644 --- a/Hypercube.Shared/Runtimes/Event/RuntimeInitializationEvent.cs +++ b/Hypercube.Shared/Runtimes/Event/RuntimeInitializationEvent.cs @@ -1,4 +1,4 @@ -using Hypercube.Shared.EventBus.Events; +using Hypercube.Shared.EventBus.Events.Events; namespace Hypercube.Shared.Runtimes.Event; diff --git a/Hypercube.Shared/Runtimes/Event/RuntimeShutdownEvent.cs b/Hypercube.Shared/Runtimes/Event/RuntimeShutdownEvent.cs index e89ee29..d7ce56a 100644 --- a/Hypercube.Shared/Runtimes/Event/RuntimeShutdownEvent.cs +++ b/Hypercube.Shared/Runtimes/Event/RuntimeShutdownEvent.cs @@ -1,4 +1,4 @@ -using Hypercube.Shared.EventBus.Events; +using Hypercube.Shared.EventBus.Events.Events; namespace Hypercube.Shared.Runtimes.Event; diff --git a/Hypercube.Shared/Runtimes/Event/RuntimeStartupEvent.cs b/Hypercube.Shared/Runtimes/Event/RuntimeStartupEvent.cs index 7f3b673..79672bf 100644 --- a/Hypercube.Shared/Runtimes/Event/RuntimeStartupEvent.cs +++ b/Hypercube.Shared/Runtimes/Event/RuntimeStartupEvent.cs @@ -1,4 +1,4 @@ -using Hypercube.Shared.EventBus.Events; +using Hypercube.Shared.EventBus.Events.Events; namespace Hypercube.Shared.Runtimes.Event; diff --git a/Hypercube.Shared/Runtimes/Loop/Event/InputFrameEvent.cs b/Hypercube.Shared/Runtimes/Loop/Event/InputFrameEvent.cs index b58cc1f..a31ff27 100644 --- a/Hypercube.Shared/Runtimes/Loop/Event/InputFrameEvent.cs +++ b/Hypercube.Shared/Runtimes/Loop/Event/InputFrameEvent.cs @@ -1,6 +1,8 @@ -namespace Hypercube.Shared.Runtimes.Loop.Event; +using Hypercube.Shared.EventBus.Events.Events; -public readonly struct InputFrameEvent(float deltaSeconds) +namespace Hypercube.Shared.Runtimes.Loop.Event; + +public readonly struct InputFrameEvent(float deltaSeconds) : IEventArgs { public readonly float DeltaSeconds = deltaSeconds; } \ No newline at end of file diff --git a/Hypercube.Shared/Runtimes/Loop/Event/RenderFrameEvent.cs b/Hypercube.Shared/Runtimes/Loop/Event/RenderFrameEvent.cs index 05d25ed..6dade5f 100644 --- a/Hypercube.Shared/Runtimes/Loop/Event/RenderFrameEvent.cs +++ b/Hypercube.Shared/Runtimes/Loop/Event/RenderFrameEvent.cs @@ -1,4 +1,4 @@ -using Hypercube.Shared.EventBus.Events; +using Hypercube.Shared.EventBus.Events.Events; namespace Hypercube.Shared.Runtimes.Loop.Event; diff --git a/Hypercube.Shared/Runtimes/Loop/Event/TickFrameEvent.cs b/Hypercube.Shared/Runtimes/Loop/Event/TickFrameEvent.cs index 9a5e387..1f05fe4 100644 --- a/Hypercube.Shared/Runtimes/Loop/Event/TickFrameEvent.cs +++ b/Hypercube.Shared/Runtimes/Loop/Event/TickFrameEvent.cs @@ -1,6 +1,8 @@ -namespace Hypercube.Shared.Runtimes.Loop.Event; +using Hypercube.Shared.EventBus.Events.Events; -public readonly struct TickFrameEvent(float deltaSeconds) +namespace Hypercube.Shared.Runtimes.Loop.Event; + +public readonly struct TickFrameEvent(float deltaSeconds) : IEventArgs { public readonly float DeltaSeconds = deltaSeconds; } \ No newline at end of file diff --git a/Hypercube.Shared/Runtimes/Loop/Event/UpdateFrameEvent.cs b/Hypercube.Shared/Runtimes/Loop/Event/UpdateFrameEvent.cs index 4c948c8..01a76c8 100644 --- a/Hypercube.Shared/Runtimes/Loop/Event/UpdateFrameEvent.cs +++ b/Hypercube.Shared/Runtimes/Loop/Event/UpdateFrameEvent.cs @@ -1,4 +1,4 @@ -using Hypercube.Shared.EventBus.Events; +using Hypercube.Shared.EventBus.Events.Events; namespace Hypercube.Shared.Runtimes.Loop.Event; diff --git a/Hypercube.Shared/Scenes/Events/SceneAdded.cs b/Hypercube.Shared/Scenes/Events/SceneAdded.cs index c77641e..ad8fd9d 100644 --- a/Hypercube.Shared/Scenes/Events/SceneAdded.cs +++ b/Hypercube.Shared/Scenes/Events/SceneAdded.cs @@ -1,3 +1,5 @@ -namespace Hypercube.Shared.Scenes.Events; +using Hypercube.Shared.EventBus.Events.Events; -public readonly record struct SceneAdded(Scene Scene); \ No newline at end of file +namespace Hypercube.Shared.Scenes.Events; + +public readonly record struct SceneAdded(Scene Scene) : IEventArgs; \ No newline at end of file diff --git a/Hypercube.Shared/Scenes/Events/SceneDeleted.cs b/Hypercube.Shared/Scenes/Events/SceneDeleted.cs index 746e073..b9bc551 100644 --- a/Hypercube.Shared/Scenes/Events/SceneDeleted.cs +++ b/Hypercube.Shared/Scenes/Events/SceneDeleted.cs @@ -1,3 +1,5 @@ -namespace Hypercube.Shared.Scenes.Events; +using Hypercube.Shared.EventBus.Events.Events; -public readonly record struct SceneDeleted(Scene Scene); \ No newline at end of file +namespace Hypercube.Shared.Scenes.Events; + +public readonly record struct SceneDeleted(Scene Scene) : IEventArgs; \ No newline at end of file diff --git a/Hypercube.Shared/Utilities/Helpers/PathHelpers.cs b/Hypercube.Shared/Utilities/Helpers/PathHelpers.cs index 3067606..8817bcb 100644 --- a/Hypercube.Shared/Utilities/Helpers/PathHelpers.cs +++ b/Hypercube.Shared/Utilities/Helpers/PathHelpers.cs @@ -1,6 +1,4 @@ -using System.Reflection; - -namespace Hypercube.Shared.Utilities.Helpers; +namespace Hypercube.Shared.Utilities.Helpers; public static class PathHelpers { diff --git a/Hypercube.UnitTests/EventBus/EventBusRaiseTests.cs b/Hypercube.UnitTests/EventBus/EventBusRaiseTests.cs index 3af5229..8f02788 100644 --- a/Hypercube.UnitTests/EventBus/EventBusRaiseTests.cs +++ b/Hypercube.UnitTests/EventBus/EventBusRaiseTests.cs @@ -1,5 +1,6 @@ using Hypercube.Shared.EventBus; using Hypercube.Shared.EventBus.Events; +using Hypercube.Shared.EventBus.Events.Events; namespace Hypercube.UnitTests.EventBus; diff --git a/Hypercube.UnitTests/EventBus/EventBusRefClassTests.cs b/Hypercube.UnitTests/EventBus/EventBusRefClassTests.cs index 871320c..bc67e3f 100644 --- a/Hypercube.UnitTests/EventBus/EventBusRefClassTests.cs +++ b/Hypercube.UnitTests/EventBus/EventBusRefClassTests.cs @@ -1,6 +1,6 @@ using Hypercube.Shared.EventBus; using Hypercube.Shared.EventBus.Events; -using EventArgs = Hypercube.Shared.EventBus.Events.EventArgs; +using EventArgs = Hypercube.Shared.EventBus.Events.Events.EventArgs; namespace Hypercube.UnitTests.EventBus; diff --git a/Hypercube.UnitTests/EventBus/EventBusRefStructTests.cs b/Hypercube.UnitTests/EventBus/EventBusRefStructTests.cs index f54d7cf..44039cb 100644 --- a/Hypercube.UnitTests/EventBus/EventBusRefStructTests.cs +++ b/Hypercube.UnitTests/EventBus/EventBusRefStructTests.cs @@ -1,5 +1,6 @@ using Hypercube.Shared.EventBus; using Hypercube.Shared.EventBus.Events; +using Hypercube.Shared.EventBus.Events.Events; namespace Hypercube.UnitTests.EventBus; diff --git a/Hypercube.UnitTests/EventBus/EventBusUnsubscribeTests.cs b/Hypercube.UnitTests/EventBus/EventBusUnsubscribeTests.cs index 6d63474..2d88a6a 100644 --- a/Hypercube.UnitTests/EventBus/EventBusUnsubscribeTests.cs +++ b/Hypercube.UnitTests/EventBus/EventBusUnsubscribeTests.cs @@ -1,5 +1,6 @@ using Hypercube.Shared.EventBus; using Hypercube.Shared.EventBus.Events; +using Hypercube.Shared.EventBus.Events.Events; namespace Hypercube.UnitTests.EventBus;