Plan multiple CAP rounds per turn.

On station time for CAP is only 30 minutes, so plan three cycles to give
~90 minutes of CAP coverage.

Default starting budget has increased significantly to account for the
greatly increased aircraft needs on turn 1.

Fixes https://github.com/Khopa/dcs_liberation/issues/673
This commit is contained in:
Dan Albert
2020-12-26 17:22:03 -08:00
parent d3b1f6110f
commit 3a9f585b6b
7 changed files with 72 additions and 8 deletions

View File

@@ -318,13 +318,18 @@ class Game:
def plan_procurement(self, blue_planner: CoalitionMissionPlanner,
red_planner: CoalitionMissionPlanner) -> None:
# The first turn needs to buy a *lot* of aircraft to fill CAPs, so it
# gets much more of the budget that turn. Otherwise budget (after
# repairs) is split evenly between air and ground.
ground_portion = 0.1 if self.turn == 0 else 0.5
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
manage_aircraft=self.settings.automate_aircraft_reinforcements,
front_line_budget_share=ground_portion
).spend_budget(self.budget, blue_planner.procurement_requests)
self.enemy_budget = ProcurementAi(
@@ -333,7 +338,8 @@ class Game:
faction=self.enemy_faction,
manage_runways=True,
manage_front_line=True,
manage_aircraft=True
manage_aircraft=True,
front_line_budget_share=ground_portion
).spend_budget(self.enemy_budget, red_planner.procurement_requests)
def message(self, text: str) -> None:

View File

@@ -38,13 +38,17 @@ class AircraftProcurementRequest:
class ProcurementAi:
def __init__(self, game: Game, for_player: bool, faction: Faction,
manage_runways: bool, manage_front_line: bool,
manage_aircraft: bool) -> None:
manage_aircraft: bool, front_line_budget_share: float) -> None:
if front_line_budget_share > 1.0:
raise ValueError
self.game = game
self.is_player = for_player
self.faction = faction
self.manage_runways = manage_runways
self.manage_front_line = manage_front_line
self.manage_aircraft = manage_aircraft
self.front_line_budget_share = front_line_budget_share
self.threat_zones = self.game.threat_zone_for(not self.is_player)
def spend_budget(
@@ -53,7 +57,7 @@ class ProcurementAi:
if self.manage_runways:
budget = self.repair_runways(budget)
if self.manage_front_line:
armor_budget = math.ceil(budget / 2)
armor_budget = math.ceil(budget * self.front_line_budget_share)
budget -= armor_budget
budget += self.reinforce_front_line(armor_budget)