Adds associative list manipulation to circuits, updates a few list circuit components. (#77803)

This commit is contained in:
Watermelon914
2023-08-27 11:36:20 -04:00
committed by GitHub
parent 4aaecb92eb
commit 52b9c952b9
16 changed files with 190 additions and 39 deletions
+7 -4
View File
@@ -21,7 +21,10 @@ GLOBAL_LIST_INIT(circuit_dupe_whitelisted_types, list(
var/variable_name = variable["name"]
var/datum/circuit_variable/variable_datum = new /datum/circuit_variable(variable_name, variable["datatype"])
circuit_variables[variable_name] = variable_datum
if(variable["is_list"])
if(variable["is_assoc_list"])
assoc_list_variables[variable_name] = variable_datum
variable_datum.set_value(list())
else if(variable["is_list"])
list_variables[variable_name] = variable_datum
variable_datum.set_value(list())
else
@@ -191,10 +194,10 @@ GLOBAL_LIST_INIT(circuit_dupe_whitelisted_types, list(
var/datum/circuit_variable/variable = circuit_variables[variable_identifier]
new_data["name"] = variable.name
new_data["datatype"] = variable.datatype
if(variable_identifier in list_variables)
if(variable_identifier in assoc_list_variables)
new_data["is_assoc_list"] = TRUE
else if(variable_identifier in list_variables)
new_data["is_list"] = TRUE
else
new_data["is_list"] = FALSE
variables += list(new_data)
general_data["variables"] = variables
@@ -59,6 +59,9 @@ GLOBAL_LIST_EMPTY_TYPED(integrated_circuits, /obj/item/integrated_circuit)
/// List variables stored on this integrated circuit, with a `variable_name = value` structure
var/list/datum/circuit_variable/list_variables = list()
/// Assoc list variables stored on this integrated circuit, with a `variable_name = value` structure
var/list/datum/circuit_variable/assoc_list_variables = list()
/// The maximum amount of setters and getters a circuit can have
var/max_setters_and_getters = 30
@@ -598,8 +601,13 @@ GLOBAL_LIST_EMPTY_TYPED(integrated_circuits, /obj/item/integrated_circuit)
return
if(params["is_list"])
variable_datatype = PORT_TYPE_LIST(variable_datatype)
else if(params["is_assoc_list"])
variable_datatype = PORT_TYPE_ASSOC_LIST(PORT_TYPE_STRING, variable_datatype)
var/datum/circuit_variable/variable = new /datum/circuit_variable(variable_identifier, variable_datatype)
if(params["is_list"])
if(params["is_assoc_list"])
variable.set_value(list())
assoc_list_variables[variable_identifier] = variable
else if(params["is_list"])
variable.set_value(list())
list_variables[variable_identifier] = variable
else