mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-23 21:12:24 +01:00
Turns events into vars instead of a list, to greatly simplify qdel() cleanup.
This commit is contained in:
@@ -28,16 +28,13 @@
|
||||
stat(null, "[scheduled_tasks.len] task\s")
|
||||
|
||||
/datum/controller/process/scheduler/proc/schedule(var/datum/scheduled_task/st)
|
||||
if(world.time < st.trigger_time)
|
||||
scheduled_tasks += st
|
||||
st.register(OBSERVER_EVENT_DESTROY, src, /datum/controller/process/scheduler/proc/unschedule)
|
||||
else
|
||||
st.process()
|
||||
scheduled_tasks += st
|
||||
st.destruction.register(src, /datum/controller/process/scheduler/proc/unschedule)
|
||||
|
||||
/datum/controller/process/scheduler/proc/unschedule(var/datum/scheduled_task/st)
|
||||
if(st in scheduled_tasks)
|
||||
scheduled_tasks -= st
|
||||
st.unregister(OBSERVER_EVENT_DESTROY, src)
|
||||
st.destruction.unregister(src)
|
||||
|
||||
/**********
|
||||
* Helpers *
|
||||
@@ -98,7 +95,7 @@
|
||||
|
||||
/datum/scheduled_task/source/New(var/trigger_time, var/datum/source, var/procedure, var/list/arguments, var/proc/task_after_process, var/list/task_after_process_args)
|
||||
src.source = source
|
||||
src.source.register(OBSERVER_EVENT_DESTROY, src, /datum/scheduled_task/source/proc/source_destroyed)
|
||||
src.source.destruction.register(src, /datum/scheduled_task/source/proc/source_destroyed)
|
||||
..(trigger_time, procedure, arguments, task_after_process, task_after_process_args)
|
||||
|
||||
/datum/scheduled_task/source/Destroy()
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
#define OBSERVER_EVENT_DESTROY "OnDestroy"
|
||||
|
||||
/datum
|
||||
var/list/observer_events
|
||||
|
||||
/datum/Destroy()
|
||||
raise_event(OBSERVER_EVENT_DESTROY, list(src))
|
||||
for(var/list/listeners in observer_events)
|
||||
listeners.Cut()
|
||||
|
||||
return ..()
|
||||
|
||||
/datum/proc/register(var/event, var/procOwner, var/proc_call)
|
||||
var/list/listeners = get_listener_list_from_event(event, TRUE)
|
||||
listeners[procOwner] = proc_call
|
||||
|
||||
/datum/proc/unregister(var/event, var/procOwner)
|
||||
var/list/listeners = get_listener_list_from_event(event, FALSE)
|
||||
listeners -= procOwner
|
||||
|
||||
/datum/proc/raise_event(var/event, var/list/args = list())
|
||||
var/list/listeners = get_listener_list_from_event(event, FALSE)
|
||||
if(listeners)
|
||||
for(var/listener in listeners)
|
||||
call(listener, listeners[listener])(arglist(args))
|
||||
|
||||
/datum/proc/get_listener_list_from_event(var/observer_event, var/create_list)
|
||||
if(!observer_events)
|
||||
if(create_list)
|
||||
observer_events = list()
|
||||
else
|
||||
return
|
||||
|
||||
var/list/listeners = observer_events[observer_event]
|
||||
if(!listeners)
|
||||
if(create_list)
|
||||
listeners = list()
|
||||
observer_events[observer_event] = listeners
|
||||
else
|
||||
return
|
||||
return listeners
|
||||
Reference in New Issue
Block a user