7const DataCacheManager = preload(
"res://scripts/systems/dataCacheManager/data_cache_manager.gd")
12var data_cache_manager = DataCacheManager.new()
16func load_definitions(file_path:String) -> void:
19 load_definition_data(data_cache_manager.load_json(file_path))
23func load_definition_data(data) -> void:
26 if not data
is Dictionary:
28 for element
in data.get(
"elements", []):
29 if element
is Dictionary:
30 var id = str(element.get(
"id",
""))
32 elements[id] = element.duplicate(true)
33 for compound
in data.get(
"compounds", []):
34 if compound
is Dictionary:
35 var id = str(compound.get(
"id",
""))
37 compounds[id] = compound.duplicate(true)
41func load_reactions(file_path:String) -> void:
43 load_reaction_data(data_cache_manager.load_json(file_path))
47func get_cache_stats() -> Dictionary:
48 return data_cache_manager.get_cache_stats()
52func load_reaction_data(data) -> void:
54 if not data
is Dictionary:
56 for reaction
in data.get(
"reactions", []):
57 if not reaction
is Dictionary:
59 var inputs = reaction.get(
"inputs", [])
60 if not inputs
is Array
or inputs.is_empty():
62 reactions[_reaction_key(inputs, reaction.get(
"catalysts", []))] = reaction.duplicate(true)
66func attempt_reaction(inputs:Array, catalysts:Array = []) -> Dictionary:
67 var key = _reaction_key(inputs, catalysts)
68 if reactions.has(key):
69 var reaction = reactions[key].duplicate(true)
70 reaction[
"success"] = true
76 "inputs": _normalized_list(inputs),
77 "catalysts": _normalized_list(catalysts),
78 "message":
"No stable reaction discovered."
82func get_definition(id:String) -> Dictionary:
84 return elements[id].duplicate(true)
86 return compounds[id].duplicate(true)
90func get_all_definitions() -> Dictionary:
92 "elements": elements.duplicate(true),
93 "compounds": compounds.duplicate(true)
97func get_reactions() -> Array:
99 for reaction
in reactions.values():
100 rows.append(reaction.duplicate(true))
101 rows.sort_custom(func(a, b):
return str(a.get(
"id",
"")) < str(b.get(
"id",
"")))
105func get_state() -> Dictionary:
107 "elements": elements.duplicate(true),
108 "compounds": compounds.duplicate(true),
109 "reactions": reactions.duplicate(true)
113func apply_state(state:Dictionary) -> void:
114 elements = state.get(
"elements", {}).duplicate(true)
115 compounds = state.get(
"compounds", {}).duplicate(true)
116 reactions = state.get(
"reactions", {}).duplicate(true)
119func _reaction_key(inputs:Array, catalysts:Array = []) -> String:
120 var normalized_inputs = _normalized_list(inputs)
121 var normalized_catalysts = _normalized_list(catalysts)
122 var key =
"+".join(normalized_inputs)
123 if not normalized_catalysts.is_empty():
124 key +=
"|catalysts:" +
"+".join(normalized_catalysts)
128func _normalized_list(values:Array) -> Array:
131 var text = str(value).strip_edges().to_lower()
133 normalized.append(text)