From 33094b36dee6cabd70f208ee4935819c973acf00 Mon Sep 17 00:00:00 2001 From: Geeves Date: Sat, 30 Sep 2023 00:38:14 +0200 Subject: [PATCH] Shuttle TGUI (#17432) * Shuttle TGUI * eqeqeq * escapeescapeescape * bawkses * linter --- .../overmap/ships/computers/shuttle.dm | 16 ++- code/modules/shuttles/shuttle_console.dm | 119 ++++++++--------- .../modules/shuttles/shuttle_console_multi.dm | 34 ++--- .../shuttles/shuttle_console_multi_lift.dm | 32 ++--- code/modules/shuttles/shuttle_emergency.dm | 44 ++++--- code/modules/shuttles/shuttle_lift.dm | 2 +- html/changelogs/geeves-shuttle_tgui.yml | 6 + .../escape_shuttle_control_console.tmpl | 84 ------------ nano/templates/shuttle_control_console.tmpl | 72 ----------- .../shuttle_control_console_antag.tmpl | 82 ------------ .../shuttle_control_console_exploration.tmpl | 89 ------------- .../shuttle_control_console_lift.tmpl | 26 ---- .../shuttle_control_console_multi.tmpl | 79 ------------ .../shuttle_control_console_multi_lift.tmpl | 24 ---- .../EscapeShuttleControlConsole.tsx | 104 +++++++++++++++ .../tgui/interfaces/ShuttleControlConsole.tsx | 91 +++++++++++++ .../interfaces/ShuttleControlConsoleLift.tsx | 54 ++++++++ .../interfaces/ShuttleControlConsoleMulti.tsx | 108 ++++++++++++++++ .../ShuttleControlConsoleMultiAntag.tsx | 120 ++++++++++++++++++ .../ShuttleControlConsoleMultiExplore.tsx | 114 +++++++++++++++++ .../ShuttleControlConsoleMultiLift.tsx | 51 ++++++++ 21 files changed, 776 insertions(+), 575 deletions(-) create mode 100644 html/changelogs/geeves-shuttle_tgui.yml delete mode 100644 nano/templates/escape_shuttle_control_console.tmpl delete mode 100644 nano/templates/shuttle_control_console.tmpl delete mode 100644 nano/templates/shuttle_control_console_antag.tmpl delete mode 100644 nano/templates/shuttle_control_console_exploration.tmpl delete mode 100644 nano/templates/shuttle_control_console_lift.tmpl delete mode 100644 nano/templates/shuttle_control_console_multi.tmpl delete mode 100644 nano/templates/shuttle_control_console_multi_lift.tmpl create mode 100644 tgui/packages/tgui/interfaces/EscapeShuttleControlConsole.tsx create mode 100644 tgui/packages/tgui/interfaces/ShuttleControlConsole.tsx create mode 100644 tgui/packages/tgui/interfaces/ShuttleControlConsoleLift.tsx create mode 100644 tgui/packages/tgui/interfaces/ShuttleControlConsoleMulti.tsx create mode 100644 tgui/packages/tgui/interfaces/ShuttleControlConsoleMultiAntag.tsx create mode 100644 tgui/packages/tgui/interfaces/ShuttleControlConsoleMultiExplore.tsx create mode 100644 tgui/packages/tgui/interfaces/ShuttleControlConsoleMultiLift.tsx diff --git a/code/modules/overmap/ships/computers/shuttle.dm b/code/modules/overmap/ships/computers/shuttle.dm index 7e787fb4a65..bf6d93d45cf 100644 --- a/code/modules/overmap/ships/computers/shuttle.dm +++ b/code/modules/overmap/ships/computers/shuttle.dm @@ -1,7 +1,7 @@ //Shuttle controller computer for shuttles going between sectors /obj/machinery/computer/shuttle_control/explore name = "general shuttle control console" - ui_template = "shuttle_control_console_exploration.tmpl" + ui_template = "ShuttleControlConsoleMultiExplore" var/obj/effect/overmap/visitable/ship/connected //Ship we're connected to /obj/machinery/computer/shuttle_control/explore/Initialize() @@ -21,8 +21,10 @@ LAZYREMOVE(connected.consoles, src) . = ..() -/obj/machinery/computer/shuttle_control/explore/get_ui_data(var/datum/shuttle/autodock/overmap/shuttle) +/obj/machinery/computer/shuttle_control/explore/ui_data(mob/user) . = ..() + + var/datum/shuttle/autodock/overmap/shuttle = SSshuttle.shuttles[shuttle_tag] if(istype(shuttle)) var/total_gas = 0 for(var/obj/structure/fuel_port/FP in shuttle.fuel_ports) //loop through fuel ports @@ -42,18 +44,18 @@ "fuel_span" = fuel_span ) -/obj/machinery/computer/shuttle_control/explore/handle_topic_href(var/datum/shuttle/autodock/overmap/shuttle, var/list/href_list) +/obj/machinery/computer/shuttle_control/explore/handle_topic_href(var/mob/user, var/datum/shuttle/autodock/overmap/shuttle, var/action, var/list/params) . = ..() if(. != null) return - if(href_list["pick"]) + if(action == "pick") var/list/possible_d = shuttle.get_possible_destinations() var/D if(length(possible_d)) D = input("Choose shuttle destination", "Shuttle Destination") as null|anything in possible_d else - to_chat(usr,"No valid landing sites in range.") - if(CanInteract(usr, physical_state) && (D in possible_d)) + to_chat(usr, SPAN_WARNING("No valid landing sites in range.")) + if(CanInteract(user, physical_state) && (D in possible_d)) shuttle.set_destination(possible_d[D]) - return TOPIC_REFRESH + return TRUE diff --git a/code/modules/shuttles/shuttle_console.dm b/code/modules/shuttles/shuttle_console.dm index 6a9cc3aabf0..b99345bdf7f 100644 --- a/code/modules/shuttles/shuttle_console.dm +++ b/code/modules/shuttles/shuttle_console.dm @@ -7,7 +7,7 @@ var/shuttle_tag // Used to coordinate data in shuttle controller. var/hacked = FALSE // Has been emagged, no access restrictions. - var/ui_template = "shuttle_control_console.tmpl" + var/ui_template = "ShuttleControlConsole" var/list/linked_helmets = list() var/can_rename_ship = FALSE @@ -52,26 +52,6 @@ if(check_rights(R_ADMIN, 0, user)) ui_interact(user) -/obj/machinery/computer/shuttle_control/proc/get_ui_data(var/datum/shuttle/autodock/shuttle) - var/shuttle_state - switch(shuttle.moving_status) - if(SHUTTLE_IDLE) shuttle_state = "idle" - if(SHUTTLE_WARMUP) shuttle_state = "warmup" - if(SHUTTLE_INTRANSIT) shuttle_state = "in_transit" - - return list( - "shuttle_status" = get_shuttle_status(shuttle), - "shuttle_state" = shuttle_state, - "has_docking" = shuttle.active_docking_controller? 1 : 0, - "docking_status" = shuttle.active_docking_controller? shuttle.active_docking_controller.get_docking_status() : null, - "docking_override" = shuttle.active_docking_controller? shuttle.active_docking_controller.override_enabled : null, - "can_launch" = shuttle.can_launch(), - "can_cancel" = shuttle.can_cancel(), - "can_force" = shuttle.can_force(), - "can_rename_ship" = can_rename_ship, - "ship_name" = shuttle.name, - ) - /obj/machinery/computer/shuttle_control/proc/get_shuttle_status(var/datum/shuttle/autodock/shuttle) switch(shuttle.process_state) if(IDLE_STATE) @@ -101,50 +81,71 @@ return FALSE return TRUE -/obj/machinery/computer/shuttle_control/proc/handle_topic_href(var/datum/shuttle/autodock/shuttle, var/list/href_list, var/user) - if(!istype(shuttle)) - return TOPIC_NOACTION - - if(href_list["move"]) - if(can_move(shuttle, user)) - shuttle.launch(src) - return TOPIC_REFRESH - return TOPIC_HANDLED - - if(href_list["force"]) - if(can_move(shuttle, user)) - shuttle.force_launch(src) - return TOPIC_REFRESH - return TOPIC_HANDLED - - if(href_list["cancel"]) - shuttle.cancel_launch(src) - return TOPIC_REFRESH - - if(href_list["rename"]) - var/new_name = input(usr, "Select new name for this ship.", "Rename this ship", shuttle.name) - if(new_name) - shuttle.name = new_name - return TOPIC_REFRESH - -/obj/machinery/computer/shuttle_control/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) +/obj/machinery/computer/shuttle_control/ui_interact(mob/user, datum/tgui/ui) var/datum/shuttle/autodock/shuttle = SSshuttle.shuttles[shuttle_tag] - if (!istype(shuttle)) - to_chat(user,"Unable to establish link with the shuttle.") + if(!istype(shuttle)) + to_chat(user, SPAN_WARNING("Unable to establish link with the shuttle.")) return - var/list/data = get_ui_data(shuttle) - - ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, ui_template, "[shuttle_tag] Shuttle Control", 470, 450) - ui.set_initial_data(data) + ui = new(user, src, ui_template, "[shuttle_tag] Shuttle Control", ui_x=470, ui_y=450) ui.open() - ui.set_auto_update(1) -/obj/machinery/computer/shuttle_control/Topic(href, href_list) - ..() - handle_topic_href(SSshuttle.shuttles[shuttle_tag], href_list, usr) +/obj/machinery/computer/shuttle_control/ui_data(mob/user) + var/datum/shuttle/autodock/shuttle = SSshuttle.shuttles[shuttle_tag] + + var/shuttle_state + switch(shuttle.moving_status) + if(SHUTTLE_IDLE) shuttle_state = "idle" + if(SHUTTLE_WARMUP) shuttle_state = "warmup" + if(SHUTTLE_INTRANSIT) shuttle_state = "in_transit" + + return list( + "shuttle_status" = get_shuttle_status(shuttle), + "shuttle_state" = shuttle_state, + "has_docking" = shuttle.active_docking_controller? 1 : 0, + "docking_status" = shuttle.active_docking_controller? shuttle.active_docking_controller.get_docking_status() : null, + "docking_override" = shuttle.active_docking_controller? shuttle.active_docking_controller.override_enabled : null, + "can_launch" = shuttle.can_launch(), + "can_cancel" = shuttle.can_cancel(), + "can_force" = shuttle.can_force(), + "can_rename_ship" = can_rename_ship, + "ship_name" = shuttle.name, + ) + +/obj/machinery/computer/shuttle_control/ui_act(action, params) + . = ..() + if(.) + return + + return handle_topic_href(usr, SSshuttle.shuttles[shuttle_tag], action, params) + +/obj/machinery/computer/shuttle_control/proc/handle_topic_href(var/mob/user, var/datum/shuttle/autodock/shuttle, var/action, var/list/params) + if(!istype(shuttle)) + return FALSE + + if(action == "move") + if(can_move(shuttle, user)) + shuttle.launch(src) + return TRUE + return FALSE + + if(action == "force") + if(can_move(shuttle, user)) + shuttle.force_launch(src) + return TRUE + return FALSE + + if(action == "cancel") + shuttle.cancel_launch(src) + return TRUE + + if(action == "rename") + var/new_name = input(user, "Select new name for this ship.", "Rename this ship", shuttle.name) + if(new_name) + shuttle.name = new_name + return TRUE /obj/machinery/computer/shuttle_control/proc/update_helmets(var/datum/shuttle/autodock/shuttle) var/shuttle_status = get_shuttle_status(shuttle) diff --git a/code/modules/shuttles/shuttle_console_multi.dm b/code/modules/shuttles/shuttle_console_multi.dm index 93a9c3c4abe..40ecc8c9999 100644 --- a/code/modules/shuttles/shuttle_console_multi.dm +++ b/code/modules/shuttles/shuttle_console_multi.dm @@ -1,39 +1,43 @@ /obj/machinery/computer/shuttle_control/multi - ui_template = "shuttle_control_console_multi.tmpl" + ui_template = "ShuttleControlConsoleMulti" -/obj/machinery/computer/shuttle_control/multi/get_ui_data(var/datum/shuttle/autodock/multi/shuttle) +/obj/machinery/computer/shuttle_control/multi/ui_data(mob/user) . = ..() + + var/datum/shuttle/autodock/multi/shuttle = SSshuttle.shuttles[shuttle_tag] if(istype(shuttle)) . += list( "destination_name" = shuttle.next_location? shuttle.next_location.name : "No destination set.", "can_pick" = shuttle.moving_status == SHUTTLE_IDLE, ) -/obj/machinery/computer/shuttle_control/multi/handle_topic_href(var/datum/shuttle/autodock/multi/shuttle, var/list/href_list) - ..() - - if(href_list["pick"]) - var/dest_key = input("Choose shuttle destination", "Shuttle Destination") as null|anything in shuttle.get_destinations() +/obj/machinery/computer/shuttle_control/multi/handle_topic_href(var/mob/user, var/datum/shuttle/autodock/multi/shuttle, var/action, var/list/params) + if(action == "pick") + var/dest_key = input(user, "Choose shuttle destination", "Shuttle Destination") as null|anything in shuttle.get_destinations() if(dest_key && (!use_check(usr) || (isobserver(usr) && check_rights(R_ADMIN, FALSE)))) shuttle.set_destination(dest_key, usr) - return TOPIC_REFRESH + return TRUE + + return ..() /obj/machinery/computer/shuttle_control/multi/antag - ui_template = "shuttle_control_console_antag.tmpl" + ui_template = "ShuttleControlConsoleMultiAntag" -/obj/machinery/computer/shuttle_control/multi/antag/get_ui_data(var/datum/shuttle/autodock/multi/antag/shuttle) +/obj/machinery/computer/shuttle_control/multi/antag/ui_data(mob/user) . = ..() + + var/datum/shuttle/autodock/multi/antag/shuttle = SSshuttle.shuttles[shuttle_tag] if(istype(shuttle)) . += list( "cloaked" = shuttle.cloaked, ) -/obj/machinery/computer/shuttle_control/multi/antag/handle_topic_href(var/datum/shuttle/autodock/multi/antag/shuttle, var/list/href_list) - ..() - - if(href_list["toggle_cloaked"]) +/obj/machinery/computer/shuttle_control/multi/antag/handle_topic_href(var/mob/user, var/datum/shuttle/autodock/multi/antag/shuttle, var/action, var/list/params) + if(action == "toggle_cloaked") shuttle.cloaked = !shuttle.cloaked - return TOPIC_REFRESH + return TRUE + + return ..() /obj/machinery/computer/shuttle_control/multi/can_move(var/datum/shuttle/autodock/shuttle, var/user) if(istype(shuttle, /datum/shuttle/autodock/multi/antag)) diff --git a/code/modules/shuttles/shuttle_console_multi_lift.dm b/code/modules/shuttles/shuttle_console_multi_lift.dm index 2b193141059..89ff63185fa 100644 --- a/code/modules/shuttles/shuttle_console_multi_lift.dm +++ b/code/modules/shuttles/shuttle_console_multi_lift.dm @@ -5,40 +5,40 @@ icon_screen = null density = FALSE req_access = null - ui_template = "shuttle_control_console_multi_lift.tmpl" + ui_template = "ShuttleControlConsoleMultiLift" /obj/machinery/computer/shuttle_control/multi/lift/wall icon_state = "lift_wall" -/obj/machinery/computer/shuttle_control/multi/lift/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) +/obj/machinery/computer/shuttle_control/multi/lift/ui_interact(mob/user, datum/tgui/ui) var/datum/shuttle/autodock/multi/lift/shuttle = SSshuttle.shuttles[shuttle_tag] if(!istype(shuttle)) to_chat(user, SPAN_WARNING("Unable to establish link with the shuttle.")) return - var/list/data = get_ui_data(shuttle) - - ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, ui_template, "[shuttle_tag] Control", 470, 300) - ui.set_initial_data(data) + ui = new(user, src, ui_template, "[shuttle_tag] Control", ui_x=470, ui_y=300) ui.open() - ui.set_auto_update(TRUE) -/obj/machinery/computer/shuttle_control/multi/lift/get_ui_data(var/datum/shuttle/autodock/multi/lift/shuttle) +/obj/machinery/computer/shuttle_control/multi/lift/ui_data(mob/user) . = ..() + + var/datum/shuttle/autodock/multi/lift/shuttle = SSshuttle.shuttles[shuttle_tag] if(istype(shuttle)) var/list/destination_keys = list() - for(var/key in shuttle.destinations_cache) + for(var/key in shuttle.get_destinations()) destination_keys.Add(key) . += list( "destinations" = destination_keys, ) -/obj/machinery/computer/shuttle_control/multi/handle_topic_href(var/datum/shuttle/autodock/multi/lift/shuttle, var/list/href_list) - if(href_list["pick"] && href_list["destination"]) - shuttle.set_destination(href_list["destination"], usr) - return TOPIC_REFRESH - if(href_list["cancel"]) +/obj/machinery/computer/shuttle_control/multi/lift/handle_topic_href(var/mob/user, var/datum/shuttle/autodock/multi/lift/shuttle, var/action, var/list/params) + if(action == "pick") + shuttle.set_destination(params["destination"], usr) + return TRUE + + if(action == "cancel") shuttle.final_location = null // no return so parent can handle it - ..() + + return ..() diff --git a/code/modules/shuttles/shuttle_emergency.dm b/code/modules/shuttles/shuttle_emergency.dm index 30c86ecbc00..04f1122a599 100644 --- a/code/modules/shuttles/shuttle_emergency.dm +++ b/code/modules/shuttles/shuttle_emergency.dm @@ -14,7 +14,7 @@ /datum/shuttle/autodock/ferry/emergency/arrived() . = ..() - + if(!emergency_controller.has_evacuated()) emergency_controller.finish_preparing_evac() @@ -62,7 +62,7 @@ // If the emergency shuttle is waiting to leave the station and the world time exceeded the force time if(evacuation_controller.is_prepared() && (world.time > emergency_controller.force_time)) - return 0 + return 0 return ..() @@ -176,8 +176,18 @@ read_authorization(W) ..() -/obj/machinery/computer/shuttle_control/emergency/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - var/data[0] +/obj/machinery/computer/shuttle_control/emergency/ui_interact(mob/user, datum/tgui/ui) + var/datum/shuttle/autodock/ferry/emergency/shuttle = SSshuttle.shuttles[shuttle_tag] + if(!istype(shuttle)) + to_chat(user, SPAN_WARNING("Unable to establish link with the shuttle.")) + return + + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "EscapeShuttleControlConsole", "Escape Shuttle Control", ui_x=470, ui_y=420) + ui.open() + +/obj/machinery/computer/shuttle_control/emergency/ui_data(mob/user) var/datum/shuttle/autodock/ferry/emergency/shuttle = SSshuttle.shuttles[shuttle_tag] if (!istype(shuttle)) return @@ -221,7 +231,7 @@ var/has_auth = has_authorization() - data = list( + return list( "shuttle_status" = shuttle_status, "shuttle_state" = shuttle_state, "has_docking" = shuttle.active_docking_controller? 1 : 0, @@ -231,27 +241,19 @@ "can_cancel" = shuttle.can_cancel(src), "can_force" = shuttle.can_force(src), "auth_list" = auth_list, - "has_auth" = has_auth, - "user" = debug? user : null + "has_auth" = has_auth ) - ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open) +/obj/machinery/computer/shuttle_control/emergency/ui_act(action, params) + . = ..() + if(.) + return - if (!ui) - ui = new(user, src, ui_key, "escape_shuttle_control_console.tmpl", "Shuttle Control", 470, 420) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/obj/machinery/computer/shuttle_control/emergency/Topic(href, href_list) - if(..()) - return 1 - - if(href_list["removeid"]) - var/dna_hash = href_list["removeid"] + if(action == "removeid") + var/dna_hash = params["removeid"] authorized -= dna_hash - if(!emagged && href_list["scanid"]) + if(!emagged && action == "scanid") //They selected an empty entry. Try to scan their id. if (ishuman(usr)) var/mob/living/carbon/human/H = usr diff --git a/code/modules/shuttles/shuttle_lift.dm b/code/modules/shuttles/shuttle_lift.dm index 04c7d5ff7ff..12763cba299 100644 --- a/code/modules/shuttles/shuttle_lift.dm +++ b/code/modules/shuttles/shuttle_lift.dm @@ -58,7 +58,7 @@ /obj/machinery/computer/shuttle_control/lift name = "lift controller" - ui_template = "shuttle_control_console_lift.tmpl" + ui_template = "ShuttleControlConsoleLift" icon = 'icons/obj/computer.dmi' icon_state = "lift" icon_screen = null diff --git a/html/changelogs/geeves-shuttle_tgui.yml b/html/changelogs/geeves-shuttle_tgui.yml new file mode 100644 index 00000000000..d7030203aad --- /dev/null +++ b/html/changelogs/geeves-shuttle_tgui.yml @@ -0,0 +1,6 @@ +author: Geeves + +delete-after: True + +changes: + - rscadd: "Converted shuttle UIs to TGUI." diff --git a/nano/templates/escape_shuttle_control_console.tmpl b/nano/templates/escape_shuttle_control_console.tmpl deleted file mode 100644 index f3331313ad0..00000000000 --- a/nano/templates/escape_shuttle_control_console.tmpl +++ /dev/null @@ -1,84 +0,0 @@ -

Shuttle Status

-
-
- {{:data.shuttle_status}} -
-
-
-
-
- Bluespace Drive: -
-
- {{if data.shuttle_state == "idle"}} - IDLE - {{else data.shuttle_state == "warmup"}} - SPINNING UP - {{else data.shuttle_state == "in_transit"}} - ENGAGED - {{else}} - ERROR - {{/if}} -
-
-
-{{if data.has_docking}} -
-
-
- Docking Status: -
-
- {{if data.docking_status == "docked"}} - DOCKED - {{else data.docking_status == "docking"}} - {{if !data.docking_override}} - DOCKING - {{else}} - DOCKING-MANUAL - {{/if}} - {{else data.docking_status == "undocking"}} - {{if !data.docking_override}} - UNDOCKING - {{else}} - UNDOCKING-MANUAL - {{/if}} - {{else data.docking_status == "undocked"}} - UNDOCKED - {{else}} - ERROR - {{/if}} -
-
-
-{{/if}} -

Shuttle Authorization

-
-
- {{if data.has_auth}} - Access Granted. Shuttle controls unlocked. - {{else}} - Additional authorization required. - {{/if}} -
-
-
- {{for data.auth_list}} - {{if value.auth_hash}} - {{:helper.link(value.auth_name, 'eject', {'removeid' : value.auth_hash}, null, 'itemContentWide')}} - {{else}} - {{:helper.link("", 'eject', {'scanid' : 1}, null, 'itemContentWide')}} - {{/if}} - {{/for}} -
- -

Shuttle Control

-
-
-
- {{:helper.link('Launch Shuttle', 'arrowthickstop-1-e', {'move' : '1'}, data.can_launch ? null : 'disabled' , null)}} - {{:helper.link('Cancel Launch', 'cancel', {'cancel' : '1'}, data.can_cancel ? null : 'disabled' , null)}} - {{:helper.link('Force Launch', 'alert', {'force' : '1'}, data.can_force ? null : 'disabled' , data.can_force ? 'redButton' : null)}} -
-
-
\ No newline at end of file diff --git a/nano/templates/shuttle_control_console.tmpl b/nano/templates/shuttle_control_console.tmpl deleted file mode 100644 index fee9acb453b..00000000000 --- a/nano/templates/shuttle_control_console.tmpl +++ /dev/null @@ -1,72 +0,0 @@ -

Shuttle Status

-
-
- {{:data.shuttle_status}} -
-
- Ship designation and name: {{:data.ship_name}} - {{if data.can_rename_ship}} - {{:helper.link('Rename', null, {'rename' : '1'}, null , null)}} - {{/if}} -
-
-
-
-
- Engines: -
-
- {{if data.shuttle_state == "idle"}} - IDLE - {{else data.shuttle_state == "warmup"}} - STARTING IGNITION - {{else data.shuttle_state == "in_transit"}} - ENGAGED - {{else}} - ERROR - {{/if}} -
-
-
-{{if data.has_docking}} -
-
-
- Docking Status: -
-
- {{if data.docking_status == "docked"}} - DOCKED - {{else data.docking_status == "docking"}} - {{if !data.docking_override}} - DOCKING - {{else}} - DOCKING-MANUAL - {{/if}} - {{else data.docking_status == "undocking"}} - {{if !data.docking_override}} - UNDOCKING - {{else}} - UNDOCKING-MANUAL - {{/if}} - {{else data.docking_status == "undocked"}} - UNDOCKED - {{else}} - ERROR - {{/if}} - -
-
-
-{{/if}} - -

Shuttle Control

-
-
-
- {{:helper.link('Launch Shuttle', 'arrowthickstop-1-e', {'move' : '1'}, data.can_launch? null : 'disabled' , null)}} - {{:helper.link('Cancel Launch', 'cancel', {'cancel' : '1'}, data.can_cancel ? null : 'disabled' , null)}} - {{:helper.link('Force Launch', 'alert', {'force' : '1'}, data.can_force? null : 'disabled' , data.can_force ? 'redButton' : null)}} -
-
-
diff --git a/nano/templates/shuttle_control_console_antag.tmpl b/nano/templates/shuttle_control_console_antag.tmpl deleted file mode 100644 index b0580d594a1..00000000000 --- a/nano/templates/shuttle_control_console_antag.tmpl +++ /dev/null @@ -1,82 +0,0 @@ -

Shuttle Status

-
-
- {{:data.shuttle_status}} -
-
- Ship designation and name: {{:data.ship_name}} - {{if data.can_rename_ship}} - {{:helper.link('Rename', null, {'rename' : '1'}, null , null)}} - {{/if}} -
-
- Cloaking field is {{:data.cloaked ? "enabled" : "disabled" }}. {{:helper.link('Toggle', 'arrowreturn-1-s', {'toggle_cloaked' : '1'}) }} -
-
-
-
-
- Drive: -
-
- {{if data.shuttle_state == "idle"}} - IDLE - {{else data.shuttle_state == "warmup"}} - SPINNING UP - {{else data.shuttle_state == "in_transit"}} - ENGAGED - {{else}} - ERROR - {{/if}} -
-
-
-{{if data.has_docking}} -
-
-
- Docking Status: -
-
- {{if data.docking_status == "docked"}} - DOCKED - {{else data.docking_status == "docking"}} - {{if !data.docking_override}} - DOCKING - {{else}} - DOCKING-MANUAL - {{/if}} - {{else data.docking_status == "undocking"}} - {{if !data.docking_override}} - UNDOCKING - {{else}} - UNDOCKING-MANUAL - {{/if}} - {{else data.docking_status == "undocked"}} - UNDOCKED - {{else}} - ERROR - {{/if}} -
-
-
-{{/if}} -
-
- Current Destination: -
- {{:data.destination_name}} -
- {{:helper.link('Choose Destination', 'arrowreturn-1-s', {'pick' : '1'}, data.can_pick ? null : 'disabled' , null)}} -
-
-

Shuttle Control

-
-
-
- {{:helper.link('Launch Shuttle', 'arrowthickstop-1-e', {'move' : '1'}, data.can_launch ? null : 'disabled' , null)}} - {{:helper.link('Cancel Launch', 'cancel', {'cancel' : '1'}, data.can_cancel ? null : 'disabled' , null)}} - {{:helper.link('Force Launch', 'alert', {'force' : '1'}, data.can_force ? null : 'disabled' , data.can_force ? 'redButton' : null)}} -
-
-
diff --git a/nano/templates/shuttle_control_console_exploration.tmpl b/nano/templates/shuttle_control_console_exploration.tmpl deleted file mode 100644 index 2b0596e4f55..00000000000 --- a/nano/templates/shuttle_control_console_exploration.tmpl +++ /dev/null @@ -1,89 +0,0 @@ -

Shuttle Status

-
-
- {{:data.shuttle_status}} -
-
-
-
-
- Engines: -
-
- {{if data.shuttle_state == "idle"}} - IDLE - {{else data.shuttle_state == "warmup"}} - STARTING IGNITION - {{else data.shuttle_state == "in_transit"}} - ENGAGED - {{else}} - ERROR - {{/if}} -
-
-
-{{if data.has_docking}} -
-
-
- Docking Status: -
-
- {{if data.docking_status == "docked"}} - DOCKED - {{else data.docking_status == "docking"}} - {{if !data.docking_override}} - DOCKING - {{else}} - DOCKING-MANUAL - {{/if}} - {{else data.docking_status == "undocking"}} - {{if !data.docking_override}} - UNDOCKING - {{else}} - UNDOCKING-MANUAL - {{/if}} - {{else data.docking_status == "undocked"}} - UNDOCKED - {{else}} - ERROR - {{/if}} -
-
-
-{{/if}} -
-
- Current Destination: -
- {{:data.destination_name}} -
- {{:helper.link('Choose Destination', 'arrowreturn-1-s', {'pick' : '1'}, data.can_pick ? null : 'disabled' , null)}} -
-
-{{if data.fuel_usage}} -
-
- Est. Delta-V Budget: -
-
- {{:data.remaining_fuel}} m/s -
-
- Avg. Delta-V Per Maneuver: -
-
- {{:data.fuel_usage}} m/s -
-
-{{/if}} -

Shuttle Control

-
-
-
- {{:helper.link('Launch Shuttle', 'arrowthickstop-1-e', {'move' : '1'}, data.can_launch ? null : 'disabled' , null)}} - {{:helper.link('Cancel Launch', 'cancel', {'cancel' : '1'}, data.can_cancel ? null : 'disabled' , null)}} - {{:helper.link('Force Launch', 'alert', {'force' : '1'}, data.can_force ? null : 'disabled' , data.can_force ? 'redButton' : null)}} -
-
-
\ No newline at end of file diff --git a/nano/templates/shuttle_control_console_lift.tmpl b/nano/templates/shuttle_control_console_lift.tmpl deleted file mode 100644 index f3e809d57d2..00000000000 --- a/nano/templates/shuttle_control_console_lift.tmpl +++ /dev/null @@ -1,26 +0,0 @@ -
-
-
- Lift status: -
-
- {{if data.shuttle_state == "idle"}} - IDLE - {{else data.shuttle_state == "warmup"}} - SPINNING UP - {{else}} - ERROR - {{/if}} -
-
-
- -

Lift Controls

-
-
-
- {{:helper.link('Move Lift', 'arrowthickstop-1-e', {'move' : '1'}, data.can_launch? null : 'disabled' , null)}} - {{:helper.link('Stop Lift', 'cancel', {'cancel' : '1'}, data.can_cancel ? null : 'disabled' , null)}} -
-
-
\ No newline at end of file diff --git a/nano/templates/shuttle_control_console_multi.tmpl b/nano/templates/shuttle_control_console_multi.tmpl deleted file mode 100644 index 8249ba71768..00000000000 --- a/nano/templates/shuttle_control_console_multi.tmpl +++ /dev/null @@ -1,79 +0,0 @@ -

Shuttle Status

-
-
- {{:data.shuttle_status}} -
-
- Ship designation and name: {{:data.ship_name}} - {{if data.can_rename_ship}} - {{:helper.link('Rename', null, {'rename' : '1'}, null , null)}} - {{/if}} -
-
-
-
-
- Drive: -
-
- {{if data.shuttle_state == "idle"}} - IDLE - {{else data.shuttle_state == "warmup"}} - SPINNING UP - {{else data.shuttle_state == "in_transit"}} - ENGAGED - {{else}} - ERROR - {{/if}} -
-
-
-{{if data.has_docking}} -
-
-
- Docking Status: -
-
- {{if data.docking_status == "docked"}} - DOCKED - {{else data.docking_status == "docking"}} - {{if !data.docking_override}} - DOCKING - {{else}} - DOCKING-MANUAL - {{/if}} - {{else data.docking_status == "undocking"}} - {{if !data.docking_override}} - UNDOCKING - {{else}} - UNDOCKING-MANUAL - {{/if}} - {{else data.docking_status == "undocked"}} - UNDOCKED - {{else}} - ERROR - {{/if}} -
-
-
-{{/if}} -
-
- Current Destination: -
- {{:data.destination_name}} -
- {{:helper.link('Choose Destination', 'arrowreturn-1-s', {'pick' : '1'}, data.can_pick ? null : 'disabled' , null)}} -
-
-

Shuttle Control

-
-
-
- {{:helper.link('Launch Shuttle', 'arrowthickstop-1-e', {'move' : '1'}, data.can_launch ? null : 'disabled' , null)}} - {{:helper.link('Cancel Launch', 'cancel', {'cancel' : '1'}, data.can_cancel ? null : 'disabled' , null)}} - {{:helper.link('Force Launch', 'alert', {'force' : '1'}, data.can_force ? null : 'disabled' , data.can_force ? 'redButton' : null)}} -
-
-
diff --git a/nano/templates/shuttle_control_console_multi_lift.tmpl b/nano/templates/shuttle_control_console_multi_lift.tmpl deleted file mode 100644 index 8ff479563a8..00000000000 --- a/nano/templates/shuttle_control_console_multi_lift.tmpl +++ /dev/null @@ -1,24 +0,0 @@ -

Lift panel

-
-
- {{:data.shuttle_status}} -
-
- Current Destination: -
- {{:data.destination_name}} -
- {{for data.destinations}} - {{:helper.link(value, null, {'pick' : '1', 'destination' : value}, data.can_pick ? null : 'disabled' , null)}} - {{empty}} - {{:helper.link('Choose Destination', 'arrowreturn-1-s', {'pick' : '1'}, data.can_pick ? null : 'disabled' , null)}} - {{/for}} -
-
-
-
-
- {{:helper.link('Emergency Stop', 'cancel', {'cancel' : '1'}, data.can_cancel ? null : 'disabled' , null)}} -
-
-
diff --git a/tgui/packages/tgui/interfaces/EscapeShuttleControlConsole.tsx b/tgui/packages/tgui/interfaces/EscapeShuttleControlConsole.tsx new file mode 100644 index 00000000000..5e263a3eb34 --- /dev/null +++ b/tgui/packages/tgui/interfaces/EscapeShuttleControlConsole.tsx @@ -0,0 +1,104 @@ +import { useBackend } from '../backend'; +import { Button, Section, Box, LabeledList } from '../components'; +import { Window } from '../layouts'; + +export type AuthData = { + auth_name: string; + auth_hash: string; +}; + +export type EscapeShuttleControlConsoleData = { + shuttle_status: string; + shuttle_state: string; + has_docking: boolean; + docking_status: string; + docking_override: boolean; + can_launch: boolean; + can_cancel: boolean; + can_force: boolean; + auth_list: AuthData[]; + has_auth: boolean; +}; + +export const EscapeShuttleControlConsole = (props, context) => { + const { act, data } = useBackend(context); + + return ( + + +
+ {data.shuttle_status} + + + + {data.shuttle_state === 'idle' + ? 'Idle' + : data.shuttle_state === 'warmup' + ? 'Spinning Up' + : data.shuttle_state === 'in_transit' + ? 'Engaged' + : 'Error'} + + {data.has_docking ? ( + + {data.docking_status === 'docked' + ? 'Docked' + : data.docking_status === 'docking' + ? data.docking_override + ? 'Docking-Manual' + : 'Docking' + : data.docking_status === 'undocking' + ? data.docking_override + ? 'Undocking-Manual' + : 'Undocking' + : data.docking_status === 'undocked' + ? 'Undocked' + : 'Error'} + + ) : null} + + +
+
+ {data.has_auth ? ( + Access Granted. Shuttle controls unlocked. + ) : ( + Additional authorization required. + )} + {data.auth_list.map((auth) => + auth.auth_hash ? ( +
+
+
+
+
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/ShuttleControlConsole.tsx b/tgui/packages/tgui/interfaces/ShuttleControlConsole.tsx new file mode 100644 index 00000000000..3429bbbc4e1 --- /dev/null +++ b/tgui/packages/tgui/interfaces/ShuttleControlConsole.tsx @@ -0,0 +1,91 @@ +import { useBackend } from '../backend'; +import { Button, Section, Box, LabeledList } from '../components'; +import { Window } from '../layouts'; + +export type ShuttleControlConsoleData = { + shuttle_status: string; + shuttle_state: string; + has_docking: boolean; + docking_status: string; + docking_override: boolean; + can_launch: boolean; + can_cancel: boolean; + can_force: boolean; + can_rename_ship: boolean; + ship_name: string; +}; + +export const ShuttleControlConsole = (props, context) => { + const { act, data } = useBackend(context); + + return ( + + +
+ {data.shuttle_status} + Ship designation and name: {data.ship_name} + {data.can_rename_ship ? ( + +
+
+
+
+
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/ShuttleControlConsoleLift.tsx b/tgui/packages/tgui/interfaces/ShuttleControlConsoleLift.tsx new file mode 100644 index 00000000000..c596bac8333 --- /dev/null +++ b/tgui/packages/tgui/interfaces/ShuttleControlConsoleLift.tsx @@ -0,0 +1,54 @@ +import { useBackend } from '../backend'; +import { Button, Section, LabeledList } from '../components'; +import { Window } from '../layouts'; + +export type ShuttleControlConsoleLiftData = { + shuttle_status: string; + shuttle_state: string; + has_docking: boolean; + docking_status: string; + docking_override: boolean; + can_launch: boolean; + can_cancel: boolean; + can_force: boolean; + can_rename_ship: boolean; + ship_name: string; +}; + +export const ShuttleControlConsoleLift = (props, context) => { + const { act, data } = useBackend(context); + + return ( + + +
+ + + {data.shuttle_state === 'idle' + ? 'Idle' + : data.shuttle_state === 'warmup' + ? 'Spinning up' + : data.shuttle_state === 'in_transit' + ? 'Moving' + : 'Error'} + + +
+
+
+
+
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/ShuttleControlConsoleMulti.tsx b/tgui/packages/tgui/interfaces/ShuttleControlConsoleMulti.tsx new file mode 100644 index 00000000000..66bc7f1a413 --- /dev/null +++ b/tgui/packages/tgui/interfaces/ShuttleControlConsoleMulti.tsx @@ -0,0 +1,108 @@ +import { useBackend } from '../backend'; +import { Button, Section, Box, LabeledList } from '../components'; +import { Window } from '../layouts'; + +export type ShuttleControlConsoleMultiData = { + shuttle_status: string; + shuttle_state: string; + has_docking: boolean; + docking_status: string; + docking_override: boolean; + can_launch: boolean; + can_cancel: boolean; + can_force: boolean; + can_rename_ship: boolean; + can_pick: boolean; + ship_name: string; + destination_name: string; +}; + +export const ShuttleControlConsoleMulti = (props, context) => { + const { act, data } = useBackend(context); + + return ( + + +
+ {data.shuttle_status} + Ship designation and name: {data.ship_name} + {data.can_rename_ship ? ( + +
+
+ + + + {data.destination_name} + + + +
+
+
+
+
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/ShuttleControlConsoleMultiAntag.tsx b/tgui/packages/tgui/interfaces/ShuttleControlConsoleMultiAntag.tsx new file mode 100644 index 00000000000..93562ca51ed --- /dev/null +++ b/tgui/packages/tgui/interfaces/ShuttleControlConsoleMultiAntag.tsx @@ -0,0 +1,120 @@ +import { useBackend } from '../backend'; +import { Button, Section, Box, LabeledList } from '../components'; +import { Window } from '../layouts'; + +export type ShuttleControlConsoleMultiAntagData = { + shuttle_status: string; + shuttle_state: string; + has_docking: boolean; + docking_status: string; + docking_override: boolean; + can_launch: boolean; + can_cancel: boolean; + can_force: boolean; + can_rename_ship: boolean; + can_pick: boolean; + cloaked: boolean; + ship_name: string; + destination_name: string; +}; + +export const ShuttleControlConsoleMultiAntag = (props, context) => { + const { act, data } = + useBackend(context); + + return ( + + +
+ {data.shuttle_status} + Ship designation and name: {data.ship_name} + {data.can_rename_ship ? ( + +
+
+ + + + {data.destination_name} + + + +
+
+
+
+
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/ShuttleControlConsoleMultiExplore.tsx b/tgui/packages/tgui/interfaces/ShuttleControlConsoleMultiExplore.tsx new file mode 100644 index 00000000000..e89e90c1187 --- /dev/null +++ b/tgui/packages/tgui/interfaces/ShuttleControlConsoleMultiExplore.tsx @@ -0,0 +1,114 @@ +import { useBackend } from '../backend'; +import { Button, Section, Box, LabeledList } from '../components'; +import { Window } from '../layouts'; + +export type ShuttleControlConsoleMultiExploreData = { + shuttle_status: string; + shuttle_state: string; + has_docking: boolean; + docking_status: string; + docking_override: boolean; + can_launch: boolean; + can_cancel: boolean; + can_force: boolean; + can_pick: boolean; + destination_name: string; + fuel_usage: number; + remaining_fuel: number; + fuel_span: string; +}; + +export const ShuttleControlConsoleMultiExplore = (props, context) => { + const { act, data } = + useBackend(context); + + return ( + + +
+ {data.shuttle_status} + + + + {data.shuttle_state === 'idle' + ? 'Idle' + : data.shuttle_state === 'warmup' + ? 'Starting Ignition' + : data.shuttle_state === 'in_transit' + ? 'Engaged' + : 'Error'} + + {data.has_docking ? ( + + {data.docking_status === 'docked' + ? 'Docked' + : data.docking_status === 'docking' + ? data.docking_override + ? 'Docking-Manual' + : 'Docking' + : data.docking_status === 'undocking' + ? data.docking_override + ? 'Undocking-Manual' + : 'Undocking' + : data.docking_status === 'undocked' + ? 'Undocked' + : 'Error'} + + ) : null} + + +
+
+ + + + {data.destination_name} + + + + +
+
+
+
+
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/ShuttleControlConsoleMultiLift.tsx b/tgui/packages/tgui/interfaces/ShuttleControlConsoleMultiLift.tsx new file mode 100644 index 00000000000..691da12b8ac --- /dev/null +++ b/tgui/packages/tgui/interfaces/ShuttleControlConsoleMultiLift.tsx @@ -0,0 +1,51 @@ +import { useBackend } from '../backend'; +import { Button, Section, Box, LabeledList } from '../components'; +import { Window } from '../layouts'; + +export type ShuttleControlConsoleMultiLiftData = { + shuttle_status: string; + shuttle_state: string; + has_docking: boolean; + docking_status: string; + docking_override: boolean; + can_launch: boolean; + can_cancel: boolean; + can_force: boolean; + can_pick: boolean; + destination_name: string; + destinations: string[]; +}; + +export const ShuttleControlConsoleMultiLift = (props, context) => { + const { act, data } = useBackend(context); + + return ( + + +
+ {data.shuttle_status} + + {data.destinations.reverse().map((destination) => ( + +
+
+
+ ); +};