
flash.events.EventDispatcher Maven / Gradle / Ivy
The newest version!
package flash.events;
import com.badlogic.gdx.utils.Pool;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
/**
* The EventDispatcher class is the base class for all classes that dispatch events.
*
* @author Ka Wing Chin
* @author Thomas Weston
*/
public class EventDispatcher implements IEventDispatcher
{
/**
* All the listeners registered with this EventDispatcher.
*/
private Map> _listeners;
/**
* Used when creating a copy of the listeners list, so that it can be modified while being iterated over.
*/
private Pool> _listenersForTypeCopyPool;
/**
* Aggregates an instance of the EventDispatcher class.
*/
public EventDispatcher()
{
_listeners = new HashMap>();
_listenersForTypeCopyPool = new Pool>()
{
@Override
protected List newObject()
{
return new LinkedList();
}
};
}
@Override
public void addEventListener(String type, IEventListener listener, boolean useCapture, int priority, boolean useWeakReference)
{
List listenersForType = _listeners.get(type);
if(listenersForType == null)
{
listenersForType = new LinkedList();
_listeners.put(type, listenersForType);
}
listenersForType.add(listener);
}
@Override
public void addEventListener(String type, IEventListener listener, boolean useCapture, int priority)
{
addEventListener(type, listener, useCapture, priority, false);
}
@Override
public void addEventListener(String type, IEventListener listener, boolean useCapture)
{
addEventListener(type, listener, useCapture, 0, false);
}
@Override
public void addEventListener(String type, IEventListener listener)
{
addEventListener(type, listener, false, 0, false);
}
@Override
public boolean dispatchEvent(Event event)
{
List listenersForType = _listeners.get(event.type);
if(listenersForType == null || listenersForType.size() <= 0)
return false;
final List listenersForTypeCopy = _listenersForTypeCopyPool.obtain();
listenersForTypeCopy.addAll(listenersForType);
for(IEventListener listener : listenersForTypeCopy)
listener.onEvent(event);
listenersForTypeCopy.clear();
_listenersForTypeCopyPool.free(listenersForTypeCopy);
return true;
}
@Override
public boolean hasEventListener(String type)
{
List listenersForType = _listeners.get(type);
return listenersForType != null && listenersForType.size() > 0;
}
@Override
public void removeEventListener(String type, IEventListener listener, boolean useCapture)
{
List listenersForType = _listeners.get(type);
if(listenersForType == null)
return;
while(listenersForType.remove(listener));
}
@Override
public void removeEventListener(String type, IEventListener listener)
{
removeEventListener(type, listener, false);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy