diff --git a/resources/mizdata/caucasus/caucusus_frontline.miz b/resources/mizdata/caucasus/caucusus_frontline.miz new file mode 100644 index 00000000..06fa3d50 Binary files /dev/null and b/resources/mizdata/caucasus/caucusus_frontline.miz differ diff --git a/resources/tools/generate_frontlines.py b/resources/tools/generate_frontlines.py new file mode 100644 index 00000000..c1346bc9 --- /dev/null +++ b/resources/tools/generate_frontlines.py @@ -0,0 +1,74 @@ +from __future__ import annotations + +import json +import argparse +from pathlib import Path +from typing import List, Tuple, Union, Dict + +from dcs.terrain import Caucasus, PersianGulf, Syria, Nevada, Normandy, TheChannel +from dcs import Mission + +Terrain = Union[Caucasus, PersianGulf, Syria, Nevada, Normandy, TheChannel] + +SAVE_PATH = Path("resources/frontlines") + +def validate_miz(file_path: Path) -> bool: + return bool(file_path.suffix == ".miz" and file_path.exists()) + +def validate_airports(airports: Tuple[int], terrain: Terrain): + for airport in airports: + if terrain.airport_by_id(airport) is None: + print(f"Cannot load airport for invalid id {airport}") + +def load_files(files) -> List[Mission]: + missions = [] + for file in files: + if validate_miz(file): + mission = Mission() + mission.load_file(file) + missions.append(mission) + else: + print(f"Error: {file} doesn't look like a valid mission file.") + return missions + +def create_frontline_dict(mission: Mission) -> Dict[str, Dict]: + frontline_dict = {} + for group in mission.country("USA").vehicle_group: + groupname = str(group.name).replace(group.name.id, "").replace(":","") + control_points = groupname.split("|") + frontline_dict[groupname] = { + "points": [(i.position.x, i.position.y) for i in group.points], + "start_cp": int(control_points[0]) + } + return frontline_dict + +def process_missions(missions: List[Mission]) -> None: + for mission in missions: + frontline_dict = create_frontline_dict(mission) + write_json(frontline_dict, mission.terrain.name.lower()) + +def write_json(frontline_dict: Dict[str, Dict], terrain_name: str) -> None: + with open(SAVE_PATH.joinpath(terrain_name + ".json"), "w") as file: + json.dump(frontline_dict, file) + +if __name__ == "__main__": + parser = argparse.ArgumentParser( + description="Process a miz file to create json descriptions of multi-segment frontlines" + ) + parser.add_argument( + "files", + metavar="N", + type=Path, + nargs="+", + help="A list of space separated .miz files to extract frontlines from", + ) + + args = parser.parse_args() + missions = load_files(args.files) + process_missions(missions) + # frontline_dict = create_frontline_dict(missions[0]) + + print("Done") + + +