Add preset configuration for offshore types.

This commit is contained in:
Dan Albert 2020-11-19 21:28:57 -08:00
parent ff751c30f9
commit 5fb6a53cbd
2 changed files with 32 additions and 4 deletions

View File

@ -16,7 +16,11 @@ from dcs.countries import (
) )
from dcs.country import Country from dcs.country import Country
from dcs.mapping import Point from dcs.mapping import Point
from dcs.ships import CVN_74_John_C__Stennis, LHA_1_Tarawa from dcs.ships import (
CVN_74_John_C__Stennis,
LHA_1_Tarawa,
USS_Arleigh_Burke_IIa,
)
from dcs.statics import Fortification from dcs.statics import Fortification
from dcs.terrain import ( from dcs.terrain import (
caucasus, caucasus,
@ -98,6 +102,8 @@ class MizCampaignLoader:
SAM_UNIT_TYPE = AirDefence.SAM_SA_10_S_300PS_SR_64H6E.id SAM_UNIT_TYPE = AirDefence.SAM_SA_10_S_300PS_SR_64H6E.id
GARRISON_UNIT_TYPE = AirDefence.SAM_SA_19_Tunguska_2S6.id GARRISON_UNIT_TYPE = AirDefence.SAM_SA_19_Tunguska_2S6.id
STRIKE_TARGET_UNIT_TYPE = Fortification.Workshop_A.id STRIKE_TARGET_UNIT_TYPE = Fortification.Workshop_A.id
OFFSHORE_STRIKE_TARGET_UNIT_TYPE = Fortification.Oil_platform.id
SHIP_UNIT_TYPE = USS_Arleigh_Burke_IIa.id
BASE_DEFENSE_RADIUS = nm_to_meter(2) BASE_DEFENSE_RADIUS = nm_to_meter(2)
@ -165,6 +171,12 @@ class MizCampaignLoader:
if group.units[0].type == self.LHA_UNIT_TYPE: if group.units[0].type == self.LHA_UNIT_TYPE:
yield group yield group
@property
def ships(self) -> Iterator[ShipGroup]:
for group in self.blue.ship_group:
if group.units[0].type == self.SHIP_UNIT_TYPE:
yield group
@property @property
def ewrs(self) -> Iterator[VehicleGroup]: def ewrs(self) -> Iterator[VehicleGroup]:
for group in self.blue.vehicle_group: for group in self.blue.vehicle_group:
@ -189,6 +201,12 @@ class MizCampaignLoader:
if group.units[0].type == self.STRIKE_TARGET_UNIT_TYPE: if group.units[0].type == self.STRIKE_TARGET_UNIT_TYPE:
yield group yield group
@property
def offshore_strike_targets(self) -> Iterator[StaticGroup]:
for group in self.blue.static_group:
if group.units[0].type == self.OFFSHORE_STRIKE_TARGET_UNIT_TYPE:
yield group
@cached_property @cached_property
def control_points(self) -> Dict[int, ControlPoint]: def control_points(self) -> Dict[int, ControlPoint]:
control_points = {} control_points = {}
@ -279,6 +297,15 @@ class MizCampaignLoader:
closest, distance = self.objective_info(group) closest, distance = self.objective_info(group)
closest.preset_locations.strike_locations.append(group.position) closest.preset_locations.strike_locations.append(group.position)
for group in self.offshore_strike_targets:
closest, distance = self.objective_info(group)
closest.preset_locations.offshore_strike_locations.append(
group.position)
for group in self.ships:
closest, distance = self.objective_info(group)
closest.preset_locations.ships.append(group.position)
def populate_theater(self) -> None: def populate_theater(self) -> None:
for control_point in self.control_points.values(): for control_point in self.control_points.values():
self.theater.add_controlpoint(control_point) self.theater.add_controlpoint(control_point)

View File

@ -59,9 +59,10 @@ class PresetLocations:
ewrs: List[Point] = field(default_factory=list) ewrs: List[Point] = field(default_factory=list)
sams: List[Point] = field(default_factory=list) sams: List[Point] = field(default_factory=list)
offshore: List[Point] = field(default_factory=list) ships: List[Point] = field(default_factory=list)
coastal_defenses: List[Point] = field(default_factory=list) coastal_defenses: List[Point] = field(default_factory=list)
strike_locations: List[Point] = field(default_factory=list) strike_locations: List[Point] = field(default_factory=list)
offshore_strike_locations: List[Point] = field(default_factory=list)
fixed_sams: List[Point] = field(default_factory=list) fixed_sams: List[Point] = field(default_factory=list)
@ -85,9 +86,9 @@ class PresetLocations:
if location_type == LocationType.Shorad: if location_type == LocationType.Shorad:
return self._random_from(self.base_garrisons) return self._random_from(self.base_garrisons)
if location_type == LocationType.OffshoreStrikeTarget: if location_type == LocationType.OffshoreStrikeTarget:
return self._random_from(self.offshore) return self._random_from(self.offshore_strike_locations)
if location_type == LocationType.Ship: if location_type == LocationType.Ship:
return self._random_from(self.offshore) return self._random_from(self.ships)
if location_type == LocationType.StrikeTarget: if location_type == LocationType.StrikeTarget:
return self._random_from(self.strike_locations) return self._random_from(self.strike_locations)
logging.error(f"Unknown location type: {location_type}") logging.error(f"Unknown location type: {location_type}")