/* * Author: Needles * https://steamcommunity.com/profiles/76561198026257137/ */ ::Debug.Print("*** EVENTS"); enum EVENT { TICK, PLAYER_SPAWN, PLAYER_SPAWN_POST, PLAYER_DEATH, PLAYER_DEATH_POST, PLAYER_RESET, // Death, disconnect, force respawn, change class, etc... DAMAGE_PRE, DAMAGE_POST, ENT_TRACKER_SPAWN, ENT_TRACKER_KILL, WAVE_START, WAVE_END, PLAYER_READY, // Doesn't work ALL_PLAYERS_READY, // Doesn't work PLAYER_CONNECT, PLAYER_DISCONNECT, _COUNT, }; ::Events <- {}; ::Events.globalEventMap <- {}; ::Events.PRIORITY_LIST <- [ PRIORITY.FIRST, PRIORITY.STANDARD, PRIORITY.LAST, ]; ::Events.Event <- class { listenerMap = null; constructor() { listenerMap = {}; listenerMap[PRIORITY.FIRST] <- []; listenerMap[PRIORITY.STANDARD] <- []; listenerMap[PRIORITY.LAST] <- []; } function AddListener(callback, priority = PRIORITY.STANDARD) { local i = listenerMap[priority].find(callback); if (i != null) return; listenerMap[priority].append(callback); } function RemoveListener(callback, priority = PRIORITY.STANDARD) { local i = listenerMap[priority].find(callback); if (i == null) return; listenerMap[priority].remove(i); } function ClearListeners() { foreach (priority in ::Events.PRIORITY_LIST) { listenerMap[priority].clear(); } } function FireListeners(params) { foreach (priority in ::Events.PRIORITY_LIST) { foreach(listener in listenerMap[priority]) listener.call(null, params); } } } for (local i = 0; i < EVENT._COUNT; i++) { ::Events.globalEventMap[i] <- ::Events.Event(); } function Events::GetGlobalEvent(id) { return ::Events.globalEventMap[id]; }