mirror of
https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13.git
synced 2025-12-10 18:02:57 +00:00
61 lines
1.9 KiB
Plaintext
61 lines
1.9 KiB
Plaintext
PROCESSING_SUBSYSTEM_DEF(dcs)
|
|
name = "Datum Component System"
|
|
flags = SS_NO_INIT
|
|
wait = 1 SECONDS
|
|
|
|
var/list/elements_by_type = list()
|
|
|
|
/datum/controller/subsystem/processing/dcs/Recover()
|
|
comp_lookup = SSdcs.comp_lookup
|
|
|
|
/datum/controller/subsystem/processing/dcs/proc/GetElement(list/arguments)
|
|
var/datum/element/eletype = arguments[1]
|
|
var/element_id = eletype
|
|
|
|
if(!ispath(eletype, /datum/element))
|
|
CRASH("Attempted to instantiate [eletype] as a /datum/element")
|
|
|
|
if(initial(eletype.element_flags) & ELEMENT_BESPOKE)
|
|
element_id = GetIdFromArguments(arguments)
|
|
|
|
. = elements_by_type[element_id]
|
|
if(.)
|
|
return
|
|
. = elements_by_type[element_id] = new eletype
|
|
|
|
/****
|
|
* Generates an id for bespoke elements when given the argument list
|
|
* Generating the id here is a bit complex because we need to support named arguments
|
|
* Named arguments can appear in any order and we need them to appear after ordered arguments
|
|
* We assume that no one will pass in a named argument with a value of null
|
|
**/
|
|
/datum/controller/subsystem/processing/dcs/proc/GetIdFromArguments(list/arguments)
|
|
var/datum/element/eletype = arguments[1]
|
|
var/list/fullid = list("[eletype]")
|
|
var/list/named_arguments = list()
|
|
for(var/i in initial(eletype.id_arg_index) to length(arguments))
|
|
var/key = arguments[i]
|
|
var/value
|
|
if(istext(key))
|
|
value = arguments[key]
|
|
if(!(istext(key) || isnum(key)))
|
|
if(islist(key)) // CITADEL EDIT
|
|
key = deep_list2params(key)
|
|
else
|
|
key = REF(key)
|
|
key = "[key]" // Key is stringified so numbers dont break things
|
|
if(!isnull(value))
|
|
if(!(istext(value) || isnum(value)))
|
|
if(islist(value)) // CITADEL EDIT
|
|
value = deep_list2params(value)
|
|
else
|
|
value = REF(value)
|
|
named_arguments["[key]"] = value
|
|
else
|
|
fullid += "[key]"
|
|
|
|
if(length(named_arguments))
|
|
named_arguments = sortList(named_arguments)
|
|
fullid += named_arguments
|
|
return list2params(fullid)
|