Convert all old nano_module crew monitors to TGUI, fix crew monitor for virgo

This commit is contained in:
ShadowLarkens
2020-07-16 18:58:37 -07:00
parent a98b8f9764
commit a1eb54e615
9 changed files with 128 additions and 91 deletions

View File

@@ -8,6 +8,8 @@
icon_state = "glasses"
var/datum/nano_module/arscreen
var/arscreen_path
var/datum/tgui_module/tgarscreen
var/tgarscreen_path
var/flash_prot = 0 //0 for none, 1 for flash weapon protection, 2 for welder protection
enables_planes = list(VIS_CH_ID,VIS_CH_HEALTH_VR,VIS_AUGMENTED)
plane_slots = list(slot_glasses)
@@ -16,21 +18,33 @@
..()
if(arscreen_path)
arscreen = new arscreen_path(src)
if(tgarscreen_path)
tgarscreen = new tgarscreen_path(src)
/obj/item/clothing/glasses/omnihud/Destroy()
QDEL_NULL(arscreen)
QDEL_NULL(tgarscreen)
. = ..()
/obj/item/clothing/glasses/omnihud/dropped()
if(arscreen)
SSnanoui.close_uis(src)
if(tgarscreen)
SStgui.close_uis(src)
..()
/obj/item/clothing/glasses/omnihud/emp_act(var/severity)
if(arscreen)
SSnanoui.close_uis(src)
if(tgarscreen)
SStgui.close_uis(src)
var/disconnect_ar = arscreen
var/disconnect_tgar = tgarscreen
arscreen = null
tgarscreen = null
spawn(20 SECONDS)
arscreen = disconnect_ar
tgarscreen = disconnect_tgar
..()
/obj/item/clothing/glasses/omnihud/proc/flashed()
@@ -51,6 +65,7 @@
if(!ishuman(user))
return
log_world("omnihud attack self [src] with [user]")
var/mob/living/carbon/human/H = user
if(!H.glasses || !(H.glasses == src))
to_chat(user, "<span class='warning'>You must be wearing the [src] to see the display.</span>")
@@ -71,12 +86,12 @@
These have been upgraded with medical records access and virus database integration."
mode = "med"
action_button_name = "AR Console (Crew Monitor)"
arscreen_path = /datum/nano_module/program/crew_monitor
tgarscreen_path = /datum/tgui_module/crew_monitor
enables_planes = list(VIS_CH_ID,VIS_CH_HEALTH_VR,VIS_CH_STATUS_R,VIS_CH_BACKUP,VIS_AUGMENTED)
ar_interact(var/mob/living/carbon/human/user)
if(arscreen)
arscreen.ui_interact(user,"main",null,1,glasses_state)
if(tgarscreen)
tgarscreen.tgui_interact(user, state = GLOB.tgui_glasses_state)
return 1
/obj/item/clothing/glasses/omnihud/sec

View File

