mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
Replace lists with sets
This commit is contained in:
parent
533057a0cc
commit
06d98db55b
@ -4,7 +4,7 @@ import itertools
|
|||||||
import logging
|
import logging
|
||||||
from dataclasses import dataclass, field
|
from dataclasses import dataclass, field
|
||||||
from functools import cached_property
|
from functools import cached_property
|
||||||
from typing import Optional, Dict, Type, List, Any, Iterator, TYPE_CHECKING
|
from typing import Optional, Dict, Type, List, Any, Iterator, TYPE_CHECKING, Set
|
||||||
|
|
||||||
import dcs
|
import dcs
|
||||||
from dcs.country import Country
|
from dcs.country import Country
|
||||||
@ -57,46 +57,46 @@ class Faction:
|
|||||||
description: str = field(default="")
|
description: str = field(default="")
|
||||||
|
|
||||||
# Available aircraft
|
# Available aircraft
|
||||||
aircraft: List[AircraftType] = field(default_factory=list)
|
aircraft: Set[AircraftType] = field(default_factory=set)
|
||||||
|
|
||||||
# Available awacs aircraft
|
# Available awacs aircraft
|
||||||
awacs: List[AircraftType] = field(default_factory=list)
|
awacs: Set[AircraftType] = field(default_factory=set)
|
||||||
|
|
||||||
# Available tanker aircraft
|
# Available tanker aircraft
|
||||||
tankers: List[AircraftType] = field(default_factory=list)
|
tankers: Set[AircraftType] = field(default_factory=set)
|
||||||
|
|
||||||
# Available frontline units
|
# Available frontline units
|
||||||
frontline_units: List[GroundUnitType] = field(default_factory=list)
|
frontline_units: Set[GroundUnitType] = field(default_factory=set)
|
||||||
|
|
||||||
# Available artillery units
|
# Available artillery units
|
||||||
artillery_units: List[GroundUnitType] = field(default_factory=list)
|
artillery_units: Set[GroundUnitType] = field(default_factory=set)
|
||||||
|
|
||||||
# Infantry units used
|
# Infantry units used
|
||||||
infantry_units: List[GroundUnitType] = field(default_factory=list)
|
infantry_units: Set[GroundUnitType] = field(default_factory=set)
|
||||||
|
|
||||||
# Logistics units used
|
# Logistics units used
|
||||||
logistics_units: List[GroundUnitType] = field(default_factory=list)
|
logistics_units: Set[GroundUnitType] = field(default_factory=set)
|
||||||
|
|
||||||
# Possible Air Defence units, Like EWRs
|
# Possible Air Defence units, Like EWRs
|
||||||
air_defense_units: List[GroundUnitType] = field(default_factory=list)
|
air_defense_units: Set[GroundUnitType] = field(default_factory=set)
|
||||||
|
|
||||||
# A list of all supported sets of units
|
# A list of all supported sets of units
|
||||||
preset_groups: list[ForceGroup] = field(default_factory=list)
|
preset_groups: list[ForceGroup] = field(default_factory=list)
|
||||||
|
|
||||||
# Possible Missile site generators for this faction
|
# Possible Missile site generators for this faction
|
||||||
missiles: List[GroundUnitType] = field(default_factory=list)
|
missiles: Set[GroundUnitType] = field(default_factory=set)
|
||||||
|
|
||||||
# Required mods or asset packs
|
# Required mods or asset packs
|
||||||
requirements: Dict[str, str] = field(default_factory=dict)
|
requirements: Dict[str, str] = field(default_factory=dict)
|
||||||
|
|
||||||
# Possible carrier names
|
# Possible carrier names
|
||||||
carrier_names: List[str] = field(default_factory=list)
|
carrier_names: Set[str] = field(default_factory=set)
|
||||||
|
|
||||||
# Possible helicopter carrier names
|
# Possible helicopter carrier names
|
||||||
helicopter_carrier_names: List[str] = field(default_factory=list)
|
helicopter_carrier_names: Set[str] = field(default_factory=set)
|
||||||
|
|
||||||
# Available Naval Units
|
# Available Naval Units
|
||||||
naval_units: List[ShipUnitType] = field(default_factory=list)
|
naval_units: Set[ShipUnitType] = field(default_factory=set)
|
||||||
|
|
||||||
# Whether this faction has JTAC access
|
# Whether this faction has JTAC access
|
||||||
has_jtac: bool = field(default=False)
|
has_jtac: bool = field(default=False)
|
||||||
@ -108,7 +108,7 @@ class Faction:
|
|||||||
doctrine: Doctrine = field(default=MODERN_DOCTRINE)
|
doctrine: Doctrine = field(default=MODERN_DOCTRINE)
|
||||||
|
|
||||||
# List of available building layouts for this faction
|
# List of available building layouts for this faction
|
||||||
building_set: List[str] = field(default_factory=list)
|
building_set: Set[str] = field(default_factory=set)
|
||||||
|
|
||||||
# List of default livery overrides
|
# List of default livery overrides
|
||||||
liveries_overrides: Dict[AircraftType, List[str]] = field(default_factory=dict)
|
liveries_overrides: Dict[AircraftType, List[str]] = field(default_factory=dict)
|
||||||
@ -175,9 +175,9 @@ class Faction:
|
|||||||
)
|
)
|
||||||
return sorted(air_defenses)
|
return sorted(air_defenses)
|
||||||
|
|
||||||
@cached_property
|
@property
|
||||||
def aircrafts(self) -> list[UnitType[Any]]:
|
def aircrafts(self) -> list[UnitType[Any]]:
|
||||||
return list(self.aircraft + self.awacs + self.tankers)
|
return list(self.aircraft.union(self.awacs.union(self.tankers)))
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def from_dict(cls: Type[Faction], json: Dict[str, Any]) -> Faction:
|
def from_dict(cls: Type[Faction], json: Dict[str, Any]) -> Faction:
|
||||||
@ -198,30 +198,30 @@ class Faction:
|
|||||||
faction.authors = json.get("authors", "")
|
faction.authors = json.get("authors", "")
|
||||||
faction.description = json.get("description", "")
|
faction.description = json.get("description", "")
|
||||||
|
|
||||||
faction.aircraft = [AircraftType.named(n) for n in json.get("aircrafts", [])]
|
faction.aircraft = {AircraftType.named(n) for n in json.get("aircrafts", [])}
|
||||||
faction.awacs = [AircraftType.named(n) for n in json.get("awacs", [])]
|
faction.awacs = {AircraftType.named(n) for n in json.get("awacs", [])}
|
||||||
faction.tankers = [AircraftType.named(n) for n in json.get("tankers", [])]
|
faction.tankers = {AircraftType.named(n) for n in json.get("tankers", [])}
|
||||||
|
|
||||||
faction.frontline_units = [
|
faction.frontline_units = {
|
||||||
GroundUnitType.named(n) for n in json.get("frontline_units", [])
|
GroundUnitType.named(n) for n in json.get("frontline_units", [])
|
||||||
]
|
}
|
||||||
faction.artillery_units = [
|
faction.artillery_units = {
|
||||||
GroundUnitType.named(n) for n in json.get("artillery_units", [])
|
GroundUnitType.named(n) for n in json.get("artillery_units", [])
|
||||||
]
|
}
|
||||||
faction.infantry_units = [
|
faction.infantry_units = {
|
||||||
GroundUnitType.named(n) for n in json.get("infantry_units", [])
|
GroundUnitType.named(n) for n in json.get("infantry_units", [])
|
||||||
]
|
}
|
||||||
faction.logistics_units = [
|
faction.logistics_units = {
|
||||||
GroundUnitType.named(n) for n in json.get("logistics_units", [])
|
GroundUnitType.named(n) for n in json.get("logistics_units", [])
|
||||||
]
|
}
|
||||||
faction.air_defense_units = [
|
faction.air_defense_units = {
|
||||||
GroundUnitType.named(n) for n in json.get("air_defense_units", [])
|
GroundUnitType.named(n) for n in json.get("air_defense_units", [])
|
||||||
]
|
}
|
||||||
faction.missiles = [GroundUnitType.named(n) for n in json.get("missiles", [])]
|
faction.missiles = {GroundUnitType.named(n) for n in json.get("missiles", [])}
|
||||||
|
|
||||||
faction.naval_units = [
|
faction.naval_units = {
|
||||||
ShipUnitType.named(n) for n in json.get("naval_units", [])
|
ShipUnitType.named(n) for n in json.get("naval_units", [])
|
||||||
]
|
}
|
||||||
|
|
||||||
faction.preset_groups = [
|
faction.preset_groups = [
|
||||||
ForceGroup.from_preset_group(g) for g in json.get("preset_groups", [])
|
ForceGroup.from_preset_group(g) for g in json.get("preset_groups", [])
|
||||||
@ -251,22 +251,22 @@ class Faction:
|
|||||||
faction.doctrine = MODERN_DOCTRINE
|
faction.doctrine = MODERN_DOCTRINE
|
||||||
|
|
||||||
# Load the building set
|
# Load the building set
|
||||||
faction.building_set = []
|
faction.building_set = set()
|
||||||
building_set = json.get("building_set", "default")
|
building_set = json.get("building_set", "default")
|
||||||
if building_set == "default":
|
if building_set == "default":
|
||||||
faction.building_set.extend(DEFAULT_AVAILABLE_BUILDINGS)
|
faction.building_set.update(DEFAULT_AVAILABLE_BUILDINGS)
|
||||||
elif building_set == "ww2free":
|
elif building_set == "ww2free":
|
||||||
faction.building_set.extend(WW2_FREE)
|
faction.building_set.update(WW2_FREE)
|
||||||
elif building_set == "ww2ally":
|
elif building_set == "ww2ally":
|
||||||
faction.building_set.extend(WW2_ALLIES_BUILDINGS)
|
faction.building_set.update(WW2_ALLIES_BUILDINGS)
|
||||||
elif building_set == "ww2germany":
|
elif building_set == "ww2germany":
|
||||||
faction.building_set.extend(WW2_GERMANY_BUILDINGS)
|
faction.building_set.update(WW2_GERMANY_BUILDINGS)
|
||||||
else:
|
else:
|
||||||
faction.building_set.extend(DEFAULT_AVAILABLE_BUILDINGS)
|
faction.building_set.update(DEFAULT_AVAILABLE_BUILDINGS)
|
||||||
|
|
||||||
# Add required buildings for the game logic (e.g. ammo, factory..)
|
# Add required buildings for the game logic (e.g. ammo, factory..)
|
||||||
faction.building_set.extend(REQUIRED_BUILDINGS)
|
faction.building_set.update(REQUIRED_BUILDINGS)
|
||||||
faction.building_set.extend(IADS_BUILDINGS)
|
faction.building_set.update(IADS_BUILDINGS)
|
||||||
|
|
||||||
# Load liveries override
|
# Load liveries override
|
||||||
faction.liveries_overrides = {}
|
faction.liveries_overrides = {}
|
||||||
|
|||||||
@ -241,7 +241,7 @@ class CarrierGroundObjectGenerator(GenericCarrierGroundObjectGenerator):
|
|||||||
self.control_point.heading,
|
self.control_point.heading,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
self.update_carrier_name(random.choice(carrier_names))
|
self.update_carrier_name(random.choice(list(carrier_names)))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
@ -272,7 +272,7 @@ class LhaGroundObjectGenerator(GenericCarrierGroundObjectGenerator):
|
|||||||
self.control_point.heading,
|
self.control_point.heading,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
self.update_carrier_name(random.choice(lha_names))
|
self.update_carrier_name(random.choice(list(lha_names)))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -689,12 +689,12 @@ class AirWingConfigurationTab(QWidget):
|
|||||||
bases = list(self.game.theater.control_points_for(self.coalition.player))
|
bases = list(self.game.theater.control_points_for(self.coalition.player))
|
||||||
|
|
||||||
# List of all Aircrafts possible to operate with the given bases
|
# List of all Aircrafts possible to operate with the given bases
|
||||||
possible_aircrafts = [
|
possible_aircrafts = {
|
||||||
aircraft
|
aircraft
|
||||||
for aircraft in self.coalition.faction.aircrafts
|
for aircraft in self.coalition.faction.aircrafts
|
||||||
if isinstance(aircraft, AircraftType)
|
if isinstance(aircraft, AircraftType)
|
||||||
and any(base.can_operate(aircraft) for base in bases)
|
and any(base.can_operate(aircraft) for base in bases)
|
||||||
]
|
}
|
||||||
|
|
||||||
popup = SquadronConfigPopup(
|
popup = SquadronConfigPopup(
|
||||||
selected_aircraft,
|
selected_aircraft,
|
||||||
@ -809,7 +809,7 @@ class AirWingConfigurationDialog(QDialog):
|
|||||||
|
|
||||||
class SquadronAircraftTypeSelector(QComboBox):
|
class SquadronAircraftTypeSelector(QComboBox):
|
||||||
def __init__(
|
def __init__(
|
||||||
self, types: list[AircraftType], selected_aircraft: Optional[str]
|
self, types: set[AircraftType], selected_aircraft: Optional[str]
|
||||||
) -> None:
|
) -> None:
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.setSizeAdjustPolicy(self.AdjustToContents)
|
self.setSizeAdjustPolicy(self.AdjustToContents)
|
||||||
@ -854,7 +854,7 @@ class SquadronConfigPopup(QDialog):
|
|||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
selected_aircraft: Optional[str],
|
selected_aircraft: Optional[str],
|
||||||
types: list[AircraftType],
|
types: set[AircraftType],
|
||||||
bases: list[ControlPoint],
|
bases: list[ControlPoint],
|
||||||
squadron_defs: dict[AircraftType, list[SquadronDef]],
|
squadron_defs: dict[AircraftType, list[SquadronDef]],
|
||||||
) -> None:
|
) -> None:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user