From 636ab7d156d7cef105a451df845e05e90e7fc6ed Mon Sep 17 00:00:00 2001 From: vuonojenmustaturska Date: Mon, 23 Oct 2017 21:31:17 +0300 Subject: [PATCH] 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)