diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index 6875d661f2..4f010720a2 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -31,6 +31,9 @@ /obj/machinery/computer/security/tgui_interact(mob/user, datum/tgui/ui = null) camera.tgui_interact(user, ui) +/obj/machinery/computer/security/tgui_state(mob/user) + return GLOB.tgui_camera_view + /obj/machinery/computer/security/attack_hand(mob/user) add_fingerprint(user) if(stat & (BROKEN|NOPOWER)) @@ -45,9 +48,6 @@ ..() /obj/machinery/computer/security/attack_ai(mob/user) - if(isAI(user)) - to_chat(user, span_notice("You realise its kind of stupid to access a camera console when you have the entire camera network at your metaphorical fingertips")) - return attack_hand(user) /obj/machinery/computer/security/proc/set_network(list/new_network) @@ -83,7 +83,7 @@ GLOBAL_LIST_EMPTY(entertainment_screens) light_range_on = 2 network = list(NETWORK_THUNDER) circuit = /obj/item/circuitboard/security/telescreen/entertainment - camera_datum_type = /datum/tgui_module/camera/bigscreen + camera_datum_type = /datum/tgui_module/camera/virtual var/obj/item/radio/radio = null var/obj/effect/overlay/vis/pinboard diff --git a/code/modules/tgui/modules/camera.dm b/code/modules/tgui/modules/camera.dm index 1d4476f824..4304991720 100644 --- a/code/modules/tgui/modules/camera.dm +++ b/code/modules/tgui/modules/camera.dm @@ -317,4 +317,7 @@ /datum/tgui_module/camera/bigscreen/tgui_state(mob/user) return GLOB.tgui_physical_state_bigscreen +/datum/tgui_module/camera/virtual/tgui_state(mob/user) + return GLOB.tgui_camera_view + #undef DEFAULT_MAP_SIZE diff --git a/code/modules/tgui/states/cameras.dm b/code/modules/tgui/states/cameras.dm new file mode 100644 index 0000000000..5a1efaf802 --- /dev/null +++ b/code/modules/tgui/states/cameras.dm @@ -0,0 +1,25 @@ +/** + * tgui state: camera_view + * + * In addition to default checks, allows AI to interact and has a cutoff after it leaves view range. + * living adjacent user. + **/ + +GLOBAL_DATUM_INIT(tgui_camera_view, /datum/tgui_state/camera_view, new) + +/datum/tgui_state/camera_view/can_use_topic(src_object, mob/user) + . = user.shared_tgui_interaction(src_object) + if(. > STATUS_CLOSE) + return min(., user.camera_view_can_use_topic(src_object)) + +/mob/proc/camera_view_can_use_topic(src_object) + return STATUS_CLOSE + +/mob/living/camera_view_can_use_topic(src_object) + return shared_living_tgui_distance(src_object, viewcheck = TRUE) + +/mob/living/silicon/camera_view_can_use_topic(src_object) + return shared_living_tgui_distance(src_object, viewcheck = TRUE) + +/mob/living/silicon/ai/camera_view_can_use_topic(src_object) + return STATUS_INTERACTIVE diff --git a/vorestation.dme b/vorestation.dme index 009a369abe..37ae716b4f 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -4807,6 +4807,7 @@ #include "code\modules\tgui\states\admin.dm" #include "code\modules\tgui\states\always.dm" #include "code\modules\tgui\states\board_game.dm" +#include "code\modules\tgui\states\cameras.dm" #include "code\modules\tgui\states\conscious.dm" #include "code\modules\tgui\states\contained.dm" #include "code\modules\tgui\states\deep_inventory.dm"