mirror of
https://github.com/dcs-liberation/dcs_liberation.git
synced 2025-11-10 14:22:26 +00:00
Add hit points to unit yamls.
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.
This commit is contained in:
56
unshipped_data/hit_points/update.py
Normal file
56
unshipped_data/hit_points/update.py
Normal file
@@ -0,0 +1,56 @@
|
||||
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"])))
|
||||
Reference in New Issue
Block a user