From e2e0e1445dbf23e8589d957acf527cfd5d662d06 Mon Sep 17 00:00:00 2001 From: autocommit Date: Thu, 16 Apr 2026 14:45:34 -0700 Subject: [PATCH] =?UTF-8?q?feat(management):=20=E2=9C=A8=20Implement=20Rus?= =?UTF-8?q?t-based=20turn=20processing=20and=20GDScript-Rust=20API=20exten?= =?UTF-8?q?sions=20for=20optimized=20turn-based=20logic=20execution?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Lilith Autocommit --- .../src/modules/management/turn_processor.gd | 2 +- src/simulator/api-gdext/src/lib.rs | 14 +++++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/game/engine/src/modules/management/turn_processor.gd b/src/game/engine/src/modules/management/turn_processor.gd index 89c671ee..9f9d2e16 100644 --- a/src/game/engine/src/modules/management/turn_processor.gd +++ b/src/game/engine/src/modules/management/turn_processor.gd @@ -276,7 +276,7 @@ func _apply_building_bonuses(city: CityScript, building_id: String) -> void: func _process_city_healing(player: RefCounted) -> void: for city_ref: Variant in player.cities: if city_ref is CityScript: - (city_ref as CityScript).heal_per_turn() + (city_ref as CityScript).heal_per_turn(GameState.turn_number) func _process_healing(player: RefCounted) -> void: # Player diff --git a/src/simulator/api-gdext/src/lib.rs b/src/simulator/api-gdext/src/lib.rs index 3066fac5..247f5e3a 100644 --- a/src/simulator/api-gdext/src/lib.rs +++ b/src/simulator/api-gdext/src/lib.rs @@ -1251,10 +1251,18 @@ impl GdCity { self.inner.heal(amount.max(0) as u32); } - /// Heal the city by the standard per-turn amount (20 HP). Skips destroyed cities. + /// Heal the city by the standard per-turn amount (20 HP). Skips destroyed + /// cities and cities recently attacked (see mc_city::City::heal_per_turn). #[func] - fn heal_per_turn(&mut self) { - self.inner.heal_per_turn(); + fn heal_per_turn(&mut self, current_turn: i64) { + self.inner.heal_per_turn(current_turn.max(0) as u32); + } + + /// Mark the city as having taken combat damage on `turn`. Call when a + /// combat result assigns non-zero city damage. + #[func] + fn mark_attacked(&mut self, turn: i64) { + self.inner.mark_attacked(turn.max(0) as u32); } }