From 7bdb5e28dc6a87c1c38d2fc021f7d9585e8e3d4d Mon Sep 17 00:00:00 2001 From: Tad Hardesty Date: Tue, 28 Nov 2017 01:05:03 -0800 Subject: [PATCH] Cache design datum icons for sanic speed --- code/modules/research/designs.dm | 37 ++++++++++++++++++++++++++++++ code/modules/research/rdconsole.dm | 37 +++++++++--------------------- 2 files changed, 48 insertions(+), 26 deletions(-) diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index d085c09a883..1f137bf0309 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -44,11 +44,48 @@ other types of metals and chemistry for reagents). var/dangerous_construction = FALSE //notify and log for admin investigations if this is printed. var/departmental_flags = NONE //bitflags for deplathes. var/list/datum/techweb_node/unlocked_by = list() + var/icon_cache /datum/design/Destroy() CRASH("DESIGN DATUMS SHOULD NOT EVER BE DESTROYED AS THEY ARE ONLY MEANT TO BE IN A GLOBAL LIST AND REFERENCED FOR US.") return ..() +/datum/design/proc/icon_html(client/user) + if (!icon_cache) + // construct the icon and slap it into the resource cache + var/atom/item = build_path + if (!ispath(item, /atom)) + // biogenerator outputs to beakers by default + if (build_type & BIOGENERATOR) + item = /obj/item/reagent_containers/glass/beaker/large + else + return // shouldn't happen, but just in case + + // circuit boards become their resulting machines or computers + if (ispath(item, /obj/item/circuitboard)) + var/obj/item/circuitboard/C = item + var/machine = initial(C.build_path) + if (machine) + item = machine + var/icon_file = initial(item.icon) + var/icon/I = icon(icon_file, initial(item.icon_state), SOUTH) + + // computers (and snowflakes) get their screen and keyboard sprites + if (ispath(item, /obj/machinery/computer) || ispath(item, /obj/machinery/power/solar_control)) + var/obj/machinery/computer/C = item + var/screen = initial(C.icon_screen) + var/keyboard = initial(C.icon_keyboard) + if (screen) + I.Blend(icon(icon_file, screen, SOUTH), ICON_OVERLAY) + if (keyboard) + I.Blend(icon(icon_file, keyboard, SOUTH), ICON_OVERLAY) + + // based on icon2html + icon_cache = "[generate_asset_name(I)].png" + register_asset(icon_cache, I) + send_asset(user, icon_cache, FALSE) + return "" + //////////////////////////////////////// //Disks for transporting design datums// //////////////////////////////////////// diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index eadc0a6ef8b..6a1b078ddd7 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -570,23 +570,8 @@ doesn't have toxins access. l += "[RDSCREEN_NOBREAK]" return l -/obj/machinery/computer/rdconsole/proc/build_path_icon(atom/item, user) - if (ispath(item, /obj/item/circuitboard)) - var/obj/item/circuitboard/C = item - var/machine = initial(C.build_path) - if (machine) - item = machine - var/icon_file = initial(item.icon) - var/icon/item_icon = icon(icon_file, initial(item.icon_state), SOUTH) - if (ispath(item, /obj/machinery/computer)) - var/obj/machinery/computer/C = item - var/screen = initial(C.icon_screen) - var/keyboard = initial(C.icon_keyboard) - if (screen) - item_icon.Blend(icon(icon_file, screen), ICON_OVERLAY) - if (keyboard) - item_icon.Blend(icon(icon_file, keyboard), ICON_OVERLAY) - return icon2html(item_icon, user || usr) +/obj/machinery/computer/rdconsole/proc/machine_icon(atom/item) + return icon2html(initial(item.icon), usr, initial(item.icon_state), SOUTH) /obj/machinery/computer/rdconsole/proc/ui_techweb_single_node(datum/techweb_node/node, selflink=TRUE, minimal=FALSE) var/list/l = list() @@ -612,7 +597,7 @@ doesn't have toxins access. l += "[node.description]" for(var/i in node.designs) var/datum/design/D = node.designs[i] - l += "[build_path_icon(D.build_path)][RDSCREEN_NOBREAK]" + l += "[D.icon_html(usr)][RDSCREEN_NOBREAK]" l += "[RDSCREEN_NOBREAK]" return l @@ -652,27 +637,27 @@ doesn't have toxins access. RDSCREEN_UI_SDESIGN_CHECK var/list/l = list() var/datum/design/D = selected_design - l += "
[build_path_icon(D.build_path)] [D.name]" + l += "
[D.icon_html(usr)] [D.name]" if(D.build_type) var/lathes = "" if(D.build_type & IMPRINTER) - lathes += "[build_path_icon(/obj/machinery/rnd/circuit_imprinter)]" + lathes += "[machine_icon(/obj/machinery/rnd/circuit_imprinter)]" if (linked_imprinter && D.id in stored_research.researched_designs) l += "Imprint" if(D.build_type & PROTOLATHE) - lathes += "[build_path_icon(/obj/machinery/rnd/protolathe)]" + lathes += "[machine_icon(/obj/machinery/rnd/protolathe)]" if (linked_lathe && D.id in stored_research.researched_designs) l += "Construct" if(D.build_type & AUTOLATHE) - lathes += "[build_path_icon(/obj/machinery/autolathe)]" + lathes += "[machine_icon(/obj/machinery/autolathe)]" if(D.build_type & MECHFAB) - lathes += "[build_path_icon(/obj/machinery/mecha_part_fabricator)]" + lathes += "[machine_icon(/obj/machinery/mecha_part_fabricator)]" if(D.build_type & BIOGENERATOR) - lathes += "[build_path_icon(/obj/machinery/biogenerator)]" + lathes += "[machine_icon(/obj/machinery/biogenerator)]" if(D.build_type & LIMBGROWER) - lathes += "[build_path_icon(/obj/machinery/limbgrower)]" + lathes += "[machine_icon(/obj/machinery/limbgrower)]" if(D.build_type & SMELTER) - lathes += "[build_path_icon(/obj/machinery/mineral/processing_unit)]" + lathes += "[machine_icon(/obj/machinery/mineral/processing_unit)]" l += "Construction types:" l += lathes l += "Required materials:"