From 03fc17fae6133e482f0144203015f8856f9d70f3 Mon Sep 17 00:00:00 2001 From: Vasyl Horbachenko Date: Wed, 12 Sep 2018 05:19:21 +0300 Subject: [PATCH] new ground objects format & parser; place dead objects instead of removing them completely --- game/event/event.py | 9 +- gen/groundobjectsgen.py | 28 ++--- resources/cau_groundobjects.p | Bin 18580 -> 18698 bytes resources/tools/cau_groundobjects.miz | Bin 26686 -> 26840 bytes resources/tools/generate_groundobjectsmap.py | 125 ++++++++++--------- theater/theatergroundobject.py | 36 ++++-- userdata/debriefing.py | 7 +- 7 files changed, 106 insertions(+), 99 deletions(-) diff --git a/game/event/event.py b/game/event/event.py index d0a20d9e..6a8885be 100644 --- a/game/event/event.py +++ b/game/event/event.py @@ -100,18 +100,13 @@ class Event: for object_identifier in debriefing.destroyed_objects: for cp in self.game.theater.controlpoints: - remove_ids = [] if not cp.ground_objects: continue for i, ground_object in enumerate(cp.ground_objects): if ground_object.matches_string_identifier(object_identifier): - logging.info("cp {} removing ground object {}".format(cp, ground_object.string_identifier)) - remove_ids.append(i) - - remove_ids.reverse() - for i in remove_ids: - del cp.ground_objects[i] + logging.info("cp {} killing ground object {}".format(cp, ground_object.string_identifier)) + ground_object.is_dead = True def skip(self): pass diff --git a/gen/groundobjectsgen.py b/gen/groundobjectsgen.py index 93f33c4f..2264b33a 100644 --- a/gen/groundobjectsgen.py +++ b/gen/groundobjectsgen.py @@ -10,17 +10,6 @@ from dcs.statics import * FARP_FRONTLINE_DISTANCE = 10000 -CATEGORY_MAPPING = { - "power": [Fortification.Workshop_A], - "warehouse": [Warehouse.Warehouse], - "fuel": [Warehouse.Tank], - "ammo": [Warehouse.Ammunition_depot], - "farp": [Fortification.FARP_Tent], - "comms": [Fortification.TV_tower], - "oil": [Fortification.Oil_platform], -} - - class GroundObjectsGenerator: FARP_CAPACITY = 4 @@ -53,7 +42,10 @@ class GroundObjectsGenerator: cp = self.conflict.from_cp for ground_object in cp.ground_objects: - if ground_object.category == "defense": + if ground_object.dcs_identifier == "AA": + if ground_object.is_dead: + continue + unit_type = random.choice(self.game.commision_unit_types(cp, AirDefence)) assert unit_type is not None, "Cannot find unit type for GroundObject defense ({})!".format(cp) @@ -62,17 +54,23 @@ class GroundObjectsGenerator: name=ground_object.string_identifier, _type=unit_type, position=ground_object.position, - heading=ground_object.heading + heading=ground_object.heading, ) logging.info("generated defense object identifier {} with mission id {}".format(group.name, group.id)) else: + if ground_object.dcs_identifier in warehouse_map: + static_type = warehouse_map[ground_object.dcs_identifier] + else: + static_type = fortification_map[ground_object.dcs_identifier] + group = self.m.static_group( country=side, name=ground_object.string_identifier, - _type=random.choice(CATEGORY_MAPPING[ground_object.category]), + _type=static_type, position=ground_object.position, - heading=ground_object.heading + heading=ground_object.heading, + dead=ground_object.is_dead, ) logging.info("generated object identifier {} with mission id {}".format(group.name, group.id)) diff --git a/resources/cau_groundobjects.p b/resources/cau_groundobjects.p index d13e22c5e212aba99870c7d9a898a024ec765819..88a38e8f409974946873892a966533b57c4bdc0e 100644 GIT binary patch literal 18698 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%0DO$aTfsm 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 literal 26686 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 diff --git a/resources/tools/generate_groundobjectsmap.py b/resources/tools/generate_groundobjectsmap.py index 6dc50b8e..45130ca4 100644 --- a/resources/tools/generate_groundobjectsmap.py +++ b/resources/tools/generate_groundobjectsmap.py @@ -1,86 +1,87 @@ import pickle import typing -from game import db -from gen.groundobjectsgen import TheaterGroundObject from dcs.mission import Mission from dcs.mapping import Point +from dcs.unitgroup import VehicleGroup, StaticGroup +from dcs.unit import * +from dcs.statics import warehouse_map, fortification_map + +from game import db +from gen.groundobjectsgen import TheaterGroundObject m = Mission() m.load_file("./cau_groundobjects.miz") -result = {} -result_by_groups = {} # type: typing.Dict[int, TheaterGroundObject] -cp_counters = {} -ids_counters = {} -group_id_counter = 0 -previous_group_id = None + +def parse_name(name: str) -> int: + first_part = name.split()[0].split("|") + return int(first_part[0]) if len(first_part) == 1 else int(first_part[1]) -def append_group(cp_id, category, group_id, object_id, position, heading): - global result - global result_by_groups +if __name__ == "__main__": + theater_objects = [] - ground_object = TheaterGroundObject(category, cp_id, group_id, object_id, position, heading) + for group in m.country("Russia").static_group + m.country("Russia").vehicle_group: + for unit in group.units: + theater_object = TheaterGroundObject() + theater_object.object_id = len(theater_objects) + 1 - if cp_id not in result: - result[cp_id] = [] - result[cp_id].append(ground_object) + try: + theater_object.cp_id = parse_name(str(unit.name)) + except Exception as e: + theater_object.cp_id = parse_name(str(group.name)) - result_by_groups_key = "{}_{}_{}".format(cp_id, category, group_id) - if result_by_groups_key not in result_by_groups: - result_by_groups[result_by_groups_key] = [] - result_by_groups[result_by_groups_key].append(ground_object) + theater_object.position = unit.position + theater_object.heading = unit.heading + if isinstance(unit, Vehicle): + theater_object.dcs_identifier = "AA" + else: + theater_object.dcs_identifier = unit.type -def parse_name(name: str) -> typing.Tuple: - args = str(name.split()[0]).split("|") + airport_distance = m.terrain.airport_by_id(theater_object.cp_id).position.distance_to_point(theater_object.position) + if airport_distance > 150000: + print("Object {} {} is placed {}m from airport {}!".format(theater_object.dcs_identifier, + group.name, + airport_distance, + m.terrain.airport_by_id(theater_object.cp_id))) - if len(args) == 2: - global group_id_counter - group_id_counter += 1 - args.append(str(group_id_counter)) - else: - global previous_group_id - if previous_group_id != args[2]: - group_id_counter += 1 - previous_group_id = args[2] + assert theater_object.dcs_identifier + assert theater_object.cp_id + assert theater_object.object_id - return args[0], int(args[1]), int(args[2]) + theater_objects.append(theater_object) + group_ids = 1 + for object_a in theater_objects: + for object_b in theater_objects: + if object_a.position.distance_to_point(object_b.position) < 2000: + if object_a.group_id and object_b.group_id: + continue + elif object_a.group_id: + object_b.group_id = object_a.group_id + elif object_b.group_id: + object_a.group_id = object_b.group_id + else: + object_a.group_id = group_ids + object_b.group_id = group_ids + group_ids += 1 -for group in m.country("Russia").static_group + m.country("Russia").vehicle_group: - try: - category, cp_id, group_id = parse_name(str(group.name)) - except: - print("Failed to parse {}".format(group.name)) - continue + assert object_a.cp_id == object_b.cp_id, "Object {} and {} are placed in group with different airports!".format(object_a.string_identifier, object_b.string_identifier) - ids_counters_key = "{}_{}".format(cp_id, group_id) - ids_counters[ids_counters_key] = ids_counters.get(ids_counters_key, 0) + 1 - object_id = ids_counters[ids_counters_key] - cp_counters[cp_id] = cp_counters.get(cp_id, 0) + 1 + for a in theater_objects: + if not a.group_id: + a.group_id = group_ids + group_ids += 1 - append_group(cp_id, category, group_id, object_id, group.position, group.units[0].heading) + print("Total {} objects".format(len(theater_objects))) + with open("../cau_groundobjects.p", "wb") as f: + result = {} + for theater_object in theater_objects: + if theater_object.cp_id not in result: + result[theater_object.cp_id] = [] + result[theater_object.cp_id].append(theater_object) -GROUP_TRESHOLD = 2000 -did_check_pairs = [] -for group_id, objects_in_group in result_by_groups.items(): - for a in objects_in_group: - for b in objects_in_group: - if (a, b) in did_check_pairs: - continue - - did_check_pairs.append((a, b)) - distance = a.position.distance_to_point(b.position) - if distance > GROUP_TRESHOLD: - print("Objects {} and {} in group {} are too far apart ({})!".format(a.string_identifier, b.string_identifier, group_id, distance)) - -print("Total {} objects".format(sum([len(x) for x in result.values()]))) -for cp_id, count in cp_counters.items(): - print("{} - {} objects".format(cp_id, count)) - - -with open("../cau_groundobjects.p", "wb") as f: - pickle.dump(result, f) + pickle.dump(result, f) diff --git a/theater/theatergroundobject.py b/theater/theatergroundobject.py index 3e091fa2..96557887 100644 --- a/theater/theatergroundobject.py +++ b/theater/theatergroundobject.py @@ -6,7 +6,7 @@ NAME_BY_CATEGORY = { "power": "Power plant", "ammo": "Ammo depot", "fuel": "Fuel depot", - "defense": "AA Defense Site", + "aa": "AA Defense Site", "warehouse": "Warehouse", "farp": "FARP", "comms": "Comms. tower", @@ -17,7 +17,7 @@ ABBREV_NAME = { "power": "PLANT", "ammo": "AMMO", "fuel": "FUEL", - "defense": "AA", + "aa": "AA", "warehouse": "WARE", "farp": "FARP", "comms": "COMMST", @@ -25,21 +25,35 @@ ABBREV_NAME = { } +CATEGORY_MAP = { + "aa": ["AA"], + "power": ["Workshop A"], + "warehouse": ["Warehouse"], + "fuel": ["Tank"], + "ammo": [".Ammunition depot"], + "farp": ["FARP Tent"], + "comms": ["TV tower", "Comms tower"], + "oil": ["Oil platform"], +} + + class TheaterGroundObject: - object_id = 0 cp_id = 0 group_id = 0 + object_id = 0 + + dcs_identifier = None # type: str + is_dead = False + heading = 0 position = None # type: Point - category = None # type: str - def __init__(self, category, cp_id, group_id, object_id, position, heading): - self.category = category - self.cp_id = cp_id - self.group_id = group_id - self.object_id = object_id - self.position = position - self.heading = heading + @property + def category(self) -> str: + for k, v in CATEGORY_MAP.items(): + if self.dcs_identifier in v: + return k + assert False, "Identifier not found in mapping: {}".format(self.dcs_identifier) @property def string_identifier(self): diff --git a/userdata/debriefing.py b/userdata/debriefing.py index 68006696..c3f65d55 100644 --- a/userdata/debriefing.py +++ b/userdata/debriefing.py @@ -17,6 +17,7 @@ from dcs.unit import UnitType from game import db from .persistency import base_path +from theater.theatergroundobject import CATEGORY_MAP DEBRIEFING_LOG_EXTENSION = "log" @@ -123,10 +124,9 @@ class Debriefing: for event in events.values(): event_type = event.get("type", None) if event_type in ["crash", "dead"]: - object_initiator = event["initiator"] in ["SKLAD_CRUSH", "SKLADCDESTR", "TEC_A_CRUSH", "BAK_CRUSH"] - defense_initiator = event["initiator"].startswith("defense|") + initiator_components = event["initiator"].split("|") - if object_initiator or defense_initiator: + if initiator_components[0] in CATEGORY_MAP: parse_dead_object(event) else: parse_dead_unit(event) @@ -138,7 +138,6 @@ class Debriefing: result = {} for group in groups: for unit in group.units: - unit_type = None if isinstance(unit, Vehicle): unit_type = vehicle_map[unit.type] elif isinstance(unit, Ship):