library aemSystem
globals
hashtable udg_AEM_Hashtable1 = InitHashtable()
hashtable udg_AEM_Hashtable2 = InitHashtable()
endglobals
function AEM_FunctionRemoveEvent takes integer whichEvent, trigger whichTrigger returns nothing
local integer i = 0
local trigger t
loop
exitwhen not(HaveSavedHandle(udg_AEM_Hashtable1, whichEvent, i))
set t = LoadTriggerHandle(udg_AEM_Hashtable1, whichEvent, i)
if t == whichTrigger then
loop
exitwhen not(HaveSavedHandle(udg_AEM_Hashtable1, whichEvent, i+3))
call SaveTriggerHandle(udg_AEM_Hashtable1, whichEvent, i, LoadTriggerHandle(udg_AEM_Hashtable1, whichEvent, i+3))
call SaveInteger(udg_AEM_Hashtable1, whichEvent, i+1, LoadInteger(udg_AEM_Hashtable1, whichEvent, i+4))
call SaveBoolean(udg_AEM_Hashtable1, whichEvent, i+2, LoadBoolean(udg_AEM_Hashtable1, whichEvent, i+5))
set i = i + 3
endloop
call RemoveSavedHandle(udg_AEM_Hashtable1, whichEvent, i)
call RemoveSavedInteger(udg_AEM_Hashtable1, whichEvent, i+1)
call RemoveSavedBoolean(udg_AEM_Hashtable1, whichEvent, i+2)
return
endif
set i = i + 3
endloop
endfunction
function AEM_CallEvent takes integer whichEvent returns nothing
local trigger array triggers
local integer index = 0
local integer i = 0
loop
exitwhen not(HaveSavedHandle(udg_AEM_Hashtable1, whichEvent, i))
set triggers[index] = LoadTriggerHandle(udg_AEM_Hashtable1, whichEvent, i)
if not(LoadBoolean(udg_AEM_Hashtable1, whichEvent, i+2)) then
call AEM_FunctionRemoveEvent(whichEvent, triggers[index])
set i = i - 3
endif
set index = index + 1
set i = i + 3
endloop
set i = 0
loop
exitwhen i >= index
call TriggerEvaluate(triggers[i])
set i = i + 1
endloop
endfunction
function AEM_FunctionRegisterEvent takes integer whichEvent, trigger whichTrigger, integer priority, boolean priorize, boolean repeating returns nothing
local integer i = 0
local integer i2
local boolean shiftRemaining = false
loop
exitwhen not(HaveSavedHandle(udg_AEM_Hashtable1, whichEvent, i))
set shiftRemaining = true
if priorize then
exitwhen LoadInteger(udg_AEM_Hashtable1, whichEvent, i+1) >= priority
else
exitwhen LoadInteger(udg_AEM_Hashtable1, whichEvent, i+1) > priority
endif
set shiftRemaining = false
set i = i + 3
endloop
if shiftRemaining then
set i2 = i + 3
loop
exitwhen not(HaveSavedHandle(udg_AEM_Hashtable1, whichEvent, i2))
set i2 = i2 + 3
endloop
loop
exitwhen i2 == i
call SaveTriggerHandle(udg_AEM_Hashtable1, whichEvent, i2, LoadTriggerHandle(udg_AEM_Hashtable1, whichEvent, i2-3))
call SaveInteger(udg_AEM_Hashtable1, whichEvent, i2+1, LoadInteger(udg_AEM_Hashtable1, whichEvent, i2-2))
call SaveBoolean(udg_AEM_Hashtable1, whichEvent, i2+2, LoadBoolean(udg_AEM_Hashtable1, whichEvent, i2-1))
set i2 = i2 - 3
endloop
endif
call SaveTriggerHandle(udg_AEM_Hashtable1, whichEvent, i, whichTrigger)
call SaveInteger(udg_AEM_Hashtable1, whichEvent, i+1, priority)
call SaveBoolean(udg_AEM_Hashtable1, whichEvent, i+2, repeating)
endfunction
endlibrary