From 326bdfd76bb9f332b82a2effbfa0a6ed25ef3835 Mon Sep 17 00:00:00 2001 From: Cyberboss Date: Fri, 13 Jan 2017 17:52:07 -0500 Subject: [PATCH] Finally fixed the proximity runtime (#22950) * Finally fixed the proximity runtime Also fixed some misue of Move(d)s and destroys * Fixed remove_from_proximity_list * Fine, we'll do it your way * Should sense/update loc here as well * Assume deez nuts --- code/__HELPERS/unsorted.dm | 7 ++----- code/game/machinery/flasher.dm | 14 ++++++++------ code/game/objects/structures/aliens.dm | 10 ++++++---- code/modules/assembly/proximity.dm | 15 +++++++++------ 4 files changed, 25 insertions(+), 21 deletions(-) diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index c4254d7a028..a763d3fea8b 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -1156,16 +1156,14 @@ B --><-- A C.proximity_checkers[A] = TRUE return L -/proc/remove_from_proximity_list(atom/A, range) - var/turf/T = get_turf(A) +/proc/remove_from_proximity_list(atom/A, range, oldloc = null) + var/turf/T = get_turf(oldloc ? oldloc : A) var/list/L = block(locate(T.x - range, T.y - range, T.z), locate(T.x + range, T.y + range, T.z)) for(var/B in L) var/turf/C = B if (!C.proximity_checkers) continue C.proximity_checkers.Remove(A) - UNSETEMPTY(C.proximity_checkers) - /proc/shift_proximity(atom/checker, atom/A, range, atom/B, newrange) var/turf/T = get_turf(A) @@ -1181,7 +1179,6 @@ B --><-- A if (!D.proximity_checkers) continue D.proximity_checkers.Remove(checker) - UNSETEMPTY(D.proximity_checkers) for(var/E in O) var/turf/F = E LAZYINITLIST(F.proximity_checkers) diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm index 3a8b8c2fd36..d09a28ab64f 100644 --- a/code/game/machinery/flasher.dm +++ b/code/game/machinery/flasher.dm @@ -35,15 +35,10 @@ bulb = new /obj/item/device/assembly/flash/handheld(src) /obj/machinery/flasher/Destroy() - remove_from_proximity_list(src, range) if(bulb) qdel(bulb) bulb = null - ..() - -/obj/machinery/flasher/Move() - remove_from_proximity_list(src, range) - ..() + return ..() /obj/machinery/flasher/power_change() if (powered() && anchored && bulb) @@ -191,6 +186,13 @@ else return ..() +/obj/machinery/flasher/portable/Destroy() + remove_from_proximity_list(src, range) + return ..() + +/obj/machinery/flasher/protable/Moved(oldloc) + remove_from_proximity_list(oldloc, range) + return ..() /obj/item/wallframe/flasher name = "mounted flash frame" diff --git a/code/game/objects/structures/aliens.dm b/code/game/objects/structures/aliens.dm index e71fac750fc..2a5b1040936 100644 --- a/code/game/objects/structures/aliens.dm +++ b/code/game/objects/structures/aliens.dm @@ -226,7 +226,7 @@ /obj/structure/alien/egg/Destroy() remove_from_proximity_list(src, 1) - ..() + return ..() /obj/structure/alien/egg/attack_paw(mob/living/user) return attack_hand(user) @@ -281,9 +281,11 @@ child.Attach(M) break -/obj/structure/alien/egg/Move() - remove_from_proximity_list(src, 1) - ..() +/obj/structure/alien/egg/Moved(oldloc) + remove_from_proximity_list(oldloc, 1) + if(status == GROWN) + add_to_proximity_list(src, 1) + return ..() /obj/structure/alien/egg/deconstruct() if(!(flags & NODECONSTRUCT)) diff --git a/code/modules/assembly/proximity.dm b/code/modules/assembly/proximity.dm index 421f25929ee..dd48e73391e 100644 --- a/code/modules/assembly/proximity.dm +++ b/code/modules/assembly/proximity.dm @@ -73,7 +73,7 @@ timing = 0 toggle_scan(1) time = initial(time) - handle_move(get_turf(loc)) + handle_move(loc) /obj/item/device/assembly/prox_sensor/dropped() ..() @@ -81,7 +81,8 @@ addtimer(CALLBACK(src, .proc/sense), 0) /obj/item/device/assembly/prox_sensor/Destroy() - remove_from_proximity_list(src, sensitivity) + if(scanning) + remove_from_proximity_list(src, sensitivity, oldloc) return ..() /obj/item/device/assembly/prox_sensor/toggle_scan(scan) @@ -98,7 +99,9 @@ /obj/item/device/assembly/prox_sensor/proc/sensitivity_change(value) var/sense = min(max(sensitivity + value, 0), 5) if(scanning) - shift_proximity(src, oldloc, sensitivity, loc, sense) + if(shift_proximity(src, oldloc, sensitivity, loc, sense)) + sense() + oldloc = loc sensitivity = sense /obj/item/device/assembly/prox_sensor/update_icon() @@ -116,13 +119,13 @@ /obj/item/device/assembly/prox_sensor/proc/handle_move(atom/newloc) if(scanning) - if(shift_proximity(src, oldloc, sensitivity, newloc, sensitivity)) + if(shift_proximity(src, oldloc, sensitivity, newloc, sensitivity) || newloc != oldloc) sense() oldloc = newloc -/obj/item/device/assembly/prox_sensor/Move(newloc) +/obj/item/device/assembly/prox_sensor/Moved() ..() - handle_move(newloc) + handle_move(loc) /obj/item/device/assembly/prox_sensor/interact(mob/user)//TODO: Change this to the wires thingy