Update Camera Monitor NanoUI to TGUI (#21734)

As title; dedicated computer/security objs now launch the same Camera
Monitoring app as modular computers do- same interface but in TGUI.
Removes old NanoUI version.
This commit is contained in:
Batrachophreno
2026-01-26 14:11:52 +00:00
committed by GitHub
parent 23f761babb
commit 901c6591a9
9 changed files with 71 additions and 136 deletions
+37 -64
View File
@@ -1,4 +1,3 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
/obj/machinery/computer/security
name = "security camera monitor"
desc = "Used to access the various cameras on the station."
@@ -9,17 +8,21 @@
var/current_network = null
var/obj/machinery/camera/current_camera = null
var/last_pic = 1.0
var/list/network
var/mapping = 0//For the overview file, interesting bit of code.
var/list/console_networks
var/mapping = 0
var/cache_id = 0
/// A currently active program running on the computer.
var/datum/computer_file/program/camera_monitor/camera_monitor_program
circuit = /obj/item/circuitboard/security
/obj/machinery/computer/security/Initialize()
if(!network)
network = SSatlas.current_map.station_networks.Copy()
if(!console_networks)
console_networks = SSatlas.current_map.station_networks.Copy()
. = ..()
if(network.len)
current_network = network[1]
if(console_networks.len)
current_network = console_networks[1]
camera_monitor_program = new("Compless")
/obj/machinery/computer/security/attack_ai(var/mob/user as mob)
if(!ai_can_interact(user))
@@ -46,32 +49,6 @@
return FALSE
return TRUE
/obj/machinery/computer/security/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1)
if(..())
return
var/data[0]
var/list/all_networks[0]
for(var/nw in network)
all_networks.Add(list(list(
"tag" = nw,
"has_access" = can_access_network(user, get_camera_access(nw))
)))
data["networks"] = all_networks
if(current_network)
data["cameras"] = GLOB.camera_repository.cameras_in_network(current_network)
data["current_camera"] = current_camera ? current_camera.nano_structure() : null
data["current_network"] = current_network
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui)
ui = new(user, src, ui_key, "sec_camera.tmpl", "Camera Console", 900, 800)
ui.set_initial_data(data)
ui.open()
/obj/machinery/computer/security/proc/can_access_network(var/mob/user, var/network_access)
// No access passed, or 0 which is considered no access requirement. Allow it.
if(!network_access)
@@ -79,34 +56,30 @@
return (check_camera_access(user, ACCESS_SECURITY) && GLOB.security_level >= SEC_LEVEL_BLUE) || check_camera_access(user, network_access)
/obj/machinery/computer/security/Topic(href, href_list)
if(..())
return TRUE
if(href_list["switch_camera"])
var/obj/machinery/camera/C = locate(href_list["switch_camera"]) in GLOB.cameranet.cameras
if(!C)
return
if(!(current_network in C.network))
/obj/machinery/computer/security/ui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
if(camera_monitor_program)
ui = new(user, src, camera_monitor_program.tgui_id, camera_monitor_program.filedesc)
ui.autoupdate = camera_monitor_program.ui_auto_update
else
to_chat(usr, "Something has gone wrong; please report the circumstances in which you received this message to the GitHub issues tracker.")
return
ui.open()
var/access_granted = FALSE
for(var/network in C.network)
if(can_access_network(usr, get_camera_access(network)))
access_granted = TRUE //We only need access to one of the networks.
if(!access_granted)
to_chat(usr, SPAN_WARNING("Access unauthorized."))
return
/obj/machinery/computer/security/ui_data(mob/user)
var/list/data = list()
if(camera_monitor_program)
data += camera_monitor_program.ui_data(user)
return data
switch_to_camera(usr, C)
return 1
else if(href_list["switch_network"])
if(href_list["switch_network"] in network)
current_network = href_list["switch_network"]
return 1
else if(href_list["reset"])
reset_current()
usr.reset_view(current_camera)
return 1
/obj/machinery/computer/security/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
. = ..()
if(.)
return
if(camera_monitor_program)
. = camera_monitor_program.ui_act(action, params, ui, state)
/obj/machinery/computer/security/attack_hand(var/mob/user as mob)
if (!(src.z in GetConnectedZlevels(starting_z_level)))
@@ -211,7 +184,7 @@
SSnanoui.update_uis(src)
/obj/machinery/computer/security/proc/can_access_camera(var/obj/machinery/camera/C)
var/list/shared_networks = src.network & C.network
var/list/shared_networks = src.console_networks & C.network
if(shared_networks.len)
return 1
return 0
@@ -245,7 +218,7 @@
icon_state = "wallframe"
icon_screen = null
light_range_on = 0
network = list(NETWORK_THUNDER)
console_networks = list(NETWORK_THUNDER)
density = 0
circuit = null
is_holographic = FALSE
@@ -275,7 +248,7 @@
icon_keyboard = "purple_key"
icon_keyboard_emis = "purple_key_mask"
light_color = LIGHT_COLOR_PURPLE
network = list("MINE")
console_networks = list("MINE")
circuit = /obj/item/circuitboard/security/mining
/obj/machinery/computer/security/engineering
@@ -299,8 +272,8 @@
light_power_on = 1
/obj/machinery/computer/security/engineering/Initialize()
if(!network)
network = GLOB.engineering_networks.Copy()
if(!console_networks)
console_networks = GLOB.engineering_networks.Copy()
. = ..()
/obj/machinery/computer/security/nuclear
@@ -310,7 +283,7 @@
icon_keyboard = "red_key"
icon_keyboard_emis = "red_key_mask"
light_color = LIGHT_COLOR_RED
network = list(NETWORK_MERCENARY)
console_networks = list(NETWORK_MERCENARY)
circuit = null
/obj/machinery/computer/security/nuclear/Initialize()
@@ -2,13 +2,13 @@
name = T_BOARD("security camera monitor")
build_path = /obj/machinery/computer/security
req_access = list(ACCESS_SECURITY)
var/list/network
var/list/console_networks
var/locked = 1
var/emagged = 0
/obj/item/circuitboard/security/Initialize()
. = ..()
network = SSatlas.current_map.station_networks
console_networks = SSatlas.current_map.station_networks
/obj/item/circuitboard/security/engineering
name = T_BOARD("engineering camera monitor")
@@ -17,21 +17,21 @@
/obj/item/circuitboard/security/engineering/New()
..()
network = GLOB.engineering_networks
console_networks = GLOB.engineering_networks
/obj/item/circuitboard/security/mining
name = T_BOARD("mining camera monitor")
build_path = /obj/machinery/computer/security/mining
network = list("MINE")
console_networks = list("MINE")
req_access = list()
/obj/item/circuitboard/security/construct(var/obj/machinery/computer/security/C)
if (..(C))
C.network = network.Copy()
C.console_networks = console_networks.Copy()
/obj/item/circuitboard/security/deconstruct(var/obj/machinery/computer/security/C)
if (..(C))
network = C.network.Copy()
console_networks = C.console_networks.Copy()
/obj/item/circuitboard/security/emag_act(var/remaining_charges, var/mob/user)
if(emagged)
@@ -56,7 +56,7 @@
if(locked)
to_chat(user, SPAN_WARNING("Circuit controls are locked."))
return
var/existing_networks = jointext(network,",")
var/existing_networks = jointext(console_networks,",")
var/input = sanitize( tgui_input_text(user, "Which networks would you like to connect this camera console circuit to? Seperate networks with a comma. No Spaces!\nFor example: SS13,Security,Secret ",
"Multitool-Circuitboard interface", existing_networks) )
if(!input)
@@ -67,5 +67,5 @@
if(tempnetwork.len < 1)
to_chat(usr, "No network found please hang up and try your call again.")
return
network = tempnetwork
console_networks = tempnetwork
return
+14
View File
@@ -0,0 +1,14 @@
# Your name.
author: Batrachophrenoboocosmomachia
# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
delete-after: True
# Any changes you've made. See valid prefix list above.
# INDENT WITH TWO SPACES. NOT TABS. SPACES.
# SCREW THIS UP AND IT WON'T WORK.
# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit.
# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog.
changes:
- code_imp: "Updates telescreens/dedicated camera monitor consoles to use the Camera Monitor TGUI instead of the old NanoUI version (which has been deprecated and removed)."
- bugfix: "Removes duplicated telescreen from SCCV Horizon interrogation monitoring compartment."
@@ -26338,7 +26338,7 @@
"oXt" = (
/obj/machinery/computer/security/telescreen{
name = "Spec. Ops. Monitor";
network = list("ZeEmergencyResponseTeam");
console_networks = list("ZeEmergencyResponseTeam");
pixel_x = -8;
pixel_y = 24
},
@@ -132,7 +132,7 @@
network = list(NETWORK_CRYO_OUTPOST)
/obj/machinery/computer/security/terminal/cryo_outpost
network = list(NETWORK_CRYO_OUTPOST)
console_networks = list(NETWORK_CRYO_OUTPOST)
/obj/item/research_slip/cryo_outpost
desc = "A small slip of plastic with an embedded chip. It is commonly used to store small amounts of research data. This one is covered in Zeng-Hu Pharmaceuticals logos."
@@ -95,7 +95,7 @@
// --------------------------------------------------- misc
/obj/machinery/computer/security/terminal/enviro_testing_facility
network = list("Env-Test Facility Zoya")
console_networks = list("Env-Test Facility Zoya")
/obj/machinery/camera/network/enviro_testing_facility
network = list("Env-Test Facility Zoya")
+1 -1
View File
@@ -11478,7 +11478,7 @@
},
/obj/machinery/computer/security/telescreen{
name = "Spec. Ops. Monitor";
network = list("ZeEmergencyResponseTeam");
console_networks = list("ZeEmergencyResponseTeam");
pixel_x = -8;
pixel_y = 24
},
+8 -25
View File
@@ -23920,7 +23920,7 @@
/obj/structure/table/standard,
/obj/machinery/computer/security/telescreen{
name = "Access Monitor";
network = list("Xeno_Bio")
console_networks = list("Xeno_Bio")
},
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 1
@@ -26900,6 +26900,7 @@
/obj/machinery/light{
dir = 4
},
/obj/machinery/light_switch/east,
/turf/simulated/floor/tiled/dark,
/area/horizon/security/interrogation/monitoring)
"dyx" = (
@@ -40166,7 +40167,7 @@
/obj/structure/table/standard,
/obj/machinery/computer/security/telescreen{
name = "Access Monitor";
network = list("Xeno_Bio");
console_networks = list("Xeno_Bio");
req_access = list(55)
},
/obj/effect/floor_decal/corner/mauve{
@@ -82791,7 +82792,7 @@
/obj/machinery/computer/security/telescreen{
desc = "Connects to a station's emergency camera networks after the station sends out a distress signal.";
name = "Emergency Dock Uplink";
network = list("Emergency Dock","TCFL");
console_networks = list("Emergency Dock","TCFL");
pixel_y = 28
},
/obj/structure/bed/stool/chair/office/bridge/pilot,
@@ -97962,7 +97963,7 @@
},
/obj/machinery/computer/security/telescreen{
name = "Spec. Ops. Monitor";
network = list("ZeEmergencyResponseTeam");
console_networks = list("ZeEmergencyResponseTeam");
pixel_x = -8;
pixel_y = 24
},
@@ -100169,18 +100170,6 @@
},
/turf/simulated/floor/tiled/white,
/area/centcom/shared_dream)
"noN" = (
/obj/machinery/computer/security/telescreen{
name = "Observation Screen";
network = list("Interrogation");
pixel_y = -32
},
/obj/structure/bed/stool/chair,
/obj/effect/floor_decal/corner/dark_blue{
dir = 10
},
/turf/simulated/floor/tiled/dark,
/area/horizon/security/interrogation/monitoring)
"noO" = (
/obj/machinery/atmospherics/pipe/simple/hidden/aux{
dir = 9
@@ -115693,7 +115682,7 @@
},
/obj/machinery/computer/security/telescreen{
name = "Access Monitor";
network = list("XO_Office");
console_networks = list("XO_Office");
pixel_y = 24;
pixel_x = -32
},
@@ -124560,16 +124549,10 @@
/turf/unsimulated/floor/wood,
/area/antag/actor)
"qEm" = (
/obj/machinery/computer/security/telescreen{
name = "Observation Screen";
network = list("Interrogation");
pixel_y = -32
},
/obj/structure/bed/stool/chair,
/obj/effect/floor_decal/corner/dark_blue/full{
dir = 4
},
/obj/machinery/light_switch/east,
/turf/simulated/floor/tiled/dark,
/area/horizon/security/interrogation/monitoring)
"qEo" = (
@@ -175995,7 +175978,7 @@
"xsv" = (
/obj/machinery/computer/security/telescreen{
name = "Telecommunications Cameras";
network = list("Tcomsat");
console_networks = list("Tcomsat");
pixel_x = 32;
pixel_y = -4
},
@@ -353327,7 +353310,7 @@ pQA
jnA
cjW
tMv
noN
lWO
ixW
aLB
lpO
-35
View File
@@ -1,35 +0,0 @@
<div class='item'>
{{:helper.link('Reset', 'refresh', {'reset' : 1})}}
</div>
<div class='item'>
<div class='itemLabel'>Current Camera:</div>
{{if data.current_camera}}
<div class='itemContentWide'><b>{{:data.current_camera.name}}</b></div>
{{else}}
<div class='itemContentWide'>None</div>
{{/if}}
</div>
<div class='item'>
<div class='itemLabel'>Networks:</div>
</div>
{{for data.networks}}
{{if value.has_access}}
{{:helper.link(value.tag, '', {'switch_network' : value.tag}, null, data.current_network == value.tag ? 'selected' : null)}}
{{else}}
{{:helper.link(value.tag, '', {}, null, data.current_network == value.tag ? 'selected' : 'redButton')}}
{{/if}}
{{/for}}
<div class='item'>
<div class='itemLabel'>Cameras:</div>
</div>
{{for data.cameras}}
{{if data.current_camera && value.name == data.current_camera.name}}
{{:helper.link(value.name, '', {'switch_camera' : value.camera}, 'selected')}}
{{else value.deact}}
{{:helper.link(value.name + " (deactivated)", '', {}, 'inactive')}}
{{else}}
{{:helper.link(value.name, '', {'switch_camera' : value.camera})}}
{{/if}}
{{/for}}