Add map markers for each building in the group.

Fixes https://github.com/dcs-liberation/dcs_liberation/issues/1126
This commit is contained in:
Dan Albert 2021-06-04 18:07:12 -07:00
parent a0833e8943
commit 136e776b03
2 changed files with 17 additions and 8 deletions

View File

@ -190,6 +190,10 @@ class TheaterGroundObject(MissionTarget):
def strike_targets(self) -> List[Union[MissionTarget, Unit]]: def strike_targets(self) -> List[Union[MissionTarget, Unit]]:
return self.units return self.units
@property
def mark_locations(self) -> Iterator[Point]:
yield self.position
def clear(self) -> None: def clear(self) -> None:
self.groups = [] self.groups = []
@ -258,6 +262,11 @@ class BuildingGroundObject(TheaterGroundObject):
def strike_targets(self) -> List[Union[MissionTarget, Unit]]: def strike_targets(self) -> List[Union[MissionTarget, Unit]]:
return list(self.iter_building_group()) return list(self.iter_building_group())
@property
def mark_locations(self) -> Iterator[Point]:
for building in self.iter_building_group():
yield building.position
@property @property
def is_control_point(self) -> bool: def is_control_point(self) -> bool:
return self.is_fob_structure return self.is_fob_structure

View File

@ -10,14 +10,12 @@ from dcs.condition import (
FlagIsFalse, FlagIsFalse,
FlagIsTrue, FlagIsTrue,
) )
from dcs.unitgroup import FlyingGroup
from dcs.mission import Mission from dcs.mission import Mission
from dcs.task import Option from dcs.task import Option
from dcs.translation import String from dcs.translation import String
from dcs.triggers import ( from dcs.triggers import (
Event, Event,
TriggerOnce, TriggerOnce,
TriggerZone,
TriggerCondition, TriggerCondition,
) )
from dcs.unit import Skill from dcs.unit import Skill
@ -25,7 +23,6 @@ from dcs.unit import Skill
from game.theater import Airfield from game.theater import Airfield
from game.theater.controlpoint import Fob from game.theater.controlpoint import Fob
if TYPE_CHECKING: if TYPE_CHECKING:
from game.game import Game from game.game import Game
@ -115,19 +112,22 @@ class TriggersGenerator:
mark_trigger.add_condition(TimeAfter(1)) mark_trigger.add_condition(TimeAfter(1))
v = 10 v = 10
for cp in self.game.theater.controlpoints: for cp in self.game.theater.controlpoints:
added = [] seen = set()
for ground_object in cp.ground_objects: for ground_object in cp.ground_objects:
if ground_object.obj_name not in added: if ground_object.obj_name in seen:
continue
seen.add(ground_object.obj_name)
for location in ground_object.mark_locations:
zone = self.mission.triggers.add_triggerzone( zone = self.mission.triggers.add_triggerzone(
ground_object.position, radius=10, hidden=True, name="MARK" location, radius=10, hidden=True, name="MARK"
) )
if cp.captured: if cp.captured:
name = ground_object.obj_name + " [ALLY]" name = ground_object.obj_name + " [ALLY]"
else: else:
name = ground_object.obj_name + " [ENEMY]" name = ground_object.obj_name + " [ENEMY]"
mark_trigger.add_action(MarkToAll(v, zone.id, String(name))) mark_trigger.add_action(MarkToAll(v, zone.id, String(name)))
v = v + 1 v += 1
added.append(ground_object.obj_name)
self.mission.triggerrules.triggers.append(mark_trigger) self.mission.triggerrules.triggers.append(mark_trigger)
def _generate_capture_triggers( def _generate_capture_triggers(