Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Static Interface to reduce Signals.Get() overhead #18

Open
Benjamin-Justice opened this issue Nov 8, 2020 · 1 comment
Open

Static Interface to reduce Signals.Get() overhead #18

Benjamin-Justice opened this issue Nov 8, 2020 · 1 comment

Comments

@Benjamin-Justice
Copy link

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

@JohannesDeml
Copy link
Member

JohannesDeml commented Nov 9, 2020

Hi @Benjamin-Justice,

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>();

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants