Let the TheaterCommander manage front line stance.

This improves the AI behavior by choosing the stances non-randomly:

* Breakthrough will be used if the base is expected to be capturable and
  the coalition outnumbers the enemy by 20%.
* Elimination will be used if the coalition has at least as many units
  as the enemy.
* Defensive will be used if the coalition has at least half as many
  units as the enemy.
* Retreat will be used if the coalition is significantly outnumbers.

This also exposes the option to the player.
This commit is contained in:
Dan Albert
2021-07-12 20:31:38 -07:00
parent 575aca5886
commit 0a416ab758
35 changed files with 361 additions and 57 deletions

View File

@@ -271,6 +271,9 @@ class ControlPointStatus(IntEnum):
class ControlPoint(MissionTarget, ABC):
# Not sure what distance DCS uses, but assuming it's about 2NM since that's roughly
# the distance of the circle on the map.
CAPTURE_DISTANCE = nautical_miles(2)
position = None # type: Point
name = None # type: str
@@ -727,6 +730,10 @@ class ControlPoint(MissionTarget, ABC):
return self.captured != other.captured
@property
def deployable_front_line_units(self) -> int:
return min(self.frontline_unit_count_limit, self.base.total_armor)
@property
def frontline_unit_count_limit(self) -> int:
return (