fix buff unlock

This commit is contained in:
2026-03-31 01:45:58 +02:00
parent f1e08c848e
commit eaa8f18a4a
6 changed files with 292 additions and 31 deletions

View File

@@ -38,12 +38,16 @@ func _ready() -> void:
_build_goal_rows()
GameState.currency_changed.connect(_on_currency_changed)
GameState.generator_state_changed.connect(_on_generator_state_changed)
GameState.goal_completed.connect(_on_goal_completed)
_refresh_ui()
_refresh_ui.call_deferred()
func _on_currency_changed(_currency_id: StringName, _new_amount: BigNumber) -> void:
_refresh_ui()
func _on_goal_completed(goal_id: StringName) -> void:
_refresh_ui()
func _on_generator_state_changed(generator_id: StringName, _state: Dictionary) -> void:
var generator_key: String = String(generator_id)
if not generator_key.is_empty():
@@ -58,7 +62,7 @@ func _load_goals() -> void:
var scene_root: Node = get_tree().current_scene
var search_root: Node = scene_root if scene_root != null else self
var generator_nodes: Array[Node] = search_root.find_children("*", "CurrencyGenerator", true, false)
var seen_goal_ids: Dictionary = {}
for generator_node in generator_nodes:
var generator: CurrencyGenerator = generator_node as CurrencyGenerator
if generator == null:
@@ -69,23 +73,21 @@ func _load_goals() -> void:
continue
_generators_by_id[String(generator_id)] = generator
if generator.data == null:
var seen_goal_ids: Dictionary = {}
for goal in GameState.get_all_goals():
if goal == null or not goal.has_id():
continue
if not generator.data.has_unlock_goal():
continue
var resolved_goal: GoalData = generator.data.unlock_goal
if resolved_goal == null:
continue
if not bool(resolved_goal.is_valid()):
continue
var goal_key: String = String(resolved_goal.get("id"))
var goal_key: String = String(goal.id)
if seen_goal_ids.has(goal_key):
push_warning("Goals debug UI: duplicate goal id '%s' skipped" % goal_key)
continue
var target_generator_id: StringName = _find_generator_for_goal(goal)
if target_generator_id.is_empty():
continue
seen_goal_ids[goal_key] = true
_loaded_goals.append(GoalDefinition.new(generator_id, resolved_goal))
_loaded_goals.append(GoalDefinition.new(target_generator_id, goal))
func _build_goal_rows() -> void:
_rows_by_goal_id.clear()
@@ -188,10 +190,9 @@ func _is_goal_met(goal: GoalDefinition) -> bool:
return bool(goal.goal.is_met())
func _is_goal_completed(goal: GoalDefinition) -> bool:
return (
GameState.is_generator_unlocked(goal.target_generator_id)
and GameState.is_generator_available(goal.target_generator_id)
)
if goal.goal == null or goal.goal.id.is_empty():
return false
return GameState.is_goal_completed(goal.goal.id)
func _on_unlock_pressed(goal_id: StringName) -> void:
var row: GoalRow = _rows_by_goal_id.get(String(goal_id))
@@ -276,6 +277,16 @@ func _get_generator_for_goal(goal: GoalDefinition) -> CurrencyGenerator:
return _generators_by_id.get(key) as CurrencyGenerator
func _find_generator_for_goal(goal: GoalData) -> StringName:
for generator_id in _generators_by_id.keys():
var generator: CurrencyGenerator = _generators_by_id[generator_id]
if generator == null or generator.data == null:
continue
if generator.data.has_unlock_goal():
if String(generator.data.get_unlock_goal_id()) == String(goal.id):
return StringName(generator_id)
return &""
func _is_manual_goal_generator(generator: CurrencyGenerator) -> bool:
if generator == null:
return false
@@ -311,6 +322,9 @@ func _get_requirements_text(goal: GoalDefinition) -> String:
required_amount.to_string_suffix(2)
]
)
if parts.is_empty():
return "No requirements"
return " | ".join(parts)
func _currency_label(currency_id: StringName) -> String: