From 1fe5731b3606a7bec964df2d73fe02adce7b5e85 Mon Sep 17 00:00:00 2001 From: Rene Peinthor Date: Sat, 2 May 2020 22:15:54 +0200 Subject: [PATCH] static_groups: Test FARP loading and support SingleHeliPad --- dcs/coalition.py | 6 +++++- dcs/unit.py | 33 +++++++++++++++++++++++++++++---- dcs/unitgroup.py | 4 ++++ tests/loadtest.miz | Bin 12805 -> 13132 bytes tests/test_mission.py | 19 +++++++++++++++++++ 5 files changed, 57 insertions(+), 5 deletions(-) diff --git a/dcs/coalition.py b/dcs/coalition.py index 187c5163..76f52615 100644 --- a/dcs/coalition.py +++ b/dcs/coalition.py @@ -4,7 +4,7 @@ from . import planes from . import helicopters from . import ships -from dcs.unit import Vehicle, Plane, Helicopter, Static, Ship, FARP +from dcs.unit import Vehicle, Plane, Helicopter, Static, Ship, FARP, SingleHeliPad from dcs.point import MovingPoint, StaticPoint from dcs.country import Country @@ -173,6 +173,10 @@ def load_from_dict(self, mission, d): static = FARP( unit_id=imp_unit["unitId"], name=mission.translation.get_string(imp_unit["name"])) + elif imp_unit["type"] == "SINGLE_HELIPAD": + static = SingleHeliPad( + unit_id=imp_unit["unitId"], + name=mission.translation.get_string(imp_unit["name"])) else: static = Static( unit_id=imp_unit["unitId"], diff --git a/dcs/unit.py b/dcs/unit.py index 53f753c6..eaee5dc4 100644 --- a/dcs/unit.py +++ b/dcs/unit.py @@ -268,7 +268,7 @@ def dict(self): class Static(Unit): - def __init__(self, unit_id=None, name=None, _type: Union[str,Type[UnitType]] = None): + def __init__(self, unit_id=None, name=None, _type: Union[str, Type[UnitType]] = None): if not isinstance(_type, str): _id = _type.id _class = _type @@ -326,14 +326,14 @@ def __init__(self, unit_id=None, name=None, frequency=127.5, modulation=0, calls super(FARP, self).__init__(unit_id, name, "FARP") self.category = "Heliports" self.shape_name = "FARPS" - self.heliport_frequency = frequency + self.heliport_frequency: float = frequency self.heliport_modulation = modulation - self.heliport_callsign_id = callsign_id + self.heliport_callsign_id: int = callsign_id self.can_cargo = False def load_from_dict(self, d): super(FARP, self).load_from_dict(d) - self.heliport_frequency = d.get("heliport_frequency") + self.heliport_frequency = float(d.get("heliport_frequency", 127.5)) self.heliport_modulation = d.get("heliport_modulation") self.heliport_callsign_id = d.get("heliport_callsign_id", 0) @@ -344,3 +344,28 @@ def dict(self): d["heliport_callsign_id"] = self.heliport_callsign_id return d + + +class SingleHeliPad(Static): + def __init__(self, unit_id=None, name=None, frequency=127.5, modulation=0, callsign_id=1): + super(SingleHeliPad, self).__init__(unit_id, name, "SINGLE_HELIPAD") + self.category = "Heliports" + self.shape_name = "FARP" + self.heliport_frequency: float = frequency + self.heliport_modulation = modulation + self.heliport_callsign_id: int = callsign_id + self.can_cargo = False + + def load_from_dict(self, d): + super(SingleHeliPad, self).load_from_dict(d) + self.heliport_frequency = float(d.get("heliport_frequency", 127.5)) + self.heliport_modulation = d.get("heliport_modulation") + self.heliport_callsign_id = d.get("heliport_callsign_id", 0) + + def dict(self): + d = super(SingleHeliPad, self).dict() + d["heliport_frequency"] = self.heliport_frequency + d["heliport_modulation"] = self.heliport_modulation + d["heliport_callsign_id"] = self.heliport_callsign_id + + return d diff --git a/dcs/unitgroup.py b/dcs/unitgroup.py index 6e9e5d23..9e9f060f 100644 --- a/dcs/unitgroup.py +++ b/dcs/unitgroup.py @@ -519,14 +519,18 @@ def __init__(self, _id, name=None): super(StaticGroup, self).__init__(_id, name) self.dead = False self.heading = 0 + self.link_offset: Optional[bool] = False def load_from_dict(self, d): super(StaticGroup, self).load_from_dict(d) self.heading = math.degrees(d["heading"]) self.dead = d["dead"] + self.link_offset = d.get("linkOffset") def dict(self): d = super(StaticGroup, self).dict() d["dead"] = self.dead d["heading"] = round(math.radians(self.heading), 13) + if self.link_offset is not None: + d["linkOffset"] = self.link_offset return d diff --git a/tests/loadtest.miz b/tests/loadtest.miz index 40bf1ba2e0417fab5edc2054aab2d8a33a34b3f4..75014c269e4b09c948c3b5858644c249a1fea63c 100644 GIT binary patch delta 10444 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 N3l{+>j{QHK{|i&~AbJ1* diff --git a/tests/test_mission.py b/tests/test_mission.py index b808aced..bb52c692 100644 --- a/tests/test_mission.py +++ b/tests/test_mission.py @@ -170,4 +170,23 @@ def test_loadmission(self): m = dcs.mission.Mission() self.assertTrue(m.load_file('tests/loadtest.miz')) + usa = m.country(dcs.countries.USA.name) + + # find single heli pad + single_farp_group = usa.find_static_group("HeliSingle") + single_farp: dcs.unit.SingleHeliPad = single_farp_group.units[0] + self.assertIsNotNone(single_farp) + self.assertEqual(single_farp_group.heading, 0) + self.assertEqual(single_farp.heading, 0) + self.assertEqual(single_farp.heliport_callsign_id, 1) + self.assertEqual(single_farp.heliport_frequency, 127.5) + + # check blue farp + blue_farp_group = usa.find_static_group("FARP") + blue_farp: dcs.unit.FARP = blue_farp_group.units[0] + self.assertIsNotNone(blue_farp) + self.assertEqual(int(blue_farp.heading), 62) + self.assertEqual(blue_farp.heliport_callsign_id, 2) + self.assertEqual(blue_farp.heliport_frequency, 128.5) + m.save('missions/loadtest.miz')