diff --git a/code/game/objects/items/pinpointer.dm b/code/game/objects/items/pinpointer.dm index 81bae3d54b..e47b2bb0d8 100644 --- a/code/game/objects/items/pinpointer.dm +++ b/code/game/objects/items/pinpointer.dm @@ -19,6 +19,8 @@ var/minimum_range = 0 //at what range the pinpointer declares you to be at your destination var/ignore_suit_sensor_level = FALSE // Do we find people even if their suit sensors are turned off var/alert = FALSE // TRUE to display things more seriously + /// resets target on toggle + var/resets_target = TRUE /obj/item/pinpointer/Initialize() . = ..() @@ -27,7 +29,7 @@ /obj/item/pinpointer/Destroy() STOP_PROCESSING(SSfastprocess, src) GLOB.pinpointer_list -= src - target = null + unset_target() return ..() /obj/item/pinpointer/DoRevenantThrowEffects(atom/target) @@ -41,7 +43,8 @@ if(active) START_PROCESSING(SSfastprocess, src) else - target = null + if(resets_target) + unset_target() STOP_PROCESSING(SSfastprocess, src) update_icon() @@ -54,6 +57,18 @@ /obj/item/pinpointer/proc/scan_for_target() return +/obj/item/pinpointer/proc/set_target(atom/movable/newtarget) + if(target) + unset_target() + target = newtarget + RegisterSignal(target, COMSIG_PARENT_QDELETING, .proc/unset_target) + +/obj/item/pinpointer/proc/unset_target() + if(!target) + return + UnregisterSignal(target, COMSIG_PARENT_QDELETING) + target = null + /obj/item/pinpointer/update_overlays() . = ..() if(!active) @@ -105,7 +120,8 @@ active = FALSE user.visible_message("[user] deactivates [user.p_their()] pinpointer.", "You deactivate your pinpointer.") playsound(src, 'sound/items/screwdriver2.ogg', 50, 1) - target = null //Restarting the pinpointer forces a target reset + if(resets_target) + unset_target() //Restarting the pinpointer forces a target reset STOP_PROCESSING(SSfastprocess, src) update_icon() return @@ -141,7 +157,7 @@ if(!A || QDELETED(src) || !user || !user.is_holding(src) || user.incapacitated()) return - target = names[A] + set_target(names[A]) active = TRUE user.visible_message("[user] activates [user.p_their()] pinpointer.", "You activate your pinpointer.") playsound(src, 'sound/items/screwdriver2.ogg', 50, 1) @@ -153,7 +169,7 @@ if(ishuman(target)) var/mob/living/carbon/human/H = target if(!trackable(H)) - target = null + unset_target() if(!target) //target can be set to null from above code, or elsewhere active = FALSE @@ -167,7 +183,7 @@ . = ..() /obj/item/pinpointer/pair/scan_for_target() - target = other_pair + set_target(other_pair) /obj/item/pinpointer/pair/examine(mob/user) . = ..() @@ -199,7 +215,7 @@ shuttleport = SSshuttle.getShuttle("huntership") /obj/item/pinpointer/shuttle/scan_for_target() - target = shuttleport + set_target(shuttleport) /obj/item/pinpointer/shuttle/Destroy() shuttleport = null @@ -211,4 +227,8 @@ icon_state = "pinpointer_ian" /obj/item/pinpointer/ian/scan_for_target() - target = locate(/mob/living/simple_animal/pet/dog/corgi/Ian) in GLOB.mob_living_list + set_target(locate(/mob/living/simple_animal/pet/dog/corgi/Ian) in GLOB.mob_living_list) + +/obj/item/pinpointer/custom + resets_target = FALSE +