Static Interface to reduce Signals.Get() overhead
Benjamin-Justice opened this issue · comments
Hi,
I propose a static interface to reduce the Signals.Get() overhead, when I just want to add quick Listeners to events.
e.g.
Signals.AddListener<OnEnterSafeZoneSignal>(OnEnterSafeZone);
Signals.Dispatch<OnEnterSafeZoneSignal>();
When dispatching signals with parameters, the interface would be a little cluttered (but typesafe and consistent). Not sure if it's needed though.
I would also like to look into this myself
even though it might clutter the Signals class a bit, I think your proposal adds value in usability and helps readability when not wanting to cache the signal (which has a performance benefit, when using the signal extensively.
This would be the changes syntax with all its use cases
// Add signals
// From
Signals.Get<BasicExampleSignal>().AddListener(DefaultListener);
Signals.Get<BasicExampleSignal>().AddListener(FirstListener, -100);
// To
Signals.AddListener<BasicExampleSignal>(DefaultListener);
Signals.AddListener<BasicExampleSignal>(FirstListener, -100);
// Remove signals
// From
Signals.Get<BasicExampleSignal>().RemoveListener(DefaultListener);
// To
Signals.RemoveListener<BasicExampleSignal>(DefaultListener);
// Dispatching with support to up to three parameters
// From
Signals.Get<NoArgumentSignalTest>().Dispatch();
Signals.Get<OneArgumentSignalTest>().Dispatch(t);
Signals.Get<TwoArgumentSignalTest>().Dispatch(t, u);
Signals.Get<ThreeArgumentSignalTest>().Dispatch(t, u, v);
// To
Signals.Dispatch<NoArgumentSignalTest>();
Signals.Dispatch<OneArgumentSignalTest>(t);
Signals.Dispatch<TwoArgumentSignalTest>(t, u);
Signals.Dispatch<ThreeArgumentSignalTest>(t, u, v);
// Additional functionality
// From
Signals.Get<BasicExampleSignal>().Pause();
// To
Signals.Pause<BasicExampleSignal>();
// From
Signals.Get<BasicExampleSignal>().Continue();
// To
Signals.Continue<BasicExampleSignal>();
// From
Signals.Get<BasicExampleSignal>().Consume();
// To
Signals.Consume<BasicExampleSignal>();