From 09786c6d29f74fbc33d70940582c6971ce392b66 Mon Sep 17 00:00:00 2001 From: Dan Albert Date: Sun, 11 Sep 2022 14:29:28 -0700 Subject: [PATCH] Split air and ground conflict descriptions. --- .../airconflictdescription.py | 18 ++++++++++++++++ game/missiongenerator/airsupportgenerator.py | 6 +++--- game/missiongenerator/missiongenerator.py | 21 +++---------------- 3 files changed, 24 insertions(+), 21 deletions(-) create mode 100644 game/missiongenerator/airconflictdescription.py diff --git a/game/missiongenerator/airconflictdescription.py b/game/missiongenerator/airconflictdescription.py new file mode 100644 index 00000000..0b82cc38 --- /dev/null +++ b/game/missiongenerator/airconflictdescription.py @@ -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) diff --git a/game/missiongenerator/airsupportgenerator.py b/game/missiongenerator/airsupportgenerator.py index f850e4e2..8aa8c209 100644 --- a/game/missiongenerator/airsupportgenerator.py +++ b/game/missiongenerator/airsupportgenerator.py @@ -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, diff --git a/game/missiongenerator/missiongenerator.py b/game/missiongenerator/missiongenerator.py index 2ae8aadd..7b63fdfc 100644 --- a/game/missiongenerator/missiongenerator.py +++ b/game/missiongenerator/missiongenerator.py @@ -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: