diff --git a/game/procurement.py b/game/procurement.py index e4de6d98..5833494e 100644 --- a/game/procurement.py +++ b/game/procurement.py @@ -185,6 +185,14 @@ class ProcurementAi: ) -> Tuple[float, bool]: for squadron in squadrons: price = squadron.aircraft.price * quantity + # Final check to make sure the number of aircraft won't exceed the number of available pilots + # after fulfilling this aircraft request. + if ( + squadron.pilot_limits_enabled + and squadron.expected_size_next_turn + quantity + > squadron.expected_pilots_next_turn + ): + continue if price > budget: continue diff --git a/game/squadrons/squadron.py b/game/squadrons/squadron.py index d4cf9272..8f9ef49c 100644 --- a/game/squadrons/squadron.py +++ b/game/squadrons/squadron.py @@ -222,6 +222,17 @@ class Squadron: def max_size(self) -> int: return self.settings.squadron_pilot_limit + @property + def expected_pilots_next_turn(self) -> int: + return len(self.active_pilots) + self.replenish_rate + + @property + def replenish_rate(self) -> int: + return min( + self.settings.squadron_replenishment_rate, + self._number_of_unfilled_pilot_slots, + ) + @property def active_pilots(self) -> list[Pilot]: return self._pilots_with_status(PilotStatus.Active)