Fix procurement for factions that lack some units.

Fixes procurement for factions with no aircraft, no ground units, or no
tanks.
This commit is contained in:
Schneefl0cke 2021-06-16 18:34:58 +02:00 committed by GitHub
parent 8d53f42421
commit c13bf3ccd1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -60,6 +60,18 @@ class ProcurementAi:
def calculate_ground_unit_budget_share(self) -> float: def calculate_ground_unit_budget_share(self) -> float:
armor_investment = 0 armor_investment = 0
aircraft_investment = 0 aircraft_investment = 0
# faction has no ground units
if (
len(self.faction.artillery_units) == 0
and len(self.faction.frontline_units) == 0
):
return 0
# faction has no planes
if len(self.faction.aircrafts) == 0:
return 1
for cp in self.owned_points: for cp in self.owned_points:
cp_ground_units = cp.allocated_ground_units(self.game.transfers) cp_ground_units = cp.allocated_ground_units(self.game.transfers)
armor_investment += cp_ground_units.total_value armor_investment += cp_ground_units.total_value
@ -141,6 +153,11 @@ class ProcurementAi:
self.faction.artillery_units self.faction.artillery_units
) )
of_class = set(unit_class.unit_list) & faction_units of_class = set(unit_class.unit_list) & faction_units
# faction has no access to needed unit type, take a random unit
if len(of_class) is 0:
of_class = faction_units
affordable_units = [u for u in of_class if db.PRICES[u] <= budget] affordable_units = [u for u in of_class if db.PRICES[u] <= budget]
if not affordable_units: if not affordable_units:
return None return None