diff --git a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm index 207c7d435cb..e54ac17b67b 100644 --- a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm +++ b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm @@ -97,10 +97,11 @@ Passive gate is similar to the regular pump except: if(stat & (BROKEN|NOPOWER)) return ui_interact(user) -/obj/machinery/atmospherics/components/binary/passive_gate/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open) +/obj/machinery/atmospherics/components/binary/passive_gate/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ + datum/tgui/master_ui = null, datum/ui_state/state = default_state) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if (!ui) - ui = new(user, src, ui_key, "atmos_pump", name, 335, 115) + ui = new(user, src, ui_key, "atmos_pump", name, 335, 115, master_ui, state) ui.open() /obj/machinery/atmospherics/components/binary/passive_gate/get_ui_data() diff --git a/code/ATMOSPHERICS/components/binary_devices/pump.dm b/code/ATMOSPHERICS/components/binary_devices/pump.dm index 90d7fff5d92..e29156be018 100644 --- a/code/ATMOSPHERICS/components/binary_devices/pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/pump.dm @@ -105,10 +105,11 @@ Thus, the two variables affect pump operation are set in New(): return ui_interact(user) -/obj/machinery/atmospherics/components/binary/pump/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open) +/obj/machinery/atmospherics/components/binary/pump/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ + datum/tgui/master_ui = null, datum/ui_state/state = default_state) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if (!ui) - ui = new(user, src, ui_key, "atmos_pump", name, 335, 115) + ui = new(user, src, ui_key, "atmos_pump", name, 335, 115, master_ui, state) ui.open() /obj/machinery/atmospherics/components/binary/pump/get_ui_data() diff --git a/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm b/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm index 0d5dfd6d139..aa55bc1ce68 100644 --- a/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm @@ -102,10 +102,11 @@ Thus, the two variables affect pump operation are set in New(): return ui_interact(user) -/obj/machinery/atmospherics/components/binary/volume_pump/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open) +/obj/machinery/atmospherics/components/binary/volume_pump/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ + datum/tgui/master_ui = null, datum/ui_state/state = default_state) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if (!ui) - ui = new(user, src, ui_key, "atmos_pump", name, 310, 115) + ui = new(user, src, ui_key, "atmos_pump", name, 310, 115, master_ui, state) ui.open() /obj/machinery/atmospherics/components/binary/volume_pump/get_ui_data() diff --git a/code/ATMOSPHERICS/components/trinary_devices/filter.dm b/code/ATMOSPHERICS/components/trinary_devices/filter.dm index db33cde75e0..81fd5e1866f 100644 --- a/code/ATMOSPHERICS/components/trinary_devices/filter.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/filter.dm @@ -166,10 +166,11 @@ Filter types: return ui_interact(user) -/obj/machinery/atmospherics/components/trinary/filter/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open) +/obj/machinery/atmospherics/components/trinary/filter/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ + datum/tgui/master_ui = null, datum/ui_state/state = default_state) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if (!ui) - ui = new(user, src, ui_key, "atmos_filter", name, 430, 140) + ui = new(user, src, ui_key, "atmos_filter", name, 430, 140, master_ui, state) ui.open() /obj/machinery/atmospherics/components/trinary/filter/get_ui_data() diff --git a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm index d20cd9c2109..5e416123295 100644 --- a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm @@ -129,10 +129,11 @@ return ui_interact(user) -/obj/machinery/atmospherics/components/trinary/mixer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open) +/obj/machinery/atmospherics/components/trinary/mixer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ + datum/tgui/master_ui = null, datum/ui_state/state = default_state) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if (!ui) - ui = new(user, src, ui_key, "atmos_mixer", name, 330, 165) + ui = new(user, src, ui_key, "atmos_mixer", name, 330, 165, master_ui, state) ui.open() /obj/machinery/atmospherics/components/trinary/mixer/get_ui_data() diff --git a/code/ATMOSPHERICS/components/unary_devices/cryo.dm b/code/ATMOSPHERICS/components/unary_devices/cryo.dm index a3697d2ac3c..0e116e25725 100644 --- a/code/ATMOSPHERICS/components/unary_devices/cryo.dm +++ b/code/ATMOSPHERICS/components/unary_devices/cryo.dm @@ -110,10 +110,11 @@ return ui_interact(user) -/obj/machinery/atmospherics/components/unary/cryo_cell/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open) +/obj/machinery/atmospherics/components/unary/cryo_cell/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ + datum/tgui/master_ui = null, datum/ui_state/state = notcontained_state) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if (!ui) - ui = new(user, src, ui_key, "cryo", name, 400, 550, state = notcontained_state) + ui = new(user, src, ui_key, "cryo", name, 400, 550, master_ui, state) ui.open() /obj/machinery/atmospherics/components/unary/cryo_cell/get_ui_data() diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index a5e94437036..723f6b7a10b 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -187,10 +187,11 @@ else if (!shorted) ui_interact(user) -/obj/machinery/alarm/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open) +/obj/machinery/alarm/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ + datum/tgui/master_ui = null, datum/ui_state/state = default_state) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if (!ui) - ui = new(user, src, ui_key, "air_alarm", name, 440, 650) + ui = new(user, src, ui_key, "air_alarm", name, 440, 650, master_ui, state) ui.open() /obj/machinery/alarm/get_ui_data(mob/user) diff --git a/code/game/machinery/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm index 20eac90dae2..091f09bc22f 100644 --- a/code/game/machinery/atmoalter/canister.dm +++ b/code/game/machinery/atmoalter/canister.dm @@ -273,10 +273,11 @@ update_flag return ui_interact(user) -/obj/machinery/portable_atmospherics/canister/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open) +/obj/machinery/portable_atmospherics/canister/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ + datum/tgui/master_ui = null, datum/ui_state/state = physical_state) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if (!ui) - ui = new(user, src, ui_key, "canister", name, 405, 405, state = physical_state) + ui = new(user, src, ui_key, "canister", name, 405, 405, master_ui, state) ui.open() /obj/machinery/portable_atmospherics/canister/get_ui_data() diff --git a/code/game/machinery/doors/airlock_electronics.dm b/code/game/machinery/doors/airlock_electronics.dm index 55bfc93bc04..49f7f636eb9 100644 --- a/code/game/machinery/doors/airlock_electronics.dm +++ b/code/game/machinery/doors/airlock_electronics.dm @@ -13,10 +13,11 @@ add_fingerprint(user) ui_interact(user) -/obj/item/weapon/electronics/airlock/ui_interact(mob/user, ui_key = "main", var/datum/tgui/ui = null, force_open = 0) - SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open) +/obj/item/weapon/electronics/airlock/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ + datum/tgui/master_ui = null, datum/ui_state/state = hands_state) + SStgui.try_update_ui(user, src, ui_key, ui, force_open) if (!ui) - ui = new(user, src, ui_key, "airlock_electronics", name, 975, 420, state = hands_state) + ui = new(user, src, ui_key, "airlock_electronics", name, 975, 420, master_ui, state) ui.open() /obj/item/weapon/electronics/airlock/get_ui_data() diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm index c8471e64002..8242bd0a562 100644 --- a/code/game/machinery/spaceheater.dm +++ b/code/game/machinery/spaceheater.dm @@ -153,10 +153,11 @@ /obj/machinery/space_heater/interact(mob/user) ui_interact(user) -/obj/machinery/space_heater/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open) +/obj/machinery/space_heater/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ + datum/tgui/master_ui = null, datum/ui_state/state = physical_state) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if (!ui) - ui = new(user, src, ui_key, "space_heater", name, 400, 305, state = physical_state) + ui = new(user, src, ui_key, "space_heater", name, 400, 305, master_ui, state) ui.open() /obj/machinery/space_heater/ui_act(action, params) diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm index eff1d524c21..0cb597b8e9a 100644 --- a/code/game/objects/items/weapons/tanks/tanks.dm +++ b/code/game/objects/items/weapons/tanks/tanks.dm @@ -119,10 +119,11 @@ add_fingerprint(user) ui_interact(user) -/obj/item/weapon/tank/ui_interact(mob/user, ui_key = "main", var/datum/tgui/ui = null, force_open = 0) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open) +/obj/item/weapon/tank/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ + datum/tgui/master_ui = null, datum/ui_state/state = hands_state) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if (!ui) - ui = new(user, src, ui_key, "tanks", name, 400, 200, state = inventory_state) + ui = new(user, src, ui_key, "tanks", name, 400, 200, master_ui, state) ui.open() /obj/item/weapon/tank/get_ui_data() diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm index 93e1147d746..baeed877e6f 100644 --- a/code/modules/mob/living/silicon/ai/life.dm +++ b/code/modules/mob/living/silicon/ai/life.dm @@ -161,7 +161,7 @@ sleep(2) //bring up APC dialog apc_override = 1 - theAPC.attack_ai(src) + theAPC.ui_interact(src, state = conscious_state) apc_override = 0 src:aiRestorePowerRoutine = 3 src << "Here are your current laws:" diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 5e5fe08cf4f..4334e1cb26a 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -626,10 +626,11 @@ else ui_interact(user) -/obj/machinery/power/apc/ui_interact(mob/user, ui_key = "main", var/datum/tgui/ui = null, force_open = 0) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open) +/obj/machinery/power/apc/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ + datum/tgui/master_ui = null, datum/ui_state/state = default_state) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if (!ui) - ui = new(user, src, ui_key, "apc", name, 535, 515) + ui = new(user, src, ui_key, "apc", name, 535, 515, master_ui, state) ui.open() /obj/machinery/power/apc/get_ui_data(mob/user) diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index 9d0238fba71..9167dc1dd6f 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -329,10 +329,11 @@ return ui_interact(user) -/obj/machinery/power/smes/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open) +/obj/machinery/power/smes/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ + datum/tgui/master_ui = null, datum/ui_state/state = default_state) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if (!ui) - ui = new(user, src, ui_key, "smes", name, 340, 440) + ui = new(user, src, ui_key, "smes", name, 340, 440, master_ui, state) ui.open() /obj/machinery/power/smes/get_ui_data() diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index f138b106657..f18c4aeb26c 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -369,10 +369,11 @@ return ui_interact(user) -/obj/machinery/power/solar_control/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open) +/obj/machinery/power/solar_control/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ + datum/tgui/master_ui = null, datum/ui_state/state = default_state) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if (!ui) - ui = new(user, src, ui_key, "solar_control", name, 465, 400) + ui = new(user, src, ui_key, "solar_control", name, 465, 400, master_ui, state) ui.open() /obj/machinery/power/solar_control/get_ui_data() diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index a5ebf395dec..d5784519bed 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -85,10 +85,11 @@ return ui_interact(user) -/obj/machinery/chem_dispenser/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open) +/obj/machinery/chem_dispenser/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ + datum/tgui/master_ui = null, datum/ui_state/state = default_state) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if (!ui) - ui = new(user, src, ui_key, "chem_dispenser", name, 550, 550) + ui = new(user, src, ui_key, "chem_dispenser", name, 550, 550, master_ui, state) ui.open() /obj/machinery/chem_dispenser/get_ui_data() diff --git a/code/modules/reagents/chemistry/machinery/chem_heater.dm b/code/modules/reagents/chemistry/machinery/chem_heater.dm index eacd2fba7e9..c44489ff699 100644 --- a/code/modules/reagents/chemistry/machinery/chem_heater.dm +++ b/code/modules/reagents/chemistry/machinery/chem_heater.dm @@ -96,10 +96,11 @@ return ui_interact(user) -/obj/machinery/chem_heater/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open) +/obj/machinery/chem_heater/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ + datum/tgui/master_ui = null, datum/ui_state/state = default_state) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if (!ui) - ui = new(user, src, ui_key, "chem_heater", name, 275, 400) + ui = new(user, src, ui_key, "chem_heater", name, 275, 400, master_ui, state) ui.open() /obj/machinery/chem_heater/get_ui_data() diff --git a/code/modules/tgui/external.dm b/code/modules/tgui/external.dm index d42f1d227eb..bb447fa8847 100644 --- a/code/modules/tgui/external.dm +++ b/code/modules/tgui/external.dm @@ -17,9 +17,7 @@ * optional master_ui datum/tgui The parent UI. * optional state datum/ui_state The state used to determine status. **/ -/datum/proc/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, \ - force_open = 0, datum/tgui/master_ui = null, \ - datum/ui_state/state = default_state) +/datum/proc/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = default_state) return -1 // Sorta implemented. /** @@ -76,21 +74,17 @@ * * required uiref ref The UI that was closed. **/ -/client/verb/uiclose(uiref as text) +/client/verb/uiclose(ref as text) // Name the verb, and hide it from the user panel. set name = "uiclose" set hidden = 1 // Get the UI based on the ref. - var/datum/tgui/ui = locate(uiref) + var/datum/tgui/ui = locate(ref) // If we found the UI, close it. if(istype(ui)) ui.close() - // If there is a custom ref, call that atom's Topic(). - if(ui.ref) - var/href = "close=1" - src.Topic(href, params2list(href), ui.ref) - // Otherwise, if we use the legacy logic, unset the mob's machine. - else if(src && src.mob) + // Unset machine just to be sure. + if(src && src.mob) src.mob.unset_machine() \ No newline at end of file diff --git a/code/modules/tgui/subsystem.dm b/code/modules/tgui/subsystem.dm index e2ce952f57c..ffa7082bcf7 100644 --- a/code/modules/tgui/subsystem.dm +++ b/code/modules/tgui/subsystem.dm @@ -13,20 +13,16 @@ * required src_object datum The object/datum which owns the UI. * required ui_key string The ui_key of the UI. * optional ui datum/tgui The UI to be updated, if it exists. - * optional data list The data to update the UI with, if it exists. * optional force_open bool If the UI should be re-opened instead of updated. * * return datum/tgui The found UI. **/ -/datum/subsystem/tgui/proc/try_update_ui(mob/user, datum/src_object, ui_key, datum/tgui/ui, \ - list/data = null, force_open = 0) - if(!data) - data = src_object.get_ui_data(user) - +/datum/subsystem/tgui/proc/try_update_ui(mob/user, datum/src_object, ui_key, datum/tgui/ui, force_open = 0) if(isnull(ui)) // No UI was passed, so look for one. ui = get_open_ui(user, src_object, ui_key) if(!isnull(ui)) + var/data = src_object.get_ui_data(user) // Get data from the src_object. if(!force_open) // UI is already open; update it. ui.push_data(data) else // Re-open it anyways. diff --git a/code/modules/tgui/tgui.dm b/code/modules/tgui/tgui.dm index 0d775e1824e..465cece5504 100644 --- a/code/modules/tgui/tgui.dm +++ b/code/modules/tgui/tgui.dm @@ -24,7 +24,6 @@ "can_close" = 1, "auto_format" = 0 ) - var/atom/ref = null // An extra ref to call when the window is closed. var/style = "nanotrasen" // The style to be used for this UI. var/interface // The interface (template) to be used for this UI. var/auto_update = 1 // Update the UI every MC tick. @@ -46,16 +45,12 @@ * optional title string The title of the UI. * optional width int The window width. * optional height int The window height. - * optional ref atom An extra ref to use when the window is closed. * optional master_ui datum/tgui The parent UI. * optional state datum/ui_state The state used to determine status. * * return datum/tgui The requested UI. **/ -/datum/tgui/New(mob/user, datum/src_object, ui_key, interface, \ - title, width = 0, height = 0, \ - atom/ref = null, datum/tgui/master_ui = null, \ - datum/ui_state/state = default_state) +/datum/tgui/New(mob/user, datum/src_object, ui_key, interface, title, width = 0, height = 0, datum/tgui/master_ui = null, datum/ui_state/state = default_state) src.user = user src.src_object = src_object src.ui_key = ui_key @@ -70,9 +65,6 @@ if(height) src.height = height - if(ref) - src.ref = ref - src.master_ui = master_ui if(master_ui) master_ui.children += src @@ -85,10 +77,8 @@ * public * * Open this UI (and initialize it with data). - * - * optional data list The data to intialize the UI with. **/ -/datum/tgui/proc/open(list/data = null) +/datum/tgui/proc/open() set waitfor = 0 // Don't wait on sleep()s. if(!user.client) return // Bail if there is no client. @@ -98,9 +88,7 @@ return // Bail if we're not supposed to open. if(!initial_data) - if(!data) // If we don't have initial_data and data was not passed, get data from the src_object. - data = src_object.get_ui_data(user) - set_initial_data(data) // Otherwise use the passed data. + set_initial_data(src_object.get_ui_data(user)) // Get the UI data. var/window_size = "" if(width && height) // If we have a width and height, use them.