mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
Fix some CAS planning quirks.
CAS would never be planned for turn 0 because there were no enemy ground units, so a breakthrough attack was planned and CAS was considered unnecessary. Fix that by rejecting all frontline stance tasks when there are no *friendly* ground units to command. Another issue is that CAS missions were being planned even when there were no enemy front line forces. Skip planning in that case except on turn 0 since we expect there to be enemy ground units on turn 1. Fixes https://github.com/dcs-liberation/dcs_liberation/issues/1629
This commit is contained in:
parent
39234adff7
commit
0fd911feb1
@ -66,6 +66,8 @@ class FrontLineStanceTask(TheaterCommanderTask, ABC):
|
||||
return False
|
||||
if self.better_stance_already_set(state):
|
||||
return False
|
||||
if self.friendly_cp.deployable_front_line_units == 0:
|
||||
return False
|
||||
return self.have_sufficient_front_line_advantage
|
||||
|
||||
def apply_effects(self, state: TheaterState) -> None:
|
||||
|
||||
@ -13,6 +13,16 @@ class PlanCas(PackagePlanningTask[FrontLine]):
|
||||
def preconditions_met(self, state: TheaterState) -> bool:
|
||||
if self.target not in state.vulnerable_front_lines:
|
||||
return False
|
||||
|
||||
# Do not bother planning CAS when there are no enemy ground units at the front.
|
||||
# An exception is made for turn zero since that's not being truly planned, but
|
||||
# just to determine what missions should be planned on turn 1 (when there *will*
|
||||
# be ground units) and what aircraft should be ordered.
|
||||
enemy_cp = self.target.control_point_friendly_to(
|
||||
player=not state.context.coalition.player
|
||||
)
|
||||
if enemy_cp.deployable_front_line_units == 0 and state.context.turn > 0:
|
||||
return False
|
||||
return super().preconditions_met(state)
|
||||
|
||||
def apply_effects(self, state: TheaterState) -> None:
|
||||
|
||||
@ -34,6 +34,7 @@ if TYPE_CHECKING:
|
||||
class PersistentContext:
|
||||
coalition: Coalition
|
||||
theater: ConflictTheater
|
||||
turn: int
|
||||
settings: Settings
|
||||
tracer: MultiEventTracer
|
||||
|
||||
@ -139,7 +140,9 @@ class TheaterState(WorldState["TheaterState"]):
|
||||
finder = ObjectiveFinder(game, player)
|
||||
ordered_capturable_points = finder.prioritized_unisolated_points()
|
||||
|
||||
context = PersistentContext(coalition, game.theater, game.settings, tracer)
|
||||
context = PersistentContext(
|
||||
coalition, game.theater, game.turn, game.settings, tracer
|
||||
)
|
||||
|
||||
# Plan enough rounds of CAP that the target has coverage over the expected
|
||||
# mission duration.
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user