package com.badlogic.gdx.tools.flame;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.ObjectMap;
/** @author Inferno */
public class EventManager
{
private static EventManager mInstance;
public interface Listener
{
public void handle( int aEventType, Object aEventData);
}
private ObjectMap<Integer, Array<Listener>> mListeners;
private EventManager()
{
mListeners = new ObjectMap<Integer, Array<Listener>>();
}
public static EventManager get()
{
if(mInstance == null) mInstance = new EventManager();
return mInstance;
}
public void attach(int aEventType, Listener aListener)
{
boolean isNew = false;
Array<Listener> listeners = mListeners.get(aEventType);
if(listeners == null)
{
listeners = new Array<EventManager.Listener>();
mListeners.put(aEventType, listeners);
isNew = true;
}
if(isNew || !listeners.contains(aListener, true))
{
listeners.add(aListener);
}
}
public void detach(int aEventType, Listener aListener)
{
Array<Listener> listeners = mListeners.get(aEventType);
if(listeners != null)
{
listeners.removeValue(aListener, true);
if(listeners.size == 0) mListeners.remove(aEventType);
}
}
public void fire( int aEventType, Object aEventData)
{
Array<Listener> listeners = mListeners.get(aEventType);
if(listeners != null)
for(Listener listener : listeners)
{
listener.handle(aEventType, aEventData);
}
}
public void clear(){
mListeners.clear();
}
}