9const DataCacheManager = preload(
"res://scripts/systems/dataCacheManager/data_cache_manager.gd")
12var resource_definitions = {}
13var resource_order = []
14var data_cache = DataCacheManager.new()
16var hud = preload(
"res://scripts/systems/resourceManager/resource_hud.gd").new()
18func _init(resource_hud):
19 hud.resource_hud = resource_hud
23func set_sprite_manager(sprite_manager) -> void:
24 hud.sprite_manager = sprite_manager
27func check_game_over():
28 for id
in resource_order:
29 if int(resources.get(id, 0)) <= 0:
33func get_symbol(id:String) -> String:
34 var
def: Dictionary = resource_definitions.get(id.to_lower(), {})
36 return def.get(
"icon", id.capitalize())
38func get_icon_path(id:String) -> String:
39 var
def: Dictionary = resource_definitions.get(id.to_lower(), {})
40 return str(def.get(
"icon_path",
""))
42func get_sprite_id(id:String) -> String:
43 var
def: Dictionary = resource_definitions.get(id.to_lower(), {})
44 return str(def.get(
"sprite_id",
""))
47func get_value(id:String, default_value:int = 100) -> int:
48 return int(resources.get(id, default_value))
50func get_min_value(id:String) -> int:
51 var
def: Dictionary = resource_definitions.get(id, {})
52 return int(def.get(
"min_value", 0))
54func get_max_value(id:String) -> int:
55 var
def: Dictionary = resource_definitions.get(id, {})
56 return int(def.get(
"max_value", 100))
58func get_impact_marks(amount:int) -> String:
60 var absolute_amount = abs(amount)
61 if absolute_amount >= 15:
63 elif absolute_amount >= 8:
65 var mark =
"+" if amount > 0
else "-"
66 return mark.repeat(count)
68func format_choice_effects(choice:Dictionary) -> String:
70 for effect
in choice.get(
"effects", []):
71 var id = str(effect.get(
"resource",
""))
72 var amount =
int(effect.get(
"amount", 0))
73 if id ==
"" or amount == 0:
75 parts.append(get_symbol(id) +
" " + get_impact_marks(amount))
78 return "\n" +
" ".join(parts)
80func get_resource_order() -> Array:
81 return resource_order.duplicate()
84func get_effect_indicators(effects:Array, ordered:bool = true) -> Array:
86 var sorted_effects = _sort_effects_by_resource_order(effects)
if ordered
else effects
87 for effect
in sorted_effects:
88 var id = str(effect.get(
"resource",
""))
89 var amount =
int(effect.get(
"amount", 0))
90 if id ==
"" or amount == 0:
95 "icon": get_symbol(id),
96 "sprite_id": get_sprite_id(id),
97 "icon_path": get_icon_path(id),
98 "marks": get_impact_marks(amount)
102func _sort_effects_by_resource_order(effects:Array) -> Array:
103 var sorted_effects = []
104 for resource_id
in resource_order:
105 for effect
in effects:
106 if str(effect.get(
"resource",
"")) == resource_id:
107 sorted_effects.append(effect)
108 for effect
in effects:
109 var id = str(effect.get(
"resource",
""))
110 if id !=
"" and not resource_order.has(id):
111 sorted_effects.append(effect)
112 return sorted_effects
115func apply_effects(effects:Array) -> void:
116 for effect
in effects:
117 var id = str(effect.get(
"resource",
""))
118 if resources.has(id):
119 resources[id] = clampi(resources[id] +
int(effect.get(
"amount", 0)), get_min_value(id), get_max_value(id))
122func can_apply_effects(effects:Array) -> bool:
123 for effect
in effects:
124 var id = str(effect.get(
"resource",
""))
125 var amount =
int(effect.get(
"amount", 0))
126 if resources.has(id)
and get_value(id) + amount < get_min_value(id):
130func set_value(id:String, value:int) -> void:
131 if resources.has(id):
132 resources[id] = clampi(value, get_min_value(id), get_max_value(id))
135func get_state() -> Dictionary:
136 return resources.duplicate(true)
139func apply_state(saved_resources:Dictionary) -> void:
140 for id
in saved_resources.keys():
141 set_value(str(id),
int(saved_resources[id]))
144func load(resource_file_path:String =
"res://data/games/reflecting_pool/resources.json"):
145 load_resource_data(data_cache.load_json(resource_file_path))
149func load_resource_data(data:Dictionary) -> void:
151 for r
in data.get(
"resources", []):
152 var id = str(r.get(
"id",
""))
155 resource_order.append(id)
156 resource_definitions[id] = r
157 resources[id] = clampi(
int(r.get(
"starting_value", 100)), get_min_value(id), get_max_value(id))
159func refresh_hud(resource_hud):
160 hud.refresh_hud(resources, resource_hud, resource_order, resource_definitions)
162func apply_hud_text_style(resource_hud) -> void:
163 hud.apply_compact_text_style(resource_hud)
165func clear_hud_selection(resource_hud) -> void:
166 hud.clear_selection(resources, resource_hud, resource_order, resource_definitions)
170 resource_definitions.clear()
171 resource_order.clear()
174func get_cache_stats() -> Dictionary:
175 return data_cache.get_cache_stats()
int
Return the current value for one resource.