Autolathe Things (#11545)

This commit is contained in:
Geeves
2021-04-10 18:28:40 +02:00
committed by GitHub
parent da19f1e3d5
commit 6d2da2d893
6 changed files with 47 additions and 46 deletions

View File

@@ -604,8 +604,6 @@
#include "code\game\machinery\alarm.dm"
#include "code\game\machinery\anti_bluespace.dm"
#include "code\game\machinery\atmo_control.dm"
#include "code\game\machinery\autolathe.dm"
#include "code\game\machinery\autolathe_datums.dm"
#include "code\game\machinery\Beacon.dm"
#include "code\game\machinery\biogenerator.dm"
#include "code\game\machinery\bioprinter.dm"
@@ -682,6 +680,8 @@
#include "code\game\machinery\atmoalter\portable_atmospherics.dm"
#include "code\game\machinery\atmoalter\pump.dm"
#include "code\game\machinery\atmoalter\scrubber.dm"
#include "code\game\machinery\autolathe\autolathe.dm"
#include "code\game\machinery\autolathe\autolathe_datums.dm"
#include "code\game\machinery\bots\bots.dm"
#include "code\game\machinery\bots\mulebot.dm"
#include "code\game\machinery\camera\camera.dm"

View File

@@ -21,9 +21,6 @@
global_hud.holomap
)
// Create autolathe recipes, as above.
populate_lathe_recipes()
// Create robolimbs for chargen.
populate_robolimb_list()

View File

@@ -8,6 +8,9 @@ var/datum/controller/subsystem/materials/SSmaterials
var/list/materials
var/list/materials_by_name
var/list/autolathe_recipes
var/list/autolathe_categories
/datum/controller/subsystem/materials/New()
NEW_SS_GLOBAL(SSmaterials)

View File

@@ -11,7 +11,7 @@
clickvol = 30
var/print_loc
var/list/machine_recipes
var/list/stored_material = list(DEFAULT_WALL_MATERIAL = 0, MATERIAL_GLASS = 0)
var/list/storage_capacity = list(DEFAULT_WALL_MATERIAL = 0, MATERIAL_GLASS = 0)
var/show_category = "All"
@@ -46,21 +46,37 @@
does_flick = FALSE
/obj/machinery/autolathe/Initialize()
. = ..()
..()
wires = new(src)
print_loc = src
return INITIALIZE_HINT_LATELOAD
/obj/machinery/autolathe/LateInitialize()
populate_lathe_recipes()
/obj/machinery/autolathe/Destroy()
QDEL_NULL(wires)
return ..()
/obj/machinery/autolathe/proc/update_recipe_list()
if(!machine_recipes)
machine_recipes = autolathe_recipes
/obj/machinery/autolathe/proc/populate_lathe_recipes()
if(SSmaterials.autolathe_recipes && SSmaterials.autolathe_categories)
return
SSmaterials.autolathe_recipes = list()
SSmaterials.autolathe_categories = list()
for(var/R in subtypesof(/datum/autolathe/recipe))
var/datum/autolathe/recipe/recipe = new R
SSmaterials.autolathe_recipes += recipe
SSmaterials.autolathe_categories |= recipe.category
var/obj/item/I = new recipe.path
if(I.matter && !recipe.resources) //This can be overidden in the datums.
recipe.resources = list()
for(var/material in I.matter)
recipe.resources[material] = I.matter[material]*1.25 // More expensive to produce than they are to recycle.
qdel(I)
/obj/machinery/autolathe/interact(mob/user)
update_recipe_list()
if(..() || (disabled && !panel_open))
to_chat(user, SPAN_DANGER("\The [src] is disabled!"))
return
@@ -83,7 +99,7 @@
dat += "<h2>Printable Designs</h2><h3>Showing: <a href='?src=\ref[src];change_category=1'>[show_category]</a></h3></center><table width = '100%'>"
var/index = 0
for(var/recipe in machine_recipes)
for(var/recipe in SSmaterials.autolathe_recipes)
var/datum/autolathe/recipe/R = recipe
index++
if(R.hidden && !hacked || (show_category != "All" && show_category != R.category))
@@ -222,23 +238,25 @@
usr.set_machine(src)
add_fingerprint(usr)
if(href_list["change_category"])
var/choice = input("Which category do you wish to display?") as null|anything in SSmaterials.autolathe_categories+"All"
if(!choice)
return
show_category = choice
updateUsrDialog()
return
if(busy)
to_chat(usr, SPAN_WARNING("The autolathe is busy. Please wait for the completion of previous operation."))
return
if(href_list["change_category"])
var/choice = input("Which category do you wish to display?") as null|anything in autolathe_categories+"All"
if(!choice)
return
show_category = choice
if(href_list["make"] && machine_recipes)
if(href_list["make"] && SSmaterials.autolathe_recipes)
var/index = text2num(href_list["make"])
var/multiplier = text2num(href_list["multiplier"])
build_item = null
if(index > 0 && index <= machine_recipes.len)
build_item = machine_recipes[index]
if(index > 0 && index <= length(SSmaterials.autolathe_recipes))
build_item = SSmaterials.autolathe_recipes[index]
//Exploit detection, not sure if necessary after rewrite.
if(!build_item || multiplier < 0 || multiplier > 100)

View File

@@ -1,27 +1,3 @@
/var/global/list/autolathe_recipes
/var/global/list/autolathe_categories
/proc/populate_lathe_recipes()
//Create global autolathe recipe list if it hasn't been made already.
autolathe_recipes = list()
autolathe_categories = list()
for(var/R in subtypesof(/datum/autolathe/recipe))
var/datum/autolathe/recipe/recipe = new R
autolathe_recipes += recipe
autolathe_categories |= recipe.category
var/obj/item/I = new recipe.path
// Since this runs before SSatoms runs, we've got to force initialization manually.
if (!I.initialized)
SSatoms.InitAtom(I, list(TRUE))
if(I.matter && !recipe.resources) //This can be overidden in the datums.
recipe.resources = list()
for(var/material in I.matter)
recipe.resources[material] = I.matter[material]*1.25 // More expensive to produce than they are to recycle.
qdel(I)
/datum/autolathe/recipe
var/name = "object"
var/path

View File

@@ -0,0 +1,7 @@
author: Geeves
delete-after: True
changes:
- refactor: "Tweaks how autolathes generate their recipe lists, ideally there'd be no player-facing change."
- bugfix: "You can now change autolathe categories while it's busy building things."