package net.alcuria.umbracraft.engine.events; import net.alcuria.umbracraft.Game; import com.badlogic.gdx.utils.Array; /** A simple event system. Listeners subscribe by calling * {@link EventPublisher#subscribe(EventListener)} and events are published via * the {@link EventPublisher#publish(Event)} method. Subscribing classes are * responsible for using instanceof to determine if any published events are the * correct type. * @author Andrew Keturi */ public class EventPublisher { Array<EventListener> listeners = new Array<EventListener>(); /** Publishes an event, notifying all listeners. * @param event the {@link Event} to publish. */ public void publish(Event event) { for (EventListener listener : listeners) { listener.onEvent(event); } } /** Removes all listeners. */ public void removeAllListeners() { listeners.clear(); } /** Adds an {@link EventListener} to the subscribed list to receive events * when {@link EventPublisher#publish(Event)} is called. * @param listener the {@link EventListener} */ public void subscribe(EventListener listener) { listeners.add(listener); Game.log("Subscribed. Listener count: " + listeners.size); } /** Unsubscribes a single listener. * @param listener */ public void unsubscribe(EventListener listener) { listeners.removeValue(listener, true); Game.log("Unsubscribed. Listener count: " + listeners.size); } }