From 9887fe6d2bf2b99365b585b3fd91089618b12b09 Mon Sep 17 00:00:00 2001 From: Redmoogle Date: Tue, 23 Aug 2022 10:21:20 -0400 Subject: [PATCH 01/17] Makes autolathe designs use static data instead of updating every second --- code/game/machinery/autolathe.dm | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 8f423c08acfd..fa7a8f9f449b 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -70,7 +70,6 @@ /obj/machinery/autolathe/ui_data(mob/user) // All the data the ui will need var/list/data = list() - var/list/designs = list() var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) data["total_amount"] = materials.total_amount data["max_amount"] = materials.max_amount @@ -86,6 +85,22 @@ data["isprocessing"] = processing_queue data["queuelength"] = queuelength data["categories"] = categories + if(istype(autoqueue) && autoqueue.len) + var/list/uidata = list() + var/index = 1 + for(var/list/L in autoqueue) + var/datum/design/D = L[1] + uidata[++uidata.len] = list("name" = initial(D.name), "multiplier" = L[2], "index" = index) + index++ + data["queue"] = uidata + else + data["queue"] = list() + + return data + +/obj/machinery/autolathe/ui_static_data(mob/user) + var/list/data = list() + var/list/designs = list() for(var/v in stored_research.researched_designs) var/datum/design/D = SSresearch.techweb_design_by_id(v) var/list/design = list() @@ -113,19 +128,8 @@ design["materials_glass"] = get_design_cost_glass(D) designs += list(design) data["designs"] = designs - if(istype(autoqueue) && autoqueue.len) - var/list/uidata = list() - var/index = 1 - for(var/list/L in autoqueue) - var/datum/design/D = L[1] - uidata[++uidata.len] = list("name" = initial(D.name), "multiplier" = L[2], "index" = index) - index++ - data["queue"] = uidata - else - data["queue"] = list() - return data - + /obj/machinery/autolathe/ui_act(action, params) if(..()) return @@ -214,6 +218,7 @@ for(var/B in D.blueprints) if(B) stored_research.add_design(B) + update_static_data(user) return TRUE return ..() From 9f91ad61b074c2acba0eeddafd96c9e8f26c4739 Mon Sep 17 00:00:00 2001 From: Redmoogle Date: Tue, 23 Aug 2022 10:25:43 -0400 Subject: [PATCH 02/17] Update autolathe.dm --- code/game/machinery/autolathe.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index fa7a8f9f449b..1346aeae5758 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -101,6 +101,7 @@ /obj/machinery/autolathe/ui_static_data(mob/user) var/list/data = list() var/list/designs = list() + var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) for(var/v in stored_research.researched_designs) var/datum/design/D = SSresearch.techweb_design_by_id(v) var/list/design = list() From ed117ecea79015c3166266a0b4dd969865b11949 Mon Sep 17 00:00:00 2001 From: Redmoogle Date: Tue, 23 Aug 2022 10:37:23 -0400 Subject: [PATCH 03/17] Autodoc + Remove unused variables --- code/game/machinery/autolathe.dm | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 1346aeae5758..c69dc5be4fa5 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -13,31 +13,35 @@ circuit = /obj/item/circuitboard/machine/autolathe layer = BELOW_OBJ_LAYER - var/operating = FALSE - var/list/L = list() - var/list/LL = list() + /// Are hacked designs unlocked var/hacked = FALSE - var/disabled = 0 + /// Is it disabled(Can it print) + var/disabled = FALSE + /// Will it taze you when you interact with it var/shocked = FALSE - var/hack_wire - var/disable_wire - var/shock_wire + /// Resource use multiplier var/prod_coeff = 1 + /// Internal techweb of designs var/datum/techweb/stored_research - var/base_price = 25 - var/hacked_price = 50 - var/datum/research/files + /// name of the design to search for var/search - var/datum/material_container/materials + /// Maximum length of the queue var/queue_max_len = 12 + /// Is it currently printing var/processing_queue = FALSE - var/datum/design/item_beingbuilt + /// Requested item to be made var/datum/design/request + /// Items being built var/list/being_built = list() + /// Item queue var/list/autoqueue = list() + /// List describing the items for the UI var/processing_line + /// Direction its qill output when the item is printed (0 for ontop of itself) var/printdirection = 0 + /// Length of the queue var/queuelength = 0 + /// Avaliable categories var/list/categories = list("Tools","Electronics","Construction","T-Comm","Security","Machinery","Medical","Miscellaneous","Dinnerware","Imported", "Search") /obj/machinery/autolathe/Initialize() @@ -398,7 +402,6 @@ new_item.autolathe_crafted(src) if(picked_materials?.len) new_item.set_custom_materials(picked_materials, 1 / multiplier) //Ensure we get the non multiplied amount - item_beingbuilt = null icon_state = "autolathe" desc = initial(desc) return TRUE From cafe64b050083419a2b3011b08fccbf80a57e848 Mon Sep 17 00:00:00 2001 From: Redmoogle Date: Tue, 23 Aug 2022 12:24:08 -0400 Subject: [PATCH 04/17] ui fixes --- code/game/machinery/autolathe.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index c69dc5be4fa5..bcb0e989b75b 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -229,6 +229,7 @@ return ..() /obj/machinery/autolathe/proc/AfterMaterialInsert(type_inserted, id_inserted, amount_inserted) + update_static_data(usr) if(ispath(type_inserted, /obj/item/stack/ore/bluespace_crystal)) use_power(MINERAL_MATERIAL_AMOUNT / 10) else From 3863a734cdedc5fb6ad888fe6db14e186dd6f6a4 Mon Sep 17 00:00:00 2001 From: Redmoogle Date: Wed, 24 Aug 2022 08:52:51 -0400 Subject: [PATCH 05/17] maybe works --- code/game/machinery/autolathe.dm | 21 ++------------------- tgui/packages/tgui/interfaces/Autolathe.js | 21 +++++++++++++++++++-- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index bcb0e989b75b..581f1a09ceea 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -111,24 +111,8 @@ var/list/design = list() design["name"] = D.name design["id"] = D.id - design["disabled"] = disabled || !can_build(D) - design["category"] = D.category - var/max_multiplier_list = list() - if(ispath(D.build_path, /obj/item/stack)) - var/max_multiplier - for(var/datum/material/mat in D.materials) - max_multiplier = min(D.maxstack, round(materials.get_material_amount(mat)/D.materials[mat])) - if (max_multiplier > 10 && !disabled) - max_multiplier_list += "10" - if (max_multiplier > 25 && !disabled) - max_multiplier_list += "25" - if(max_multiplier > 0 && !disabled) - max_multiplier_list += max_multiplier - else - if(can_build(D)) - max_multiplier_list += "5" - max_multiplier_list += "10" - design["max_multiplier"] = max_multiplier_list + design["disabled"] = disabled + design["category"] = D.category design["materials_metal"] = get_design_cost_metal(D) design["materials_glass"] = get_design_cost_glass(D) designs += list(design) @@ -229,7 +213,6 @@ return ..() /obj/machinery/autolathe/proc/AfterMaterialInsert(type_inserted, id_inserted, amount_inserted) - update_static_data(usr) if(ispath(type_inserted, /obj/item/stack/ore/bluespace_crystal)) use_power(MINERAL_MATERIAL_AMOUNT / 10) else diff --git a/tgui/packages/tgui/interfaces/Autolathe.js b/tgui/packages/tgui/interfaces/Autolathe.js index 38c7d1aaf3c4..30be99ba8d66 100644 --- a/tgui/packages/tgui/interfaces/Autolathe.js +++ b/tgui/packages/tgui/interfaces/Autolathe.js @@ -3,6 +3,23 @@ import { useBackend, useLocalState } from '../backend'; import { Box, Button, Flex, Input, Grid, NumberInput, NoticeBox, Section } from '../components'; import { Window } from '../layouts'; +MaxMultiplier = (metalamount, glassamount, metalrequired, glassrequired) => { + var maxmulti = [] + if((data.metal_amount < design.metalrequired*5) || (data.glass_amount < design.glassrequired*5)) + return maxmulti + maxmulti += 5 + if((data.metal_amount < design.metalrequired*10) || (data.glass_amount < design.glassrequired*10)) + return maxmulti + maxmulti += 10 + if((data.metal_amount < design.metalrequired*15) || (data.glass_amount < design.glassrequired*15)) + return maxmulti + maxmulti += 15 + if((data.metal_amount < design.metalrequired*25) || (data.glass_amount < design.glassrequired*25)) + return maxmulti + maxmulti += 25 + return maxmulti +} + export const Autolathe = (props, context) => { const [ @@ -284,7 +301,7 @@ export const Autolathe = (props, context) => { inline key={design.name} content={design.name} - disabled={design.disabled} + disabled={(data.metal_amount < design.materials_metal) || (data.glass_amount < design.materials_glass)} title={design.name} mr={1} icon="print" @@ -293,7 +310,7 @@ export const Autolathe = (props, context) => { multiplier: 1, })} /> - {design.max_multiplier.map(max => ( + {MaxMultiplier(data.metal_amount, data.glass_amount. design.materials_metal, design.materials_glass).map(max => (