mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2025-12-24 17:22:23 +00:00
66 lines
1.7 KiB
Plaintext
66 lines
1.7 KiB
Plaintext
/obj/machinery/camera
|
|
|
|
var/list/motionTargets = list()
|
|
var/detectTime = 0
|
|
var/area/ai_monitored/area_motion = null
|
|
var/alarm_delay = 100
|
|
|
|
|
|
/obj/machinery/camera/process()
|
|
// motion camera event loop
|
|
if(stat & (EMPED|NOPOWER))
|
|
return
|
|
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 motionTargets)
|
|
if(target.stat == 2) lostTarget(target)
|
|
// If not detecting with motion camera...
|
|
if(!area_motion)
|
|
// See if the camera is still in range
|
|
if(!in_range(src, target))
|
|
// If they aren't in range, lose the target.
|
|
lostTarget(target)
|
|
|
|
/obj/machinery/camera/proc/newTarget(var/mob/target)
|
|
if(istype(target, /mob/living/silicon/ai)) return 0
|
|
if(detectTime == 0)
|
|
detectTime = world.time // start the clock
|
|
if(!(target in motionTargets))
|
|
motionTargets += target
|
|
return 1
|
|
|
|
/obj/machinery/camera/proc/lostTarget(var/mob/target)
|
|
if(target in motionTargets)
|
|
motionTargets -= target
|
|
if(motionTargets.len == 0)
|
|
cancelAlarm()
|
|
|
|
/obj/machinery/camera/proc/cancelAlarm()
|
|
if(!status || (stat & NOPOWER))
|
|
return 0
|
|
if(detectTime == -1)
|
|
motion_alarm.clearAlarm(loc, src)
|
|
detectTime = 0
|
|
return 1
|
|
|
|
/obj/machinery/camera/proc/triggerAlarm()
|
|
if(!status || (stat & NOPOWER))
|
|
return 0
|
|
if(!detectTime) return 0
|
|
motion_alarm.triggerAlarm(loc, 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)
|
|
|