dcs-retribution/resources/tools/generate_frontlines.py
2021-02-12 20:10:45 -08:00

79 lines
2.4 KiB
Python

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")