diff --git a/code/_onclick/hud/ai.dm b/code/_onclick/hud/ai.dm index 87a33afc13..b2af85d1b0 100644 --- a/code/_onclick/hud/ai.dm +++ b/code/_onclick/hud/ai.dm @@ -23,8 +23,7 @@ if(..()) return var/mob/living/silicon/ai/AI = usr - var/camera = input(AI, "Choose which camera you want to view", "Cameras") as null|anything in AI.get_camera_list() - AI.ai_camera_list(camera) + AI.show_camera_list() /obj/screen/ai/camera_track name = "Track With Camera" diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index af1a168a3b..8a58c7fae5 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -57,19 +57,17 @@ toggle_cam() /obj/machinery/camera/Destroy() - toggle_cam(null, 0) //kick anyone viewing out + if(can_use()) + toggle_cam(null, 0) //kick anyone viewing out and remove from the camera chunks + GLOB.cameranet.cameras -= src if(isarea(myarea)) LAZYREMOVE(myarea.cameras, src) - if(assembly) - qdel(assembly) - assembly = null + QDEL_NULL(assembly) if(bug) bug.bugged_cameras -= src.c_tag if(bug.current == src) bug.current = null bug = null - GLOB.cameranet.removeCamera(src) //Will handle removal from the camera network and the chunks, so we don't need to worry about that - GLOB.cameranet.cameras -= src return ..() /obj/machinery/camera/emp_act(severity) diff --git a/code/game/machinery/camera/tracking.dm b/code/game/machinery/camera/tracking.dm index 6a5d8eb9bc..db8479a413 100644 --- a/code/game/machinery/camera/tracking.dm +++ b/code/game/machinery/camera/tracking.dm @@ -1,10 +1,4 @@ /mob/living/silicon/ai/proc/get_camera_list() - - track.cameras.Cut() - - if(src.stat == DEAD) - return - var/list/L = list() for (var/obj/machinery/camera/C in GLOB.cameranet.cameras) L.Add(C) @@ -18,25 +12,18 @@ if (tempnetwork.len) T[text("[][]", C.c_tag, (C.can_use() ? null : " (Deactivated)"))] = C - track.cameras = T return T - -/mob/living/silicon/ai/proc/ai_camera_list(camera) - if (!camera) - return 0 - - var/obj/machinery/camera/C = track.cameras[camera] - src.eyeobj.setLoc(C) - - return +/mob/living/silicon/ai/proc/show_camera_list() + var/list/cameras = get_camera_list() + var/camera = input(src, "Choose which camera you want to view", "Cameras") as null|anything in cameras + switchCamera(cameras[camera]) /datum/trackable var/list/names = list() var/list/namecounts = list() var/list/humans = list() var/list/others = list() - var/list/cameras = list() /mob/living/silicon/ai/proc/trackable_mobs() @@ -143,13 +130,9 @@ /obj/machinery/camera/attack_ai(mob/living/silicon/ai/user) if (!istype(user)) return - if (!src.can_use()) + if (!can_use()) return - user.eyeobj.setLoc(get_turf(src)) - - -/mob/living/silicon/ai/attack_ai(mob/user) - ai_camera_list() + user.switchCamera(src) /proc/camera_sort(list/L) var/obj/machinery/camera/a diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 86314e33d7..9ae3d18333 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -430,20 +430,17 @@ /mob/living/silicon/ai/proc/switchCamera(obj/machinery/camera/C) + if(QDELETED(C)) + return FALSE if(!tracking) cameraFollow = null - if (!C) - return FALSE - - if(!src.eyeobj) + if(QDELETED(eyeobj)) view_core() return // ok, we're alive, camera is good and in our network... eyeobj.setLoc(get_turf(C)) - //machine = src - return TRUE /mob/living/silicon/ai/proc/botcall() diff --git a/code/modules/mob/living/silicon/ai/freelook/cameranet.dm b/code/modules/mob/living/silicon/ai/freelook/cameranet.dm index 48ca0ac19c..815ddb64ea 100644 --- a/code/modules/mob/living/silicon/ai/freelook/cameranet.dm +++ b/code/modules/mob/living/silicon/ai/freelook/cameranet.dm @@ -80,8 +80,7 @@ GLOBAL_DATUM_INIT(cameranet, /datum/cameranet, new) // Removes a camera from a chunk. /datum/cameranet/proc/removeCamera(obj/machinery/camera/c) - if(c.can_use()) - majorChunkChange(c, 0) + majorChunkChange(c, 0) // Add a camera to a chunk.