Skip to content

Commit

Permalink
Save coalition countries even if there are no units.
Browse files Browse the repository at this point in the history
  • Loading branch information
332fg-raven committed Jan 26, 2024
1 parent 71cb355 commit a9fde5c
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 3 deletions.
9 changes: 8 additions & 1 deletion dcs/coalition.py
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ def get_name(mission: "Mission", name: str) -> str:
else:
return name

def load_from_dict(self, mission, d) -> List[StatusMessage]:
def load_from_dict(self, mission, d, countries_in_coalition: Dict[int, int]) -> List[StatusMessage]:
status: List[StatusMessage] = []
for country_idx in d["country"]:
imp_country = d["country"][country_idx]
Expand Down Expand Up @@ -257,6 +257,13 @@ def load_from_dict(self, mission, d) -> List[StatusMessage]:
static_group.add_unit(static)
_country.add_static_group(static_group)
self.add_country(_country)

# iterate over all .miz countries in coalition, even without any units
# on the map, and add them to the respective coalition
for country_id in countries_in_coalition.values():
if self.country_by_id(country_id) is None:
self.add_country(countries.get_by_id(country_id))

return status

def set_bullseye(self, bulls):
Expand Down
5 changes: 3 additions & 2 deletions dcs/mission.py
Original file line number Diff line number Diff line change
Expand Up @@ -356,7 +356,8 @@ def loaddict(fname: str, mizfile: zipfile.ZipFile, reserved_files: List[str]) ->
for col_name in ["blue", "red", "neutrals"]:
if col_name in imp_mission["coalition"]:
self.coalition[col_name] = Coalition(col_name, imp_mission["coalition"][col_name]["bullseye"])
status += self.coalition[col_name].load_from_dict(self, imp_mission["coalition"][col_name])
status += self.coalition[col_name].load_from_dict(self, imp_mission["coalition"][col_name],
imp_mission["coalitions"][col_name])

# triggers
self.bypassed_triggers = None
Expand Down Expand Up @@ -2087,7 +2088,7 @@ def dict(self):
col_blue = list(col_blue)
col_red = list(col_red)
m["coalitions"] = {
"neutral": {x + 1: col_neutral[x] for x in range(0, len(col_neutral))},
"neutrals": {x + 1: col_neutral[x] for x in range(0, len(col_neutral))},
"blue": {x + 1: col_blue[x] for x in range(0, len(col_blue))},
"red": {x + 1: col_red[x] for x in range(0, len(col_red))}
}
Expand Down
Binary file not shown.
27 changes: 27 additions & 0 deletions tests/test_mission.py
Original file line number Diff line number Diff line change
Expand Up @@ -1245,6 +1245,33 @@ def test_action_a_out_picture_u(self) -> None:

self.assertEqual(m_action, m2.triggerrules.triggers[0].actions[5])

def test_empty_mission_with_coalitions(self) -> None:
m = dcs.mission.Mission()
m_filename = "tests/missions/countries-without-units-on-the-map.miz"
m.load_file(m_filename)

m_blue_countries = m.coalition['blue'].countries
for country in ["Australia", "UK", "USA", "USSR"]:
self.assertIn(country, m_blue_countries)
self.assertEqual(len(m.coalition['blue'].countries["UK"].plane_group), 1)

m_red_countries = m.coalition['red'].countries
for country in ["Third Reich", "Bulgaria", "Romania", "Finland"]:
self.assertIn(country, m_red_countries)

m2_miz_filename = "missions/saved.countries-without-units-on-the-map.miz"
m.save(m2_miz_filename)

m2 = dcs.mission.Mission()
m2.load_file(m2_miz_filename)
m2_blue_countries = m2.coalition['blue'].countries
m2_red_countries = m2.coalition['red'].countries
self.assertTrue(sorted(m_blue_countries.keys()), sorted(m2_blue_countries.keys()))
self.assertTrue(sorted(m_red_countries.keys()), sorted(m2_red_countries.keys()))
self.assertEqual(len(m.coalition['blue'].countries["UK"].plane_group),
len(m2.coalition['blue'].countries["UK"].plane_group))


def test_smoke_action_carpet_bombing(self) -> None:

# this is fictional enum to simplify addressing as defined
Expand Down

0 comments on commit a9fde5c

Please sign in to comment.