generalizes recipe searching, adds chemistry functionality

This commit is contained in:
Timothy Teakettle
2022-02-23 11:38:04 +00:00
parent 4adb870324
commit 56547a2556
4 changed files with 42 additions and 26 deletions
+2 -1
View File
@@ -16,7 +16,8 @@ GLOBAL_LIST_EMPTY(singularities) //list of all singularities on the stati
GLOBAL_LIST_EMPTY(grounding_rods) //list of all grounding rods on the station
GLOBAL_LIST(chemical_reactions_list) //list of all /datum/chemical_reaction datums. Used during chemical reactions
GLOBAL_LIST(drink_reactions_list) //list of all /datum/chemical_reaction datums where the output is of type /datum/reagent/consumable
GLOBAL_LIST(drink_reactions_list) //list of all /datum/chemical_reaction datums where the output is of type /datum/reagent/consumable for bartender PDA
GLOBAL_LIST(normalized_chemical_reactions_list) //list of all /datum/chemical_reaction datums with actual sane indexing for chemistry PDA
GLOBAL_LIST(chemical_reagents_list) //list of all /datum/reagent datums indexed by reagent id. Used by chemistry stuff
GLOBAL_LIST_EMPTY(tech_list) //list of all /datum/tech datums indexed by id.
GLOBAL_LIST_EMPTY(surgeries_list) //list of all surgeries by name, associated with their path.
+8 -22
View File
@@ -371,6 +371,8 @@ GLOBAL_LIST_EMPTY(PDAs)
dat += "<li><a href='byond://?src=[REF(src)];choice=Drone Phone'>[PDAIMG(dronephone)]Drone Phone</a></li>"
if (cartridge.access & CART_BARTENDER)
dat += "<li><a href='byond://?src=[REF(src)];choice=Drink Recipe Browser'>[PDAIMG(bucket)]Drink Recipe Browser</a></li>"
if (cartridge.access & CART_CHEMISTRY)
dat += "<li><a href='byond://?src=[REF(src)];choice=Chemistry Recipe Browser'>[PDAIMG(bucket)]Chemistry Recipe Browser</a></li>"
dat += "<li><a href='byond://?src=[REF(src)];choice=3'>[PDAIMG(atmos)]Atmospheric Scan</a></li>"
dat += "<li><a href='byond://?src=[REF(src)];choice=Light'>[PDAIMG(flashlight)][fon ? "Disable" : "Enable"] Flashlight</a></li>"
if (pai)
@@ -710,28 +712,12 @@ GLOBAL_LIST_EMPTY(PDAs)
//DRINK RECIPE BROWSER=============================
if("Drink Recipe Browser")
if(cartridge && cartridge.access & CART_BARTENDER)
var/option = input(U, "Enter keyword to return a recipe.")
if(option)
option = lowertext(option)
var/list/reagents_required
var/found_reagent_name
var/required_temp
for(var/reagent_name in GLOB.drink_reactions_list)
if(findtext(lowertext(reagent_name), option))
found_reagent_name = reagent_name
reagents_required = GLOB.drink_reactions_list[reagent_name].required_reagents
required_temp = GLOB.drink_reactions_list[reagent_name].required_temp
break
if(length(reagents_required))
to_chat(U, "<b>Recipe found: [found_reagent_name]</b>[required_temp ? "<br>Required Temperature: [required_temp]K" : ""]<br>Required Reagents:")
var/reagents_required_string = ""
for(var/r in reagents_required)
var/datum/reagent/reagent = r
reagents_required_string += "<br>[initial(reagent.name)]: [reagents_required[r]]"
to_chat(U, reagents_required_string)
return
else
to_chat(U, "<span class='warning'>Reagent with term: [option] could not be located!</span>")
recipe_search(U, GLOB.drink_reactions_list)
//CHEMISTRY RECIPE BROWSER
if("Chemistry Recipe Browser")
if(cartridge && cartridge.access & CART_CHEMISTRY)
recipe_search(U, GLOB.normalized_chemical_reactions_list)
//LINK FUNCTIONS===================================
+2 -1
View File
@@ -14,6 +14,7 @@
#define CART_HYDROPONICS (1<<13)
#define CART_DRONEPHONE (1<<14)
#define CART_BARTENDER (1<<15)
#define CART_CHEMISTRY (1<<16)
/obj/item/cartridge
@@ -78,7 +79,7 @@
/obj/item/cartridge/chemistry
name = "\improper ChemWhiz cartridge"
icon_state = "cart-chem"
access = CART_REAGENT_SCANNER
access = CART_REAGENT_SCANNER | CART_CHEMISTRY
bot_access_flags = MED_BOT
/obj/item/cartridge/security
+30 -2
View File
@@ -27,7 +27,8 @@
//Randomized need to go last since they need to check against conflicts with normal recipes
var/paths = subtypesof(/datum/chemical_reaction) - typesof(/datum/chemical_reaction/randomized) + subtypesof(/datum/chemical_reaction/randomized)
GLOB.chemical_reactions_list = list()
GLOB.drink_reactions_list = list()
GLOB.normalized_chemical_reactions_list = list() // chemistry pda
GLOB.drink_reactions_list = list() // bartender pda
for(var/path in paths)
@@ -35,9 +36,11 @@
var/list/reaction_ids = list()
// store drinks separately for bartender cartridge
if(D.id)
var/datum/reagent/r = D.id
if(ispath(D.id, /datum/reagent/consumable))
var/datum/reagent/consumable/r = D.id
GLOB.drink_reactions_list[initial(r.name)] = D
if(ispath(D.id, /datum/reagent))
GLOB.normalized_chemical_reactions_list[initial(r.name)] = D
if(D.required_reagents && D.required_reagents.len)
for(var/reaction in D.required_reagents)
@@ -50,6 +53,31 @@
GLOB.chemical_reactions_list[id] += D
break // Don't bother adding ourselves to other reagent ids, it is redundant
/proc/recipe_search(mob/M, list/reaction_list)
var/option = input(M, "Enter keyword to return a recipe.")
if(option)
option = lowertext(option)
var/list/reagents_required
var/found_reagent_name
var/required_temp
for(var/reagent_name in reaction_list)
if(findtext(lowertext(reagent_name), option))
var/datum/chemical_reaction/reaction = reaction_list[reagent_name]
found_reagent_name = reagent_name
reagents_required = reaction.required_reagents
required_temp = reaction.required_temp
break
if(length(reagents_required))
to_chat(M, "<b>Recipe found: [found_reagent_name]</b>[required_temp ? "<br>Required Temperature: [required_temp]K" : ""]<br>Required Reagents:")
var/reagents_required_string = ""
for(var/r in reagents_required)
var/datum/reagent/reagent = r
reagents_required_string += "<br>[initial(reagent.name)]: [reagents_required[r]]"
to_chat(M, reagents_required_string)
return
else
to_chat(M, "<span class='warning'>Reagent with term: [option] could not be located!</span>")
///////////////////////////////////////////////////////////////////////////////////
/datum/reagents