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

View File

@ -18,9 +18,10 @@ from game.missiongenerator.aircraft.aircraftgenerator import (
from game.naming import namegen from game.naming import namegen
from game.radio.radios import RadioFrequency, RadioRegistry from game.radio.radios import RadioFrequency, RadioRegistry
from game.radio.tacan import TacanRegistry 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.theater.bullseye import Bullseye
from game.unitmap import UnitMap from game.unitmap import UnitMap
from .airconflictdescription import AirConflictDescription
from .airsupportgenerator import AirSupportGenerator from .airsupportgenerator import AirSupportGenerator
from .beacons import load_beacons_for_terrain from .beacons import load_beacons_for_terrain
from .briefinggenerator import BriefingGenerator, MissionInfoGenerator from .briefinggenerator import BriefingGenerator, MissionInfoGenerator
@ -228,7 +229,7 @@ class MissionGenerator:
# Air Support (Tanker & Awacs) # Air Support (Tanker & Awacs)
air_support_generator = AirSupportGenerator( air_support_generator = AirSupportGenerator(
self.mission, self.mission,
self.describe_air_conflict(), AirConflictDescription.for_theater(self.game.theater),
self.game, self.game,
self.radio_registry, self.radio_registry,
self.tacan_registry, self.tacan_registry,
@ -305,22 +306,6 @@ class MissionGenerator:
dead=True, 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( def notify_info_generators(
self, self,
) -> None: ) -> None: