package info.u250.c2d.engine.events;
/**<p>Provides a way to register/unregister events and listeners to handle the those events.
* Any accsess can be from {@link info.u250.c2d.engine.Engine#getEventManager() }
* We also have some core events {@link info.u250.c2d.engine.Engine.CoreEvents } to handle system events <br/>
* If you want to register a new Event, it takes two steps:
* <ul><li>Register it use {@link #register(String, EventListener)} , where the logic is in {@link EventListener#onEvent(Event)}</li>
* <li>Fire the event when you want to make the event on use {@link #fire(String, Object)} , the event source can be null if you do not need this on the {@link EventListener}</li></ul></p>
* @author lycying@gmail.com
*/
public interface EventManager{
/**
* Registers a new event specifying the id and the object which generated the event
*/
void fire(String id, Object source);
void fire(String id);
/**
* Registers a new EventListener to listen the specified eventId.
*/
void register(String eventId, EventListener eventListener);
/**
* Unregisters the specified EventListener from listening events with the specified eventId.
*/
void unregister(String eventId, EventListener eventListener);
/**
* Unregisters the specified EventListener from listening all events it was registered for.
*/
void unregister(EventListener listener);
/**
* Process all events from registered using the EventManager interface.
*/
void update(float delta);
}