From 2af274dc77545a572714330102f7d01b08264d58 Mon Sep 17 00:00:00 2001 From: MetalStormGhost <89945461+MetalStormGhost@users.noreply.github.com> Date: Sun, 20 Feb 2022 01:48:05 +0200 Subject: [PATCH] Autoplanner will take number of pilots into account when planning purchases - Added expected_pilots_next_turn() to Squadron. The procurement AI now correctly compares to it when evaluating if planes should be bought, instead of the maximum possible number of pilots. - Added replenish_rate method to squadron.py to prevent expected_pilots_next_turn from returning an incorrect (too large) number when replenish rate > pilots required. #1837 --- game/procurement.py | 8 ++++++++ game/squadrons/squadron.py | 11 +++++++++++ 2 files changed, 19 insertions(+) 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)