From 636ab7d156d7cef105a451df845e05e90e7fc6ed Mon Sep 17 00:00:00 2001 From: vuonojenmustaturska Date: Mon, 23 Oct 2017 21:31:17 +0300 Subject: [PATCH 1/2] Removes mob references from camera motion tracking --- code/game/machinery/camera/motion.dm | 75 ++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) diff --git a/code/game/machinery/camera/motion.dm b/code/game/machinery/camera/motion.dm index e7887d0fb4..7ce2408019 100644 --- a/code/game/machinery/camera/motion.dm +++ b/code/game/machinery/camera/motion.dm @@ -1,3 +1,4 @@ +<<<<<<< HEAD /obj/machinery/camera var/list/localMotionTargets = list() @@ -70,3 +71,77 @@ if (!area_motion) if(isliving(AM)) newTarget(AM) +======= +/obj/machinery/camera + + var/list/localMotionTargets = list() + var/detectTime = 0 + var/area/ai_monitored/area_motion = null + var/alarm_delay = 30 // Don't forget, there's another 3 seconds in queueAlarm() + +/obj/machinery/camera/process() + // motion camera event loop + if(!isMotion()) + . = PROCESS_KILL + return + if (detectTime > 0) + var/elapsed = world.time - detectTime + if (elapsed > alarm_delay) + triggerAlarm() + else if (detectTime == -1) + for (var/targetref in getTargetList()) + var/mob/target = locate(targetref) in GLOB.mob_list + if (target.stat == DEAD || QDELETED(target) || (!area_motion && !in_range(src, target))) + //If not part of a monitored area and the camera is not in range or the target is dead + lostTarget(target) + +/obj/machinery/camera/proc/getTargetList() + if(area_motion) + return area_motion.motionTargets + return localMotionTargets + +/obj/machinery/camera/proc/newTarget(mob/target) + if(isAI(target)) + return 0 + if (detectTime == 0) + detectTime = world.time // start the clock + var/list/targets = getTargetList() + targets |= "\ref[target]" + return 1 + +/obj/machinery/camera/Destroy() + var/area/ai_monitored/A = get_area(src) + if(istype(A)) + A.motioncameras -= src + return ..() + +/obj/machinery/camera/proc/lostTarget(mob/target) + var/list/targets = getTargetList() + targets -= "\ref[target]" + if (targets.len == 0) + cancelAlarm() + +/obj/machinery/camera/proc/cancelAlarm() + if (detectTime == -1) + for (var/mob/living/silicon/aiPlayer in GLOB.player_list) + if (status) + aiPlayer.cancelAlarm("Motion", get_area(src), src) + detectTime = 0 + return 1 + +/obj/machinery/camera/proc/triggerAlarm() + if (!detectTime) + return 0 + for (var/mob/living/silicon/aiPlayer in GLOB.player_list) + if (status) + aiPlayer.triggerAlarm("Motion", get_area(src), list(src), src) + detectTime = -1 + return 1 + +/obj/machinery/camera/HasProximity(atom/movable/AM as mob|obj) + // Motion cameras outside of an "ai monitored" area will use this to detect stuff. + if (!area_motion) + if(isliving(AM)) + newTarget(AM) + +>>>>>>> 1dc0519... Removes mob references from camera motion tracking (#32002) From ad3bafcb42bebc3555429a3a4e39db7cb511e640 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Mon, 23 Oct 2017 14:16:15 -0500 Subject: [PATCH 2/2] Update motion.dm --- code/game/machinery/camera/motion.dm | 76 ---------------------------- 1 file changed, 76 deletions(-) diff --git a/code/game/machinery/camera/motion.dm b/code/game/machinery/camera/motion.dm index 7ce2408019..f26b60202e 100644 --- a/code/game/machinery/camera/motion.dm +++ b/code/game/machinery/camera/motion.dm @@ -1,77 +1,3 @@ -<<<<<<< HEAD -/obj/machinery/camera - - var/list/localMotionTargets = list() - var/detectTime = 0 - var/area/ai_monitored/area_motion = null - var/alarm_delay = 30 // Don't forget, there's another 3 seconds in queueAlarm() - -/obj/machinery/camera/process() - // motion camera event loop - if(!isMotion()) - . = PROCESS_KILL - return - if (detectTime > 0) - var/elapsed = world.time - detectTime - if (elapsed > alarm_delay) - triggerAlarm() - else if (detectTime == -1) - for (var/mob/target in getTargetList()) - if (target.stat == DEAD || (!area_motion && !in_range(src, target))) - //If not part of a monitored area and the camera is not in range or the target is dead - lostTarget(target) - -/obj/machinery/camera/proc/getTargetList() - if(area_motion) - return area_motion.motionTargets - return localMotionTargets - -/obj/machinery/camera/proc/newTarget(mob/target) - if(isAI(target)) - return 0 - if (detectTime == 0) - detectTime = world.time // start the clock - var/list/targets = getTargetList() - if (!(target in targets)) - targets += target - return 1 - -/obj/machinery/camera/Destroy() - var/area/ai_monitored/A = get_area(src) - if(istype(A)) - A.motioncameras -= src - return ..() - -/obj/machinery/camera/proc/lostTarget(mob/target) - var/list/targets = getTargetList() - if (target in targets) - targets -= target - if (targets.len == 0) - cancelAlarm() - -/obj/machinery/camera/proc/cancelAlarm() - if (detectTime == -1) - for (var/mob/living/silicon/aiPlayer in GLOB.player_list) - if (status) - aiPlayer.cancelAlarm("Motion", get_area(src), src) - detectTime = 0 - return 1 - -/obj/machinery/camera/proc/triggerAlarm() - if (!detectTime) - return 0 - for (var/mob/living/silicon/aiPlayer in GLOB.player_list) - if (status) - aiPlayer.triggerAlarm("Motion", get_area(src), list(src), src) - detectTime = -1 - return 1 - -/obj/machinery/camera/HasProximity(atom/movable/AM as mob|obj) - // Motion cameras outside of an "ai monitored" area will use this to detect stuff. - if (!area_motion) - if(isliving(AM)) - newTarget(AM) -======= /obj/machinery/camera var/list/localMotionTargets = list() @@ -143,5 +69,3 @@ if (!area_motion) if(isliving(AM)) newTarget(AM) - ->>>>>>> 1dc0519... Removes mob references from camera motion tracking (#32002)