mirror of
https://github.com/dcs-liberation/dcs_liberation.git
synced 2025-11-10 14:22:26 +00:00
This PR: - Introduces a new member of UnitType, hit_points, which is an abstract representation of the durability of a unit, and loads it in from the YAML files in the various subclasses (Ship, Ground etc). - Adds scripts for populating/updating the unit YAML files with hit point data from DCS. This script also gets the data for static objects, but I'll leave the plugging in of static object data into Liberation for another PR. - Updates the unit YAML files by running the above scripts. I did toy with the idea of adding this data to the unit definitions in pydcs via an export from DCS, but it would be a more involved change, since the current pydcs export script runs in the Hooks Lua environment in DCS and AFAICT the hit points (via Unit.getLife()) is run in the mission scripting environment.
57 lines
1.7 KiB
Python
57 lines
1.7 KiB
Python
import csv
|
|
import os
|
|
import yaml
|
|
|
|
|
|
def update_yaml(file: str, hit_points: int) -> None:
|
|
with open(file, "r") as f:
|
|
data = f.readlines()
|
|
|
|
# strip trailing whitespace
|
|
while not len(data[-1]) and len(data) > 0:
|
|
data = data[0:-1]
|
|
|
|
# append trailing newline
|
|
if data[-1][-1] != "\n":
|
|
data[-1] += "\n"
|
|
|
|
# update, ignore existing hit_points settings
|
|
found = False
|
|
key = "hit_points"
|
|
for line in data:
|
|
if line[0 : len(key) + 1] == f"{key}:":
|
|
line = f"{key}: {hit_points}\n"
|
|
found = True
|
|
if not found:
|
|
data.append(f"{key}: {hit_points}\n")
|
|
|
|
with open(file, "w") as f:
|
|
f.writelines(data)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
hit_points_file = os.path.join(os.path.dirname(__file__), "hit_points_data.csv")
|
|
|
|
resources_path = os.path.join(os.path.dirname(__file__), "..", "..", "resources")
|
|
resource_type_paths = {
|
|
"ship": "units\\ships",
|
|
"helicopter": "units\\aircraft",
|
|
"plane": "units\\aircraft",
|
|
"vehicle": "units\\ground_units",
|
|
}
|
|
|
|
with open(hit_points_file, "r") as file:
|
|
reader = csv.DictReader(file, fieldnames=["type", "name", "hit_points"])
|
|
for line in reader:
|
|
if line["type"] not in resource_type_paths:
|
|
continue
|
|
yaml_file = os.path.join(
|
|
resources_path,
|
|
resource_type_paths[line["type"]],
|
|
f"{line['name']}.yaml",
|
|
)
|
|
if not os.path.exists(yaml_file):
|
|
print(f"Skipping {line['name']} as YAML file could not be found")
|
|
continue
|
|
update_yaml(yaml_file, int(float(line["hit_points"])))
|