feat(game-entities): ✨ Add register_yield function to City entities to apply dynamic building bonuses like culture or production yields
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
This commit is contained in:
parent
91ae2ffa56
commit
a7695432f9
1 changed files with 30 additions and 0 deletions
|
|
@ -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:
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue