mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
Configurable carriers
This commit is contained in:
@@ -19,6 +19,7 @@ from game.theater.iadsnetwork.iadsnetwork import IadsNetwork
|
||||
from game.theater.theaterloader import TheaterLoader
|
||||
from game.version import CAMPAIGN_FORMAT_VERSION
|
||||
from .campaignairwingconfig import CampaignAirWingConfig
|
||||
from .campaigncarrierconfig import CampaignCarrierConfig
|
||||
from .campaigngroundconfig import TgoConfig
|
||||
from .mizcampaignloader import MizCampaignLoader
|
||||
from ..factions import FACTIONS, Faction
|
||||
@@ -164,6 +165,13 @@ class Campaign:
|
||||
return CampaignAirWingConfig({})
|
||||
return CampaignAirWingConfig.from_campaign_data(squadron_data, theater)
|
||||
|
||||
def load_carrier_config(self) -> CampaignCarrierConfig:
|
||||
try:
|
||||
carrier_data = self.data["carriers"]
|
||||
except KeyError:
|
||||
return CampaignCarrierConfig({})
|
||||
return CampaignCarrierConfig.from_campaign_data(carrier_data)
|
||||
|
||||
def load_ground_forces_config(self) -> TgoConfig:
|
||||
ground_forces = self.data.get("ground_forces", {})
|
||||
if not ground_forces:
|
||||
|
||||
42
game/campaignloader/campaigncarrierconfig.py
Normal file
42
game/campaignloader/campaigncarrierconfig.py
Normal file
@@ -0,0 +1,42 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import logging
|
||||
from collections import defaultdict
|
||||
from dataclasses import dataclass
|
||||
from typing import Any, TYPE_CHECKING
|
||||
|
||||
from game.dcs.shipunittype import ShipUnitType
|
||||
|
||||
if TYPE_CHECKING:
|
||||
pass
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class CarrierConfig:
|
||||
preferred_name: str
|
||||
preferred_type: ShipUnitType
|
||||
|
||||
@classmethod
|
||||
def from_data(cls, data: dict[str, Any]) -> CarrierConfig:
|
||||
return CarrierConfig(
|
||||
str(data["preferred_name"]), ShipUnitType.named(data["preferred_type"])
|
||||
)
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class CampaignCarrierConfig:
|
||||
by_original_name: dict[str, CarrierConfig]
|
||||
|
||||
@classmethod
|
||||
def from_campaign_data(cls, data: dict[str, Any]) -> CampaignCarrierConfig:
|
||||
by_original_name: dict[str, CarrierConfig] = defaultdict()
|
||||
for original_name, carrier_config_data in data.items():
|
||||
try:
|
||||
carrier_config = CarrierConfig.from_data(carrier_config_data)
|
||||
by_original_name[original_name] = carrier_config
|
||||
except KeyError:
|
||||
logging.warning(
|
||||
f"Skipping invalid carrier config for '{original_name}'"
|
||||
)
|
||||
|
||||
return CampaignCarrierConfig(by_original_name)
|
||||
Reference in New Issue
Block a user