From 86b5f8395e8dde61d31901c4f081f58ae6d82176 Mon Sep 17 00:00:00 2001 From: AffectedArc07 <25063394+AffectedArc07@users.noreply.github.com> Date: Fri, 23 Oct 2020 19:13:07 +0100 Subject: [PATCH] [TGUI] Crafting (#14700) * TGUI Crafting * Mochi Tweaks --- code/modules/crafting/craft.dm | 84 ++++---- code/modules/mob/living/carbon/human/human.dm | 2 +- nano/templates/personal_crafting.tmpl | 116 ---------- .../tgui/interfaces/PersonalCrafting.js | 201 ++++++++++++++++++ tgui/packages/tgui/public/tgui.bundle.js | 6 +- 5 files changed, 250 insertions(+), 159 deletions(-) delete mode 100644 nano/templates/personal_crafting.tmpl create mode 100644 tgui/packages/tgui/interfaces/PersonalCrafting.js diff --git a/code/modules/crafting/craft.dm b/code/modules/crafting/craft.dm index aae3b84a3c5..1a994123cee 100644 --- a/code/modules/crafting/craft.dm +++ b/code/modules/crafting/craft.dm @@ -297,25 +297,27 @@ Deletion.Cut(Deletion.len) qdel(DL) -/datum/personal_crafting/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1, datum/topic_state/state = GLOB.not_incapacitated_turf_state) - ui = SSnanoui.try_update_ui(user, src, ui_key, ui, force_open) +/datum/personal_crafting/tgui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_not_incapacitated_turf_state) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "personal_crafting.tmpl", "Crafting Menu", 700, 800, state = state) + ui = new(user, src, ui_key, "PersonalCrafting", "Crafting Menu", 700, 800, master_ui, state) ui.open() /datum/personal_crafting/proc/close(mob/user) - var/datum/nanoui/ui = SSnanoui.get_open_ui(user, src, "main") + var/datum/nanoui/ui = SStgui.get_open_ui(user, src, "main") if(ui) ui.close() -/datum/personal_crafting/ui_data(mob/user) +/datum/personal_crafting/tgui_data(mob/user) var/list/data = list() var/list/subs = list() var/cur_subcategory = CAT_NONE + var/cur_category = categories[viewing_category] if(islist(subcategories[viewing_category])) subs = subcategories[viewing_category] cur_subcategory = subs[viewing_subcategory] + data["busy"] = busy data["prev_cat"] = categories[prev_cat()] data["prev_subcat"] = subs[prev_subcat()] @@ -329,6 +331,7 @@ var/list/surroundings = get_surroundings(user) var/list/can_craft = list() var/list/cant_craft = list() + for(var/rec in GLOB.crafting_recipes) var/datum/crafting_recipe/R = rec @@ -341,49 +344,52 @@ can_craft += list(build_recipe_data(R)) else cant_craft += list(build_recipe_data(R)) + data["can_craft"] = can_craft data["cant_craft"] = cant_craft return data -/datum/personal_crafting/Topic(href, href_list) +/datum/personal_crafting/tgui_act(action, list/params) if(..()) return - if(href_list["make"]) - var/datum/crafting_recipe/TR = locate(href_list["make"]) in GLOB.crafting_recipes - busy = TRUE - SSnanoui.update_uis(src) - var/fail_msg = construct_item(usr, TR) - if(!fail_msg) - to_chat(usr, "[TR.name] constructed.") - if(TR.alert_admins_on_craft) - message_admins("[key_name_admin(usr)] has created a [TR.name] at [ADMIN_COORDJMP(usr)]") - else - to_chat(usr, "Construction failed[fail_msg]") - busy = FALSE - SSnanoui.update_uis(src) - if(href_list["forwardCat"]) - viewing_category = next_cat(FALSE) - . = TRUE - if(href_list["backwardCat"]) - viewing_category = prev_cat(FALSE) - . = TRUE - if(href_list["forwardSubCat"]) - viewing_subcategory = next_subcat() - . = TRUE - if(href_list["backwardSubCat"]) - viewing_subcategory = prev_subcat() - . = TRUE - if(href_list["toggle_recipes"]) - display_craftable_only = !display_craftable_only - . = TRUE - if(href_list["toggle_compact"]) - display_compact = !display_compact - . = TRUE + . = TRUE - SSnanoui.update_uis(src) + switch(action) + if("make") + var/datum/crafting_recipe/TR = locate(params["make"]) in GLOB.crafting_recipes + if(!istype(TR)) + return + busy = TRUE + SStgui.update_uis(src) + var/fail_msg = construct_item(usr, TR) + if(!fail_msg) + to_chat(usr, "[TR.name] constructed.") + if(TR.alert_admins_on_craft) + message_admins("[key_name_admin(usr)] has created a [TR.name] at [ADMIN_COORDJMP(usr)]") + else + to_chat(usr, "Construction failed[fail_msg]") + busy = FALSE + SStgui.update_uis(src) + + if("forwardCat") + viewing_category = next_cat(FALSE) + + if("backwardCat") + viewing_category = prev_cat(FALSE) + + if("forwardSubCat") + viewing_subcategory = next_subcat() + + if("backwardSubCat") + viewing_subcategory = prev_subcat() + + if("toggle_recipes") + display_craftable_only = !display_craftable_only + + if("toggle_compact") + display_compact = !display_compact -//Next works nicely with modular arithmetic //Next works nicely with modular arithmetic /datum/personal_crafting/proc/next_cat(readonly = TRUE) if (!readonly) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index fb4db882578..62fc21ff968 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -41,7 +41,7 @@ GLOB.human_list += src /mob/living/carbon/human/OpenCraftingMenu() - handcrafting.ui_interact(src) + handcrafting.tgui_interact(src) /mob/living/carbon/human/prepare_data_huds() //Update med hud images... diff --git a/nano/templates/personal_crafting.tmpl b/nano/templates/personal_crafting.tmpl deleted file mode 100644 index 3158d7c3906..00000000000 --- a/nano/templates/personal_crafting.tmpl +++ /dev/null @@ -1,116 +0,0 @@ - - - -
-

{{:data.category}}{{if data.subcategory}} : {{:data.subcategory}}{{/if}}

-
-
- {{:helper.link(data.prev_cat, 'arrow-left', {'backwardCat': 1})}} - {{:helper.link(data.next_cat, 'arrow-right', {'forwardCat': 1})}} - {{if data.display_craftable_only}} - {{:helper.link('Showing Craftable Recipes', 'lock', {'toggle_recipes': 1})}} - {{else}} - {{:helper.link('Showing All Recipes', 'unlock', {'toggle_recipes': 1})}} - {{/if}} - {{:helper.link('Compact', data.display_compact ? 'check-square-o' : 'square-o', {'toggle_compact': 1})}} -
- {{if data.subcategory}} -
- {{:helper.link(data.prev_subcat, 'arrow-left', {'backwardSubCat': 1})}} - {{:helper.link(data.next_subcat, 'arrow-right', {'forwardSubCat': 1})}} -
- {{/if}} - {{if data.display_compact}} -
-
- - {{for data.can_craft}} - - - - - {{/for}} - {{if !data.display_craftable_only}} - {{for data.cant_craft}} - - - - - {{/for}} - {{/if}} -
{{:value.name}}:
- {{:helper.link('Craft', 'gears', {'make': value.ref})}} -
{{:value.name}}:
- {{:helper.link('Craft', 'gears', {'make': value.ref}, 'disabled')}} -
-
-
- {{else}} - {{for data.can_craft}} -
-

{{:value.name}}

-
- {{if value.req_text}} -
-
Requirements:
-
{{:value.req_text}}
-
- {{/if}} - {{if value.catalyst_text}} -
-
Catalysts:
-
{{:value.catalyst_text}}
-
- {{/if}} - {{if value.tool_text}} -
-
Tools:
-
{{:value.tool_text}}
-
- {{/if}} -
- {{:helper.link('Craft', 'gears', {'make': value.ref})}} -
-
-
- {{/for}} - {{if !data.display_craftable_only}} - {{for data.cant_craft}} -
-

{{:value.name}}

-
- {{if value.req_text}} -
-
Requirements:
-
{{:value.req_text}}
-
- {{/if}} - {{if value.catalyst_text}} -
-
Catalysts:
-
{{:value.catalyst_text}}
-
- {{/if}} - {{if value.tool_text}} -
-
Tools:
-
{{:value.tool_text}}
-
- {{/if}} -
-
- {{/for}} - {{/if}} - {{/if}} -
-
- -{{if data.busy}} -
-
-

Crafting...

-
-
-{{/if}} \ No newline at end of file diff --git a/tgui/packages/tgui/interfaces/PersonalCrafting.js b/tgui/packages/tgui/interfaces/PersonalCrafting.js new file mode 100644 index 00000000000..801cf078bd5 --- /dev/null +++ b/tgui/packages/tgui/interfaces/PersonalCrafting.js @@ -0,0 +1,201 @@ +import { Fragment } from "inferno"; +import { useBackend } from "../backend"; +import { Button, LabeledList, Box, Section, Dimmer, Icon } from "../components"; +import { Window } from "../layouts"; + +export const PersonalCrafting = (props, context) => { + const { act, data } = useBackend(context); + const { + busy, + category, + display_craftable_only, + display_compact, + prev_cat, + next_cat, + subcategory, + prev_subcat, + next_subcat, + } = data; + return ( + + + {!!busy && ( + + + {' Crafting...'} + + )} +
+
+
+
+ ); +}; + +const CompactView = (props, context) => { + const { act, data } = useBackend(context); + const { + display_craftable_only, + can_craft, + cant_craft, + } = data; + return ( + + + {can_craft.map(r => ( + +