From 0fde1c778a2744f78a95d04192273b428b28633d Mon Sep 17 00:00:00 2001 From: Casper Date: Tue, 26 Sep 2023 16:17:43 +0100 Subject: [PATCH] TGUI: Microwave. --- code/game/machinery/kitchen/microwave.dm | 144 +++++++++++---------- tgui/packages/tgui/interfaces/Microwave.js | 72 +++++++++++ 2 files changed, 147 insertions(+), 69 deletions(-) create mode 100644 tgui/packages/tgui/interfaces/Microwave.js diff --git a/code/game/machinery/kitchen/microwave.dm b/code/game/machinery/kitchen/microwave.dm index f4611b9042db..2e0d143a9092 100644 --- a/code/game/machinery/kitchen/microwave.dm +++ b/code/game/machinery/kitchen/microwave.dm @@ -154,72 +154,81 @@ user.set_interaction(src) interact(user) + tgui_interact(user) + +/obj/structure/machinery/microwave/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if (!ui) + ui = new(user, src, "Microwave", "Microwave Controls") + ui.open() + //******************* //* Microwave Menu //********************/ +/obj/structure/machinery/microwave/ui_data(mob/user) + var/list/data = list() -/obj/structure/machinery/microwave/interact(mob/user as mob) // The microwave Menu - var/dat = "" - if(src.broken > 0) - dat = {"Bzzzzttttt"} - else if(src.operating) - dat = {"Microwaving in progress!
Please wait...!
"} - else if(src.dirty==100) - dat = {"This microwave is dirty!
Please clean it before use!
"} - else - var/list/items_counts = new - var/list/items_measures = new - var/list/items_measures_p = new - for (var/obj/O in contents) - var/display_name = O.name - if (istype(O,/obj/item/reagent_container/food/snacks/egg)) - items_measures[display_name] = "egg" - items_measures_p[display_name] = "eggs" - if (istype(O,/obj/item/reagent_container/food/snacks/tofu)) - items_measures[display_name] = "tofu chunk" - items_measures_p[display_name] = "tofu chunks" - if (istype(O,/obj/item/reagent_container/food/snacks/meat)) //any meat - items_measures[display_name] = "slab of meat" - items_measures_p[display_name] = "slabs of meat" - if (istype(O,/obj/item/reagent_container/food/snacks/donkpocket)) - display_name = "Turnovers" - items_measures[display_name] = "turnover" - items_measures_p[display_name] = "turnovers" - if (istype(O,/obj/item/reagent_container/food/snacks/carpmeat)) - items_measures[display_name] = "fillet of meat" - items_measures_p[display_name] = "fillets of meat" - items_counts[display_name]++ - for (var/O in items_counts) - var/N = items_counts[O] - if (!(O in items_measures)) - dat += {"[capitalize(O)]: [N] [lowertext(O)]\s
"} - else - if (N==1) - dat += {"[capitalize(O)]: [N] [items_measures[O]]
"} - else - dat += {"[capitalize(O)]: [N] [items_measures_p[O]]
"} - - for (var/datum/reagent/R in reagents.reagent_list) - var/display_name = R.name - if (R.id == "hotsauce") - display_name = "Hotsauce" - if (R.id == "frostoil") - display_name = "Coldsauce" - dat += {"[display_name]: [R.volume] unit\s
"} - - if (items_counts.len==0 && reagents.reagent_list.len==0) - dat = {"The microwave is empty
"} + data["operating"] = src.operating + data["broken"] = src.broken + data["dirty"] = (src.dirty == 100) + + var/list/ingredients = new + var/list/items_counts = new + var/list/items_measures = new + var/list/items_measures_p = new + + for (var/obj/O in contents) + var/display_name = O.name + + if (istype(O,/obj/item/reagent_container/food/snacks/egg)) + items_measures[display_name] = "egg" + items_measures_p[display_name] = "eggs" + if (istype(O,/obj/item/reagent_container/food/snacks/tofu)) + items_measures[display_name] = "tofu chunk" + items_measures_p[display_name] = "tofu chunks" + if (istype(O,/obj/item/reagent_container/food/snacks/meat)) //any meat + items_measures[display_name] = "slab of meat" + items_measures_p[display_name] = "slabs of meat" + if (istype(O,/obj/item/reagent_container/food/snacks/donkpocket)) + display_name = "Turnovers" + items_measures[display_name] = "turnover" + items_measures_p[display_name] = "turnovers" + if (istype(O,/obj/item/reagent_container/food/snacks/carpmeat)) + items_measures[display_name] = "fillet of meat" + items_measures_p[display_name] = "fillets of meat" + items_counts[display_name]++ + + for (var/O in items_counts) + var/list/item = new + + item["name"] = capitalize(O) + item["count"] = items_counts[O] + + if (!(O in items_measures)) + item["measure"] = "[lowertext(O)][items_counts[O] > 1 ? "s" : ""]" // Adds 's' for plurals. + else if (items_counts[O] == 1) + item["measure"] = items_measures[O] else - dat = {"Ingredients:
[dat]"} - dat += {"

