mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
Split air and ground conflict descriptions.
This commit is contained in:
parent
480dccb817
commit
16fdb889a7
18
game/missiongenerator/airconflictdescription.py
Normal file
18
game/missiongenerator/airconflictdescription.py
Normal 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)
|
||||
@ -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,
|
||||
|
||||
@ -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
|
||||
@ -229,7 +230,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,
|
||||
@ -306,22 +307,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:
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user