From 00992ed73d1fb43c57643f8b5ff94a605f973e8e Mon Sep 17 00:00:00 2001 From: Tad Hardesty Date: Mon, 27 Nov 2017 17:50:19 -0800 Subject: [PATCH] Improve the techweb design view The technologies which unlock the design are shown. Lathe types are shown visually. If the design is constructible, a button to go to the lathe search screen is shown. --- code/modules/research/designs.dm | 1 + code/modules/research/rdconsole.dm | 83 ++++++++++++------- .../research/techweb/__techweb_helpers.dm | 7 +- 3 files changed, 58 insertions(+), 33 deletions(-) diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index 51c6538adb1..d085c09a883 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -43,6 +43,7 @@ other types of metals and chemistry for reagents). var/lathe_time_factor = 1 //How many times faster than normal is this to build on the protolathe 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() /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.") diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index 5ca6de4c1ee..8bf31158727 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -217,7 +217,7 @@ doesn't have toxins access. /obj/machinery/computer/rdconsole/proc/ui_header() var/list/l = list() l += "
[stored_research.organization] Research and Development Network" - l += "Available points: [stored_research.research_points] (+[round(stored_research.last_bitcoins * 60)] / minute)" + l += "Available points: [round(stored_research.research_points)] (+[round(stored_research.last_bitcoins * 60)] / minute)" l += "Security protocols: [emagged? "Disabled" : "Enabled"]" l += "Main Menu | Back
[RDSCREEN_NOBREAK]" return l @@ -586,10 +586,31 @@ doesn't have toxins access. l += "[RDSCREEN_NOBREAK]" return l -/obj/machinery/computer/rdconsole/proc/ui_techweb_single_node(datum/techweb_node/node) +/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/ui_techweb_single_node(datum/techweb_node/node, selflink=TRUE) var/list/l = list() var/price = node.get_price(stored_research) - l += "
[node.display_name] [RDSCREEN_NOBREAK]" + var/display_name = node.display_name + if (selflink) + display_name = "[display_name]" + l += "
[display_name] [RDSCREEN_NOBREAK]" if(stored_research.researched_nodes[node.id]) l += "Researched" else if(stored_research.available_nodes[node.id]) @@ -602,25 +623,7 @@ doesn't have toxins access. l += "[node.description]" for(var/i in node.designs) var/datum/design/D = node.designs[i] - var/atom/item = D.build_path - if (ispath(item, /obj/item/circuitboard)) - var/obj/item/circuitboard/C = item - var/build_path = initial(C.build_path) - if (build_path) - item = initial(C.build_path) - 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) - - //l += "[icon2html(item_icon, usr)] [D.name]: [D.desc]" - l += "[icon2html(item_icon, usr)][RDSCREEN_NOBREAK]" + l += "[build_path_icon(D.build_path)][RDSCREEN_NOBREAK]" l += "
[RDSCREEN_NOBREAK]" return l @@ -629,7 +632,7 @@ doesn't have toxins access. var/list/l = list() if(stored_research.hidden_nodes[selected_node.id]) l += "

ERROR: RESEARCH NODE UNKNOWN.

" - l += ui_techweb_single_node(selected_node) + l += ui_techweb_single_node(selected_node, FALSE) l += "

Prerequisites:

[RDSCREEN_NOBREAK]" for(var/i in selected_node.prerequisites) var/datum/techweb_node/prereq = selected_node.prerequisites[i] @@ -655,20 +658,36 @@ doesn't have toxins access. RDSCREEN_UI_SDESIGN_CHECK var/list/l = list() var/datum/design/D = selected_design - l += "
Name: [D.name]" + l += "
[build_path_icon(D.build_path)] [D.name]" if(D.build_type) - l += "Lathe Types:" - if(D.build_type & IMPRINTER) l += "Circuit Imprinter" - if(D.build_type & PROTOLATHE) l += "Protolathe" - if(D.build_type & AUTOLATHE) l += "Autolathe" - if(D.build_type & MECHFAB) l += "Exosuit Fabricator" - if(D.build_type & BIOGENERATOR) l += "Biogenerator" - if(D.build_type & LIMBGROWER) l += "Limbgrower" - if(D.build_type & SMELTER) l += "Smelter" + var/lathes = "" + if(D.build_type & IMPRINTER) + lathes += "[build_path_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)]" + if (linked_lathe && D.id in stored_research.researched_designs) + l += "Construct" + if(D.build_type & AUTOLATHE) + lathes += "[build_path_icon(/obj/machinery/autolathe)]" + if(D.build_type & MECHFAB) + lathes += "[build_path_icon(/obj/machinery/mecha_part_fabricator)]" + if(D.build_type & BIOGENERATOR) + lathes += "[build_path_icon(/obj/machinery/biogenerator)]" + if(D.build_type & LIMBGROWER) + lathes += "[build_path_icon(/obj/machinery/limbgrower)]" + if(D.build_type & SMELTER) + lathes += "[build_path_icon(/obj/machinery/mineral/processing_unit)]" + l += "Lathe types:" + l += lathes l += "Required Materials:" var/all_mats = D.materials + D.reagents_list for(var/M in all_mats) l += "* [CallMaterialName(M)] x [all_mats[M]]" + l += "Unlocked by:" + for (var/node in D.unlocked_by) + l += ui_techweb_single_node(node) l += "[RDSCREEN_NOBREAK]
" return l diff --git a/code/modules/research/techweb/__techweb_helpers.dm b/code/modules/research/techweb/__techweb_helpers.dm index adfa5c78d02..af4fe7480b6 100644 --- a/code/modules/research/techweb/__techweb_helpers.dm +++ b/code/modules/research/techweb/__techweb_helpers.dm @@ -130,6 +130,9 @@ CHECK_TICK /proc/calculate_techweb_nodes() + for(var/design_id in SSresearch.techweb_designs) + var/datum/design/D = SSresearch.techweb_designs[design_id] + D.unlocked_by.Cut() for(var/node_id in SSresearch.techweb_nodes) var/datum/techweb_node/node = SSresearch.techweb_nodes[node_id] node.prerequisites = list() @@ -138,7 +141,9 @@ for(var/i in node.prereq_ids) node.prerequisites[i] = SSresearch.techweb_nodes[i] for(var/i in node.design_ids) - node.designs[i] = SSresearch.techweb_designs[i] + var/datum/design/D = SSresearch.techweb_designs[i] + node.designs[i] = D + D.unlocked_by += node if(node.hidden) SSresearch.techweb_nodes_hidden[node.id] = node CHECK_TICK