mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-26 14:31:59 +01:00
Observer fixups.
Adds a proper proc for raising events. Now only creates the observer lists when an object registers itself. Multitools now unregister themselves properly from buffers on Destroy().
This commit is contained in:
@@ -4,28 +4,38 @@
|
||||
var/list/observer_events
|
||||
|
||||
/datum/Destroy()
|
||||
var/list/destroy_listeners = get_listener_list_from_event(OBSERVER_EVENT_DESTROY)
|
||||
if(destroy_listeners)
|
||||
for(var/destroy_listener in destroy_listeners)
|
||||
call(destroy_listener, destroy_listeners[destroy_listener])(src)
|
||||
|
||||
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)
|
||||
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)
|
||||
var/list/listeners = get_listener_list_from_event(event, FALSE)
|
||||
listeners -= procOwner
|
||||
|
||||
/datum/proc/get_listener_list_from_event(var/observer_event)
|
||||
if(!observer_events) observer_events = list()
|
||||
/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)
|
||||
listeners = list()
|
||||
observer_events[observer_event] = listeners
|
||||
if(create_list)
|
||||
listeners = list()
|
||||
observer_events[observer_event] = listeners
|
||||
else
|
||||
return
|
||||
return listeners
|
||||
|
||||
Reference in New Issue
Block a user