@@ -1,7 +1,7 @@
/datum/computer_file/program/suit_sensors
filename = "sensormonitor"
filedesc = "Suit Sensors Monitoring"
nanomodule_path = /datum/nano_module/program/crew_monitor
tguimodule_path = /datum/tgui_module/crew_monitor/ntos
program_icon_state = "crew"
program_key_state = "med_key"
program_menu_icon = "heart"
@@ -10,59 +10,3 @@
requires_ntnet = 1
network_destination = "crew lifesigns monitoring system"
size = 11
/datum/nano_module/program/crew_monitor
name = "Crew monitor"
/datum/nano_module/program/crew_monitor/Topic(href, href_list)
if(..()) return 1
var/turf/T = get_turf(nano_host()) // TODO: Allow setting any using_map.contact_levels from the interface.
if (!T || !(T.z in using_map.player_levels))
to_chat(usr, "<span class='warning'>Unable to establish a connection</span>: You're too far away from the station!")
return 0
if(href_list["track"])
if(isAI(usr))
var/mob/living/silicon/ai/AI = usr
var/mob/living/carbon/human/H = locate(href_list["track"]) in mob_list
if(hassensorlevel(H, SUIT_SENSOR_TRACKING))
AI.ai_actual_track(H)
return 1
/datum/nano_module/program/crew_monitor/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state)
var/list/data = host.initial_data()
data["isAI"] = isAI(user)
var/z = get_z(nano_host())
var/list/map_levels = using_map.get_map_levels(z, TRUE, om_range = DEFAULT_OVERMAP_RANGE)
data["map_levels"] = map_levels
data["crewmembers"] = list()
for(var/zlevel in map_levels)
data["crewmembers"] += crew_repository.health_data(zlevel)
if(!data["map_levels"].len)
to_chat(user, "<span class='warning'>The crew monitor doesn't seem like it'll work here.</span>")
if(program)
program.kill_program()
if(ui)
ui.close()
return
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open)
if(!ui)
ui = new(user, src, ui_key, "crew_monitor.tmpl", "Crew Monitoring Computer", 900, 800, state = state)
// adding a template with the key "mapContent" enables the map ui functionality
ui.add_template("mapContent", "crew_monitor_map_content.tmpl")
// adding a template with the key "mapHeader" replaces the map header content
ui.add_template("mapHeader", "crew_monitor_map_header.tmpl")
if(!(ui.map_z_level in data["map_levels"]))
ui.set_map_z_level(data["map_levels"][1])
ui.set_initial_data(data)
ui.open()
// should make the UI auto-update; doesn't seem to?
ui.set_auto_update(1)

View File

@@ -5,7 +5,7 @@
access = access_medical
cost = 625
p_drain = 0.025
var/datum/nano_module/program/crew_monitor/arscreen
var/datum/tgui_module/crew_monitor/arscreen
New()
..()
@@ -17,7 +17,7 @@
activate()
if((. = ..()))
arscreen.ui_interact(nif.human,"main",null,1,nif_state)
arscreen.tgui_interact(nif.human, "main", null, 1, state = GLOB.tgui_nif_state)
return TRUE
deactivate()

View File

@@ -1,11 +1,12 @@
/datum/tgui_module/crew_monitor
name = "Crew monitor"
tgui_id = "CrewMonitor"
/datum/tgui_module/crew_monitor/tgui_act(action, params)
if(..())
return TRUE
var/turf/T = get_turf(tgui_host())
var/turf/T = get_turf(usr)
if(!T || !(T.z in using_map.player_levels))
to_chat(usr, "<span class='warning'><b>Unable to establish a connection</b>: You're too far away from the station!</span>")
return FALSE
@@ -20,7 +21,7 @@
return TRUE
/datum/tgui_module/crew_monitor/tgui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_default_state)
var/z = get_z(tgui_host())
var/z = get_z(user)
var/list/map_levels = using_map.get_map_levels(z, TRUE, om_range = DEFAULT_OVERMAP_RANGE)
if(!map_levels.len)
@@ -31,7 +32,7 @@
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
ui = new(user, src, ui_key, "CrewMonitor", name, 800, 600, master_ui, state)
ui = new(user, src, ui_key, tgui_id, name, 800, 600, master_ui, state)
ui.autoupdate = TRUE
ui.open()
@@ -41,7 +42,7 @@
data["isAI"] = isAI(user)
var/z = get_z(tgui_host())
var/z = get_z(user)
var/list/map_levels = uniquelist(using_map.get_map_levels(z, TRUE, om_range = DEFAULT_OVERMAP_RANGE))
data["map_levels"] = map_levels
@@ -50,3 +51,32 @@
data["crewmembers"] += crew_repository.health_data(zlevel)
return data
/datum/tgui_module/crew_monitor/ntos
tgui_id = "NtosCrewMonitor"
/datum/tgui_module/crew_monitor/ntos/tgui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_ntos_state)
. = ..(user, ui_key, ui, force_open, master_ui, GLOB.tgui_ntos_state)
/datum/tgui_module/crew_monitor/ntos/tgui_static_data()
. = ..()
var/datum/computer_file/program/host = tgui_host()
if(istype(host) && host.computer)
. += host.computer.get_header_data()
/datum/tgui_module/crew_monitor/ntos/tgui_act(action, params)
if(..())
return
var/datum/computer_file/program/host = tgui_host()
if(istype(host) && host.computer)
if(action == "PC_exit")
host.computer.kill_program()
return TRUE
if(action == "PC_shutdown")
host.computer.shutdown_computer()
return TRUE
if(action == "PC_minimize")
host.computer.minimize_program(usr)
return TRUE

