from pathlib import Path from typing import List from dcs import Mission, ships from dcs.vehicles import MissilesSS from gen.locations.preset_control_point_locations import PresetControlPointLocations from gen.locations.preset_locations import PresetLocation class MizDataLocationFinder: @staticmethod def compute_possible_locations( terrain_name: str, cp_name: str ) -> PresetControlPointLocations: """ Extract the list of preset locations from miz data :param terrain_name: Terrain/Map name :param cp_name: Control Point / Airbase name :return: """ miz_file = Path("./resources/mizdata/", terrain_name.lower(), cp_name + ".miz") offshore_locations: List[PresetLocation] = [] ashore_locations: List[PresetLocation] = [] powerplants_locations: List[PresetLocation] = [] antiship_locations: List[PresetLocation] = [] if miz_file.exists(): m = Mission() m.load_file(miz_file.absolute()) for vehicle_group in m.country("USA").vehicle_group: if len(vehicle_group.units) > 0: ashore_locations.append( PresetLocation( vehicle_group.position, vehicle_group.units[0].heading, vehicle_group.name, ) ) for ship_group in m.country("USA").ship_group: if ( len(ship_group.units) > 0 and ship_group.units[0].type == ships.Oliver_Hazzard_Perry_class.id ): offshore_locations.append( PresetLocation( ship_group.position, ship_group.units[0].heading, ship_group.name, ) ) for static_group in m.country("USA").static_group: if len(static_group.units) > 0: powerplants_locations.append( PresetLocation( static_group.position, static_group.units[0].heading, static_group.name, ) ) if m.country("Iran") is not None: for vehicle_group in m.country("Iran").vehicle_group: if ( len(vehicle_group.units) > 0 and vehicle_group.units[0].type == MissilesSS.SS_N_2_Silkworm.id ): antiship_locations.append( PresetLocation( vehicle_group.position, vehicle_group.units[0].heading, vehicle_group.name, ) ) return PresetControlPointLocations( ashore_locations, offshore_locations, antiship_locations, powerplants_locations, )