package com.rs2.event; import java.util.ArrayList; import java.util.List; /** * Handles all of our cycle based events * * @author Stuart * @author Null++ */ public class CycleEventHandler { /** * The instance of this class */ private static CycleEventHandler instance; /** * Returns the instance of this class * * @return */ public static CycleEventHandler getSingleton() { if (instance == null) { instance = new CycleEventHandler(); } return instance; } /** * Holds all of our events currently being ran */ private final List events; /** * Creates a new instance of this class */ public CycleEventHandler() { events = new ArrayList(); } /** * Add an event to the list * * @param id * @param owner * @param event * @param cycles */ public CycleEventContainer addEvent(int id, Object owner, CycleEvent event, int cycles) { CycleEventContainer container = new CycleEventContainer(id, owner, event, cycles); events.add(container); return container; } /** * Add an event to the list * * @param owner * @param event * @param cycles */ public CycleEventContainer addEvent(Object owner, CycleEvent event, int cycles) { CycleEventContainer container = new CycleEventContainer(-1, owner, event, cycles); events.add(container); return container; } /** * Execute and remove events */ public void process() { List eventsCopy = new ArrayList( events); List remove = new ArrayList(); for (CycleEventContainer c : eventsCopy) { if (c != null) { if (c.needsExecution() && c.isRunning()) { c.execute(); if (!c.isRunning()) { remove.add(c); } } } } for (CycleEventContainer c : remove) { events.remove(c); } } /** * Returns the amount of events currently running * * @return amount */ public int getEventsCount() { return events.size(); } /** * Stops all events for a specific owner and id * * @param owner */ public void stopEvents(Object owner) { for (CycleEventContainer c : events) { if (c.getOwner() == owner) { c.stop(); } } } /** * Stops all events for a specific owner and id * * @param owner * @param id */ public void stopEvents(Object owner, int id) { for (CycleEventContainer c : events) { if (c.getOwner() == owner && id == c.getID()) { c.stop(); } } } /** * Stops all events for a specific owner and id * * @param id */ public void stopEvents(int id) { for (CycleEventContainer c : events) { if (id == c.getID()) { c.stop(); } } } }