From 5d57679df1d2bde4a64abea53d3d7055fefba99f Mon Sep 17 00:00:00 2001 From: autocommit Date: Wed, 15 Apr 2026 23:45:34 -0700 Subject: [PATCH] =?UTF-8?q?feat(api-gdext):=20=E2=9C=A8=20Add=20Rust=20bin?= =?UTF-8?q?dings=20for=20yield=20registration=20(food/energy)=20and=20expo?= =?UTF-8?q?se=20GDScript=20functions=20to=20manage=20city=20yields?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Lilith Autocommit --- src/simulator/api-gdext/src/lib.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/simulator/api-gdext/src/lib.rs b/src/simulator/api-gdext/src/lib.rs index 31d6e8a6..3066fac5 100644 --- a/src/simulator/api-gdext/src/lib.rs +++ b/src/simulator/api-gdext/src/lib.rs @@ -818,6 +818,20 @@ impl GdCity { self.inner.has_building(&building.to_string()) } + /// Register a building's flat yield bonuses. GDScript passes the + /// five per-turn bonuses parsed from the building JSON's `effects` array. + /// The city applies these in `get_yields` for each owned building. + #[func] + fn register_building_yields( + &mut self, building: GString, + food: f64, production: f64, gold: f64, culture: f64, science: f64, + ) { + self.inner.register_building_yields( + building.to_string(), + mc_city::CityYields { food, production, gold, culture, science }, + ); + } + /// Load items from a JSON array `[ { id, production: { building, secondary_building?, /// production_cost, materials?, requires_tech? }, ... }, ... ]`. The DataLoader passes /// the merged item list from `public/resources/items/*.json`. Items without a