From 01f83e845160f992c4ad414f4e773e640690eebc Mon Sep 17 00:00:00 2001 From: Dan Albert Date: Mon, 19 Oct 2020 00:07:58 -0700 Subject: [PATCH] Place CAP racetracks more defensively. Ensure that we're never putting a CAP race track within 20 nmi of an enemy airfield (aside from the target airfield, if the target is hostile). --- gen/flights/flightplan.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/gen/flights/flightplan.py b/gen/flights/flightplan.py index 9bc06473..ed2b7bb0 100644 --- a/gen/flights/flightplan.py +++ b/gen/flights/flightplan.py @@ -187,6 +187,10 @@ class FlightPlanBuilder: closest_cache = ObjectiveDistanceCache.get_closest_airfields(location) for airfield in closest_cache.closest_airfields: + # If the mission is a BARCAP of an enemy airfield, find the *next* + # closest enemy airfield. + if airfield == self.package.target: + continue if airfield.captured != self.is_player: closest_airfield = airfield break @@ -198,10 +202,19 @@ class FlightPlanBuilder: closest_airfield.position ) + min_distance_from_enemy = nm_to_meter(20) + distance_to_airfield = int(closest_airfield.position.distance_to_point( + self.package.target.position + )) + distance_to_no_fly = distance_to_airfield - min_distance_from_enemy + min_cap_distance = min(self.doctrine.cap_min_distance_from_cp, + distance_to_no_fly) + max_cap_distance = min(self.doctrine.cap_max_distance_from_cp, + distance_to_no_fly) + end = location.position.point_from_heading( heading, - random.randint(self.doctrine.cap_min_distance_from_cp, - self.doctrine.cap_max_distance_from_cp) + random.randint(min_cap_distance, max_cap_distance) ) diameter = random.randint( self.doctrine.cap_min_track_length,