mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
Add support for AAA objectives.
Fixes https://github.com/dcs-liberation/dcs_liberation/issues/999
This commit is contained in:
@@ -115,6 +115,12 @@ class MizCampaignLoader:
|
||||
AirDefence.SAM_SA_9_Strela_1_Gaskin_TEL.id,
|
||||
}
|
||||
|
||||
REQUIRED_AAA_UNIT_TYPES = {
|
||||
AirDefence.AAA_8_8cm_Flak_18.id,
|
||||
AirDefence.SPAAA_Vulcan_M163.id,
|
||||
AirDefence.SPAAA_ZSU_23_4_Shilka_Gun_Dish.id,
|
||||
}
|
||||
|
||||
REQUIRED_EWR_UNIT_TYPE = AirDefence.EWR_1L13.id
|
||||
|
||||
ARMOR_GROUP_UNIT_TYPE = Armor.MBT_M1A2_Abrams.id
|
||||
@@ -283,6 +289,12 @@ class MizCampaignLoader:
|
||||
if group.units[0].type in self.REQUIRED_SHORT_RANGE_SAM_UNIT_TYPES:
|
||||
yield group
|
||||
|
||||
@property
|
||||
def required_aaa(self) -> Iterator[VehicleGroup]:
|
||||
for group in itertools.chain(self.blue.vehicle_group, self.red.vehicle_group):
|
||||
if group.units[0].type in self.REQUIRED_AAA_UNIT_TYPES:
|
||||
yield group
|
||||
|
||||
@property
|
||||
def required_ewrs(self) -> Iterator[VehicleGroup]:
|
||||
for group in self.red.vehicle_group:
|
||||
@@ -516,6 +528,12 @@ class MizCampaignLoader:
|
||||
PointWithHeading.from_point(group.position, group.units[0].heading)
|
||||
)
|
||||
|
||||
for group in self.required_aaa:
|
||||
closest, distance = self.objective_info(group)
|
||||
closest.preset_locations.required_aaa.append(
|
||||
PointWithHeading.from_point(group.position, group.units[0].heading)
|
||||
)
|
||||
|
||||
for group in self.required_ewrs:
|
||||
closest, distance = self.objective_info(group)
|
||||
closest.preset_locations.required_ewrs.append(
|
||||
|
||||
@@ -135,6 +135,9 @@ class PresetLocations:
|
||||
#: Locations of short range SAMs which should always be spawned.
|
||||
required_short_range_sams: List[PointWithHeading] = field(default_factory=list)
|
||||
|
||||
#: Locations of AAA groups which should always be spawned.
|
||||
required_aaa: List[PointWithHeading] = field(default_factory=list)
|
||||
|
||||
#: Locations of EWRs which should always be spawned.
|
||||
required_ewrs: List[PointWithHeading] = field(default_factory=list)
|
||||
|
||||
|
||||
@@ -407,7 +407,10 @@ class BaseDefenseGenerator:
|
||||
)
|
||||
|
||||
groups = generate_anti_air_group(
|
||||
self.game, g, self.faction, ranges=[{AirDefenseRange.Short}]
|
||||
self.game,
|
||||
g,
|
||||
self.faction,
|
||||
ranges=[{AirDefenseRange.Short, AirDefenseRange.AAA}],
|
||||
)
|
||||
if not groups:
|
||||
logging.error(f"Could not generate SHORAD group at {self.control_point}")
|
||||
@@ -540,6 +543,7 @@ class AirbaseGroundObjectGenerator(ControlPointGroundObjectGenerator):
|
||||
{AirDefenseRange.Long},
|
||||
{AirDefenseRange.Medium},
|
||||
{AirDefenseRange.Short},
|
||||
{AirDefenseRange.AAA},
|
||||
],
|
||||
)
|
||||
for position in presets.required_medium_range_sams:
|
||||
@@ -548,17 +552,24 @@ class AirbaseGroundObjectGenerator(ControlPointGroundObjectGenerator):
|
||||
ranges=[
|
||||
{AirDefenseRange.Medium},
|
||||
{AirDefenseRange.Short},
|
||||
{AirDefenseRange.AAA},
|
||||
],
|
||||
)
|
||||
for position in presets.required_short_range_sams:
|
||||
self.generate_aa_at(
|
||||
position,
|
||||
ranges=[{AirDefenseRange.Short}],
|
||||
ranges=[{AirDefenseRange.Short}, {AirDefenseRange.AAA}],
|
||||
)
|
||||
for position in presets.required_aaa:
|
||||
self.generate_aa_at(
|
||||
position,
|
||||
ranges=[{AirDefenseRange.AAA}],
|
||||
)
|
||||
return (
|
||||
len(presets.required_long_range_sams)
|
||||
+ len(presets.required_medium_range_sams)
|
||||
+ len(presets.required_short_range_sams)
|
||||
+ len(presets.required_aaa)
|
||||
)
|
||||
|
||||
def generate_required_ewr(self) -> int:
|
||||
|
||||
@@ -66,4 +66,11 @@ VERSION = _build_version_string()
|
||||
#: * Coastal defenses
|
||||
#:
|
||||
#: See the unit lists in MizCampaignLoader in conflicttheater.py for unit types.
|
||||
CAMPAIGN_FORMAT_VERSION = (4, 1)
|
||||
#:
|
||||
#: Version 4.2
|
||||
#: * Adds support for AAA objectives. Place with any of the following units (either red
|
||||
#: or blue):
|
||||
#: * AAA_8_8cm_Flak_18,
|
||||
#: * SPAAA_Vulcan_M163,
|
||||
#: * SPAAA_ZSU_23_4_Shilka_Gun_Dish,
|
||||
CAMPAIGN_FORMAT_VERSION = (4, 2)
|
||||
|
||||
Reference in New Issue
Block a user