mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-25 13:09:11 +01:00
TGUI Engineering: Squashed Edition (Commits Below)
TGUI APCs TGUI vending machines Fix AI default_tgui_interaction TGUI Airlocks Station & Atmospheric Alert TGUI + Misc NTOS-TGUI Fixes TGUI Air Alarms & Central Atmospheric Control Airlock TGUI TG... got rid of UI for fire alarm. í´· TGUI Gas Heating/Cooling System TGUI Gas Pump & Passive Gate + Fixes TGUI Omni Atmospherics TGUI Pipe Dispensers & RPD TGUI IntelliCore & Vending Fix TGUI Handheld Tanks TGUI Portable Pump & Scrubber TGUI Tank Dispenser & Canisters TGUI Radios TGUI SMES & Air Alarm adjustment Tweak vending machine interfaces a tad TGUI Algae Farm TGUI general_air_control - Distro & Waste Console - Riot Control Console - Atmos Intake Console - Engine Cooling Console TGUI Heavy Scrubber Control (and body scanner fix) TGUI trinary devices & shutoff monitor TGUI Telecomms Log Browser TGUI Telecomms Machine Browser TGUI Spaceheater Internal Panel TGUI Gravity Generator TGUI Id Cards & Fix ID Card Images TGUI Id Card Redesign TGUI Turbolift TGUI Suit Cycler & Suit Storage Unit & Vending Fixes TGUI Power Monitor TGUI Signalers TGUI Employment Records TGUI Drone Console TGUI RIGSuits TGUI PA & PACMAN, and Margin Fix TGUI Solar Panels & Fix Power Monitor Adjust TGUI modules & their interaction with NTOS TGUI RCON TGUI Message Monitor Bump TGUI line limit to 120 (ParadiseSS13/Paradise#14002) TGUI Exonet & NTNet Relay TGUI Telecomms Multitool Menu TGUI Shield Capacitor & Shield Generator TGUI Supermatter-everything & Refactors
This commit is contained in:
@@ -0,0 +1,138 @@
|
||||
/datum/tgui_module/alarm_monitor
|
||||
name = "Alarm monitor"
|
||||
tgui_id = "StationAlertConsole"
|
||||
var/list_cameras = 0 // Whether or not to list camera references. A future goal would be to merge this with the enginering/security camera console. Currently really only for AI-use.
|
||||
var/list/datum/alarm_handler/alarm_handlers // The particular list of alarm handlers this alarm monitor should present to the user.
|
||||
|
||||
/datum/tgui_module/alarm_monitor/New()
|
||||
..()
|
||||
alarm_handlers = list()
|
||||
|
||||
/datum/tgui_module/alarm_monitor/all
|
||||
/datum/tgui_module/alarm_monitor/all/New()
|
||||
..()
|
||||
alarm_handlers = SSalarm.all_handlers
|
||||
|
||||
/datum/tgui_module/alarm_monitor/all/robot
|
||||
/datum/tgui_module/alarm_monitor/all/robot/tgui_state(mob/user)
|
||||
return GLOB.tgui_self_state
|
||||
|
||||
/datum/tgui_module/alarm_monitor/engineering
|
||||
/datum/tgui_module/alarm_monitor/engineering/New()
|
||||
..()
|
||||
alarm_handlers = list(atmosphere_alarm, fire_alarm, power_alarm)
|
||||
|
||||
// Subtype for glasses_state
|
||||
/datum/tgui_module/alarm_monitor/engineering/glasses
|
||||
/datum/tgui_module/alarm_monitor/engineering/glasses/tgui_state(mob/user)
|
||||
return GLOB.tgui_glasses_state
|
||||
|
||||
// Subtype for nif_state
|
||||
/datum/tgui_module/alarm_monitor/engineering/nif
|
||||
/datum/tgui_module/alarm_monitor/engineering/nif/tgui_state(mob/user)
|
||||
return GLOB.tgui_nif_state
|
||||
|
||||
// Subtype for NTOS
|
||||
/datum/tgui_module/alarm_monitor/engineering/ntos
|
||||
ntos = TRUE
|
||||
|
||||
/datum/tgui_module/alarm_monitor/security
|
||||
/datum/tgui_module/alarm_monitor/security/New()
|
||||
..()
|
||||
alarm_handlers = list(camera_alarm, motion_alarm)
|
||||
|
||||
// Subtype for glasses_state
|
||||
/datum/tgui_module/alarm_monitor/security/glasses
|
||||
/datum/tgui_module/alarm_monitor/security/glasses/tgui_state(mob/user)
|
||||
return GLOB.tgui_glasses_state
|
||||
|
||||
// Subtype for NTOS
|
||||
/datum/tgui_module/alarm_monitor/security/ntos
|
||||
ntos = TRUE
|
||||
|
||||
/datum/tgui_module/alarm_monitor/proc/register_alarm(var/object, var/procName)
|
||||
for(var/datum/alarm_handler/AH in alarm_handlers)
|
||||
AH.register_alarm(object, procName)
|
||||
|
||||
/datum/tgui_module/alarm_monitor/proc/unregister_alarm(var/object)
|
||||
for(var/datum/alarm_handler/AH in alarm_handlers)
|
||||
AH.unregister_alarm(object)
|
||||
|
||||
/datum/tgui_module/alarm_monitor/proc/all_alarms()
|
||||
var/z = get_z(tgui_host())
|
||||
var/list/all_alarms = new()
|
||||
for(var/datum/alarm_handler/AH in alarm_handlers)
|
||||
all_alarms += AH.visible_alarms(z)
|
||||
|
||||
return all_alarms
|
||||
|
||||
/datum/tgui_module/alarm_monitor/proc/major_alarms()
|
||||
var/z = get_z(tgui_host())
|
||||
var/list/all_alarms = new()
|
||||
for(var/datum/alarm_handler/AH in alarm_handlers)
|
||||
all_alarms += AH.major_alarms(z)
|
||||
|
||||
return all_alarms
|
||||
|
||||
// Modified version of above proc that uses slightly less resources, returns 1 if there is a major alarm, 0 otherwise.
|
||||
/datum/tgui_module/alarm_monitor/proc/has_major_alarms()
|
||||
var/z = get_z(tgui_host())
|
||||
for(var/datum/alarm_handler/AH in alarm_handlers)
|
||||
if(AH.has_major_alarms(z))
|
||||
return 1
|
||||
|
||||
return 0
|
||||
|
||||
/datum/tgui_module/alarm_monitor/proc/minor_alarms()
|
||||
var/z = get_z(tgui_host())
|
||||
var/list/all_alarms = new()
|
||||
for(var/datum/alarm_handler/AH in alarm_handlers)
|
||||
all_alarms += AH.minor_alarms(z)
|
||||
|
||||
return all_alarms
|
||||
|
||||
/datum/tgui_module/alarm_monitor/tgui_act(action, params)
|
||||
if(..())
|
||||
return TRUE
|
||||
|
||||
// Camera stuff is AI only.
|
||||
// If you're not an AI, this is a read-only UI.
|
||||
if(!isAI(usr))
|
||||
return
|
||||
|
||||
switch(action)
|
||||
if("switchTo")
|
||||
var/obj/machinery/camera/C = locate(params["camera"]) in cameranet.cameras
|
||||
if(!C)
|
||||
return
|
||||
|
||||
usr.switch_to_camera(C)
|
||||
return 1
|
||||
|
||||
/datum/tgui_module/alarm_monitor/tgui_data(mob/user)
|
||||
var/list/data = list()
|
||||
|
||||
var/categories[0]
|
||||
var/z = get_z(tgui_host())
|
||||
for(var/datum/alarm_handler/AH in alarm_handlers)
|
||||
categories[++categories.len] = list("category" = AH.category, "alarms" = list())
|
||||
for(var/datum/alarm/A in AH.visible_alarms(z))
|
||||
var/cameras[0]
|
||||
var/lost_sources[0]
|
||||
|
||||
if(isAI(user))
|
||||
for(var/obj/machinery/camera/C in A.cameras())
|
||||
cameras[++cameras.len] = C.tgui_structure()
|
||||
for(var/datum/alarm_source/AS in A.sources)
|
||||
if(!AS.source)
|
||||
lost_sources[++lost_sources.len] = AS.source_name
|
||||
|
||||
categories[categories.len]["alarms"] += list(list(
|
||||
"name" = "[A.alarm_name()]" + "[A.max_severity() > 1 ? "(MAJOR)" : ""]",
|
||||
"origin_lost" = A.origin == null,
|
||||
"has_cameras" = cameras.len,
|
||||
"cameras" = cameras,
|
||||
"lost_sources" = lost_sources.len ? sanitize(english_list(lost_sources, nothing_text = "", and_text = ", ")) : ""))
|
||||
data["categories"] = categories
|
||||
|
||||
return data
|
||||
@@ -0,0 +1,110 @@
|
||||
/datum/tgui_module/atmos_control
|
||||
name = "Atmospherics Control"
|
||||
tgui_id = "AtmosControl"
|
||||
var/obj/access = new()
|
||||
var/emagged = 0
|
||||
var/ui_ref
|
||||
var/list/monitored_alarms = list()
|
||||
|
||||
/datum/tgui_module/atmos_control/New(atmos_computer, req_access, req_one_access, monitored_alarm_ids)
|
||||
..()
|
||||
access.req_access = req_access
|
||||
access.req_one_access = req_one_access
|
||||
|
||||
if(monitored_alarm_ids)
|
||||
for(var/obj/machinery/alarm/alarm in machines)
|
||||
if(alarm.alarm_id && alarm.alarm_id in monitored_alarm_ids)
|
||||
monitored_alarms += alarm
|
||||
// machines may not yet be ordered at this point
|
||||
monitored_alarms = dd_sortedObjectList(monitored_alarms)
|
||||
|
||||
/datum/tgui_module/atmos_control/tgui_act(action, params, datum/tgui/ui)
|
||||
if(..())
|
||||
return TRUE
|
||||
|
||||
switch(action)
|
||||
if("alarm")
|
||||
if(ui_ref)
|
||||
var/obj/machinery/alarm/alarm = locate(params["alarm"]) in (monitored_alarms.len ? monitored_alarms : machines)
|
||||
if(alarm)
|
||||
var/datum/tgui_state/TS = generate_state(alarm)
|
||||
alarm.tgui_interact(usr, parent_ui = ui_ref, state = TS)
|
||||
return 1
|
||||
if("setZLevel")
|
||||
ui.set_map_z_level(params["mapZLevel"])
|
||||
return TRUE
|
||||
|
||||
/datum/tgui_module/atmos_control/tgui_interact(mob/user, datum/tgui/ui = null)
|
||||
ui = SStgui.try_update_ui(user, src, ui)
|
||||
if(!ui)
|
||||
ui = new(user, src, tgui_id, name)
|
||||
ui.autoupdate = TRUE
|
||||
ui.open()
|
||||
ui_ref = ui
|
||||
|
||||
/datum/tgui_module/atmos_control/tgui_static_data(mob/user)
|
||||
. = ..()
|
||||
|
||||
var/z = get_z(user)
|
||||
var/list/map_levels = using_map.get_map_levels(z)
|
||||
|
||||
// TODO: Move these to a cache, similar to cameras
|
||||
var/alarms[0]
|
||||
for(var/obj/machinery/alarm/alarm in (monitored_alarms.len ? monitored_alarms : machines))
|
||||
if(!monitored_alarms.len && alarm.alarms_hidden)
|
||||
continue
|
||||
if(!(alarm.z in map_levels))
|
||||
continue
|
||||
alarms[++alarms.len] = list(
|
||||
"name" = sanitize(alarm.name),
|
||||
"ref"= "\ref[alarm]",
|
||||
"danger" = max(alarm.danger_level, alarm.alarm_area.atmosalm),
|
||||
"x" = alarm.x,
|
||||
"y" = alarm.y,
|
||||
"z" = alarm.z)
|
||||
.["alarms"] = alarms
|
||||
|
||||
/datum/tgui_module/atmos_control/tgui_data(mob/user)
|
||||
var/list/data = list()
|
||||
|
||||
var/z = get_z(user)
|
||||
var/list/map_levels = using_map.get_map_levels(z)
|
||||
data["map_levels"] = map_levels
|
||||
|
||||
return data
|
||||
|
||||
/datum/tgui_module/atmos_control/tgui_close()
|
||||
. = ..()
|
||||
ui_ref = null
|
||||
|
||||
/datum/tgui_module/atmos_control/proc/generate_state(air_alarm)
|
||||
var/datum/tgui_state/air_alarm_remote/state = new()
|
||||
state.atmos_control = src
|
||||
state.air_alarm = air_alarm
|
||||
return state
|
||||
|
||||
/datum/tgui_state/air_alarm_remote
|
||||
var/datum/tgui_module/atmos_control/atmos_control = null
|
||||
var/obj/machinery/alarm/air_alarm = null
|
||||
|
||||
/datum/tgui_state/air_alarm_remote/can_use_topic(src_object, mob/user)
|
||||
if(!atmos_control.ui_ref)
|
||||
qdel(src)
|
||||
return STATUS_CLOSE
|
||||
if(has_access(user))
|
||||
return STATUS_INTERACTIVE
|
||||
return STATUS_UPDATE
|
||||
|
||||
/datum/tgui_state/air_alarm_remote/proc/has_access(var/mob/user)
|
||||
return user && (isAI(user) || atmos_control.access.allowed(user) || atmos_control.emagged || air_alarm.rcon_setting == RCON_YES || (air_alarm.alarm_area.atmosalm && air_alarm.rcon_setting == RCON_AUTO) || (access_ce in user.GetAccess()))
|
||||
|
||||
/datum/tgui_state/air_alarm_remote/Destroy()
|
||||
atmos_control = null
|
||||
air_alarm = null
|
||||
|
||||
/datum/tgui_module/atmos_control/ntos
|
||||
ntos = TRUE
|
||||
|
||||
/datum/tgui_module/atmos_control/robot
|
||||
/datum/tgui_module/atmos_control/robot/tgui_state(mob/user)
|
||||
return GLOB.tgui_self_state
|
||||
@@ -0,0 +1,85 @@
|
||||
/datum/tgui_module/power_monitor
|
||||
name = "Power monitor"
|
||||
tgui_id = "PowerMonitor"
|
||||
var/list/grid_sensors
|
||||
var/active_sensor = null //name_tag of the currently selected sensor
|
||||
|
||||
/datum/tgui_module/power_monitor/New()
|
||||
. = ..()
|
||||
refresh_sensors()
|
||||
|
||||
/datum/tgui_module/power_monitor/tgui_data(mob/user)
|
||||
var/list/data = list()
|
||||
|
||||
var/list/sensors = list()
|
||||
// Focus: If it remains null if no sensor is selected and UI will display sensor list, otherwise it will display sensor reading.
|
||||
var/obj/machinery/power/sensor/focus = null
|
||||
|
||||
var/z = get_z(user)
|
||||
var/list/map_levels = using_map.get_map_levels(z)
|
||||
|
||||
// Build list of data from sensor readings.
|
||||
for(var/obj/machinery/power/sensor/S in grid_sensors)
|
||||
if(!(S.z in map_levels))
|
||||
continue
|
||||
sensors.Add(list(list(
|
||||
"name" = S.name_tag,
|
||||
"alarm" = S.check_grid_warning()
|
||||
)))
|
||||
if(S.name_tag == active_sensor)
|
||||
focus = S
|
||||
|
||||
data["all_sensors"] = sensors
|
||||
if(focus)
|
||||
data["focus"] = focus.tgui_data(user)
|
||||
else
|
||||
data["focus"] = null
|
||||
|
||||
return data
|
||||
|
||||
/datum/tgui_module/power_monitor/tgui_act(action, params)
|
||||
if(..())
|
||||
return TRUE
|
||||
|
||||
switch(action)
|
||||
if("clear")
|
||||
active_sensor = null
|
||||
. = TRUE
|
||||
if("refresh")
|
||||
refresh_sensors()
|
||||
. = TRUE
|
||||
if("setsensor")
|
||||
active_sensor = params["id"]
|
||||
. = TRUE
|
||||
|
||||
/datum/tgui_module/power_monitor/proc/has_alarm()
|
||||
for(var/obj/machinery/power/sensor/S in grid_sensors)
|
||||
if(S.check_grid_warning())
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/datum/tgui_module/power_monitor/proc/refresh_sensors()
|
||||
grid_sensors = list()
|
||||
|
||||
// Handle ultranested programs
|
||||
var/turf/T = get_turf(tgui_host())
|
||||
|
||||
var/list/levels = list()
|
||||
if(!T) // Safety check
|
||||
return
|
||||
if(T)
|
||||
levels += using_map.get_map_levels(T.z, FALSE)
|
||||
for(var/obj/machinery/power/sensor/S in machines)
|
||||
if(T && (S.loc.z == T.z) || (S.loc.z in levels) || (S.long_range)) // Consoles have range on their Z-Level. Sensors with long_range var will work between Z levels.
|
||||
if(S.name_tag == "#UNKN#") // Default name. Shouldn't happen!
|
||||
warning("Powernet sensor with unset ID Tag! [S.x]X [S.y]Y [S.z]Z")
|
||||
else
|
||||
grid_sensors += S
|
||||
|
||||
/datum/tgui_module/power_monitor/ntos
|
||||
ntos = TRUE
|
||||
|
||||
// Subtype for self_state
|
||||
/datum/tgui_module/power_monitor/robot
|
||||
/datum/tgui_module/power_monitor/robot/tgui_state(mob/user)
|
||||
return GLOB.tgui_self_state
|
||||
@@ -0,0 +1,118 @@
|
||||
/datum/tgui_module/rcon
|
||||
name = "Power RCON"
|
||||
tgui_id = "RCON"
|
||||
|
||||
var/list/known_SMESs = null
|
||||
var/list/known_breakers = null
|
||||
|
||||
/datum/tgui_module/rcon/tgui_data(mob/user)
|
||||
FindDevices() // Update our devices list
|
||||
var/list/data = ..()
|
||||
|
||||
// SMES DATA (simplified view)
|
||||
var/list/smeslist[0]
|
||||
for(var/obj/machinery/power/smes/buildable/SMES in known_SMESs)
|
||||
smeslist.Add(list(list(
|
||||
"capacity" = SMES.capacity,
|
||||
"capacityPercent" = round(100*SMES.charge/SMES.capacity, 0.1),
|
||||
"charge" = SMES.charge,
|
||||
"input_set" = SMES.input_attempt,
|
||||
"input_val" = round(SMES.input_level/1000, 0.1),
|
||||
"output_set" = SMES.output_attempt,
|
||||
"output_val" = round(SMES.output_level/1000, 0.1),
|
||||
"output_load" = round(SMES.output_used/1000, 0.1),
|
||||
"RCON_tag" = SMES.RCon_tag
|
||||
)))
|
||||
|
||||
data["smes_info"] = sortByKey(smeslist, "RCON_tag")
|
||||
|
||||
// BREAKER DATA (simplified view)
|
||||
var/list/breakerlist[0]
|
||||
for(var/obj/machinery/power/breakerbox/BR in known_breakers)
|
||||
breakerlist.Add(list(list(
|
||||
"RCON_tag" = BR.RCon_tag,
|
||||
"enabled" = BR.on
|
||||
)))
|
||||
data["breaker_info"] = breakerlist
|
||||
|
||||
return data
|
||||
|
||||
/datum/tgui_module/rcon/tgui_act(action, params)
|
||||
if(..())
|
||||
return TRUE
|
||||
|
||||
switch(action)
|
||||
if("smes_in_toggle")
|
||||
var/obj/machinery/power/smes/buildable/SMES = GetSMESByTag(params["smes"])
|
||||
if(SMES)
|
||||
SMES.toggle_input()
|
||||
. = TRUE
|
||||
if("smes_out_toggle")
|
||||
var/obj/machinery/power/smes/buildable/SMES = GetSMESByTag(params["smes"])
|
||||
if(SMES)
|
||||
SMES.toggle_output()
|
||||
. = TRUE
|
||||
if("smes_in_set")
|
||||
var/obj/machinery/power/smes/buildable/SMES = GetSMESByTag(params["smes"])
|
||||
if(SMES)
|
||||
var/inputset = (input(usr, "Enter new input level (0-[SMES.input_level_max/1000] kW)", "SMES Input Power Control", SMES.input_level/1000) as num) * 1000
|
||||
SMES.set_input(inputset)
|
||||
. = TRUE
|
||||
if("smes_out_set")
|
||||
var/obj/machinery/power/smes/buildable/SMES = GetSMESByTag(params["smes"])
|
||||
if(SMES)
|
||||
var/outputset = (input(usr, "Enter new output level (0-[SMES.output_level_max/1000] kW)", "SMES Output Power Control", SMES.output_level/1000) as num) * 1000
|
||||
SMES.set_output(outputset)
|
||||
. = TRUE
|
||||
if("toggle_breaker")
|
||||
var/obj/machinery/power/breakerbox/toggle = null
|
||||
for(var/obj/machinery/power/breakerbox/breaker in known_breakers)
|
||||
if(breaker.RCon_tag == params["breaker"])
|
||||
toggle = breaker
|
||||
if(toggle)
|
||||
if(toggle.update_locked)
|
||||
to_chat(usr, "The breaker box was recently toggled. Please wait before toggling it again.")
|
||||
else
|
||||
toggle.auto_toggle()
|
||||
. = TRUE
|
||||
|
||||
|
||||
// Proc: GetSMESByTag()
|
||||
// Parameters: 1 (tag - RCON tag of SMES we want to look up)
|
||||
// Description: Looks up and returns SMES which has matching RCON tag
|
||||
/datum/tgui_module/rcon/proc/GetSMESByTag(var/tag)
|
||||
if(!tag)
|
||||
return
|
||||
|
||||
for(var/obj/machinery/power/smes/buildable/S in known_SMESs)
|
||||
if(S.RCon_tag == tag)
|
||||
return S
|
||||
|
||||
// Proc: FindDevices()
|
||||
// Parameters: None
|
||||
// Description: Refreshes local list of known devices.
|
||||
/datum/tgui_module/rcon/proc/FindDevices()
|
||||
known_SMESs = new /list()
|
||||
|
||||
var/z = get_z(tgui_host())
|
||||
var/list/map_levels = using_map.get_map_levels(z)
|
||||
|
||||
for(var/obj/machinery/power/smes/buildable/SMES in GLOB.smeses)
|
||||
if(!(SMES.z in map_levels))
|
||||
continue
|
||||
if(SMES.RCon_tag && (SMES.RCon_tag != "NO_TAG") && SMES.RCon)
|
||||
known_SMESs.Add(SMES)
|
||||
|
||||
known_breakers = new /list()
|
||||
for(var/obj/machinery/power/breakerbox/breaker in machines)
|
||||
if(!(breaker.z in map_levels))
|
||||
continue
|
||||
if(breaker.RCon_tag != "NO_TAG")
|
||||
known_breakers.Add(breaker)
|
||||
|
||||
/datum/tgui_module/rcon/ntos
|
||||
ntos = TRUE
|
||||
|
||||
/datum/tgui_module/rcon/robot
|
||||
/datum/tgui_module/rcon/robot/tgui_state(mob/user)
|
||||
return GLOB.tgui_self_state
|
||||
@@ -0,0 +1,46 @@
|
||||
/datum/tgui_module/shutoff_monitor
|
||||
name = "Shutoff Valve Monitoring"
|
||||
tgui_id = "ShutoffMonitor"
|
||||
|
||||
/datum/tgui_module/shutoff_monitor/tgui_act(action, params)
|
||||
if(..())
|
||||
return TRUE
|
||||
|
||||
switch(action)
|
||||
if("toggle_enable")
|
||||
var/obj/machinery/atmospherics/valve/shutoff/S = locate(params["valve"])
|
||||
if(!istype(S))
|
||||
return 0
|
||||
S.close_on_leaks = !S.close_on_leaks
|
||||
return 1
|
||||
|
||||
if("toggle_open")
|
||||
var/obj/machinery/atmospherics/valve/shutoff/S = locate(params["valve"])
|
||||
if(!istype(S))
|
||||
return 0
|
||||
if(S.open)
|
||||
S.close()
|
||||
else
|
||||
S.open()
|
||||
return 1
|
||||
|
||||
/datum/tgui_module/shutoff_monitor/tgui_data(mob/user)
|
||||
var/list/data = list()
|
||||
var/list/valves = list()
|
||||
|
||||
for(var/obj/machinery/atmospherics/valve/shutoff/S in GLOB.shutoff_valves)
|
||||
valves.Add(list(list(
|
||||
"name" = S.name,
|
||||
"enabled" = S.close_on_leaks,
|
||||
"open" = S.open,
|
||||
"x" = S.x,
|
||||
"y" = S.y,
|
||||
"z" = S.z,
|
||||
"ref" = "\ref[S]"
|
||||
)))
|
||||
|
||||
data["valves"] = valves
|
||||
return data
|
||||
|
||||
/datum/tgui_module/shutoff_monitor/ntos
|
||||
ntos = TRUE
|
||||
@@ -0,0 +1,108 @@
|
||||
|
||||
/datum/tgui_module/supermatter_monitor
|
||||
name = "Supermatter monitor"
|
||||
tgui_id = "SupermatterMonitor"
|
||||
var/list/supermatters
|
||||
var/obj/machinery/power/supermatter/active = null // Currently selected supermatter crystal.
|
||||
|
||||
/datum/tgui_module/supermatter_monitor/Destroy()
|
||||
. = ..()
|
||||
active = null
|
||||
supermatters = null
|
||||
|
||||
/datum/tgui_module/supermatter_monitor/New()
|
||||
..()
|
||||
refresh()
|
||||
|
||||
// Refreshes list of active supermatter crystals
|
||||
/datum/tgui_module/supermatter_monitor/proc/refresh()
|
||||
supermatters = list()
|
||||
var/z = get_z(tgui_host())
|
||||
if(!z)
|
||||
return
|
||||
var/valid_z_levels = using_map.get_map_levels(z)
|
||||
for(var/obj/machinery/power/supermatter/S in machines)
|
||||
// Delaminating, not within coverage, not on a tile.
|
||||
if(S.grav_pulling || S.exploded || !(S.z in valid_z_levels) || !istype(S.loc, /turf/))
|
||||
continue
|
||||
supermatters.Add(S)
|
||||
|
||||
if(!(active in supermatters))
|
||||
active = null
|
||||
|
||||
/datum/tgui_module/supermatter_monitor/proc/get_status()
|
||||
. = SUPERMATTER_INACTIVE
|
||||
for(var/obj/machinery/power/supermatter/S in supermatters)
|
||||
. = max(., S.get_status())
|
||||
|
||||
/datum/tgui_module/supermatter_monitor/tgui_data(mob/user)
|
||||
var/list/data = ..()
|
||||
|
||||
if(istype(active))
|
||||
var/turf/T = get_turf(active)
|
||||
if(!T)
|
||||
active = null
|
||||
return
|
||||
var/datum/gas_mixture/air = T.return_air()
|
||||
if(!istype(air))
|
||||
active = null
|
||||
return
|
||||
|
||||
data["active"] = 1
|
||||
data["SM_area"] = get_area(active)
|
||||
data["SM_integrity"] = active.get_integrity()
|
||||
data["SM_power"] = active.power
|
||||
data["SM_ambienttemp"] = air.temperature
|
||||
data["SM_ambientpressure"] = air.return_pressure()
|
||||
data["SM_EPR"] = active.get_epr()
|
||||
//data["SM_EPR"] = active.get_epr()
|
||||
if(air.total_moles)
|
||||
data["SM_gas_O2"] = round(100*air.gas["oxygen"]/air.total_moles,0.01)
|
||||
data["SM_gas_CO2"] = round(100*air.gas["carbon_dioxide"]/air.total_moles,0.01)
|
||||
data["SM_gas_N2"] = round(100*air.gas["nitrogen"]/air.total_moles,0.01)
|
||||
data["SM_gas_PH"] = round(100*air.gas["phoron"]/air.total_moles,0.01)
|
||||
data["SM_gas_N2O"] = round(100*air.gas["sleeping_agent"]/air.total_moles,0.01)
|
||||
else
|
||||
data["SM_gas_O2"] = 0
|
||||
data["SM_gas_CO2"] = 0
|
||||
data["SM_gas_N2"] = 0
|
||||
data["SM_gas_PH"] = 0
|
||||
data["SM_gas_N2O"] = 0
|
||||
else
|
||||
var/list/SMS = list()
|
||||
for(var/obj/machinery/power/supermatter/S in supermatters)
|
||||
var/area/A = get_area(S)
|
||||
if(!A)
|
||||
continue
|
||||
|
||||
SMS.Add(list(list(
|
||||
"area_name" = A.name,
|
||||
"integrity" = S.get_integrity(),
|
||||
"uid" = S.uid
|
||||
)))
|
||||
|
||||
data["active"] = 0
|
||||
data["supermatters"] = SMS
|
||||
|
||||
return data
|
||||
|
||||
/datum/tgui_module/supermatter_monitor/tgui_act(action, params)
|
||||
if(..())
|
||||
return TRUE
|
||||
|
||||
switch(action)
|
||||
if("clear")
|
||||
active = null
|
||||
. = TRUE
|
||||
if("refresh")
|
||||
refresh()
|
||||
. = TRUE
|
||||
if("set")
|
||||
var/newuid = text2num(params["set"])
|
||||
for(var/obj/machinery/power/supermatter/S in supermatters)
|
||||
if(S.uid == newuid)
|
||||
active = S
|
||||
. = TRUE
|
||||
|
||||
/datum/tgui_module/supermatter_monitor/ntos
|
||||
ntos = TRUE
|
||||
Reference in New Issue
Block a user