From f95795d5472d9776d2967edb35a824b2ad004b3f Mon Sep 17 00:00:00 2001 From: Dan Albert Date: Mon, 24 Jan 2022 16:59:36 -0800 Subject: [PATCH] Revert "Remove front line minimum distance." This bug still isn't well understood and this made things worse. Reverting until we understand the cause. This reverts commit c844c364fa8a544b8f542a63c90da7162539640f. Fixes https://github.com/dcs-liberation/dcs_liberation/issues/1912 --- game/theater/frontline.py | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/game/theater/frontline.py b/game/theater/frontline.py index 7e59445b..4a3ab51a 100644 --- a/game/theater/frontline.py +++ b/game/theater/frontline.py @@ -13,6 +13,9 @@ if TYPE_CHECKING: from game.ato import FlightType +FRONTLINE_MIN_CP_DISTANCE = 5000 + + @dataclass class FrontLineSegment: """ @@ -170,8 +173,23 @@ class FrontLine(MissionTarget): """ total_strength = self.blue_cp.base.strength + self.red_cp.base.strength if self.blue_cp.base.strength == 0: - return 0 + return self._adjust_for_min_dist(0) if self.red_cp.base.strength == 0: - return self.attack_distance + return self._adjust_for_min_dist(self.attack_distance) strength_pct = self.blue_cp.base.strength / total_strength - return strength_pct * self.attack_distance + return self._adjust_for_min_dist(strength_pct * self.attack_distance) + + def _adjust_for_min_dist(self, distance: float) -> float: + """ + Ensures the frontline conflict is never located within the minimum distance + constant of either end control point. + """ + if (distance > self.attack_distance / 2) and ( + distance + FRONTLINE_MIN_CP_DISTANCE > self.attack_distance + ): + distance = self.attack_distance - FRONTLINE_MIN_CP_DISTANCE + elif (distance < self.attack_distance / 2) and ( + distance < FRONTLINE_MIN_CP_DISTANCE + ): + distance = FRONTLINE_MIN_CP_DISTANCE + return distance