diff --git a/src/game/engine/scenes/tests/turn_processor.gd b/src/game/engine/scenes/tests/turn_processor.gd index 22d75ac7..b97e2593 100644 --- a/src/game/engine/scenes/tests/turn_processor.gd +++ b/src/game/engine/scenes/tests/turn_processor.gd @@ -239,6 +239,18 @@ func _sum_city_building_effect(city: CityScript, effect_type: String) -> int: return total +func _sum_city_building_effect_float(city: CityScript, effect_type: String) -> float: + var total: float = 0.0 + for building_id: Variant in city.buildings: + var bdata: Dictionary = DataLoader.get_building(str(building_id)) + if bdata.is_empty(): + continue + for effect: Dictionary in bdata.get("effects", []): + if effect.get("type", "") == effect_type: + total += float(effect.get("value", 0)) + return total + + func _apply_building_bonuses(city: CityScript, building_id: String) -> void: var bdata: Dictionary = DataLoader.get_building(building_id) var effects: Array = bdata.get("effects", []) @@ -348,7 +360,12 @@ func _process_economy(player: RefCounted, game_map: RefCounted) -> void: # Play var tile_json: String = BuildableHelperScript.build_tile_yields_json(c, game_map) var yields: Dictionary = c.get_yields(tile_json) var building_gold: int = _sum_city_building_effect(c, "gold") - income += int(yields.get("gold", 0)) + building_gold + var city_gold: int = int(yields.get("gold", 0)) + building_gold + # Apply percentage bonuses (marketplace +25% = 0.25) + var gold_pct: float = _sum_city_building_effect_float(c, "gold_percent") + if gold_pct > 0.0: + city_gold = int(float(city_gold) * (1.0 + gold_pct)) + income += city_gold # Golden Age: +20% gold income if player.golden_age_active: income = int(income * 1.2) diff --git a/src/game/engine/src/modules/management/turn_processor.gd b/src/game/engine/src/modules/management/turn_processor.gd index 22d75ac7..b97e2593 100644 --- a/src/game/engine/src/modules/management/turn_processor.gd +++ b/src/game/engine/src/modules/management/turn_processor.gd @@ -239,6 +239,18 @@ func _sum_city_building_effect(city: CityScript, effect_type: String) -> int: return total +func _sum_city_building_effect_float(city: CityScript, effect_type: String) -> float: + var total: float = 0.0 + for building_id: Variant in city.buildings: + var bdata: Dictionary = DataLoader.get_building(str(building_id)) + if bdata.is_empty(): + continue + for effect: Dictionary in bdata.get("effects", []): + if effect.get("type", "") == effect_type: + total += float(effect.get("value", 0)) + return total + + func _apply_building_bonuses(city: CityScript, building_id: String) -> void: var bdata: Dictionary = DataLoader.get_building(building_id) var effects: Array = bdata.get("effects", []) @@ -348,7 +360,12 @@ func _process_economy(player: RefCounted, game_map: RefCounted) -> void: # Play var tile_json: String = BuildableHelperScript.build_tile_yields_json(c, game_map) var yields: Dictionary = c.get_yields(tile_json) var building_gold: int = _sum_city_building_effect(c, "gold") - income += int(yields.get("gold", 0)) + building_gold + var city_gold: int = int(yields.get("gold", 0)) + building_gold + # Apply percentage bonuses (marketplace +25% = 0.25) + var gold_pct: float = _sum_city_building_effect_float(c, "gold_percent") + if gold_pct > 0.0: + city_gold = int(float(city_gold) * (1.0 + gold_pct)) + income += city_gold # Golden Age: +20% gold income if player.golden_age_active: income = int(income * 1.2)