diff --git a/src/game/engine/src/entities/city.gd b/src/game/engine/src/entities/city.gd index bda894ec..9027cbb7 100644 --- a/src/game/engine/src/entities/city.gd +++ b/src/game/engine/src/entities/city.gd @@ -99,6 +99,35 @@ func _init(city_id: String = "", starting_buildings: Array[String] = []) -> void for b in buildings: b_arr.push_back(b) _gd_city.call("initialize", id, b_arr) + for b in buildings: + _register_building_yields(b) + + +## Register flat yield bonuses for a building id by reading its JSON `effects`. +## Called on starting buildings in `_init` and after `add_building` so the +## Rust City.get_yields applies e.g. monument +2 culture. +func _register_building_yields(building_id: String) -> void: + if _gd_city == null: + return + var def: Dictionary = DataLoader.get_building(building_id) + if def.is_empty(): + return + var food: float = 0.0 + var production: float = 0.0 + var gold: float = 0.0 + var culture: float = 0.0 + var science: float = 0.0 + for effect: Dictionary in def.get("effects", []): + var value: float = float(effect.get("value", 0)) + match effect.get("type", ""): + "food": food += value + "production": production += value + "gold": gold += value + "culture": culture += value + "science": science += value + _gd_city.call( + "register_building_yields", building_id, food, production, gold, culture, science + ) # ── Founding ──────────────────────────────────────────────────────── @@ -381,6 +410,7 @@ func add_building(building: String) -> void: buildings.append(building) if _gd_city != null: _gd_city.call("add_building", building) + _register_building_yields(building) func has_building(building: String) -> bool: