diff --git a/code/game/mecha/mecha_control_console.dm b/code/game/mecha/mecha_control_console.dm
index f72770a8ea3..72c8985a126 100644
--- a/code/game/mecha/mecha_control_console.dm
+++ b/code/game/mecha/mecha_control_console.dm
@@ -8,68 +8,65 @@
circuit = /obj/item/circuitboard/mecha_control
var/list/located = list()
var/screen = 0
- var/stored_data
+ var/stored_data = list()
/obj/machinery/computer/mecha/attack_ai(mob/user)
return attack_hand(user)
/obj/machinery/computer/mecha/attack_hand(mob/user)
- ui_interact(user)
+ tgui_interact(user)
-/obj/machinery/computer/mecha/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
- ui = SSnanoui.try_update_ui(user, src, ui_key, ui, force_open)
+/obj/machinery/computer/mecha/tgui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_default_state)
+ ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
- ui = new(user, src, ui_key, "exosuit_control.tmpl", "Exosuit Control Console", 420, 500)
+ ui = new(user, src, ui_key, "MechaControlConsole", name, 420, 500, master_ui, state)
ui.open()
- ui.set_auto_update(1)
-/obj/machinery/computer/mecha/ui_data(mob/user, ui_key = "main", datum/topic_state/state = GLOB.default_state)
- var/data[0]
- data["screen"] = screen
- if(screen == 0)
- var/list/mechas[0]
- var/list/trackerlist = list()
- for(var/stompy in GLOB.mechas_list)
- var/obj/mecha/MC = stompy
- trackerlist += MC.trackers
- for(var/thing in trackerlist)
- var/obj/item/mecha_parts/mecha_tracking/TR = thing
- var/answer = TR.get_mecha_info()
- if(answer)
- mechas[++mechas.len] = answer
- data["mechas"] = mechas
- if(screen == 1)
- data["log"] = stored_data
+/obj/machinery/computer/mecha/tgui_data(mob/user)
+ var/list/data = list()
+ data["beacons"] = list()
+ var/list/trackerlist = list()
+ for(var/stompy in GLOB.mechas_list)
+ var/obj/mecha/MC = stompy
+ trackerlist += MC.trackers
+ for(var/thing in trackerlist)
+ var/obj/item/mecha_parts/mecha_tracking/TR = thing
+ var/list/tr_data = TR.retrieve_data()
+ if(tr_data)
+ data["beacons"] += list(tr_data)
+
+ data["stored_data"] = stored_data
+
return data
-/obj/machinery/computer/mecha/Topic(href, href_list)
+
+/obj/machinery/computer/mecha/tgui_act(action, params)
if(..())
- return 1
-
- var/datum/topic_input/afilter = new /datum/topic_input(href,href_list)
- if(href_list["send_message"])
- var/obj/item/mecha_parts/mecha_tracking/MT = afilter.getObj("send_message")
- var/message = strip_html_simple(input(usr,"Input message","Transmit message") as text)
- if(!trim(message) || ..())
- return 1
- var/obj/mecha/M = MT.in_mecha()
- if(M)
- M.occupant_message(message)
-
- if(href_list["shock"])
- var/obj/item/mecha_parts/mecha_tracking/MT = afilter.getObj("shock")
- MT.shock()
-
- if(href_list["get_log"])
- var/obj/item/mecha_parts/mecha_tracking/MT = afilter.getObj("get_log")
- stored_data = MT.get_mecha_log()
- screen = 1
-
- if(href_list["return"])
- screen = 0
-
- SSnanoui.update_uis(src)
- return
+ return
+ switch(action)
+ if("send_message")
+ var/obj/item/mecha_parts/mecha_tracking/MT = locateUID(params["mt"])
+ if(istype(MT))
+ var/message = strip_html_simple(input(usr, "Input message", "Transmit message") as text)
+ if(!message || !trim(message) || ..())
+ return FALSE
+ var/obj/mecha/M = MT.in_mecha()
+ if(M)
+ M.occupant_message(message)
+ return TRUE
+ if("shock")
+ var/obj/item/mecha_parts/mecha_tracking/MT = locateUID(params["mt"])
+ if(istype(MT))
+ MT.shock()
+ return TRUE
+ if("get_log")
+ var/obj/item/mecha_parts/mecha_tracking/MT = locateUID(params["mt"])
+ if(istype(MT))
+ stored_data = MT.get_mecha_log()
+ return TRUE
+ if("clear_log")
+ stored_data = list()
+ return TRUE
/obj/item/mecha_parts/mecha_tracking
name = "Exosuit tracking beacon"
@@ -103,7 +100,7 @@
if(istype(M, /obj/mecha/working/ripley))
var/obj/mecha/working/ripley/RM = M
answer["hascargo"] = 1
- answer["cargo"] = RM.cargo.len/RM.cargo_capacity*100
+ answer["cargo"] = length(RM.cargo) / RM.cargo_capacity * 100
return answer
@@ -122,10 +119,34 @@
Active equipment: [M.selected||"None"]
"}
if(istype(M, /obj/mecha/working/ripley))
var/obj/mecha/working/ripley/RM = M
- answer += "Used cargo space: [RM.cargo.len/RM.cargo_capacity*100]%
"
+ answer += "Used cargo space: [length(RM.cargo) / RM.cargo_capacity * 100]%
"
return answer
+/obj/item/mecha_parts/mecha_tracking/proc/retrieve_data()
+ var/list/data = list()
+ if(!in_mecha())
+ return FALSE
+ var/obj/mecha/M = loc
+ data["uid"] = UID()
+ data["charge"] = M.get_charge()
+ data["name"] = M.name
+ data["health"] = M.obj_integrity
+ data["maxHealth"] = M.max_integrity
+ data["cell"] = M.cell
+ if(M.cell)
+ data["cellCharge"] = M.cell.charge
+ data["cellMaxCharge"] = M.cell.charge
+ data["airtank"] = M.return_pressure()
+ data["pilot"] = M.occupant
+ data["location"] = get_area(M)
+ data["active"] = M.selected
+ if(istype(M, /obj/mecha/working/ripley))
+ var/obj/mecha/working/ripley/RM = M
+ data["cargoUsed"] = length(RM.cargo)
+ data["cargoMax"] = RM.cargo_capacity
+ return data
+
/obj/item/mecha_parts/mecha_tracking/emp_act()
qdel(src)
@@ -142,9 +163,9 @@
/obj/item/mecha_parts/mecha_tracking/proc/get_mecha_log()
if(!in_mecha())
- return 0
+ return list()
var/obj/mecha/M = loc
- return M.get_log_html()
+ return M.get_log_tgui()
/obj/item/mecha_parts/mecha_tracking/ai_control
name = "exosuit AI control beacon"
diff --git a/code/game/mecha/mecha_topic.dm b/code/game/mecha/mecha_topic.dm
index fc8f38a971c..8c9a74c0f8d 100644
--- a/code/game/mecha/mecha_topic.dm
+++ b/code/game/mecha/mecha_topic.dm
@@ -158,6 +158,14 @@
output += "