Files
CHOMPStation2/code/datums/helper_datums/events.dm
2020-02-12 19:38:43 -05:00

67 lines
1.6 KiB
Plaintext

/*
* WARRANTY VOID IF CODE USED
*/
/datum/events
var/list/events
New()
..()
events = new
proc/addEventType(event_type as text)
if(!(event_type in events) || !islist(events[event_type]))
events[event_type] = list()
return 1
return
// Arguments: event_type as text, proc_holder as datum, proc_name as text
// Returns: New event, null on error.
proc/addEvent(event_type as text, proc_holder, proc_name as text)
if(!event_type || !proc_holder || !proc_name)
return
addEventType(event_type)
var/list/event = events[event_type]
var/datum/event/E = new /datum/event(proc_holder,proc_name)
event += E
return E
// Arguments: event_type as text, any number of additional arguments to pass to event handler
// Returns: null
proc/fireEvent()
//to_world("Events in [args[1]] called")
var/list/event = listgetindex(events,args[1])
if(istype(event))
spawn(-1)
for(var/datum/event/E in event)
if(!E.Fire(arglist(args.Copy(2))))
clearEvent(args[1],E)
return
// Arguments: event_type as text, E as /datum/event
// Returns: 1 if event cleared, null on error
proc/clearEvent(event_type as text, datum/event/E)
if(!event_type || !E)
return
var/list/event = listgetindex(events,event_type)
event -= E
return 1
/datum/event
var/listener
var/proc_name
New(tlistener,tprocname)
listener = tlistener
proc_name = tprocname
return ..()
proc/Fire()
//to_world("Event fired")
if(listener)
call(listener,proc_name)(arglist(args))
return 1
return