View File

@@ -0,0 +1,26 @@
GLOBAL_DATUM_INIT(tgui_glasses_state, /datum/tgui_state/glasses_state, new)
/datum/tgui_state/glasses_state/can_use_topic(var/src_object, var/mob/user)
if(ishuman(user))
var/mob/living/carbon/human/H = user
if(H.glasses == src_object)
return user.shared_tgui_interaction()
return STATUS_CLOSE
GLOBAL_DATUM_INIT(tgui_nif_state, /datum/tgui_state/nif_state, new)
/datum/tgui_state/nif_state/can_use_topic(var/src_object, var/mob/user)
if(ishuman(user))
var/mob/living/carbon/human/H = user
if(H.nif && H.nif.stat == NIF_WORKING && src_object == H.nif)
return user.shared_tgui_interaction()
return STATUS_CLOSE
GLOBAL_DATUM_INIT(tgui_commlink_state, /datum/tgui_state/commlink_state, new)
/datum/tgui_state/commlink_state/can_use_topic(var/src_object, var/mob/user)
if(ishuman(user))
var/mob/living/carbon/human/H = user
if(H.nif && H.nif.stat == NIF_WORKING && H.nif.comm == src_object)
return user.shared_tgui_interaction()
return STATUS_CLOSE

View File

@@ -4,8 +4,19 @@ import { Window } from "../layouts";
import { NanoMap, Box, Table, Button, Tabs, Icon, NumberInput } from "../components";
import { TableCell } from '../components/Table';
import { COLORS } from '../constants.js';
import { Fragment } from 'inferno';
export const CrewMonitor = (props, context) => {
export const CrewMonitor = () => {
return (
<Window resizable>
<Window.Content>
<CrewMonitorContent />
</Window.Content>
</Window>
);
};
export const CrewMonitorContent = (props, context) => {
const { act, data, config } = useBackend(context);
const [tabIndex, setTabIndex] = useLocalState(context, 'tabIndex', 0);
const crew = sortBy(
@@ -136,8 +147,7 @@ export const CrewMonitor = (props, context) => {
}
return (
<Window resizable>
<Window.Content>
<Fragment>
<Tabs>
<Tabs.Tab
key="DataView"
@@ -155,7 +165,6 @@ export const CrewMonitor = (props, context) => {
<Box m={2}>
{body}
</Box>
</Window.Content>
</Window>
</Fragment>
);
};

View File

@@ -0,0 +1,12 @@
import { NtosWindow } from '../layouts';
import { CrewMonitorContent } from './CrewMonitor';
export const NtosCrewMonitor = () => {
return (
<NtosWindow resizable>
<NtosWindow.Content>
<CrewMonitorContent />
</NtosWindow.Content>
</NtosWindow>
);
};

File diff suppressed because one or more lines are too long

View File

@@ -3463,6 +3463,7 @@
#include "code\modules\tgui\states\hands.dm"
#include "code\modules\tgui\states\human_adjacent.dm"
#include "code\modules\tgui\states\inventory.dm"
#include "code\modules\tgui\states\inventory_vr.dm"
#include "code\modules\tgui\states\not_incapacitated.dm"
#include "code\modules\tgui\states\notcontained.dm"
#include "code\modules\tgui\states\ntos.dm"