diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 63c309bb0b..fca6effc22 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -34,10 +34,12 @@ else return null +//return flags that should be added to the viewer's sight var. +//Otherwise return a negative number to indicate that the view should be cancelled. /atom/proc/check_eye(user as mob) if (istype(user, /mob/living/silicon/ai)) // WHYYYY - return 1 - return + return 0 + return -1 /atom/proc/on_reagent_change() return diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index bb99773362..ad8a53676f 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -236,6 +236,11 @@ //I guess that doesn't matter since they couldn't use it anyway? kick_viewers() +/obj/machinery/camera/check_eye(mob/user) + if(!can_use()) return -1 + if(isXRay()) return SEE_TURFS|SEE_MOBS|SEE_OBJS + return 0 + //This might be redundant, because of check_eye() /obj/machinery/camera/proc/kick_viewers() for(var/mob/O in player_list) diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index 8cb58a14cb..a37d247331 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -22,11 +22,13 @@ check_eye(var/mob/user as mob) if (user.stat || ((get_dist(user, src) > 1 || !( user.canmove ) || user.blinded) && !istype(user, /mob/living/silicon))) //user can't see - not sure why canmove is here. - return null - if ( !current || !current.can_use() ) //camera doesn't work + return -1 + if(!current) + return 0 + var/viewflag = current.check_eye(user) + if ( viewflag < 0 ) //camera doesn't work reset_current() - user.reset_view(current) - return 1 + return viewflag ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1) if(src.z > 6) return @@ -88,7 +90,7 @@ if(src.z>6 || stat&(NOPOWER|BROKEN)) return if(usr.stat || ((get_dist(usr, src) > 1 || !( usr.canmove ) || usr.blinded) && !istype(usr, /mob/living/silicon))) return reset_current() - usr.check_eye(current) + usr.reset_view(current) return 1 else . = ..() @@ -124,8 +126,8 @@ if (!C.can_use() || user.stat || (get_dist(user, src) > 1 || user.machine != src || user.blinded || !( user.canmove ) && !istype(user, /mob/living/silicon))) return 0 set_current(C) + user.reset_view(current) check_eye(user) - use_power(50) return 1 //Camera control: moving. @@ -167,6 +169,7 @@ src.current = C if(current) + use_power = 2 var/mob/living/L = current.loc if(istype(L)) L.tracking_initiated() @@ -177,6 +180,7 @@ if(istype(L)) L.tracking_cancelled() current = null + use_power = 1 //Camera control: mouse. /atom/DblClick() diff --git a/code/game/machinery/computer/camera_monitor.dm b/code/game/machinery/computer/camera_monitor.dm deleted file mode 100644 index 11e8ddd43c..0000000000 --- a/code/game/machinery/computer/camera_monitor.dm +++ /dev/null @@ -1,67 +0,0 @@ - -/obj/machinery/computer/security - New() - if(network) - networks = list(network) - else - switch(department) - if("Security") - networks = list("Arrivals","SS13","Engineering","Research","Medbay","Tcomsat","Mess Hall","Security","Prison Wing","Atmospherics","Cargo","Command","Solars","Robotics","Chapel","Hydroponics", "Dormitory","Theatre","Library") - if("Engineering") - networks = list("Engineering","Tcomsat","Singularity","Atmospherics","Solars","Robotics") - if("Research") - networks = list("Research","Bomb Testing","Outpost") - if("Medbay") - networks = list("Medbay") - if("Cargo") - networks = list("Mine","Cargo") - if("Mining") - networks = list("Mine") - if("Thunderdome") - networks = list("thunder") - if("CREED") - networks = list("CREED") - -/obj/machinery/computer/security/attack_hand(var/mob/user as mob) - if (stat & (NOPOWER|BROKEN)) - return - - user.machine = src - if(src.current) - user.reset_view(src.current) - - var/list/L = new/list - for (var/obj/machinery/camera/C in world) - L.Add(C) - - camera_network_sort(L) - - var/list/D = new() - D["Cancel"] = "Cancel" - for (var/obj/machinery/camera/C in L) - if ( C.network in src.networks ) - D[text("[]: [][]", C.network, C.c_tag, (C.can_use() ? null : " (Deactivated)"))] = C - - var/t = input(user, "Which camera should you change to?") as null|anything in D - - if(!t) - user.machine = null - user.reset_view(null) - return 0 - - var/obj/machinery/camera/C = D[t] - - if (t == "Cancel") - user.cancel_camera() - return 0 - - if (C) - if ((get_dist(user, src) > 1 || user.machine != src || user.blinded || !( user.canmove ) || !( C.status )) && (!istype(user, /mob/living/silicon/ai))) - return 0 - else - src.current = C - use_power(50) - user.reset_view(C) - - spawn( 5 ) - attack_hand(user) diff --git a/code/game/machinery/computer3/bios.dm b/code/game/machinery/computer3/bios.dm index 17ed0c4789..e5be05b56e 100644 --- a/code/game/machinery/computer3/bios.dm +++ b/code/game/machinery/computer3/bios.dm @@ -69,16 +69,16 @@ if(!interactable(user) || user.machine != src) if(user.machine == src) user.unset_machine() - return null + return -1 var/datum/file/program/security/S = program if( !istype(S) || !S.current || !S.current.status || !camnet ) if( user.machine == src ) user.unset_machine() - return null + return -1 user.reset_view(S.current) - return 1 + return 0 /* List all files, including removable disks and data cards diff --git a/code/game/objects/items/devices/spy_bug.dm b/code/game/objects/items/devices/spy_bug.dm index 2ad3df7ae5..2561494e96 100644 --- a/code/game/objects/items/devices/spy_bug.dm +++ b/code/game/objects/items/devices/spy_bug.dm @@ -142,7 +142,7 @@ c_tag = name /obj/machinery/camera/spy/check_eye(var/mob/user as mob) - return 1 + return 0 /obj/item/device/radio/spy listening = 0 diff --git a/code/modules/mob/living/carbon/alien/life.dm b/code/modules/mob/living/carbon/alien/life.dm index 13bc1a4686..6e206ff10e 100644 --- a/code/modules/mob/living/carbon/alien/life.dm +++ b/code/modules/mob/living/carbon/alien/life.dm @@ -166,7 +166,7 @@ if (stat != 2) if (machine) - if (!( machine.check_eye(src) )) + if ( machine.check_eye(src) < 0) reset_view(null) else if(client && !client.adminobs) diff --git a/code/modules/mob/living/carbon/brain/life.dm b/code/modules/mob/living/carbon/brain/life.dm index 8e8a26d883..9b74d2b0e6 100644 --- a/code/modules/mob/living/carbon/brain/life.dm +++ b/code/modules/mob/living/carbon/brain/life.dm @@ -245,7 +245,7 @@ if (stat != 2) if (machine) - if (!( machine.check_eye(src) )) + if (machine.check_eye(src) < 0) reset_view(null) else if(client && !client.adminobs) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 1cd30fe9ba..1dad3cb800 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1308,3 +1308,8 @@ if((species.flags & NO_SLIP) || (shoes && (shoes.flags & NOSLIP))) return 0 ..(slipped_on,stun_duration) + +/mob/living/carbon/human/reset_view(atom/A, update_hud = 1) + ..() + if(update_hud) + handle_regular_hud_updates() diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index f7e23fc3c4..fed5b3dba4 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -1407,8 +1407,11 @@ client.screen |= global_hud.darkMask if(machine) - if(!machine.check_eye(src)) - reset_view(null) + var/viewflags = machine.check_eye(src) + if(viewflags < 0) + reset_view(null, 0) + else if(viewflags) + sight |= viewflags else var/isRemoteObserve = 0 if((mRemote in mutations) && remoteview_target) @@ -1416,7 +1419,7 @@ isRemoteObserve = 1 if(!isRemoteObserve && client && !client.adminobs) remoteview_target = null - reset_view(null) + reset_view(null, 0) return 1 proc/process_glasses(var/obj/item/clothing/glasses/G) diff --git a/code/modules/mob/living/carbon/monkey/life.dm b/code/modules/mob/living/carbon/monkey/life.dm index d2785826c8..9ba0be0847 100644 --- a/code/modules/mob/living/carbon/monkey/life.dm +++ b/code/modules/mob/living/carbon/monkey/life.dm @@ -567,7 +567,7 @@ if (stat != 2) if (machine) - if (!( machine.check_eye(src) )) + if (machine.check_eye(src) < 0) reset_view(null) else if(client && !client.adminobs) diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 9998a08feb..50b21aecdf 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -33,8 +33,6 @@ var/now_pushing = null - var/mob/living/cameraFollow = null - var/tod = null // Time of death var/update_slimes = 1 var/silent = null // Can't talk. Value goes down every life proc. diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 7edbbac68d..32c2b643b0 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -390,7 +390,7 @@ var/list/ai_verbs_default = list( if (!camera) return null user.reset_view(camera) - return 1 + return 0 /mob/living/silicon/ai/restrained() return 0 diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index a347ba45be..e575c2d7c4 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -123,9 +123,9 @@ /mob/living/silicon/pai/check_eye(var/mob/user as mob) if (!src.current) - return null + return -1 user.reset_view(src.current) - return 1 + return 0 /mob/living/silicon/pai/blob_act() if (src.stat != 2) @@ -185,9 +185,6 @@ return /mob/living/silicon/pai/proc/switchCamera(var/obj/machinery/camera/C) - if(istype(usr, /mob/living)) - var/mob/living/U = usr - U.cameraFollow = null if (!C) src.unset_machine() src.reset_view(null) diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index 8aaba03cb1..680b2aa0bd 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -285,7 +285,7 @@ if (src.stat != 2) if (src.machine) - if (!( src.machine.check_eye(src) )) + if (src.machine.check_eye(src) < 0) src.reset_view(null) else if(client && !client.adminobs) diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index b504166697..fd52fd00de 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -26,6 +26,7 @@ var/obj/nano_module/alarm_monitor = null var/sensor_mode = 0 //Determines the current HUD. + var/mob/living/cameraFollow = null var/next_alarm_notice var/list/datum/alarm/queued_alarms = new() @@ -360,3 +361,8 @@ for(var/obj/machinery/camera/C in A.cameras()) cameratext += "[(cameratext == "")? "" : "|"][C.c_tag]" src << "[A.alarm_name()]! ([(cameratext)? cameratext : "No Camera"])" + +/mob/living/silicon/reset_view() + ..() + if(cameraFollow) + cameraFollow = null diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 637bc64303..e5949f3985 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -566,12 +566,8 @@ var/list/slot_equipment_priority = list( \ /mob/verb/cancel_camera() set name = "Cancel Camera View" set category = "OOC" - reset_view(null) unset_machine() - if(istype(src, /mob/living)) - var/mob/living/M = src - if(M.cameraFollow) - M.cameraFollow = null + reset_view(null) /mob/Topic(href, href_list) if(href_list["mach_close"])