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
+
+
+
+
+
+
+
+
+
+ act('command', { command: 'force_ext' })}
+ />
+ act('command', { command: 'force_int' })}
+ />
+
+
+ act('command', { command: 'abort' })}
+ />
+
+
+
+
+ );
+};
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
+ )}
+
+
+
+
+
+
+ act('command', { command: 'force_door' })}
+ />
+ act('command', { command: 'toggle_override' })}
+ />
+
+
+
+
+ );
+};
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
+ )}
+
+
+
+
+
+
+ act('command', { command: 'force_door' })}
+ />
+ act('command', { command: 'toggle_override' })}
+ />
+
+
+ act('command', { command: 'manual_arm' })}
+ />
+ act('command', { command: 'force_launch' })}
+ />
+
+
+
+
+ );
+};
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
+ )}
+
+
+
+
+
+
+ act('command', { command: 'force_door' })}
+ />
+ act('command', { command: 'toggle_override' })}
+ />
+
+
+
+
+ );
+};