mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-06-06 22:14:30 +01:00
f4bf017921
* Unit Test rework & Master/Ticker update * Fixes and working unit testing * Fixes * Test fixes and FA update * Fixed runtimes * Radio subsystem * move that glob wherever later * ident * CIBUILDING compile option * Fixed runtimes * Some changes to the workflow * CI Split * More split * Pathing * Linters and Annotators * ci dir fix * Missing undef fixed * Enable grep checks * More test conversions * More split * Correct file * Removes unneeded inputs * oop * More dependency changes * More conversions * Conversion fixes * Fixes * Some assert fixes * Corrects start gate * Converted some README.dms to README.mds * Removes duplicate proc * Removes unused defines * Example configs * fix dll access viol by double calling * Post-rebase fixes * Cleans up names global list * Undef restart counter * More code/game/ cleanup * Statpanel update * Skybox * add * Fix ticker * Roundend fix * Persistence dependency update * Reordering * Reordering * Reordering * Initstage fix * . * . * Reorder * Reorder * Circle * Mobs * Air * Test fix * CI Script Fix * Configs * More ticker stuff * This is now in 'reboot world' * Restart world announcements * no glob in PreInit * to define * Update * Removed old include * Make this file normal again * moved * test * shared unit testing objects * Updates batched_spritesheets and universal_icon * . * job data debug * rm that * init order * show us * . * i wonder * . * . * urg * do we not have a job ID? * . * rm sleep for now * updated rust-g linux binaries * binaries update 2 * binaries update 3 * testing something * change that * test something * . * . * . * locavar * test * move that * . * debug * don't run this test * strack trace it * cleaner * . * . * cras again * also comment this out * return to official rust g * Update robot_icons.dm * monitor the generation * . --------- Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
71 lines
2.8 KiB
Plaintext
71 lines
2.8 KiB
Plaintext
SUBSYSTEM_DEF(chemistry)
|
|
name = "Chemistry"
|
|
wait = 20
|
|
flags = SS_NO_FIRE
|
|
dependencies = list(
|
|
/datum/controller/subsystem/garbage
|
|
)
|
|
|
|
var/list/chemical_reactions = list()
|
|
var/list/chemical_reactions_by_product = list()
|
|
var/list/instant_reactions_by_reagent = list()
|
|
var/list/distilled_reactions_by_reagent = list()
|
|
var/list/distilled_reactions_by_product = list()
|
|
// var/list/fusion_reactions_by_reagent = list() // TODO: Fusion reactions as chemical reactions
|
|
var/list/chemical_reagents = list()
|
|
|
|
/datum/controller/subsystem/chemistry/Recover()
|
|
log_debug("[name] subsystem Recover().")
|
|
chemical_reactions = SSchemistry.chemical_reactions
|
|
chemical_reagents = SSchemistry.chemical_reagents
|
|
|
|
/datum/controller/subsystem/chemistry/Initialize()
|
|
initialize_chemical_reagents()
|
|
initialize_chemical_reactions()
|
|
return SS_INIT_SUCCESS
|
|
|
|
/datum/controller/subsystem/chemistry/stat_entry(msg)
|
|
msg = "C: [chemical_reagents.len] | R: [chemical_reactions.len]"
|
|
return ..()
|
|
|
|
//Chemical Reactions - Initialises all /decl/chemical_reaction into a list
|
|
// It is filtered into multiple lists within a list.
|
|
// For example:
|
|
// chemical_reactions_by_reagent[REAGENT_ID_PHORON] is a list of all reactions relating to phoron
|
|
// Note that entries in the list are NOT duplicated. So if a reaction pertains to
|
|
// more than one chemical it will still only appear in only one of the sublists.
|
|
/datum/controller/subsystem/chemistry/proc/initialize_chemical_reactions()
|
|
var/list/paths = decls_repository.get_decls_of_subtype(/decl/chemical_reaction)
|
|
|
|
for(var/path in paths)
|
|
var/decl/chemical_reaction/D = paths[path]
|
|
chemical_reactions += D
|
|
if(D.required_reagents && D.required_reagents.len)
|
|
var/reagent_id = D.required_reagents[1]
|
|
|
|
var/list/add_to = instant_reactions_by_reagent // Default to instant reactions list, if something's gone wrong
|
|
// if(istype(D, /decl/chemical_reaction/fusion)) // TODO: fusion reactions as chemical reactions
|
|
// add_to = fusion_reactions_by_reagent
|
|
if(istype(D, /decl/chemical_reaction/distilling))
|
|
add_to = distilled_reactions_by_reagent
|
|
|
|
if(istype(D, /decl/chemical_reaction/distilling))
|
|
LAZYINITLIST(distilled_reactions_by_product[D.result])
|
|
distilled_reactions_by_product[D.result] += D // for reverse lookup
|
|
else
|
|
LAZYINITLIST(chemical_reactions_by_product[D.result])
|
|
chemical_reactions_by_product[D.result] += D // for reverse lookup
|
|
|
|
LAZYINITLIST(add_to[reagent_id])
|
|
add_to[reagent_id] += D
|
|
|
|
//Chemical Reagents - Initialises all /datum/reagent into a list indexed by reagent id
|
|
/datum/controller/subsystem/chemistry/proc/initialize_chemical_reagents()
|
|
var/paths = subtypesof(/datum/reagent)
|
|
chemical_reagents = list()
|
|
for(var/path in paths)
|
|
var/datum/reagent/D = new path()
|
|
if(!D.name)
|
|
continue
|
|
chemical_reagents[D.id] = D
|