1 package com.badlogic.gdx.tools.flame; 2 3 import com.badlogic.gdx.utils.Array; 4 import com.badlogic.gdx.utils.ObjectMap; 5 6 /** @author Inferno */ 7 public class EventManager 8 { 9 private static EventManager mInstance; 10 public interface Listener 11 { handle( int aEventType, Object aEventData)12 public void handle( int aEventType, Object aEventData); 13 } 14 15 private ObjectMap<Integer, Array<Listener>> mListeners; 16 EventManager()17 private EventManager() 18 { 19 mListeners = new ObjectMap<Integer, Array<Listener>>(); 20 } 21 get()22 public static EventManager get() 23 { 24 if(mInstance == null) mInstance = new EventManager(); 25 return mInstance; 26 } 27 attach(int aEventType, Listener aListener)28 public void attach(int aEventType, Listener aListener) 29 { 30 boolean isNew = false; 31 Array<Listener> listeners = mListeners.get(aEventType); 32 if(listeners == null) 33 { 34 listeners = new Array<EventManager.Listener>(); 35 mListeners.put(aEventType, listeners); 36 isNew = true; 37 } 38 39 if(isNew || !listeners.contains(aListener, true)) 40 { 41 listeners.add(aListener); 42 } 43 44 } 45 detach(int aEventType, Listener aListener)46 public void detach(int aEventType, Listener aListener) 47 { 48 Array<Listener> listeners = mListeners.get(aEventType); 49 if(listeners != null) 50 { 51 listeners.removeValue(aListener, true); 52 if(listeners.size == 0) mListeners.remove(aEventType); 53 } 54 } 55 fire( int aEventType, Object aEventData)56 public void fire( int aEventType, Object aEventData) 57 { 58 Array<Listener> listeners = mListeners.get(aEventType); 59 if(listeners != null) 60 for(Listener listener : listeners) 61 { 62 listener.handle(aEventType, aEventData); 63 } 64 } 65 clear()66 public void clear(){ 67 mListeners.clear(); 68 } 69 70 } 71