MetalStormGhost 64b1410de8 Implemented support for player controllable carriers in Pretense campaigns. This functionality can be enabled or disabled in settings, because the controllable carriers in Pretense do not build and deploy AI missions autonomously, so the old functionality is retained.
Added new options in settings:
- Carriers steam into wind
- Navmesh to use for Pretense carrier zones
- Remove ground spawn statics, including invisible FARPs, at airbases.
- Percentage of randomly selected aircraft types (only for generated squadrons)
intended to allow the user to increase aircraft variety.

Will now store the ICLS channel and Link4 frequency in missiondata.py CarrierInfo.

Implemented artillery groups as Pretense garrisons. Artillery groups are spawned by the Artillery Bunker. Will now also ensure that the logistics units spawned as part of Pretense garrisons are actually capable of ammo resupply.

Fixed the Pretense generator generating a bit too many missions per squadron. Ground spawns: Also hot start aircraft which require ground crew support (ground air or chock removal) which might not be available at roadbases. Also, pretensetgogenerator.py will now correctly handle air defence units in ground_unit_of_class(). Added Roland groups in the Pretense generator.
2024-04-06 15:46:11 +03:00

102 lines
2.4 KiB
Python

from __future__ import annotations
from dataclasses import dataclass, field
from datetime import datetime
from typing import Optional, TYPE_CHECKING
from game.dcs.aircrafttype import AircraftType
from game.missiongenerator.aircraft.flightdata import FlightData
from game.runways import RunwayData
if TYPE_CHECKING:
from game.radio.radios import RadioFrequency
from game.radio.tacan import TacanChannel
from game.utils import Distance
from uuid import UUID
@dataclass
class GroupInfo:
group_name: str
callsign: str
freq: RadioFrequency
blue: bool
@dataclass
class UnitInfo(GroupInfo):
unit_name: str
@dataclass
class AwacsInfo(GroupInfo):
"""AWACS information for the kneeboard."""
depature_location: Optional[str]
start_time: datetime
end_time: datetime
@dataclass
class TankerInfo(GroupInfo):
"""Tanker information for the kneeboard."""
variant: str
tacan: Optional[TacanChannel]
start_time: datetime
end_time: datetime
@dataclass
class CarrierInfo(UnitInfo):
"""Carrier information."""
tacan: TacanChannel
icls_channel: int | None
link4_freq: RadioFrequency | None
@dataclass
class JtacInfo(UnitInfo):
"""JTAC information."""
region: str
code: str
@dataclass
class CargoInfo:
"""Cargo information."""
unit_type: str = field(default_factory=str)
spawn_zone: str = field(default_factory=str)
amount: int = field(default=1)
@dataclass
class LogisticsInfo:
"""Logistics information."""
pilot_names: list[str]
transport: AircraftType
blue: bool
logistic_unit: str = field(default_factory=str)
pickup_zone: str = field(default_factory=str)
drop_off_zone: str = field(default_factory=str)
target_zone: str = field(default_factory=str)
cargo: list[CargoInfo] = field(default_factory=list)
preload: bool = field(default=False)
@dataclass
class MissionData:
awacs: list[AwacsInfo] = field(default_factory=list)
runways: list[RunwayData] = field(default_factory=list)
carriers: list[CarrierInfo] = field(default_factory=list)
flights: list[FlightData] = field(default_factory=list)
tankers: list[TankerInfo] = field(default_factory=list)
jtacs: list[JtacInfo] = field(default_factory=list)
logistics: list[LogisticsInfo] = field(default_factory=list)
cp_stack: dict[UUID, Distance] = field(default_factory=dict)