Move the AI to the normal procurement system.

The procurement AI now uses the same system as the players. Orders are
placed and take a turn to fulfill.

This has a few advantages:

* We no longer need special case purchase logic for the turn 0
  population of opfor airbases.
* Players using auto-purchase can cancel orders they don't like.
This commit is contained in:
Dan Albert
2020-12-05 22:36:17 -08:00
parent 7226359e64
commit d519aa1dad
4 changed files with 34 additions and 80 deletions

View File

@@ -91,9 +91,7 @@ class Game:
self.__destroyed_units: List[str] = []
self.savepath = ""
self.budget = PLAYER_BUDGET_INITIAL
# The enemy currently doesn't buy anything on turn zero; they get
# pre-populated airbases that are generated by the new game generator.
self.enemy_budget = 0
self.enemy_budget = PLAYER_BUDGET_INITIAL
self.current_unit_id = 0
self.current_group_id = 0
@@ -110,6 +108,8 @@ class Game:
cp.pending_unit_deliveries = self.units_delivery_event(cp)
self.sanitize_sides()
# Turn 0 procurement.
self.plan_procurement()
self.on_load()
def generate_conditions(self) -> Conditions:
@@ -229,24 +229,8 @@ class Game:
control_point.process_turn()
self.process_enemy_income()
self.enemy_budget = ProcurementAi(
self,
for_player=False,
faction=self.enemy_faction,
manage_runways=True,
manage_front_line=True,
manage_aircraft=True
).spend_budget(self.enemy_budget)
self.process_player_income()
self.budget = ProcurementAi(
self,
for_player=True,
faction=self.player_faction,
manage_runways=self.settings.automate_runway_repair,
manage_front_line=self.settings.automate_front_line_reinforcements,
manage_aircraft=self.settings.automate_aircraft_reinforcements
).spend_budget(self.budget)
if not no_action and self.turn > 1:
for cp in self.theater.player_points():
@@ -288,6 +272,27 @@ class Game:
gplanner.plan_groundwar()
self.ground_planners[cp.id] = gplanner
self.plan_procurement()
def plan_procurement(self) -> None:
self.budget = ProcurementAi(
self,
for_player=True,
faction=self.player_faction,
manage_runways=self.settings.automate_runway_repair,
manage_front_line=self.settings.automate_front_line_reinforcements,
manage_aircraft=self.settings.automate_aircraft_reinforcements
).spend_budget(self.budget)
self.enemy_budget = ProcurementAi(
self,
for_player=False,
faction=self.enemy_faction,
manage_runways=True,
manage_front_line=True,
manage_aircraft=True
).spend_budget(self.enemy_budget)
def message(self, text: str) -> None:
self.informations.append(Information(text, turn=self.turn))