mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
Add logic for specification of ground_units in campaign yaml file
Resolves #22
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 .campaigngroundconfig import TgoConfig
|
||||
from .mizcampaignloader import MizCampaignLoader
|
||||
|
||||
PERF_FRIENDLY = 0
|
||||
@@ -137,6 +138,13 @@ class Campaign:
|
||||
return CampaignAirWingConfig({})
|
||||
return CampaignAirWingConfig.from_campaign_data(squadron_data, theater)
|
||||
|
||||
def load_ground_forces_config(self) -> TgoConfig:
|
||||
ground_forces = self.data.get("ground_forces", {})
|
||||
if not ground_forces:
|
||||
logging.warning(f"Campaign {self.name} does not define any squadrons")
|
||||
return TgoConfig({})
|
||||
return TgoConfig.from_campaign_data(ground_forces)
|
||||
|
||||
@property
|
||||
def is_out_of_date(self) -> bool:
|
||||
"""Returns True if this campaign is not up to date with the latest format.
|
||||
|
||||
25
game/campaignloader/campaigngroundconfig.py
Normal file
25
game/campaignloader/campaigngroundconfig.py
Normal file
@@ -0,0 +1,25 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from collections import defaultdict
|
||||
from dataclasses import dataclass
|
||||
from typing import Iterator, Optional
|
||||
|
||||
from game.armedforces.forcegroup import ForceGroup
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class TgoConfig:
|
||||
by_original_name: dict[str, ForceGroup]
|
||||
|
||||
def __iter__(self) -> Iterator[str]:
|
||||
return self.by_original_name.__iter__()
|
||||
|
||||
def __getitem__(self, name: str) -> Optional[ForceGroup]:
|
||||
return self.by_original_name.get(name)
|
||||
|
||||
@classmethod
|
||||
def from_campaign_data(cls, data: dict[str, str]) -> TgoConfig:
|
||||
by_original_name: dict[str, ForceGroup] = defaultdict()
|
||||
for tgo_name, force_group in data.items():
|
||||
by_original_name[tgo_name] = ForceGroup.from_preset_group(force_group)
|
||||
return TgoConfig(by_original_name)
|
||||
Reference in New Issue
Block a user