mirror of
https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13.git
synced 2025-12-10 09:54:52 +00:00
Initial Commit
This commit is contained in:
@@ -31,8 +31,8 @@
|
|||||||
var/working_state = "dispenser_working"
|
var/working_state = "dispenser_working"
|
||||||
var/nopower_state = "dispenser_nopower"
|
var/nopower_state = "dispenser_nopower"
|
||||||
var/has_panel_overlay = TRUE
|
var/has_panel_overlay = TRUE
|
||||||
var/macrotier = 1
|
|
||||||
var/obj/item/reagent_containers/beaker = null
|
var/obj/item/reagent_containers/beaker = null
|
||||||
|
//dispensable_reagents is copypasted in plumbing synthesizers. Please update accordingly. (I didn't make it global because that would limit custom chem dispensers)
|
||||||
var/list/dispensable_reagents = list(
|
var/list/dispensable_reagents = list(
|
||||||
/datum/reagent/hydrogen,
|
/datum/reagent/hydrogen,
|
||||||
/datum/reagent/lithium,
|
/datum/reagent/lithium,
|
||||||
@@ -61,7 +61,7 @@
|
|||||||
/datum/reagent/bromine,
|
/datum/reagent/bromine,
|
||||||
/datum/reagent/stable_plasma
|
/datum/reagent/stable_plasma
|
||||||
)
|
)
|
||||||
//these become available once upgraded.
|
//These become available once upgraded.
|
||||||
var/list/upgrade_reagents = list(
|
var/list/upgrade_reagents = list(
|
||||||
/datum/reagent/oil,
|
/datum/reagent/oil,
|
||||||
/datum/reagent/ammonia,
|
/datum/reagent/ammonia,
|
||||||
@@ -87,20 +87,17 @@
|
|||||||
/datum/reagent/toxin/histamine,
|
/datum/reagent/toxin/histamine,
|
||||||
/datum/reagent/medicine/morphine
|
/datum/reagent/medicine/morphine
|
||||||
)
|
)
|
||||||
|
var/list/recording_recipe
|
||||||
|
|
||||||
var/list/saved_recipes = list()
|
var/list/saved_recipes = list()
|
||||||
|
|
||||||
/obj/machinery/chem_dispenser/Initialize()
|
/obj/machinery/chem_dispenser/Initialize()
|
||||||
. = ..()
|
. = ..()
|
||||||
|
dispensable_reagents = sortList(dispensable_reagents, /proc/cmp_reagents_asc)
|
||||||
if(emagged_reagents)
|
if(emagged_reagents)
|
||||||
emagged_reagents = sortList(emagged_reagents, /proc/cmp_reagents_asc)
|
emagged_reagents = sortList(emagged_reagents, /proc/cmp_reagents_asc)
|
||||||
if(upgrade_reagents)
|
if(upgrade_reagents)
|
||||||
upgrade_reagents = sortList(upgrade_reagents, /proc/cmp_reagents_asc)
|
upgrade_reagents = sortList(upgrade_reagents, /proc/cmp_reagents_asc)
|
||||||
if(upgrade_reagents2)
|
|
||||||
upgrade_reagents2 = sortList(upgrade_reagents2, /proc/cmp_reagents_asc)
|
|
||||||
if(upgrade_reagents3)
|
|
||||||
upgrade_reagents3 = sortList(upgrade_reagents3, /proc/cmp_reagents_asc)
|
|
||||||
dispensable_reagents = sortList(dispensable_reagents, /proc/cmp_reagents_asc)
|
|
||||||
update_icon()
|
update_icon()
|
||||||
|
|
||||||
/obj/machinery/chem_dispenser/Destroy()
|
/obj/machinery/chem_dispenser/Destroy()
|
||||||
@@ -116,15 +113,6 @@
|
|||||||
. += "<span class='notice'>The status display reads:\n\
|
. += "<span class='notice'>The status display reads:\n\
|
||||||
Recharging <b>[recharge_amount]</b> power units per interval.\n\
|
Recharging <b>[recharge_amount]</b> power units per interval.\n\
|
||||||
Power efficiency increased by <b>[round((powerefficiency*1000)-100, 1)]%</b>.</span>"
|
Power efficiency increased by <b>[round((powerefficiency*1000)-100, 1)]%</b>.</span>"
|
||||||
switch(macrotier)
|
|
||||||
if(1)
|
|
||||||
. += "<span class='notice'>Macro granularity at <b>5u</b>.<span>"
|
|
||||||
if(2)
|
|
||||||
. += "<span class='notice'>Macro granularity at <b>3u</b>.<span>"
|
|
||||||
if(3)
|
|
||||||
. += "<span class='notice'>Macro granularity at <b>2u</b>.<span>"
|
|
||||||
if(4)
|
|
||||||
. += "<span class='notice'>Macro granularity at <b>1u</b>.<span>"
|
|
||||||
|
|
||||||
/obj/machinery/chem_dispenser/process()
|
/obj/machinery/chem_dispenser/process()
|
||||||
if (recharge_counter >= 4)
|
if (recharge_counter >= 4)
|
||||||
@@ -160,7 +148,6 @@
|
|||||||
beaker_overlay = display_beaker()
|
beaker_overlay = display_beaker()
|
||||||
add_overlay(beaker_overlay)
|
add_overlay(beaker_overlay)
|
||||||
|
|
||||||
|
|
||||||
/obj/machinery/chem_dispenser/emag_act(mob/user)
|
/obj/machinery/chem_dispenser/emag_act(mob/user)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(obj_flags & EMAGGED)
|
if(obj_flags & EMAGGED)
|
||||||
@@ -226,7 +213,6 @@
|
|||||||
data["beakerCurrentpH"] = null
|
data["beakerCurrentpH"] = null
|
||||||
|
|
||||||
var/chemicals[0]
|
var/chemicals[0]
|
||||||
var/recipes[0]
|
|
||||||
var/is_hallucinating = FALSE
|
var/is_hallucinating = FALSE
|
||||||
if(user.hallucinating())
|
if(user.hallucinating())
|
||||||
is_hallucinating = TRUE
|
is_hallucinating = TRUE
|
||||||
@@ -237,10 +223,10 @@
|
|||||||
if(is_hallucinating && prob(5))
|
if(is_hallucinating && prob(5))
|
||||||
chemname = "[pick_list_replacements("hallucination.json", "chemicals")]"
|
chemname = "[pick_list_replacements("hallucination.json", "chemicals")]"
|
||||||
chemicals.Add(list(list("title" = chemname, "id" = ckey(temp.name))))
|
chemicals.Add(list(list("title" = chemname, "id" = ckey(temp.name))))
|
||||||
for(var/recipe in saved_recipes)
|
|
||||||
recipes.Add(list(recipe))
|
|
||||||
data["chemicals"] = chemicals
|
data["chemicals"] = chemicals
|
||||||
data["recipes"] = recipes
|
data["recipes"] = saved_recipes
|
||||||
|
|
||||||
|
data["recordingRecipe"] = recording_recipe
|
||||||
return data
|
return data
|
||||||
|
|
||||||
/obj/machinery/chem_dispenser/ui_act(action, params)
|
/obj/machinery/chem_dispenser/ui_act(action, params)
|
||||||
@@ -258,7 +244,9 @@
|
|||||||
if("dispense")
|
if("dispense")
|
||||||
if(!is_operational() || QDELETED(cell))
|
if(!is_operational() || QDELETED(cell))
|
||||||
return
|
return
|
||||||
var/reagent = GLOB.name2reagent[params["reagent"]]
|
var/reagent_name = params["reagent"]
|
||||||
|
if(!recording_recipe)
|
||||||
|
var/reagent = GLOB.name2reagent[reagent_name]
|
||||||
if(beaker && dispensable_reagents.Find(reagent))
|
if(beaker && dispensable_reagents.Find(reagent))
|
||||||
var/datum/reagents/R = beaker.reagents
|
var/datum/reagents/R = beaker.reagents
|
||||||
var/free = R.maximum_volume - R.total_volume
|
var/free = R.maximum_volume - R.total_volume
|
||||||
@@ -270,12 +258,14 @@
|
|||||||
R.add_reagent(reagent, actual)
|
R.add_reagent(reagent, actual)
|
||||||
|
|
||||||
work_animation()
|
work_animation()
|
||||||
|
else
|
||||||
|
recording_recipe[reagent_name] += amount
|
||||||
. = TRUE
|
. = TRUE
|
||||||
if("remove")
|
if("remove")
|
||||||
if(!is_operational())
|
if(!is_operational() || recording_recipe)
|
||||||
return
|
return
|
||||||
var/amount = text2num(params["amount"])
|
var/amount = text2num(params["amount"])
|
||||||
if(beaker && (amount in beaker.possible_transfer_amounts))
|
if(beaker && amount in beaker.possible_transfer_amounts)
|
||||||
beaker.reagents.remove_all(amount)
|
beaker.reagents.remove_all(amount)
|
||||||
work_animation()
|
work_animation()
|
||||||
. = TRUE
|
. = TRUE
|
||||||
@@ -285,57 +275,65 @@
|
|||||||
if("dispense_recipe")
|
if("dispense_recipe")
|
||||||
if(!is_operational() || QDELETED(cell))
|
if(!is_operational() || QDELETED(cell))
|
||||||
return
|
return
|
||||||
var/recipe_to_use = params["recipe"]
|
var/list/chemicals_to_dispense = saved_recipes[params["recipe"]]
|
||||||
var/list/chemicals_to_dispense = process_recipe_list(recipe_to_use)
|
if(!LAZYLEN(chemicals_to_dispense))
|
||||||
var/res = get_macro_resolution()
|
return
|
||||||
for(var/key in chemicals_to_dispense) // i suppose you could edit the list locally before passing it
|
for(var/key in chemicals_to_dispense)
|
||||||
var/list/keysplit = splittext(key," ")
|
var/reagent = GLOB.name2reagent[translate_legacy_chem_id(key)]
|
||||||
var/r_id = GLOB.name2reagent[translate_legacy_chem_id(keysplit[1])]
|
var/dispense_amount = chemicals_to_dispense[key]
|
||||||
if(beaker && dispensable_reagents.Find(r_id)) // but since we verify we have the reagent, it'll be fine
|
if(!dispensable_reagents.Find(reagent))
|
||||||
|
return
|
||||||
|
if(!recording_recipe)
|
||||||
|
if(!beaker)
|
||||||
|
return
|
||||||
var/datum/reagents/R = beaker.reagents
|
var/datum/reagents/R = beaker.reagents
|
||||||
var/free = R.maximum_volume - R.total_volume
|
var/free = R.maximum_volume - R.total_volume
|
||||||
var/actual = min(max(chemicals_to_dispense[key], res), (cell.charge * powerefficiency)*10, free)
|
var/actual = min(dispense_amount, (cell.charge * powerefficiency)*10, free)
|
||||||
if(actual)
|
if(actual)
|
||||||
if(!cell.use(actual / powerefficiency))
|
if(!cell.use(actual / powerefficiency))
|
||||||
say("Not enough energy to complete operation!")
|
say("Not enough energy to complete operation!")
|
||||||
return
|
return
|
||||||
R.add_reagent(r_id, actual)
|
R.add_reagent(reagent, actual)
|
||||||
work_animation()
|
work_animation()
|
||||||
|
else
|
||||||
|
recording_recipe[key] += dispense_amount
|
||||||
|
. = TRUE
|
||||||
if("clear_recipes")
|
if("clear_recipes")
|
||||||
if(!is_operational())
|
if(!is_operational())
|
||||||
return
|
return
|
||||||
var/yesno = alert("Clear all recipes?",, "Yes","No")
|
var/yesno = alert("Clear all recipes?",, "Yes","No")
|
||||||
if(yesno == "Yes")
|
if(yesno == "Yes")
|
||||||
saved_recipes = list()
|
saved_recipes = list()
|
||||||
if("add_recipe")
|
. = TRUE
|
||||||
|
if("record_recipe")
|
||||||
|
if(!is_operational())
|
||||||
|
return
|
||||||
|
recording_recipe = list()
|
||||||
|
. = TRUE
|
||||||
|
if("save_recording")
|
||||||
if(!is_operational())
|
if(!is_operational())
|
||||||
return
|
return
|
||||||
var/name = stripped_input(usr,"Name","What do you want to name this recipe?", "Recipe", MAX_NAME_LEN)
|
var/name = stripped_input(usr,"Name","What do you want to name this recipe?", "Recipe", MAX_NAME_LEN)
|
||||||
var/recipe = stripped_input(usr,"Recipe","Insert recipe with chem IDs")
|
|
||||||
if(!usr.canUseTopic(src, !issilicon(usr)))
|
if(!usr.canUseTopic(src, !issilicon(usr)))
|
||||||
return
|
return
|
||||||
if(name && recipe)
|
if(saved_recipes[name] && alert("\"[name]\" already exists, do you want to overwrite it?",, "Yes", "No") == "No")
|
||||||
var/list/first_process = splittext(recipe, ";")
|
|
||||||
if(!LAZYLEN(first_process))
|
|
||||||
return
|
return
|
||||||
var/res = get_macro_resolution()
|
if(name && recording_recipe)
|
||||||
var/resmismatch = FALSE
|
for(var/reagent in recording_recipe)
|
||||||
for(var/reagents in first_process)
|
var/reagent_id = GLOB.name2reagent[translate_legacy_chem_id(reagent)]
|
||||||
var/list/reagent = splittext(reagents, "=")
|
if(!dispensable_reagents.Find(reagent_id))
|
||||||
var/reagent_id = GLOB.name2reagent[translate_legacy_chem_id(reagent[1])]
|
|
||||||
if(dispensable_reagents.Find(reagent_id))
|
|
||||||
if (!resmismatch && !check_macro_part(reagents, res))
|
|
||||||
resmismatch = TRUE
|
|
||||||
continue
|
|
||||||
else
|
|
||||||
var/chemid = reagent[1]
|
|
||||||
visible_message("<span class='warning'>[src] buzzes.</span>", "<span class='italics'>You hear a faint buzz.</span>")
|
visible_message("<span class='warning'>[src] buzzes.</span>", "<span class='italics'>You hear a faint buzz.</span>")
|
||||||
to_chat(usr, "<span class ='danger'>[src] cannot find Chemical ID: <b>[chemid]</b>!</span>")
|
to_chat(usr, "<span class ='danger'>[src] cannot find <b>[reagent]</b>!</span>")
|
||||||
playsound(src, 'sound/machines/buzz-two.ogg', 50, 1)
|
playsound(src, 'sound/machines/buzz-two.ogg', 50, 1)
|
||||||
return
|
return
|
||||||
if (resmismatch && alert("[src] is not yet capable of replicating this recipe with the precision it needs, do you want to save it anyway?",, "Yes","No") == "No")
|
saved_recipes[name] = recording_recipe
|
||||||
|
recording_recipe = null
|
||||||
|
. = TRUE
|
||||||
|
if("cancel_recording")
|
||||||
|
if(!is_operational())
|
||||||
return
|
return
|
||||||
saved_recipes += list(list("recipe_name" = name, "contents" = recipe))
|
recording_recipe = null
|
||||||
|
. = TRUE
|
||||||
|
|
||||||
/obj/machinery/chem_dispenser/attackby(obj/item/I, mob/user, params)
|
/obj/machinery/chem_dispenser/attackby(obj/item/I, mob/user, params)
|
||||||
if(default_unfasten_wrench(user, I))
|
if(default_unfasten_wrench(user, I))
|
||||||
@@ -343,7 +341,6 @@
|
|||||||
if(default_deconstruction_screwdriver(user, icon_state, icon_state, I))
|
if(default_deconstruction_screwdriver(user, icon_state, icon_state, I))
|
||||||
update_icon()
|
update_icon()
|
||||||
return
|
return
|
||||||
|
|
||||||
if(default_deconstruction_crowbar(I))
|
if(default_deconstruction_crowbar(I))
|
||||||
return
|
return
|
||||||
if(istype(I, /obj/item/reagent_containers) && !(I.item_flags & ABSTRACT) && I.is_open_container())
|
if(istype(I, /obj/item/reagent_containers) && !(I.item_flags & ABSTRACT) && I.is_open_container())
|
||||||
@@ -384,7 +381,6 @@
|
|||||||
work_animation()
|
work_animation()
|
||||||
visible_message("<span class='danger'>[src] malfunctions, spraying chemicals everywhere!</span>")
|
visible_message("<span class='danger'>[src] malfunctions, spraying chemicals everywhere!</span>")
|
||||||
|
|
||||||
|
|
||||||
/obj/machinery/chem_dispenser/RefreshParts()
|
/obj/machinery/chem_dispenser/RefreshParts()
|
||||||
recharge_amount = initial(recharge_amount)
|
recharge_amount = initial(recharge_amount)
|
||||||
var/newpowereff = 0.0666666
|
var/newpowereff = 0.0666666
|
||||||
@@ -395,14 +391,8 @@
|
|||||||
for(var/obj/item/stock_parts/capacitor/C in component_parts)
|
for(var/obj/item/stock_parts/capacitor/C in component_parts)
|
||||||
recharge_amount *= C.rating
|
recharge_amount *= C.rating
|
||||||
for(var/obj/item/stock_parts/manipulator/M in component_parts)
|
for(var/obj/item/stock_parts/manipulator/M in component_parts)
|
||||||
if (M.rating > macrotier)
|
if(M.rating > 3)
|
||||||
macrotier = M.rating
|
|
||||||
if (M.rating > 1)
|
|
||||||
dispensable_reagents |= upgrade_reagents
|
dispensable_reagents |= upgrade_reagents
|
||||||
if (M.rating > 2)
|
|
||||||
dispensable_reagents |= upgrade_reagents2
|
|
||||||
if (M.rating > 3)
|
|
||||||
dispensable_reagents |= upgrade_reagents3
|
|
||||||
powerefficiency = round(newpowereff, 0.01)
|
powerefficiency = round(newpowereff, 0.01)
|
||||||
|
|
||||||
/obj/machinery/chem_dispenser/proc/replace_beaker(mob/living/user, obj/item/reagent_containers/new_beaker)
|
/obj/machinery/chem_dispenser/proc/replace_beaker(mob/living/user, obj/item/reagent_containers/new_beaker)
|
||||||
@@ -422,41 +412,13 @@
|
|||||||
cell = null
|
cell = null
|
||||||
if(beaker)
|
if(beaker)
|
||||||
beaker.forceMove(drop_location())
|
beaker.forceMove(drop_location())
|
||||||
|
beaker = null
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/obj/machinery/chem_dispenser/proc/get_macro_resolution()
|
|
||||||
. = 5
|
|
||||||
if (macrotier > 1)
|
|
||||||
. -= macrotier // 5 for tier1, 3 for 2, 2 for 3, 1 for 4.
|
|
||||||
|
|
||||||
/obj/machinery/chem_dispenser/proc/check_macro(macro)
|
|
||||||
var/res = get_macro_resolution()
|
|
||||||
for (var/reagent in splittext(trim(macro), ";"))
|
|
||||||
if (!check_macro_part(reagent, res))
|
|
||||||
return FALSE
|
|
||||||
return TRUE
|
|
||||||
|
|
||||||
/obj/machinery/chem_dispenser/proc/check_macro_part(var/part, var/res = get_macro_resolution())
|
|
||||||
var/detail = splittext(part, "=")
|
|
||||||
if (round(text2num(detail[2]), res) != text2num(detail[2]))
|
|
||||||
return FALSE
|
|
||||||
return TRUE
|
|
||||||
|
|
||||||
/obj/machinery/chem_dispenser/proc/process_recipe_list(var/fucking_hell)
|
|
||||||
var/list/key_list = list()
|
|
||||||
var/list/final_list = list()
|
|
||||||
var/list/first_process = splittext(fucking_hell, ";")
|
|
||||||
for(var/reagents in first_process)
|
|
||||||
var/list/fuck = splittext(reagents, "=")
|
|
||||||
final_list += list(avoid_assoc_duplicate_keys(fuck[1],key_list) = text2num(fuck[2]))
|
|
||||||
return final_list
|
|
||||||
|
|
||||||
/obj/machinery/chem_dispenser/AltClick(mob/living/user)
|
/obj/machinery/chem_dispenser/AltClick(mob/living/user)
|
||||||
. = ..()
|
..()
|
||||||
if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
|
if(istype(user) && user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
|
||||||
return
|
|
||||||
replace_beaker(user)
|
replace_beaker(user)
|
||||||
return TRUE
|
|
||||||
|
|
||||||
/obj/machinery/chem_dispenser/drinks/Initialize()
|
/obj/machinery/chem_dispenser/drinks/Initialize()
|
||||||
. = ..()
|
. = ..()
|
||||||
@@ -540,7 +502,6 @@
|
|||||||
/datum/reagent/toxin/staminatoxin
|
/datum/reagent/toxin/staminatoxin
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
/obj/machinery/chem_dispenser/drinks/fullupgrade //fully ugpraded stock parts, emagged
|
/obj/machinery/chem_dispenser/drinks/fullupgrade //fully ugpraded stock parts, emagged
|
||||||
desc = "Contains a large reservoir of soft drinks. This model has had its safeties shorted out."
|
desc = "Contains a large reservoir of soft drinks. This model has had its safeties shorted out."
|
||||||
obj_flags = CAN_BE_HIT | EMAGGED
|
obj_flags = CAN_BE_HIT | EMAGGED
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,14 +1,42 @@
|
|||||||
|
<script>
|
||||||
|
component.exports = {
|
||||||
|
data: {
|
||||||
|
upperCaseWrapper(lowercased) {
|
||||||
|
return lowercased.toUpperCase();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
<ui-display title='Status'>
|
<ui-display title='Status'>
|
||||||
<ui-section label='Energy'>
|
<ui-section label='Energy'>
|
||||||
<ui-bar min='0' max='{{data.maxEnergy}}' value='{{data.energy}}'>{{Math.fixed(adata.energy)}} Units</ui-bar>
|
<ui-bar min='0' max='{{data.maxEnergy}}' value='{{data.energy}}'>{{Math.fixed(adata.energy)}} Units</ui-bar>
|
||||||
</ui-section>
|
</ui-section>
|
||||||
</ui-display>
|
</ui-display>
|
||||||
|
|
||||||
|
{{#if data.recordingRecipe && true}}
|
||||||
|
<ui-notice>
|
||||||
|
<span class='fa fa-circle'></span> <span>Recording</span>
|
||||||
|
</ui-notice>
|
||||||
|
<ui-display>
|
||||||
|
<ui-subdisplay>
|
||||||
|
{{#each data.recordingRecipe: chemical}}
|
||||||
|
<ui-section label='{{chemical.replace(/\b\w/, upperCaseWrapper)}}'><span>{{adata.recordingRecipe[chemical]}}</span></ui-section>
|
||||||
|
{{/each}}
|
||||||
|
</ui-subdisplay>
|
||||||
|
<ui-section>
|
||||||
|
<ui-button icon='floppy-o' action='save_recording'>Save</ui-button>
|
||||||
|
<ui-button icon='ban' action='cancel_recording'>Cancel</ui-button>
|
||||||
|
</ui-section>
|
||||||
|
</ui-display>
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
<ui-display title='Saved Recipes' button>
|
<ui-display title='Saved Recipes' button>
|
||||||
<ui-section>
|
<ui-section>
|
||||||
<ui-button icon='plus' action='add_recipe'>Add Recipe</ui-button>
|
<ui-button icon='plus' action='record_recipe' state='{{data.recordingRecipe ? "disabled" : null}}'>Record Recipe</ui-button>
|
||||||
<ui-button icon='minus' action='clear_recipes'>Clear Recipes</ui-button>
|
<ui-button icon='minus' action='clear_recipes' state='{{data.recordingRecipe ? "disabled" : null}}'>Clear Recipes</ui-button>
|
||||||
{{#each data.recipes}}
|
{{#each data.recipes: recipe_name}}
|
||||||
<ui-button grid icon='tint' action='dispense_recipe' params='{"recipe": "{{contents}}"}'>{{recipe_name}}</ui-button>
|
<ui-button grid icon='tint' action='dispense_recipe' params='{"recipe": "{{recipe_name}}"}'>{{recipe_name}}</ui-button>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
</ui-section>
|
</ui-section>
|
||||||
</ui-display>
|
</ui-display>
|
||||||
@@ -27,7 +55,7 @@
|
|||||||
<ui-display title='Beaker' button>
|
<ui-display title='Beaker' button>
|
||||||
{{#partial button}}
|
{{#partial button}}
|
||||||
{{#each data.beakerTransferAmounts}}
|
{{#each data.beakerTransferAmounts}}
|
||||||
<ui-button icon='minus' action='remove' params='{"amount": {{.}}}'>{{.}}</ui-button>
|
<ui-button icon='minus' action='remove' params='{"amount": {{.}}}' state='{{data.recordingRecipe ? "disabled" : null}}'>{{.}}</ui-button>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
<ui-button icon='eject' state='{{data.isBeakerLoaded ? null : "disabled"}}' action='eject'>Eject</ui-button>
|
<ui-button icon='eject' state='{{data.isBeakerLoaded ? null : "disabled"}}' action='eject'>Eject</ui-button>
|
||||||
{{/partial}}
|
{{/partial}}
|
||||||
|
|||||||
Reference in New Issue
Block a user