diff --git a/big_number_progress_bar.gd b/big_number_progress_bar.gd index 76b1f1d..bffeca9 100644 --- a/big_number_progress_bar.gd +++ b/big_number_progress_bar.gd @@ -21,16 +21,17 @@ func set_limits(start: BigNumber, end: BigNumber) -> void: _progress_bar.max_value = _end.get_ratio(_start) func _ready() -> void: + GameState.currency_changed.connect(_on_currency_changed) match currency: GameState.CurrencyType.gold: - GameState.gold_changed.connect(_on_currency_changed) _current = GameState.gold GameState.CurrencyType.gems: - GameState.gems_changed.connect(_on_currency_changed) _current = GameState.gems - + set_limits(_current, _current.add(BigNumber.new(1, 1))) -func _on_currency_changed(currency: BigNumber) -> void: - _current = currency - _progress_bar.value = currency.get_ratio(_end) +func _on_currency_changed(changed_currency: GameState.CurrencyType, amount: BigNumber) -> void: + if changed_currency != currency: + return + _current = amount + _progress_bar.value = amount.get_ratio(_end) diff --git a/currency_label.gd b/currency_label.gd index 048d4f7..8b89332 100644 --- a/currency_label.gd +++ b/currency_label.gd @@ -10,14 +10,17 @@ extends HBoxContainer func _ready() -> void: _label.text = data.name + GameState.currency_changed.connect(_on_currency_changed) match currency: GameState.CurrencyType.gold: - GameState.gold_changed.connect(_on_currency_changed) + _on_currency_changed(currency, GameState.gold) GameState.CurrencyType.gems: - GameState.gems_changed.connect(_on_currency_changed) + _on_currency_changed(currency, GameState.gems) -func _on_currency_changed(currency: BigNumber) -> void: - _currency_label.text = currency.to_string_suffix(2) +func _on_currency_changed(changed_currency: GameState.CurrencyType, amount: BigNumber) -> void: + if changed_currency != currency: + return + _currency_label.text = amount.to_string_suffix(2) func _on_debug_income_button_pressed() -> void: GameState.add_gold(BigNumber.from_float(100)) diff --git a/game_state.gd b/game_state.gd index e61aede..479dd4c 100644 --- a/game_state.gd +++ b/game_state.gd @@ -4,8 +4,7 @@ extends Node # ========================================== # SIGNALS # ========================================== -signal gold_changed(new_amount: BigNumber) -signal gems_changed(new_amount: BigNumber) +signal currency_changed(currency_type: CurrencyType, new_amount: BigNumber) signal generator_state_changed(generator_id: StringName, state: Dictionary) enum CurrencyType { gold, gems } @@ -34,25 +33,25 @@ func _ready() -> void: # ========================================== func add_gold(amount: BigNumber) -> void: gold.add_in_place(amount) - gold_changed.emit(gold) + currency_changed.emit(CurrencyType.gold, gold) func spend_gold(cost: BigNumber) -> bool: if gold.is_greater_than(cost) or gold.is_equal_to(cost): var negative_cost = BigNumber.new(-cost.mantissa, cost.exponent) gold.add_in_place(negative_cost) - gold_changed.emit(gold) + currency_changed.emit(CurrencyType.gold, gold) return true return false func add_gems(amount: BigNumber) -> void: gems.add_in_place(amount) - gems_changed.emit(gems) + currency_changed.emit(CurrencyType.gems, gems) func spend_gems(cost: BigNumber) -> bool: if gems.is_greater_than(cost) or gems.is_equal_to(cost): var negative_cost = BigNumber.new(-cost.mantissa, cost.exponent) gems.add_in_place(negative_cost) - gems_changed.emit(gems) + currency_changed.emit(CurrencyType.gems, gems) return true return false diff --git a/generator_container.gd b/generator_container.gd index 6f5a717..db1abcb 100644 --- a/generator_container.gd +++ b/generator_container.gd @@ -13,12 +13,7 @@ func _ready() -> void: _generator.purchase_completed.connect(_on_generator_updated) _generator.production_tick.connect(_on_generator_updated) _generator.purchase_failed.connect(_on_generator_updated) - - match _generator.currency: - GameState.CurrencyType.gold: - GameState.gold_changed.connect(_on_currency_changed) - GameState.CurrencyType.gems: - GameState.gems_changed.connect(_on_currency_changed) + GameState.currency_changed.connect(_on_currency_changed) GameState.generator_state_changed.connect(_on_generator_state_changed) @@ -37,7 +32,9 @@ func _on_debug_income_pressed() -> void: _generator.grant_currency(BigNumber.from_float(100.0)) _refresh_generator_ui() -func _on_currency_changed(_new_value: BigNumber) -> void: +func _on_currency_changed(changed_currency: GameState.CurrencyType, _new_value: BigNumber) -> void: + if changed_currency != _generator.currency: + return _refresh_generator_ui() func _on_generator_updated(_a = null, _b = null, _c = null, _d = null) -> void: