NanoUI Update: Seperate UI Data into ui_data() proc

This commit changes how NanoUI's live data updating system works.
Previously, data for the template was directly gathered in the
ui_interact proc. Now, it is seperated into the proc `ui_data`.

To players, this does absolutely nothing.
To coders, this opens up the potential for a much more complicated and
fancy graphical updating system in the future, because the data is
available on-demand without ever having to call
nanomanager.try_update_ui.
This commit is contained in:
Tigercat2000
2016-12-14 13:37:34 -08:00
parent 23717e9949
commit b9abce843d
78 changed files with 964 additions and 889 deletions
@@ -107,22 +107,30 @@
*
* @return nothing
*/
/obj/machinery/chem_dispenser/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1)
if(broken_requirements.len)
to_chat(user, "<span class='warning'>[src] is broken. [broken_requirements[broken_requirements[1]]]</span>")
return
// update the ui if it exists, returns null if no ui is passed/found
ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
// the ui does not exist, so we'll create a new() one
// for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm
ui = new(user, src, ui_key, "chem_dispenser.tmpl", ui_title, 390, 655)
// open the new ui window
ui.open()
// this is the data which will be sent to the ui
/obj/machinery/chem_dispenser/ui_data(mob/user, datum/topic_state/state = default_state)
var/data[0]
data["amount"] = amount
data["energy"] = round(energy)
data["maxEnergy"] = round(max_energy)
data["isBeakerLoaded"] = beaker ? 1 : 0
var beakerContents[0]
var beakerCurrentVolume = 0
var/beakerContents[0]
var/beakerCurrentVolume = 0
if(beaker && beaker.reagents && beaker.reagents.reagent_list.len)
for(var/datum/reagent/R in beaker.reagents.reagent_list)
beakerContents.Add(list(list("name" = R.name, "id"=R.id, "volume" = R.volume))) // list in a list because Byond merges the first list...
@@ -136,23 +144,14 @@
data["beakerCurrentVolume"] = null
data["beakerMaxVolume"] = null
var chemicals[0]
var/chemicals[0]
for(var/re in dispensable_reagents)
var/datum/reagent/temp = chemical_reagents_list[re]
if(temp)
chemicals.Add(list(list("title" = temp.name, "id" = temp.id, "commands" = list("dispense" = temp.id)))) // list in a list because Byond merges the first list...
data["chemicals"] = chemicals
// update the ui if it exists, returns null if no ui is passed/found
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if(!ui)
// the ui does not exist, so we'll create a new() one
// for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm
ui = new(user, src, ui_key, "chem_dispenser.tmpl", ui_title, 390, 655)
// when the ui is first opened this is the data it will use
ui.set_initial_data(data)
// open the new ui window
ui.open()
return data
/obj/machinery/chem_dispenser/Topic(href, href_list)
if(..())
@@ -130,7 +130,15 @@
if(user.stat || user.restrained())
return
// update the ui if it exists, returns null if no ui is passed/found
ui = nanomanager.try_update_ui(user, src, ui_key, ui)
if(!ui)
ui = new(user, src, ui_key, "chem_heater.tmpl", "ChemHeater", 350, 270)
ui.open()
/obj/machinery/chem_heater/ui_data(mob/user, datum/topic_state/state = default_state)
var/data[0]
data["targetTemp"] = desired_temp
data["isActive"] = on
data["isBeakerLoaded"] = beaker ? 1 : 0
@@ -140,15 +148,10 @@
data["beakerMaxVolume"] = beaker ? beaker.volume : null
//copy-pasted from chem dispenser
var beakerContents[0]
var/beakerContents[0]
if(beaker)
for(var/datum/reagent/R in beaker.reagents.reagent_list)
beakerContents.Add(list(list("name" = R.name, "volume" = R.volume))) // list in a list because Byond merges the first list...
data["beakerContents"] = beakerContents
// update the ui if it exists, returns null if no ui is passed/found
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data)
if(!ui)
ui = new(user, src, ui_key, "chem_heater.tmpl", "ChemHeater", 350, 270)
ui.set_initial_data(data)
ui.open()
return data
@@ -319,12 +319,17 @@
ui_interact(user)
return
/obj/machinery/chem_master/ui_interact(mob/user, ui_key="main", datum/nanoui/ui = null, force_open = 1)
/obj/machinery/chem_master/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1)
var/datum/asset/chem_master/assets = get_asset_datum(/datum/asset/chem_master)
assets.send(user)
var/data = list()
ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
ui = new(user, src, ui_key, "chem_master.tmpl", name, 575, 400)
ui.open()
/obj/machinery/chem_master/ui_data(mob/user, datum/topic_state/state = default_state)
var/data[0]
data["condi"] = condi
data["loaded_pill_bottle"] = (loaded_pill_bottle ? 1 : 0)
@@ -347,11 +352,7 @@
data["bottlesprite"] = bottlesprite
data["mode"] = mode
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if(!ui)
ui = new(user, src, ui_key, "chem_master.tmpl", name, 575, 400)
ui.set_initial_data(data)
ui.open()
return data
/obj/machinery/chem_master/proc/isgoodnumber(num)
if(isnum(num))