Split air and ground conflict descriptions.

This commit is contained in:
Dan Albert 2022-09-11 14:29:28 -07:00
parent 1150750c09
commit 09786c6d29
3 changed files with 24 additions and 21 deletions

View File

@ -0,0 +1,18 @@
from __future__ import annotations
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from game.theater import ConflictTheater, ControlPoint
class AirConflictDescription:
def __init__(self, blue_cp: ControlPoint, red_cp: ControlPoint) -> None:
self.blue_cp = blue_cp
self.red_cp = red_cp
self.center = (self.blue_cp.position + self.red_cp.position) / 2
@staticmethod
def for_theater(theater: ConflictTheater) -> AirConflictDescription:
player_cp, enemy_cp = theater.closest_opposing_control_points()
return AirConflictDescription(player_cp, enemy_cp)

View File

@ -21,7 +21,7 @@ from game.naming import namegen
from game.radio.radios import RadioRegistry
from game.radio.tacan import TacanBand, TacanRegistry, TacanUsage
from game.utils import Heading
from .frontlineconflictdescription import FrontLineConflictDescription
from .airconflictdescription import AirConflictDescription
from .missiondata import AwacsInfo, MissionData, TankerInfo
if TYPE_CHECKING:
@ -39,7 +39,7 @@ class AirSupportGenerator:
def __init__(
self,
mission: Mission,
conflict: FrontLineConflictDescription,
conflict: AirConflictDescription,
game: Game,
radio_registry: RadioRegistry,
tacan_registry: TacanRegistry,
@ -186,7 +186,7 @@ class AirSupportGenerator:
plane_type=unit_type,
altitude=AWACS_ALT,
airport=None,
position=self.conflict.position.random_point_within(
position=self.conflict.center.random_point_within(
AWACS_DISTANCE, AWACS_DISTANCE
),
frequency=freq.mhz,

View File

@ -18,9 +18,10 @@ from game.missiongenerator.aircraft.aircraftgenerator import (
from game.naming import namegen
from game.radio.radios import RadioFrequency, RadioRegistry
from game.radio.tacan import TacanRegistry
from game.theater import Airfield, FrontLine
from game.theater import Airfield
from game.theater.bullseye import Bullseye
from game.unitmap import UnitMap
from .airconflictdescription import AirConflictDescription
from .airsupportgenerator import AirSupportGenerator
from .beacons import load_beacons_for_terrain
from .briefinggenerator import BriefingGenerator, MissionInfoGenerator
@ -228,7 +229,7 @@ class MissionGenerator:
# Air Support (Tanker & Awacs)
air_support_generator = AirSupportGenerator(
self.mission,
self.describe_air_conflict(),
AirConflictDescription.for_theater(self.game.theater),
self.game,
self.radio_registry,
self.tacan_registry,
@ -305,22 +306,6 @@ class MissionGenerator:
dead=True,
)
def describe_air_conflict(self) -> FrontLineConflictDescription:
player_cp, enemy_cp = self.game.theater.closest_opposing_control_points()
mid_point = player_cp.position.point_from_heading(
player_cp.position.heading_between_point(enemy_cp.position),
player_cp.position.distance_to_point(enemy_cp.position) / 2,
)
return FrontLineConflictDescription(
self.game.theater,
FrontLine(player_cp, enemy_cp),
self.game.blue.faction.name,
self.game.red.faction.name,
self.mission.country(self.game.blue.country_name),
self.mission.country(self.game.red.country_name),
mid_point,
)
def notify_info_generators(
self,
) -> None: