From cb20a8e15bd9c495ccd779b773ffbc9b8d260053 Mon Sep 17 00:00:00 2001 From: Geeves Date: Thu, 28 Sep 2023 01:56:55 +0200 Subject: [PATCH] Docking Controller TGUI (#17435) * Docking Controller TGUI * linmter --- .../airlock_docking_controller.dm | 65 ++++---- .../airlock_docking_controller_multi.dm | 86 +++++------ .../simple_docking_controller.dm | 49 +++--- code/modules/shuttles/escape_pods.dm | 65 ++++---- html/changelogs/geeves-docking_tgui.yml | 6 + nano/templates/docking_airlock_console.tmpl | 96 ------------ nano/templates/escape_pod_berth_console.tmpl | 42 ------ nano/templates/escape_pod_console.tmpl | 95 ------------ nano/templates/multi_docking_console.tmpl | 37 ----- nano/templates/simple_docking_console.tmpl | 99 ------------- .../templates/simple_docking_console_pod.tmpl | 101 ------------- .../tgui/interfaces/DockingAirlockConsole.tsx | 128 ++++++++++++++++ .../tgui/interfaces/EscapePodBerthConsole.tsx | 63 ++++++++ .../tgui/interfaces/EscapePodConsole.tsx | 140 ++++++++++++++++++ .../tgui/interfaces/MultiDockingConsole.tsx | 56 +++++++ .../tgui/interfaces/SimpleDockingConsole.tsx | 122 +++++++++++++++ 16 files changed, 628 insertions(+), 622 deletions(-) create mode 100644 html/changelogs/geeves-docking_tgui.yml delete mode 100644 nano/templates/docking_airlock_console.tmpl delete mode 100644 nano/templates/escape_pod_berth_console.tmpl delete mode 100644 nano/templates/escape_pod_console.tmpl delete mode 100644 nano/templates/multi_docking_console.tmpl delete mode 100644 nano/templates/simple_docking_console.tmpl delete mode 100644 nano/templates/simple_docking_console_pod.tmpl create mode 100644 tgui/packages/tgui/interfaces/DockingAirlockConsole.tsx create mode 100644 tgui/packages/tgui/interfaces/EscapePodBerthConsole.tsx create mode 100644 tgui/packages/tgui/interfaces/EscapePodConsole.tsx create mode 100644 tgui/packages/tgui/interfaces/MultiDockingConsole.tsx create mode 100644 tgui/packages/tgui/interfaces/SimpleDockingConsole.tsx diff --git a/code/game/machinery/embedded_controller/airlock_docking_controller.dm b/code/game/machinery/embedded_controller/airlock_docking_controller.dm index 1aea8be5282..ed4226dac69 100644 --- a/code/game/machinery/embedded_controller/airlock_docking_controller.dm +++ b/code/game/machinery/embedded_controller/airlock_docking_controller.dm @@ -11,10 +11,14 @@ docking_program = new/datum/computer/file/embedded_program/docking/airlock(src, airlock_program) program = docking_program -/obj/machinery/embedded_controller/radio/airlock/docking_port/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - var/data[0] +/obj/machinery/embedded_controller/radio/airlock/docking_port/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "DockingAirlockConsole", name, ui_x=470, ui_y=250) + ui.open() - data = list( +/obj/machinery/embedded_controller/radio/airlock/docking_port/ui_data(mob/user) + return list( "chamber_pressure" = round(airlock_program.memory["chamber_sensor_pressure"]), "exterior_status" = airlock_program.memory["exterior_status"], "interior_status" = airlock_program.memory["interior_status"], @@ -24,42 +28,29 @@ "override_enabled" = docking_program.override_enabled ) - ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open) - - if (!ui) - ui = new(user, src, ui_key, "docking_airlock_console.tmpl", name, 470, 290) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/obj/machinery/embedded_controller/radio/airlock/docking_port/Topic(href, href_list) - if(..()) +/obj/machinery/embedded_controller/radio/airlock/docking_port/ui_act(action, params) + . = ..() + if(.) return - usr.set_machine(src) - src.add_fingerprint(usr) - - var/clean = 0 - switch(href_list["command"]) //anti-HTML-hacking checks - if("cycle_ext") - clean = 1 - if("cycle_int") - clean = 1 - if("force_ext") - clean = 1 - if("force_int") - clean = 1 - if("abort") - clean = 1 - if("toggle_override") - clean = 1 - - if(clean) - program.receive_user_command(href_list["command"]) - - return 1 - - + if(action == "command") + var/clean = FALSE + switch(params["command"]) //anti-HTML-hacking checks + if("cycle_ext") + clean = TRUE + if("cycle_int") + clean = TRUE + if("force_ext") + clean = TRUE + if("force_int") + clean = TRUE + if("abort") + clean = TRUE + if("toggle_override") + clean = TRUE + if(clean) + program.receive_user_command(params["command"]) + return TRUE //A docking controller for an airlock based docking port /datum/computer/file/embedded_program/docking/airlock diff --git a/code/game/machinery/embedded_controller/airlock_docking_controller_multi.dm b/code/game/machinery/embedded_controller/airlock_docking_controller_multi.dm index 71882bb1235..a9d5c5a7208 100644 --- a/code/game/machinery/embedded_controller/airlock_docking_controller_multi.dm +++ b/code/game/machinery/embedded_controller/airlock_docking_controller_multi.dm @@ -22,32 +22,23 @@ child_names[tags[i]] = names[i] -/obj/machinery/embedded_controller/radio/docking_port_multi/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - var/data[0] +/obj/machinery/embedded_controller/radio/docking_port_multi/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "MultiDockingConsole", name, ui_x=470, ui_y=290) + ui.open() +/obj/machinery/embedded_controller/radio/docking_port_multi/ui_data(mob/user) var/list/airlocks[child_names.len] var/i = 1 for (var/child_tag in child_names) airlocks[i++] = list("name"=child_names[child_tag], "override_enabled"=(docking_program.children_override[child_tag] == "enabled")) - data = list( + return list( "docking_status" = docking_program.get_docking_status(), "airlocks" = airlocks ) - ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open) - - if (!ui) - ui = new(user, src, ui_key, "multi_docking_console.tmpl", name, 470, 290) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/obj/machinery/embedded_controller/radio/docking_port_multi/Topic(href, href_list) - return - - - //a docking port based on an airlock /obj/machinery/embedded_controller/radio/airlock/docking_port_multi name = "docking port controller" @@ -60,10 +51,14 @@ airlock_program = new/datum/computer/file/embedded_program/airlock/multi_docking(src) program = airlock_program -/obj/machinery/embedded_controller/radio/airlock/docking_port_multi/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - var/data[0] +/obj/machinery/embedded_controller/radio/airlock/docking_port_multi/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "DockingAirlockConsole", name, ui_x=470, ui_y=250) + ui.open() - data = list( +/obj/machinery/embedded_controller/radio/airlock/docking_port_multi/ui_data(mob/user) + return list( "chamber_pressure" = round(airlock_program.memory["chamber_sensor_pressure"]), "exterior_status" = airlock_program.memory["exterior_status"], "interior_status" = airlock_program.memory["interior_status"], @@ -73,40 +68,29 @@ "override_enabled" = airlock_program.override_enabled ) - ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open) - - if (!ui) - ui = new(user, src, ui_key, "docking_airlock_console.tmpl", name, 470, 290) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/obj/machinery/embedded_controller/radio/airlock/docking_port_multi/Topic(href, href_list) - if(..()) +/obj/machinery/embedded_controller/radio/airlock/docking_port_multi/ui_act(action, params) + . = ..() + if(.) return - usr.set_machine(src) - src.add_fingerprint(usr) - - var/clean = 0 - switch(href_list["command"]) //anti-HTML-hacking checks - if("cycle_ext") - clean = 1 - if("cycle_int") - clean = 1 - if("force_ext") - clean = 1 - if("force_int") - clean = 1 - if("abort") - clean = 1 - if("toggle_override") - clean = 1 - - if(clean) - program.receive_user_command(href_list["command"]) - - return 1 + if(action == "command") + var/clean = FALSE + switch(params["command"]) //anti-HTML-hacking checks + if("cycle_ext") + clean = TRUE + if("cycle_int") + clean = TRUE + if("force_ext") + clean = TRUE + if("force_int") + clean = TRUE + if("abort") + clean = TRUE + if("toggle_override") + clean = TRUE + if(clean) + program.receive_user_command(params["command"]) + return TRUE diff --git a/code/game/machinery/embedded_controller/simple_docking_controller.dm b/code/game/machinery/embedded_controller/simple_docking_controller.dm index 21c9f88f353..a631513212e 100644 --- a/code/game/machinery/embedded_controller/simple_docking_controller.dm +++ b/code/game/machinery/embedded_controller/simple_docking_controller.dm @@ -9,42 +9,35 @@ docking_program = new/datum/computer/file/embedded_program/docking/simple(src) program = docking_program -/obj/machinery/embedded_controller/radio/simple_docking_controller/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - var/data[0] +/obj/machinery/embedded_controller/radio/simple_docking_controller/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "SimpleDockingConsole", name, ui_x=470, ui_y=200) + ui.open() - data = list( +/obj/machinery/embedded_controller/radio/simple_docking_controller/ui_data(mob/user) + return list( "docking_status" = docking_program.get_docking_status(), "override_enabled" = docking_program.override_enabled, "door_state" = docking_program.memory["door_status"]["state"], "door_lock" = docking_program.memory["door_status"]["lock"] ) - ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open) +/obj/machinery/embedded_controller/radio/simple_docking_controller/ui_act(action, params) + . = ..() + if(.) + return - if (!ui) - ui = new(user, src, ui_key, "simple_docking_console.tmpl", name, 470, 290) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/obj/machinery/embedded_controller/radio/simple_docking_controller/Topic(href, href_list) - if(..()) - return 1 - - usr.set_machine(src) - src.add_fingerprint(usr) - - var/clean = 0 - switch(href_list["command"]) //anti-HTML-hacking checks - if("force_door") - clean = 1 - if("toggle_override") - clean = 1 - - if(clean) - program.receive_user_command(href_list["command"]) - - return 0 + if(action == "command") + var/clean = FALSE + switch(params["command"]) //anti-HTML-hacking checks + if("force_door") + clean = TRUE + if("toggle_override") + clean = TRUE + if(clean) + program.receive_user_command(params["command"]) + return TRUE //A docking controller program for a simple door based docking port diff --git a/code/modules/shuttles/escape_pods.dm b/code/modules/shuttles/escape_pods.dm index 3202544d3c6..e7d3f14dcf3 100644 --- a/code/modules/shuttles/escape_pods.dm +++ b/code/modules/shuttles/escape_pods.dm @@ -43,10 +43,14 @@ var/list/escape_pods_by_name = list() name = "escape pod controller" var/datum/shuttle/autodock/ferry/escape_pod/pod -/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - var/data[0] +/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "EscapePodConsole", name, ui_x=470, ui_y=270) + ui.open() - data = list( +/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod/ui_data(mob/user) + return list( "docking_status" = docking_program.get_docking_status(), "override_enabled" = docking_program.override_enabled, "door_state" = docking_program.memory["door_status"]["state"], @@ -55,28 +59,21 @@ var/list/escape_pods_by_name = list() "is_armed" = pod.arming_controller.armed ) - ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open) - - if (!ui) - ui = new(user, src, ui_key, "escape_pod_console.tmpl", name, 470, 290) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod/Topic(href, href_list) - if(..()) - return 1 - - if(href_list["manual_arm"]) - pod.arming_controller.arm() - if(href_list["force_launch"]) - if (pod.can_force()) - pod.force_launch(src) - else if (evacuation_controller.has_evacuated() && pod.can_launch()) //allow players to manually launch ahead of time if the shuttle leaves - pod.launch(src) - - return 0 +/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod/ui_act(action, params) + . = ..() + if(.) + return + if(action == "command") + if(params["command"] == "manual_arm") + pod.arming_controller.arm() + return TRUE + if(params["command"] == "force_launch") + if (pod.can_force()) + pod.force_launch(src) + else if (evacuation_controller.has_evacuated() && pod.can_launch()) //allow players to manually launch ahead of time if the shuttle leaves + pod.launch(src) + return TRUE //This controller is for the escape pod berth (station side) @@ -88,28 +85,24 @@ var/list/escape_pods_by_name = list() docking_program = new/datum/computer/file/embedded_program/docking/simple/escape_pod(src) program = docking_program -/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - var/data[0] +/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "EscapePodBerthConsole", name, ui_x=470, ui_y=200) + ui.open() - var/armed = null +/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth/ui_data(mob/user) + var/armed = FALSE if (istype(docking_program, /datum/computer/file/embedded_program/docking/simple/escape_pod)) var/datum/computer/file/embedded_program/docking/simple/escape_pod/P = docking_program armed = P.armed - data = list( + return list( "docking_status" = docking_program.get_docking_status(), "override_enabled" = docking_program.override_enabled, "armed" = armed ) - ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open) - - if (!ui) - ui = new(user, src, ui_key, "escape_pod_berth_console.tmpl", name, 470, 290) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - /obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth/emag_act(var/remaining_charges, var/mob/user) if (!emagged) to_chat(user, "You emag the [src], arming the escape pod!") diff --git a/html/changelogs/geeves-docking_tgui.yml b/html/changelogs/geeves-docking_tgui.yml new file mode 100644 index 00000000000..19ba017a8c0 --- /dev/null +++ b/html/changelogs/geeves-docking_tgui.yml @@ -0,0 +1,6 @@ +author: Geeves + +delete-after: True + +changes: + - rscadd: "Converted docking controllers and escape pod panels to TGUI." diff --git a/nano/templates/docking_airlock_console.tmpl b/nano/templates/docking_airlock_console.tmpl deleted file mode 100644 index 08d4dbf0e42..00000000000 --- a/nano/templates/docking_airlock_console.tmpl +++ /dev/null @@ -1,96 +0,0 @@ -
-
-
- Docking Port Status: -
- {{if data.docking_status == "docked"}} -
- {{if !data.override_enabled}} - DOCKED - {{else}} - DOCKED-OVERRIDE ENABLED - {{/if}} - - {{:helper.link('Override', 'alert', {'command' : 'toggle_override'}, null, data.override_enabled ? 'redButton' : null)}} - -
- {{else data.docking_status == "docking"}} -
- {{if !data.override_enabled}} - DOCKING - {{else}} - DOCKING-OVERRIDE ENABLED - {{/if}} - - {{:helper.link('Override', 'alert', {'command' : 'toggle_override'}, null, data.override_enabled ? 'redButton' : null)}} - -
- {{else data.docking_status == "undocking"}} -
- {{if !data.override_enabled}} - UNDOCKING - {{else}} - UNDOCKING-OVERRIDE ENABLED - {{/if}} - - {{:helper.link('Override', 'alert', {'command' : 'toggle_override'}, null, data.override_enabled ? 'redButton' : null)}} - -
- {{else data.docking_status == "undocked"}} -
- {{if !data.override_enabled}} - NOT IN USE - {{else}} - OVERRIDE ENABLED - {{/if}} - - {{:helper.link('Override', 'alert', {'command' : 'toggle_override'}, null, data.override_enabled ? 'redButton' : null)}} - -
- {{else}} - ERROR - {{:helper.link('Override', 'alert', {'command' : 'toggle_override'}, null, data.override_enabled ? 'redButton' : null)}} - {{/if}} -
-
-
-
-
- Chamber Pressure: -
-
- {{:helper.displayBar(data.chamber_pressure, 0, 200, (data.chamber_pressure < 80 || data.chamber_pressure > 120) ? 'bad' : (data.chamber_pressure < 95 || data.chamber_pressure > 110) ? 'average' : 'good')}} -
- {{:data.chamber_pressure}} kPa -
-
-
-
-
-
-
- {{:helper.link('Cycle to Exterior', 'arrowthickstop-1-w', {'command' : 'cycle_ext'}, (data.processing || data.airlock_disabled) ? 'disabled' : null)}} - {{:helper.link('Cycle to Interior', 'arrowthickstop-1-e', {'command' : 'cycle_int'}, (data.processing || data.airlock_disabled) ? 'disabled' : null)}} -
-
- {{if data.airlock_disabled}} - {{:helper.link('Force exterior door', 'alert', {'command' : 'force_ext'}, 'disabled', null)}} - {{:helper.link('Force interior door', 'alert', {'command' : 'force_int'}, 'disabled', null)}} - {{else}} - {{if data.interior_status.state == "open"}} - {{:helper.link('Force exterior door', 'alert', {'command' : 'force_ext'}, null, 'redButton')}} - {{else}} - {{:helper.link('Force exterior door', 'alert', {'command' : 'force_ext'}, null, data.processing ? 'yellowButton' : null)}} - {{/if}} - {{if data.exterior_status.state == "open"}} - {{:helper.link('Force interior door', 'alert', {'command' : 'force_int'}, null, 'redButton')}} - {{else}} - {{:helper.link('Force interior door', 'alert', {'command' : 'force_int'}, null, data.processing ? 'yellowButton' : null)}} - {{/if}} - {{/if}} -
-
-
- {{:helper.link('Abort', 'cancel', {'command' : 'abort'}, (data.processing && !data.airlock_disabled) ? null : 'disabled', (data.processing && !data.airlock_disabled) ? 'redButton' : null)}} -
-
\ No newline at end of file diff --git a/nano/templates/escape_pod_berth_console.tmpl b/nano/templates/escape_pod_berth_console.tmpl deleted file mode 100644 index 434fa386cf1..00000000000 --- a/nano/templates/escape_pod_berth_console.tmpl +++ /dev/null @@ -1,42 +0,0 @@ -
-
-
- Escape Pod Status: -
-
- {{if data.docking_status == "docked"}} - {{if data.armed}} - ARMED - {{else}} - SYSTEMS OK - {{/if}} - {{else data.docking_status == "undocking"}} - EJECTING-STAND CLEAR! - {{else data.docking_status == "undocked"}} - POD EJECTED - {{else data.docking_status == "docking"}} - INITIALIZING... - {{else}} - ERROR - {{/if}} -
-
-
-
-
-
- {{if data.armed}} - {{if data.docking_status == "docked"}} - {{:helper.link('Force exterior door', 'alert', {'command' : 'force_door'}, data.override_enabled ? null : 'disabled', null)}} - {{:helper.link('Override', 'alert', {'command' : 'toggle_override'}, null, data.override_enabled ? 'redButton' : null)}} - {{else}} - {{:helper.link('Force exterior door', 'alert', {'command' : 'force_door'}, data.override_enabled ? null : 'disabled', data.override_enabled ? 'redButton' : null)}} - {{:helper.link('Override', 'alert', {'command' : 'toggle_override'}, null, data.override_enabled ? 'redButton' : 'yellowButton')}} - {{/if}} - {{else}} - {{:helper.link('Force exterior door', 'alert', {'command' : 'force_door'}, 'disabled', null)}} - {{:helper.link('Override', 'alert', {'command' : 'toggle_override'}, 'disabled', null)}} - {{/if}} -
-
-
\ No newline at end of file diff --git a/nano/templates/escape_pod_console.tmpl b/nano/templates/escape_pod_console.tmpl deleted file mode 100644 index aa24d3a9cef..00000000000 --- a/nano/templates/escape_pod_console.tmpl +++ /dev/null @@ -1,95 +0,0 @@ -
-
-
- Escape Pod Status: -
-
- {{if data.docking_status == "docked"}} - {{if data.is_armed}} - ARMED - {{else}} - SYSTEMS OK - {{/if}} - {{else data.docking_status == "undocking"}} - EJECTING - {{else data.docking_status == "undocked"}} - POD EJECTED - {{else data.docking_status == "docking"}} - DOCKING - {{else}} - ERROR - {{/if}} -
-
-
-
-
-
- Docking Hatch: -
-
- {{if data.docking_status == "docked"}} - {{if data.door_state == "open"}} - OPEN - {{else data.door_state == "closed"}} - CLOSED - {{else}} - ERROR - {{/if}} - {{else data.docking_status == "docking"}} - {{if data.door_state == "open"}} - OPEN - {{else data.door_state == "closed" && data.door_lock == "locked"}} - SECURED - {{else data.door_state == "closed" && data.door_lock == "unlocked"}} - UNSECURED - {{else}} - ERROR - {{/if}} - {{else data.docking_status == "undocking"}} - {{if data.door_state == "open"}} - OPEN - {{else data.door_state == "closed" && data.door_lock == "locked"}} - SECURED - {{else data.door_state == "closed" && data.door_lock == "unlocked"}} - UNSECURED - {{else}} - ERROR - {{/if}} - {{else data.docking_status == "undocked"}} - {{if data.door_state == "open"}} - OPEN - {{else data.door_state == "closed" && data.door_lock == "locked"}} - SECURED - {{else data.door_state == "closed" && data.door_lock == "unlocked"}} - UNSECURED - {{else}} - ERROR - {{/if}} - {{else}} - ERROR - {{/if}} -
-
-
-
-
-
- {{if data.docking_status == "docked"}} - {{:helper.link('Force exterior door', 'alert', {'command' : 'force_door'}, data.override_enabled ? null : 'disabled', null)}} - {{:helper.link('Override', 'alert', {'command' : 'toggle_override'}, null, data.override_enabled ? 'redButton' : null)}} - {{else}} - {{:helper.link('Force exterior door', 'alert', {'command' : 'force_door'}, data.override_enabled ? null : 'disabled', data.override_enabled ? 'redButton' : null)}} - {{:helper.link('Override', 'alert', {'command' : 'toggle_override'}, null, data.override_enabled ? 'redButton' : 'yellowButton')}} - {{/if}} -
-
-
-
-
-
- {{:helper.link('ARM', 'alert', {'command' : 'manual_arm'}, data.is_armed ? 'disabled' : null, data.is_armed ? 'redButton' : 'yellowButton')}} - {{:helper.link('MANUAL EJECT', 'alert', {'command' : 'force_launch'}, data.can_force ? null : 'disabled', data.can_force ? 'yellowButton' : null)}} -
-
-
diff --git a/nano/templates/multi_docking_console.tmpl b/nano/templates/multi_docking_console.tmpl deleted file mode 100644 index 9515799644e..00000000000 --- a/nano/templates/multi_docking_console.tmpl +++ /dev/null @@ -1,37 +0,0 @@ -
-
-
- Docking Port Status: -
-
- {{if data.docking_status == "docked"}} - DOCKED - {{else data.docking_status == "docking"}} - DOCKING - {{else data.docking_status == "undocking"}} - UNDOCKING - {{else data.docking_status == "undocked"}} - NOT IN USE - {{else}} - ERROR - {{/if}} -
-
-
- -{{for data.airlocks}} -
-
-
- {{:value.name}} -
-
- {{if value.override_enabled}} - OVERRIDE ENABLED - {{else}} - STATUS OK - {{/if}} -
-
-
-{{/for}} \ No newline at end of file diff --git a/nano/templates/simple_docking_console.tmpl b/nano/templates/simple_docking_console.tmpl deleted file mode 100644 index 73c8ff8e3e1..00000000000 --- a/nano/templates/simple_docking_console.tmpl +++ /dev/null @@ -1,99 +0,0 @@ -
-
-
- Docking Port Status: -
-
- {{if data.docking_status == "docked"}} - {{if !data.override_enabled}} - DOCKED - {{else}} - DOCKED-OVERRIDE ENABLED - {{/if}} - {{else data.docking_status == "docking"}} - {{if !data.override_enabled}} - DOCKING - {{else}} - DOCKING-OVERRIDE ENABLED - {{/if}} - {{else data.docking_status == "undocking"}} - {{if !data.override_enabled}} - UNDOCKING - {{else}} - UNDOCKING-OVERRIDE ENABLED - {{/if}} - {{else data.docking_status == "undocked"}} - {{if !data.override_enabled}} - NOT IN USE - {{else}} - OVERRIDE ENABLED - {{/if}} - {{else}} - ERROR - {{/if}} -
-
-
-
-
-
- Docking Hatch: -
-
- {{if data.docking_status == "docked"}} - {{if data.door_state == "open"}} - OPEN - {{else data.door_state == "closed"}} - CLOSED - {{else}} - ERROR - {{/if}} - {{else data.docking_status == "docking"}} - {{if data.door_state == "open"}} - OPEN - {{else data.door_state == "closed" && data.door_lock == "locked"}} - SECURED - {{else data.door_state == "closed" && data.door_lock == "unlocked"}} - UNSECURED - {{else}} - ERROR - {{/if}} - {{else data.docking_status == "undocking"}} - {{if data.door_state == "open"}} - OPEN - {{else data.door_state == "closed" && data.door_lock == "locked"}} - SECURED - {{else data.door_state == "closed" && data.door_lock == "unlocked"}} - UNSECURED - {{else}} - ERROR - {{/if}} - {{else data.docking_status == "undocked"}} - {{if data.door_state == "open"}} - OPEN - {{else data.door_state == "closed" && data.door_lock == "locked"}} - SECURED - {{else data.door_state == "closed" && data.door_lock == "unlocked"}} - UNSECURED - {{else}} - ERROR - {{/if}} - {{else}} - ERROR - {{/if}} -
-
-
-
-
-
- {{if data.docking_status == "docked"}} - {{:helper.link('Force exterior door', 'alert', {'command' : 'force_door'}, data.override_enabled ? null : 'disabled', null)}} - {{:helper.link('Override', 'alert', {'command' : 'toggle_override'}, null, data.override_enabled ? 'redButton' : null)}} - {{else}} - {{:helper.link('Force exterior door', 'alert', {'command' : 'force_door'}, data.override_enabled ? null : 'disabled', data.override_enabled ? 'redButton' : null)}} - {{:helper.link('Override', 'alert', {'command' : 'toggle_override'}, null, data.override_enabled ? 'redButton' : 'yellowButton')}} - {{/if}} -
-
-
\ No newline at end of file diff --git a/nano/templates/simple_docking_console_pod.tmpl b/nano/templates/simple_docking_console_pod.tmpl deleted file mode 100644 index 07f055ea2cc..00000000000 --- a/nano/templates/simple_docking_console_pod.tmpl +++ /dev/null @@ -1,101 +0,0 @@ -
-
-
- Docking Port Status: -
-
- {{if data.docking_status == "docked"}} - {{if !data.override_enabled}} - DOCKED - {{else}} - DOCKED-OVERRIDE ENABLED - {{/if}} - {{else data.docking_status == "docking"}} - {{if !data.override_enabled}} - DOCKING - {{else}} - DOCKING-OVERRIDE ENABLED - {{/if}} - {{else data.docking_status == "undocking"}} - {{if !data.override_enabled}} - UNDOCKING - {{else}} - UNDOCKING-OVERRIDE ENABLED - {{/if}} - {{else data.docking_status == "undocked"}} - {{if !data.override_enabled}} - NOT IN USE - {{else}} - OVERRIDE ENABLED - {{/if}} - {{else}} - ERROR - {{/if}} -
-
-
-
-
-
- Docking Hatch: -
-
- {{if data.docking_status == "docked"}} - {{if data.door_state == "open"}} - OPEN - {{else data.door_state == "closed"}} - CLOSED - {{else}} - ERROR - {{/if}} - {{else data.docking_status == "docking"}} - {{if data.door_state == "open"}} - OPEN - {{else data.door_state == "closed" && data.door_lock == "locked"}} - SECURED - {{else data.door_state == "closed" && data.door_lock == "unlocked"}} - UNSECURED - {{else}} - ERROR - {{/if}} - {{else data.docking_status == "undocking"}} - {{if data.door_state == "open"}} - OPEN - {{else data.door_state == "closed" && data.door_lock == "locked"}} - SECURED - {{else data.door_state == "closed" && data.door_lock == "unlocked"}} - UNSECURED - {{else}} - ERROR - {{/if}} - {{else data.docking_status == "undocked"}} - {{if data.door_state == "open"}} - OPEN - {{else data.door_state == "closed" && data.door_lock == "locked"}} - SECURED - {{else data.door_state == "closed" && data.door_lock == "unlocked"}} - UNSECURED - {{else}} - ERROR - {{/if}} - {{else}} - ERROR - {{/if}} -
-
-
-
-
-
- {{if data.docking_status == "docked"}} - {{:helper.link('Force exterior door', 'alert', {'command' : 'force_door'}, data.override_enabled ? null : 'disabled', null)}} - {{:helper.link('Override', 'alert', {'command' : 'toggle_override'}, null, data.override_enabled ? 'redButton' : null)}} - {{:helper.link('MANUAL EJECT', 'alert', {'command' : 'toggle_override'}, 'disabled', null)}} - {{else}} - {{:helper.link('Force exterior door', 'alert', {'command' : 'force_door'}, data.override_enabled ? null : 'disabled', data.override_enabled ? 'redButton' : null)}} - {{:helper.link('Override', 'alert', {'command' : 'toggle_override'}, null, data.override_enabled ? 'redButton' : 'yellowButton')}} - {{:helper.link('MANUAL EJECT', 'alert', {'command' : 'toggle_override'}, data.can_force ? null : 'disabled', data.can_force ? 'redButton' : null)}} - {{/if}} -
-
-
\ No newline at end of file diff --git a/tgui/packages/tgui/interfaces/DockingAirlockConsole.tsx b/tgui/packages/tgui/interfaces/DockingAirlockConsole.tsx new file mode 100644 index 00000000000..54d4ae73d28 --- /dev/null +++ b/tgui/packages/tgui/interfaces/DockingAirlockConsole.tsx @@ -0,0 +1,128 @@ +import { useBackend } from '../backend'; +import { Box, Button, LabeledList, ProgressBar, Section } from '../components'; +import { Window } from '../layouts'; + +export type StatusData = { + state: string; + lock: string; +}; + +export type DockingAirlockConsoleData = { + chamber_pressure: number; + exterior_status: StatusData; + interior_status: StatusData; + processing: boolean; + docking_status: string; + airlock_disabled: boolean; + override_enabled: boolean; +}; + +export const DockingAirlockConsole = (props, context) => { + const { act, data } = useBackend(context); + + return ( + + +
+ + + + {data.docking_status === 'docked' ? ( + data.override_enabled ? ( + Docked - Override Enabled + ) : ( + Docked + ) + ) : data.docking_status === 'docking' ? ( + data.override_enabled ? ( + Docking - Override Enabled + ) : ( + Docking + ) + ) : data.docking_status === 'undocking' ? ( + data.override_enabled ? ( + Undocking - Override Enabled + ) : ( + Undocking + ) + ) : data.docking_status === 'undocked' ? ( + data.override_enabled ? ( + Override Enabled + ) : ( + Not in use + ) + ) : ( + Error + )} + + + + {data.chamber_pressure} kPa + + + + +
+
+ +
+
+
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/EscapePodBerthConsole.tsx b/tgui/packages/tgui/interfaces/EscapePodBerthConsole.tsx new file mode 100644 index 00000000000..4ab7224301a --- /dev/null +++ b/tgui/packages/tgui/interfaces/EscapePodBerthConsole.tsx @@ -0,0 +1,63 @@ +import { useBackend } from '../backend'; +import { Box, Button, LabeledList, Section } from '../components'; +import { Window } from '../layouts'; + +export type EscapePodBerthConsoleData = { + docking_status: string; + override_enabled: boolean; + armed: boolean; +}; + +export const EscapePodBerthConsole = (props, context) => { + const { act, data } = useBackend(context); + + return ( + + +
+ + + + {data.docking_status === 'docked' ? ( + data.armed ? ( + Armed + ) : ( + Systems OK - Awaiting Arming + ) + ) : data.docking_status === 'docking' ? ( + Initializing... + ) : data.docking_status === 'undocking' ? ( + Ejecting - STAND CLEAR! + ) : data.docking_status === 'undocked' ? ( + Pod Ejected + ) : ( + Error + )} + + + +
+
+ +
+
+
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/EscapePodConsole.tsx b/tgui/packages/tgui/interfaces/EscapePodConsole.tsx new file mode 100644 index 00000000000..be75d82fff2 --- /dev/null +++ b/tgui/packages/tgui/interfaces/EscapePodConsole.tsx @@ -0,0 +1,140 @@ +import { useBackend } from '../backend'; +import { Box, Button, LabeledList, Section } from '../components'; +import { Window } from '../layouts'; + +export type EscapePodConsoleData = { + docking_status: string; + override_enabled: boolean; + door_state: string; + door_lock: string; + can_force: boolean; + is_armed: boolean; +}; + +export const EscapePodConsole = (props, context) => { + const { act, data } = useBackend(context); + + return ( + + +
+ + + + {data.docking_status === 'docked' ? ( + data.override_enabled ? ( + Docked - Override Enabled + ) : ( + Docked + ) + ) : data.docking_status === 'docking' ? ( + data.override_enabled ? ( + Docking - Override Enabled + ) : ( + Docking + ) + ) : data.docking_status === 'undocking' ? ( + data.override_enabled ? ( + Undocking - Override Enabled + ) : ( + Undocking + ) + ) : data.docking_status === 'undocked' ? ( + data.override_enabled ? ( + Override Enabled + ) : ( + Not in use + ) + ) : ( + Error + )} + + + {data.docking_status === 'docked' ? ( + data.door_state === 'open' ? ( + Open + ) : data.door_state === 'closed' ? ( + Closed + ) : ( + Error + ) + ) : data.docking_status === 'docking' ? ( + data.door_state === 'open' ? ( + Open + ) : data.door_state === 'closed' && + data.door_lock === 'locked' ? ( + Secured + ) : data.door_state === 'closed' && + data.door_lock === 'unlocked' ? ( + Unsecured + ) : ( + Error + ) + ) : data.docking_status === 'undocking' ? ( + data.door_state === 'open' ? ( + Open + ) : data.door_state === 'closed' && + data.door_lock === 'locked' ? ( + Secured + ) : data.door_state === 'closed' && + data.door_lock === 'unlocked' ? ( + Unsecured + ) : ( + Error + ) + ) : data.docking_status === 'undocked' ? ( + data.door_state === 'open' ? ( + Open + ) : data.door_state === 'closed' && + data.door_lock === 'locked' ? ( + Secured + ) : data.door_state === 'closed' && + data.door_lock === 'unlocked' ? ( + Unsecured + ) : ( + Error + ) + ) : ( + Error + )} + + + +
+
+ +
+
+
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/MultiDockingConsole.tsx b/tgui/packages/tgui/interfaces/MultiDockingConsole.tsx new file mode 100644 index 00000000000..f9dfed0bdd6 --- /dev/null +++ b/tgui/packages/tgui/interfaces/MultiDockingConsole.tsx @@ -0,0 +1,56 @@ +import { useBackend } from '../backend'; +import { Box, LabeledList, Section } from '../components'; +import { Window } from '../layouts'; + +export type AirlockData = { + name: string; + override_enabled: boolean; +}; + +export type MultiDockingConsoleData = { + docking_status: string; + airlocks: AirlockData[]; +}; + +export const MultiDockingConsole = (props, context) => { + const { act, data } = useBackend(context); + + return ( + + +
+ + + + {data.docking_status === 'docked' ? ( + Docked + ) : data.docking_status === 'docking' ? ( + Docking + ) : data.docking_status === 'undocking' ? ( + Undocking + ) : data.docking_status === 'undocked' ? ( + Not in use + ) : ( + Error + )} + + + +
+
+ + {data.airlocks.map((airlock) => ( + + {airlock.override_enabled ? ( + Override Enabled + ) : ( + Status OK + )} + + ))} + +
+
+
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/SimpleDockingConsole.tsx b/tgui/packages/tgui/interfaces/SimpleDockingConsole.tsx new file mode 100644 index 00000000000..b8e21db5442 --- /dev/null +++ b/tgui/packages/tgui/interfaces/SimpleDockingConsole.tsx @@ -0,0 +1,122 @@ +import { useBackend } from '../backend'; +import { Box, Button, LabeledList, Section } from '../components'; +import { Window } from '../layouts'; + +export type SimpleDockingConsoleData = { + docking_status: string; + override_enabled: boolean; + door_state: string; + door_lock: string; +}; + +export const SimpleDockingConsole = (props, context) => { + const { act, data } = useBackend(context); + + return ( + + +
+ + + + {data.docking_status === 'docked' ? ( + data.override_enabled ? ( + Docked - Override Enabled + ) : ( + Docked + ) + ) : data.docking_status === 'docking' ? ( + data.override_enabled ? ( + Docking - Override Enabled + ) : ( + Docking + ) + ) : data.docking_status === 'undocking' ? ( + data.override_enabled ? ( + Undocking - Override Enabled + ) : ( + Undocking + ) + ) : data.docking_status === 'undocked' ? ( + data.override_enabled ? ( + Override Enabled + ) : ( + Not in use + ) + ) : ( + Error + )} + + + {data.docking_status === 'docked' ? ( + data.door_state === 'open' ? ( + Open + ) : data.door_state === 'closed' ? ( + Closed + ) : ( + Error + ) + ) : data.docking_status === 'docking' ? ( + data.door_state === 'open' ? ( + Open + ) : data.door_state === 'closed' && + data.door_lock === 'locked' ? ( + Secured + ) : data.door_state === 'closed' && + data.door_lock === 'unlocked' ? ( + Unsecured + ) : ( + Error + ) + ) : data.docking_status === 'undocking' ? ( + data.door_state === 'open' ? ( + Open + ) : data.door_state === 'closed' && + data.door_lock === 'locked' ? ( + Secured + ) : data.door_state === 'closed' && + data.door_lock === 'unlocked' ? ( + Unsecured + ) : ( + Error + ) + ) : data.docking_status === 'undocked' ? ( + data.door_state === 'open' ? ( + Open + ) : data.door_state === 'closed' && + data.door_lock === 'locked' ? ( + Secured + ) : data.door_state === 'closed' && + data.door_lock === 'unlocked' ? ( + Unsecured + ) : ( + Error + ) + ) : ( + Error + )} + + + +
+
+ +
+
+
+ ); +};