mirror of
https://github.com/dcs-liberation/dcs_liberation.git
synced 2025-11-10 14:22:26 +00:00
Split air and ground conflict descriptions.
This commit is contained in:
parent
1150750c09
commit
09786c6d29
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.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,
|
||||||
|
|||||||
@ -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:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user