Refactored deletion observables to use the COMSIG_QDELETING signal (#20121)

Refactored deletion observables to use the COMSIG_QDELETING signal
instead, removed the observable.
This commit is contained in:
Fluffy
2024-11-04 21:51:18 +00:00
committed by GitHub
parent ce0f722f18
commit 513facdb0d
25 changed files with 120 additions and 56 deletions
-1
View File
@@ -104,7 +104,6 @@
#endif
#endif
GLOB.destroyed_event.raise_event(src)
if (!isturf(src))
cleanup_events(src)
-4
View File
@@ -1,4 +0,0 @@
GLOBAL_DATUM_INIT(destroyed_event, /singleton/observ/destroyed, new)
/singleton/observ/destroyed
name = "Destroyed"
+4 -4
View File
@@ -114,7 +114,7 @@ GLOBAL_DATUM_INIT(sound_player, /singleton/sound_player, new)
listeners = list()
listener_status = list()
GLOB.destroyed_event.register(source, src, /datum/proc/qdel_self)
RegisterSignal(source, COMSIG_QDELETING, TYPE_PROC_REF(/datum, qdel_self))
PrivLocateListeners()
START_PROCESSING(SSprocessing, src)
@@ -154,7 +154,7 @@ GLOBAL_DATUM_INIT(sound_player, /singleton/sound_player, new)
listeners = null
listener_status = null
GLOB.destroyed_event.unregister(source, src, /datum/proc/qdel_self)
UnregisterSignal(source, COMSIG_QDELETING)
source = null
GLOB.sound_player.PrivStopSound(src)
@@ -198,7 +198,7 @@ GLOBAL_DATUM_INIT(sound_player, /singleton/sound_player, new)
listeners += listener
RegisterSignal(listener, COMSIG_MOVABLE_MOVED, PROC_REF(PrivUpdateListenerLoc))
GLOB.destroyed_event.register(listener, src, PROC_REF(PrivRemoveListener))
RegisterSignal(listener, COMSIG_QDELETING, PROC_REF(PrivRemoveListener))
PrivUpdateListenerLoc(listener, update_sound = FALSE)
@@ -206,7 +206,7 @@ GLOBAL_DATUM_INIT(sound_player, /singleton/sound_player, new)
null_sound = null_sound || new(channel = sound.channel)
sound_to(listener, null_sound)
UnregisterSignal(listener, COMSIG_MOVABLE_MOVED)
GLOB.destroyed_event.unregister(listener, src, PROC_REF(PrivRemoveListener))
UnregisterSignal(listener, COMSIG_QDELETING)
listeners -= listener
/datum/sound_token/proc/PrivUpdateListenerLoc(atom/movable/listener, atom/old_loc, dir, forced, list/old_locs, update_sound = TRUE)
@@ -74,11 +74,11 @@
appearance = daddy.appearance
RegisterSignal(daddy, COMSIG_MOVABLE_MOVED, PROC_REF(mirror))
GLOB.dir_set_event.register(daddy, src, PROC_REF(mirror_dir))
GLOB.destroyed_event.register(daddy, src, TYPE_PROC_REF(/datum, qdel_self))
RegisterSignal(daddy, COMSIG_QDELETING, TYPE_PROC_REF(/datum, qdel_self))
/obj/effect/bluegoast/Destroy()
if(daddy)
GLOB.destroyed_event.unregister(daddy, src)
UnregisterSignal(daddy, COMSIG_QDELETING)
GLOB.dir_set_event.unregister(daddy, src)
UnregisterSignal(daddy, COMSIG_MOVABLE_MOVED)
daddy = null
+8 -3
View File
@@ -333,7 +333,7 @@
for(var/obj/machinery/computer/operating/D in SSmachinery.machinery)
if (AreConnectedZLevels(D.z, z))
connected_displays += D
GLOB.destroyed_event.register(D, src, PROC_REF(remove_display))
RegisterSignal(D, COMSIG_QDELETING, PROC_REF(on_connected_display_deletion))
return !!length(connected_displays)
/obj/machinery/body_scanconsole/ui_interact(mob/user, var/datum/tgui/ui)
@@ -345,9 +345,14 @@
ui = new(user, src, "BodyScanner", tgui_name, 850, 500)
ui.open()
/obj/machinery/body_scanconsole/proc/remove_display(obj/machinery/computer/operating/display)
/obj/machinery/body_scanconsole/proc/on_connected_display_deletion(datum/source)
SIGNAL_HANDLER
remove_display(source)
/obj/machinery/body_scanconsole/proc/remove_display(datum/source, obj/machinery/computer/operating/display)
connected_displays -= display
GLOB.destroyed_event.unregister(display, src, PROC_REF(remove_display))
UnregisterSignal(display, COMSIG_QDELETING)
/obj/machinery/body_scanconsole/proc/get_connected()
if(connected)
+2 -3
View File
@@ -127,8 +127,7 @@ pixel_x = 8;
return TRUE
to_chat(user, SPAN_NOTICE("You link \the [attacking_item] to \the [src], it will now ring upon someone using \the [src]."))
rings_pdas += attacking_item
// WONT FIX: This requires callbacks fuck my dick.
GLOB.destroyed_event.register(attacking_item, src, PROC_REF(remove_pda))
UnregisterSignal(attacking_item, COMSIG_QDELETING)
update_icon()
return TRUE
else
@@ -173,7 +172,7 @@ pixel_x = 8;
pinged = FALSE
update_icon()
/obj/machinery/ringer/proc/remove_pda(var/obj/item/modular_computer/P)
/obj/machinery/ringer/proc/remove_pda(obj/item/modular_computer/P)
if (istype(P))
rings_pdas -= P
+3 -3
View File
@@ -23,7 +23,7 @@
/obj/item/device/multitool/hacktool/Destroy()
for(var/T in known_targets)
var/atom/target = T
GLOB.destroyed_event.unregister(target, src)
UnregisterSignal(target, COMSIG_QDELETING)
known_targets.Cut()
qdel(hack_state)
hack_state = null
@@ -88,7 +88,7 @@
return FALSE
known_targets.Insert(1, target) // Insert the newly hacked target first,
GLOB.destroyed_event.register(target, src, PROC_REF(on_target_destroy))
RegisterSignal(target, COMSIG_QDELETING, PROC_REF(on_target_destroy))
return TRUE
/obj/item/device/multitool/hacktool/proc/sanity_check()
@@ -98,7 +98,7 @@
if(known_targets.len > max_known_targets)
for(var/i = (max_known_targets + 1) to known_targets.len)
var/atom/A = known_targets[i]
GLOB.destroyed_event.unregister(A, src)
UnregisterSignal(A, COMSIG_QDELETING)
known_targets.Cut(max_known_targets + 1)
/obj/item/device/multitool/hacktool/proc/on_target_destroy(var/target)
+7 -3
View File
@@ -65,14 +65,18 @@
unregister_buffer(buffer_object)
buffer_object = buffer
if(buffer_object)
GLOB.destroyed_event.register(buffer_object, src, PROC_REF(unregister_buffer))
RegisterSignal(buffer_object, COMSIG_QDELETING, PROC_REF(on_buffer_object_deletion))
update_icon()
/obj/item/device/multitool/proc/unregister_buffer(var/atom/buffer_to_unregister)
/obj/item/device/multitool/proc/on_buffer_object_deletion(datum/source)
SIGNAL_HANDLER
unregister_buffer(source)
/obj/item/device/multitool/proc/unregister_buffer(atom/buffer_to_unregister)
// Only remove the buffered object, don't reset the name
// This means one cannot know if the buffer has been destroyed until one attempts to use it.
if(buffer_to_unregister == buffer_object && buffer_object)
GLOB.destroyed_event.unregister(buffer_object, src)
UnregisterSignal(buffer_object, COMSIG_QDELETING)
buffer_object = null
update_icon()
@@ -83,13 +83,17 @@
unset_registered_user()
registered_user = user
user.set_id_info(src)
GLOB.destroyed_event.register(user, src, PROC_REF(unset_registered_user))
RegisterSignal(user, COMSIG_QDELETING, PROC_REF(on_user_deletion))
return TRUE
/obj/item/card/id/syndicate/proc/on_user_deletion(datum/source)
SIGNAL_HANDLER
unset_registered_user(source)
/obj/item/card/id/syndicate/proc/unset_registered_user(var/mob/user)
if(!registered_user || (user && user != registered_user))
return
GLOB.destroyed_event.unregister(registered_user, src)
UnregisterSignal(registered_user, COMSIG_QDELETING)
registered_user = null
/obj/item/card/id/syndicate/CanUseTopic(mob/user)
@@ -245,9 +245,9 @@ Frequency:
var/old_pad = linked_pad
linked_pad = teleport_options[teleport_choice]
if(linked_pad)
GLOB.destroyed_event.register(linked_pad, src, PROC_REF(pad_destroyed))
RegisterSignal(linked_pad, COMSIG_QDELETING, PROC_REF(pad_destroyed))
if(old_pad && linked_pad != old_pad)
GLOB.destroyed_event.unregister(old_pad, src)
UnregisterSignal(old_pad, COMSIG_QDELETING)
return
return ..()
+2 -2
View File
@@ -69,13 +69,13 @@
return
ClearValue()
value_to_set = new_value
GLOB.destroyed_event.register(value_to_set, src, /datum/build_mode/edit/proc/ClearValue)
RegisterSignal(value_to_set, COMSIG_QDELETING, /datum/build_mode/edit/proc/ClearValue)
/datum/build_mode/edit/proc/ClearValue(var/feedback)
if(!istype(value_to_set, /datum))
return
GLOB.destroyed_event.unregister(value_to_set, src, /datum/build_mode/edit/proc/ClearValue)
UnregisterSignal(value_to_set, COMSIG_QDELETING)
value_to_set = initial(value_to_set)
if(feedback)
Warn("The selected reference value was deleted. Default value restored.")
+2 -2
View File
@@ -33,14 +33,14 @@
ClearDestination()
destination = A
GLOB.destroyed_event.register(destination, src, /datum/build_mode/move_into/proc/ClearDestination)
RegisterSignal(destination, COMSIG_QDELETING, /datum/build_mode/move_into/proc/ClearDestination)
to_chat(user, SPAN_NOTICE("Will now move targets into \the [destination]."))
/datum/build_mode/move_into/proc/ClearDestination(var/feedback)
if(!destination)
return
GLOB.destroyed_event.unregister(destination, src, /datum/build_mode/move_into/proc/ClearDestination)
UnregisterSignal(destination, COMSIG_QDELETING)
destination = null
if(feedback)
Warn("The selected destination was deleted.")
@@ -92,14 +92,14 @@
/obj/item/mecha_equipment/mounted_system/proc/forget_holding()
if(holding) //It'd be strange for this to be called with this var unset
GLOB.destroyed_event.unregister(holding, src, PROC_REF(forget_holding))
UnregisterSignal(holding, COMSIG_QDELETING)
holding = null
/obj/item/mecha_equipment/mounted_system/Initialize()
. = ..()
if(holding_type)
holding = new holding_type(src)
GLOB.destroyed_event.register(holding, src, PROC_REF(forget_holding))
RegisterSignal(holding, COMSIG_QDELETING, PROC_REF(forget_holding))
if(holding)
if(!icon_state)
icon = holding.icon
@@ -265,7 +265,7 @@
/obj/item/mecha_equipment/catapult/proc/beamdestroyed()
if(beam)
GLOB.destroyed_event.unregister(beam, src, .proc/beamdestroyed)
UnregisterSignal(beam, COMSIG_QDELETING)
beam = null
if(locked)
if(owner)
@@ -316,7 +316,7 @@
return
locked = AM
beam = owner.Beam(BeamTarget = target, icon_state = "r_beam", maxdistance = max_dist, beam_type = /obj/effect/ebeam/warp)
GLOB.destroyed_event.register(beam, src, .proc/beamdestroyed)
RegisterSignal(beam, COMSIG_QDELETING, PROC_REF(beamdestroyed))
animate(target,pixel_y= initial(target.pixel_y) - 2,time=1 SECOND, easing = SINE_EASING, flags = ANIMATION_PARALLEL, loop = -1)
animate(pixel_y= initial(target.pixel_y) + 2,time=1 SECOND)
@@ -100,7 +100,7 @@
if(target == selected_hardpoint)
clear_selected_hardpoint()
GLOB.destroyed_event.unregister(module_to_forget, src, PROC_REF(forget_module))
UnregisterSignal(module_to_forget, COMSIG_QDELETING)
var/atom/movable/screen/mecha/hardpoint/H = hardpoint_hud_elements[target]
H.holding = null
@@ -144,7 +144,7 @@
if(!found)
return FALSE
ME.installed(src)
GLOB.destroyed_event.register(system, src, PROC_REF(forget_module))
RegisterSignal(system, COMSIG_QDELETING, PROC_REF(forget_module))
system.forceMove(src)
@@ -198,7 +198,7 @@
system.forceMove(get_turf(src))
system.screen_loc = null
system.layer = initial(system.layer)
GLOB.destroyed_event.unregister(system, src, PROC_REF(forget_module))
UnregisterSignal(system, COMSIG_QDELETING)
var/atom/movable/screen/mecha/hardpoint/H = hardpoint_hud_elements[system_hardpoint]
H.holding = null
@@ -170,14 +170,14 @@
// These procs do not relocate the grenade, that's the callers responsibility
/obj/item/integrated_circuit/manipulation/grenade/proc/attach_grenade(var/obj/item/grenade/G)
attached_grenade = G
GLOB.destroyed_event.register(attached_grenade, src, PROC_REF(detach_grenade))
RegisterSignal(attached_grenade, COMSIG_QDELETING, PROC_REF(detach_grenade))
size += G.w_class
desc += " \An [attached_grenade] is attached to it!"
/obj/item/integrated_circuit/manipulation/grenade/proc/detach_grenade()
if(!attached_grenade)
return
GLOB.destroyed_event.unregister(attached_grenade, src)
UnregisterSignal(attached_grenade, COMSIG_QDELETING)
attached_grenade = null
size = initial(size)
desc = initial(desc)
@@ -119,7 +119,7 @@
return FALSE
sources += source
RegisterSignal(source, COMSIG_MOVABLE_MOVED, PROC_REF(source_moved))
GLOB.destroyed_event.register(source, src, PROC_REF(remove_source))
RegisterSignal(source, COMSIG_QDELETING, PROC_REF(remove_source))
for_all_chunks_in_range(source, TYPE_PROC_REF(/datum/chunk, add_source), list(source))
if(update_visibility)
update_visibility(source, opacity_check)
@@ -129,7 +129,7 @@
if(!sources.Remove(source))
return FALSE
UnregisterSignal(source, COMSIG_MOVABLE_MOVED)
GLOB.destroyed_event.unregister(source, src)
UnregisterSignal(source, COMSIG_QDELETING)
for_all_chunks_in_range(source, /datum/chunk/proc/remove_source, list(source))
if(update_visibility)
update_visibility(source, opacity_check)
@@ -163,14 +163,14 @@
if(tracker in trackers)
trackers -= tracker
GLOB.destroyed_event.unregister(tracker, src, PROC_REF(remove_tracker))
UnregisterSignal(tracker, COMSIG_QDELETING)
to_chat(user, SPAN_NOTICE("You unlink the tracker in \the [P]'s buffer from \the [src]."))
return
trackers += tracker
GLOB.destroyed_event.register(tracker, src, PROC_REF(remove_tracker))
RegisterSignal(tracker, COMSIG_QDELETING, PROC_REF(remove_tracker))
to_chat(user, SPAN_NOTICE("You link the tracker in \the [P]'s buffer to \the [src]."))
/obj/machinery/computer/ship/sensors/proc/remove_tracker(var/obj/item/ship_tracker/tracker)
/obj/machinery/computer/ship/sensors/proc/remove_tracker(obj/item/ship_tracker/tracker)
trackers -= tracker
/obj/machinery/computer/ship/sensors/proc/datalink_process()
+3 -3
View File
@@ -260,7 +260,7 @@
var/mob/S = new mob_type(T)
animals += S
GLOB.death_event.register(S, src, PROC_REF(remove_animal))
GLOB.destroyed_event.register(S, src, PROC_REF(remove_animal))
RegisterSignal(S, COMSIG_QDELETING, PROC_REF(remove_animal))
adapt_animal(S)
if(animals.len >= max_animal_count)
repopulating = 0
@@ -279,10 +279,10 @@
daddy.group_multiplier = Z.air.group_multiplier
Z.air.equalize(daddy)
/obj/effect/overmap/visitable/sector/exoplanet/proc/remove_animal(var/mob/M)
/obj/effect/overmap/visitable/sector/exoplanet/proc/remove_animal(mob/M)
animals -= M
GLOB.death_event.unregister(M, src)
GLOB.destroyed_event.unregister(M, src)
UnregisterSignal(M, COMSIG_QDELETING)
repopulate_types |= M.type
/obj/effect/overmap/visitable/sector/exoplanet/proc/generate_map()
+2 -2
View File
@@ -133,11 +133,11 @@
core_landmark = master
name = _name
landmark_tag = master.shuttle_name + _name
GLOB.destroyed_event.register(master, src, GLOBAL_PROC_REF(qdel))
RegisterSignal(master, COMSIG_QDELETING, TYPE_PROC_REF(/datum, qdel_self))
. = ..()
/obj/effect/shuttle_landmark/visiting_shuttle/Destroy()
GLOB.destroyed_event.unregister(core_landmark, src)
UnregisterSignal(core_landmark, COMSIG_QDELETING)
LAZYREMOVE(core_landmark.visitors, src)
core_landmark = null
. = ..()
+1 -1
View File
@@ -99,7 +99,7 @@
index_name = "Index ([length(indices) + 1])"
E.name = index_name
LAZYSET(indices, E.name, E)
GLOB.destroyed_event.register(E, src, PROC_REF(remove_index))
RegisterSignal(E, COMSIG_QDELETING, PROC_REF(remove_index))
return E
/obj/item/journal/proc/remove_index(var/obj/item/folder/embedded/E)
@@ -215,7 +215,7 @@
lock_time = world.time + 35
RegisterSignal(owner, COMSIG_MOVABLE_MOVED, PROC_REF(update_aiming))
RegisterSignal(aiming_at, COMSIG_MOVABLE_MOVED, PROC_REF(target_moved))
GLOB.destroyed_event.register(aiming_at, src, PROC_REF(cancel_aiming))
RegisterSignal(aiming_at, COMSIG_QDELETING, PROC_REF(cancel_aiming))
/obj/aiming_overlay/proc/aim_cooldown(seconds)
aimcooldown = world.time + seconds SECONDS
@@ -261,7 +261,7 @@
UnregisterSignal(owner, COMSIG_MOVABLE_MOVED)
if(aiming_at)
UnregisterSignal(aiming_at, COMSIG_MOVABLE_MOVED)
GLOB.destroyed_event.unregister(aiming_at, src)
UnregisterSignal(aiming_at, COMSIG_QDELETING)
LAZYREMOVE(aiming_at.aimed_at_by, src)
aiming_at = null
@@ -33,7 +33,7 @@
listeners = list()
listener_status = list()
GLOB.destroyed_event.register(source, src, /datum/proc/qdel_self)
RegisterSignal(source, COMSIG_QDELETING, TYPE_PROC_REF(/datum, qdel_self))
player.subscribe(src)
@@ -52,6 +52,6 @@
/datum/sound_token/instrument/Destroy()
. = ..()
GLOB.destroyed_event.unregister(source, src, /datum/proc/qdel_self)
UnregisterSignal(source, COMSIG_QDELETING)
player.unsubscribe(src)
player = null