\ -Turn on!
\ -
Eject ingredients!
\ -"} + item["measure"] = items_measures_p[O] - show_browser(user, dat, "Microwave Controls", "microwave") - return + ingredients += list(item) + for (var/datum/reagent/R in reagents.reagent_list) + var/list/reagent = new + reagent["count"] = R.volume + reagent["measure"] = R.volume > 1 ? "units" : "unit" + + reagent["name"] = R.name + if (R.id == "hotsauce") + reagent["name"] = "Hotsauce" + if (R.id == "frostoil") + reagent["name"] = "Coldsauce" + + ingredients += list(reagent) + + data["ingredients"] = ingredients + return data //*********************************** //* Microwave Menu Handling/Cooking @@ -322,7 +331,7 @@ if (src.reagents.total_volume) src.dirty++ src.reagents.clear_reagents() - to_chat(usr, SPAN_NOTICE(" You dispose of the microwave contents.")) + to_chat(usr, SPAN_NOTICE("You dispose of the microwave contents.")) src.updateUsrDialog() /obj/structure/machinery/microwave/proc/muck_start() @@ -365,19 +374,16 @@ ffuu.reagents.add_reagent("toxin", amount/10) return ffuu -/obj/structure/machinery/microwave/Topic(href, href_list) - if(..()) - return - - usr.set_interaction(src) - if(src.operating) - src.updateUsrDialog() +/obj/structure/machinery/microwave/ui_act(action, params) + . = ..() + if(.) return - switch(href_list["action"]) + switch (action) if ("cook") cook(usr.get_skill_duration_multiplier(SKILL_DOMESTIC)) // picking the right microwave setting for the right food. when's the last time you used the special setting on the microwave? i bet you just slam the 30 second increment. Do you know how much programming went into putting the Pizza setting into a microwave emitter? - if ("dispose") + if ("eject_all") dispose() - return + + return TRUE diff --git a/tgui/packages/tgui/interfaces/Microwave.js b/tgui/packages/tgui/interfaces/Microwave.js new file mode 100644 index 000000000000..d817e867d11e --- /dev/null +++ b/tgui/packages/tgui/interfaces/Microwave.js @@ -0,0 +1,72 @@ +import { useBackend } from '../backend'; +import { Button, NoticeBox, Section, Flex, Box } from '../components'; +import { Window } from '../layouts'; + +export const Microwave = (props, context) => { + const { data, act } = useBackend(context); + const { operating, broken, dirty, ingredients } = data; + + return ( + + +
+ + + + + }> + {!!operating && ( + + Cooking.. + + )} + + {!!broken && ( + + Appliance broken. Please contact your local technician. + + )} + + {!!dirty && ( + + This microwave is too dirty. Cleaning required. + + )} + + {!ingredients.length && None} + + + {ingredients.map((ingredient) => { + return ( + + {ingredient.name}: {ingredient.count}{' '} + {ingredient.measure} + + ); + })} + +
+
+
+ ); +};