/datum var/tmp/list/active_timers var/tmp/datum/weakref/weakref var/tmp/isprocessing = 0 var/tmp/gcDestroyed //Time when this object was destroyed. /// Components attached to this datum /// Lazy associated list in the structure of `type:component/list of components` var/list/datum_components /// Any datum registered to receive signals from this datum is in this list /// Lazy associated list in the structure of `signal:registree/list of registrees` var/list/comp_lookup /// Lazy associated list in the structure of `signals:proctype` that are run when the datum receives that signal var/list/list/datum/callback/signal_procs /// Is this datum capable of sending signals? /// Set to true when a signal has been registered var/signal_enabled = FALSE // Default implementation of clean-up code. // This should be overridden to remove all references pointing to the object being destroyed. // Return the appropriate QDEL_HINT; in most cases this is QDEL_HINT_QUEUE. /datum/proc/Destroy(force=FALSE) SHOULD_CALL_PARENT(1) weakref = null destroyed_event.raise_event(src) SSnanoui.close_uis(src) SSvueui.close_uis(src) tag = null var/list/timers = active_timers active_timers = null if (timers) for (var/thing in timers) var/datum/timedevent/timer = thing if (timer.spent) continue qdel(timer) // Handle components & signals signal_enabled = FALSE var/list/dc = datum_components if(dc) var/all_components = dc[/datum/component] if(length(all_components)) for(var/I in all_components) var/datum/component/C = I qdel(C, FALSE, TRUE) else var/datum/component/C = all_components qdel(C, FALSE, TRUE) dc.Cut() var/list/lookup = comp_lookup if(lookup) for(var/sig in lookup) var/list/comps = lookup[sig] if(length(comps)) for(var/i in comps) var/datum/component/comp = i comp.UnregisterSignal(src, sig) else var/datum/component/comp = comps comp.UnregisterSignal(src, sig) comp_lookup = lookup = null for(var/target in signal_procs) UnregisterSignal(target, signal_procs[target]) return QDEL_HINT_QUEUE /datum/proc/process() return PROCESS_KILL