From 5bda4abfce582369088d35abe0129028e1197931 Mon Sep 17 00:00:00 2001 From: sikruger Date: Wed, 17 Feb 2021 16:47:24 +0100 Subject: [PATCH 1/4] if aewc is in threat zone move it further away --- gen/flights/flightplan.py | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/gen/flights/flightplan.py b/gen/flights/flightplan.py index 80a577ed..6081aa1c 100644 --- a/gen/flights/flightplan.py +++ b/gen/flights/flightplan.py @@ -1182,14 +1182,24 @@ class FlightPlanBuilder: start = end.point_from_heading(heading - 180, diameter) return start, end - @staticmethod - def aewc_orbit(location: MissionTarget) -> Point: + def aewc_orbit(self, location: MissionTarget) -> Point: closest_airfield = location - # TODO: This is a heading to itself. - # Place this either over the target or as close as possible outside the - # threat zone: https://github.com/Khopa/dcs_liberation/issues/842. heading = location.position.heading_between_point(closest_airfield.position) - return location.position.point_from_heading(heading, 5000) + + position = ShapelyPoint( + self.package.target.position.x, self.package.target.position.y + ) + + if meters(position.distance(self.threat_zones.all)) == meters(0): + distance_to_no_fly = ( + meters(position.distance(self.threat_zones.all)) + - self.doctrine.cap_engagement_range + - nautical_miles(5) + ) + else: + distance_to_no_fly = meters(0) + + return location.position.point_from_heading(heading, int(distance_to_no_fly.meters)) def racetrack_for_frontline( self, origin: Point, front_line: FrontLine From dd9fe87ff43e2d2636676762156e26a147e856f0 Mon Sep 17 00:00:00 2001 From: sikruger Date: Thu, 18 Feb 2021 16:08:23 +0100 Subject: [PATCH 2/4] new point generation --- gen/flights/flightplan.py | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/gen/flights/flightplan.py b/gen/flights/flightplan.py index 6081aa1c..e8683c67 100644 --- a/gen/flights/flightplan.py +++ b/gen/flights/flightplan.py @@ -1183,23 +1183,29 @@ class FlightPlanBuilder: return start, end def aewc_orbit(self, location: MissionTarget) -> Point: - closest_airfield = location - heading = location.position.heading_between_point(closest_airfield.position) + heading = 0 + distance = 0 - position = ShapelyPoint( - self.package.target.position.x, self.package.target.position.y - ) - - if meters(position.distance(self.threat_zones.all)) == meters(0): - distance_to_no_fly = ( - meters(position.distance(self.threat_zones.all)) - - self.doctrine.cap_engagement_range - - nautical_miles(5) + while True: + # Generate our Orbit point + orbit_point = location.position.point_from_heading(heading, distance) + # Check if our generated point is in a threat zone + test_pos = ShapelyPoint( + orbit_point.x, orbit_point.y ) - else: - distance_to_no_fly = meters(0) - return location.position.point_from_heading(heading, int(distance_to_no_fly.meters)) + if heading > 360: + if meters(test_pos.distance(self.threat_zones.all)) == meters(0): + distance += int(nautical_miles(50).meters) + else: + break + heading = 0 + elif meters(test_pos.distance(self.threat_zones.all)) == meters(0): + heading += 60 + else: + break + + return orbit_point def racetrack_for_frontline( self, origin: Point, front_line: FrontLine From 4f1b0055e1624a491fb91b79ff038a5865695887 Mon Sep 17 00:00:00 2001 From: sikruger Date: Fri, 19 Feb 2021 20:40:58 +0100 Subject: [PATCH 3/4] new point generation --- gen/flights/flightplan.py | 37 +++++++++++++++++-------------------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/gen/flights/flightplan.py b/gen/flights/flightplan.py index e8683c67..c3fcb112 100644 --- a/gen/flights/flightplan.py +++ b/gen/flights/flightplan.py @@ -1183,29 +1183,26 @@ class FlightPlanBuilder: return start, end def aewc_orbit(self, location: MissionTarget) -> Point: - heading = 0 - distance = 0 + heading = location.position.heading_between_point(location.position) - while True: - # Generate our Orbit point - orbit_point = location.position.point_from_heading(heading, distance) - # Check if our generated point is in a threat zone - test_pos = ShapelyPoint( - orbit_point.x, orbit_point.y - ) + position = ShapelyPoint( + self.package.target.position.x, self.package.target.position.y + ) - if heading > 360: - if meters(test_pos.distance(self.threat_zones.all)) == meters(0): - distance += int(nautical_miles(50).meters) - else: - break - heading = 0 - elif meters(test_pos.distance(self.threat_zones.all)) == meters(0): - heading += 60 - else: - break + # in threat zone + if meters(position.distance(self.threat_zones.all)) == meters(0): + # Borderpoint + closest_closest_boundary = self.threat_zones.closest_boundary(position) - return orbit_point + # Heading + Distance to border point + heading = location.position.heading_between_point(closest_closest_boundary) + distance = location.position.distance_to_point(closest_closest_boundary) + + return location.position.point_from_heading(heading, distance) + + # this Part is fine. No threat zone, just use our point + else: + return location.position.point_from_heading(heading, 0) def racetrack_for_frontline( self, origin: Point, front_line: FrontLine From 03251d5bd53fd0848ccd74dd2dee6f11e6f8c6fe Mon Sep 17 00:00:00 2001 From: sikruger Date: Wed, 24 Feb 2021 22:06:42 +0100 Subject: [PATCH 4/4] some improvements --- gen/flights/flightplan.py | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/gen/flights/flightplan.py b/gen/flights/flightplan.py index c3fcb112..431135d7 100644 --- a/gen/flights/flightplan.py +++ b/gen/flights/flightplan.py @@ -1183,26 +1183,20 @@ class FlightPlanBuilder: return start, end def aewc_orbit(self, location: MissionTarget) -> Point: - heading = location.position.heading_between_point(location.position) - - position = ShapelyPoint( - self.package.target.position.x, self.package.target.position.y - ) - # in threat zone - if meters(position.distance(self.threat_zones.all)) == meters(0): + if self.threat_zones.threatened(location.position): # Borderpoint - closest_closest_boundary = self.threat_zones.closest_boundary(position) + closest_boundary = self.threat_zones.closest_boundary(location.position) # Heading + Distance to border point - heading = location.position.heading_between_point(closest_closest_boundary) - distance = location.position.distance_to_point(closest_closest_boundary) + heading = location.position.heading_between_point(closest_boundary) + distance = location.position.distance_to_point(closest_boundary) return location.position.point_from_heading(heading, distance) # this Part is fine. No threat zone, just use our point else: - return location.position.point_from_heading(heading, 0) + return location.position def racetrack_for_frontline( self, origin: Point, front_line: FrontLine