/datum var/tmp/list/active_timers var/tmp/datum/weakref/weakref var/tmp/isprocessing = 0 var/tmp/gcDestroyed //Time when this object was destroyed. /// Status traits attached to this datum. associative list of the form: list(trait name (string) = list(source1, source2, source3,...)) var/list/status_traits /// 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 /// A cached version of our \ref /// The brunt of \ref costs are in creating entries in the string tree (a tree of immutable strings) /// This avoids doing that more then once per datum by ensuring ref strings always have a reference to them after they're first pulled var/cached_ref // 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) var/ui_key = SOFTREF(src) if(LAZYISIN(SSnanoui.open_uis, ui_key)) SSnanoui.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() set waitfor = FALSE return PROCESS_KILL