mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
Specify CAP engagement range in the doctrine.
This commit is contained in:
parent
a553914ef4
commit
c53feb5ccb
@ -25,12 +25,27 @@ class Doctrine:
|
|||||||
max_patrol_altitude: Distance
|
max_patrol_altitude: Distance
|
||||||
pattern_altitude: Distance
|
pattern_altitude: Distance
|
||||||
|
|
||||||
|
#: The duration that CAP flights will remain on-station.
|
||||||
cap_duration: timedelta
|
cap_duration: timedelta
|
||||||
|
|
||||||
|
#: The minimum length of the CAP race track.
|
||||||
cap_min_track_length: Distance
|
cap_min_track_length: Distance
|
||||||
|
|
||||||
|
#: The maximum length of the CAP race track.
|
||||||
cap_max_track_length: Distance
|
cap_max_track_length: Distance
|
||||||
|
|
||||||
|
#: The minimum distance between the defended position and the *end* of the
|
||||||
|
#: CAP race track.
|
||||||
cap_min_distance_from_cp: Distance
|
cap_min_distance_from_cp: Distance
|
||||||
|
|
||||||
|
#: The maximum distance between the defended position and the *end* of the
|
||||||
|
#: CAP race track.
|
||||||
cap_max_distance_from_cp: Distance
|
cap_max_distance_from_cp: Distance
|
||||||
|
|
||||||
|
#: The engagement range of CAP flights. Any enemy aircraft within this range
|
||||||
|
#: of the CAP's current position will be engaged by the CAP.
|
||||||
|
cap_engagement_range: Distance
|
||||||
|
|
||||||
cas_duration: timedelta
|
cas_duration: timedelta
|
||||||
|
|
||||||
sweep_distance: Distance
|
sweep_distance: Distance
|
||||||
@ -58,6 +73,7 @@ MODERN_DOCTRINE = Doctrine(
|
|||||||
cap_max_track_length=nautical_miles(40),
|
cap_max_track_length=nautical_miles(40),
|
||||||
cap_min_distance_from_cp=nautical_miles(10),
|
cap_min_distance_from_cp=nautical_miles(10),
|
||||||
cap_max_distance_from_cp=nautical_miles(40),
|
cap_max_distance_from_cp=nautical_miles(40),
|
||||||
|
cap_engagement_range=nautical_miles(50),
|
||||||
cas_duration=timedelta(minutes=30),
|
cas_duration=timedelta(minutes=30),
|
||||||
sweep_distance=nautical_miles(60),
|
sweep_distance=nautical_miles(60),
|
||||||
)
|
)
|
||||||
@ -84,6 +100,7 @@ COLDWAR_DOCTRINE = Doctrine(
|
|||||||
cap_max_track_length=nautical_miles(24),
|
cap_max_track_length=nautical_miles(24),
|
||||||
cap_min_distance_from_cp=nautical_miles(8),
|
cap_min_distance_from_cp=nautical_miles(8),
|
||||||
cap_max_distance_from_cp=nautical_miles(25),
|
cap_max_distance_from_cp=nautical_miles(25),
|
||||||
|
cap_engagement_range=nautical_miles(35),
|
||||||
cas_duration=timedelta(minutes=30),
|
cas_duration=timedelta(minutes=30),
|
||||||
sweep_distance=nautical_miles(40),
|
sweep_distance=nautical_miles(40),
|
||||||
)
|
)
|
||||||
@ -110,6 +127,7 @@ WWII_DOCTRINE = Doctrine(
|
|||||||
cap_max_track_length=nautical_miles(18),
|
cap_max_track_length=nautical_miles(18),
|
||||||
cap_min_distance_from_cp=nautical_miles(0),
|
cap_min_distance_from_cp=nautical_miles(0),
|
||||||
cap_max_distance_from_cp=nautical_miles(5),
|
cap_max_distance_from_cp=nautical_miles(5),
|
||||||
|
cap_engagement_range=nautical_miles(20),
|
||||||
cas_duration=timedelta(minutes=30),
|
cas_duration=timedelta(minutes=30),
|
||||||
sweep_distance=nautical_miles(10),
|
sweep_distance=nautical_miles(10),
|
||||||
)
|
)
|
||||||
|
|||||||
@ -1504,7 +1504,7 @@ class CasIngressBuilder(PydcsWaypointBuilder):
|
|||||||
if isinstance(self.flight.flight_plan, CasFlightPlan):
|
if isinstance(self.flight.flight_plan, CasFlightPlan):
|
||||||
waypoint.add_task(EngageTargetsInZone(
|
waypoint.add_task(EngageTargetsInZone(
|
||||||
position=self.flight.flight_plan.target,
|
position=self.flight.flight_plan.target,
|
||||||
radius=FRONTLINE_LENGTH / 2,
|
radius=int(self.flight.flight_plan.engagement_distance.meters),
|
||||||
targets=[
|
targets=[
|
||||||
Targets.All.GroundUnits.GroundVehicles,
|
Targets.All.GroundUnits.GroundVehicles,
|
||||||
Targets.All.GroundUnits.AirDefence.AAA,
|
Targets.All.GroundUnits.AirDefence.AAA,
|
||||||
@ -1750,8 +1750,10 @@ class RaceTrackBuilder(PydcsWaypointBuilder):
|
|||||||
def build(self) -> MovingPoint:
|
def build(self) -> MovingPoint:
|
||||||
waypoint = super().build()
|
waypoint = super().build()
|
||||||
|
|
||||||
if not isinstance(self.flight.flight_plan, PatrollingFlightPlan):
|
flight_plan = self.flight.flight_plan
|
||||||
flight_plan_type = self.flight.flight_plan.__class__.__name__
|
|
||||||
|
if not isinstance(flight_plan, PatrollingFlightPlan):
|
||||||
|
flight_plan_type = flight_plan.__class__.__name__
|
||||||
logging.error(
|
logging.error(
|
||||||
f"Cannot create race track for {self.flight} because "
|
f"Cannot create race track for {self.flight} because "
|
||||||
f"{flight_plan_type} does not define a patrol.")
|
f"{flight_plan_type} does not define a patrol.")
|
||||||
@ -1769,18 +1771,18 @@ class RaceTrackBuilder(PydcsWaypointBuilder):
|
|||||||
# later.
|
# later.
|
||||||
cap_types = {FlightType.BARCAP, FlightType.TARCAP}
|
cap_types = {FlightType.BARCAP, FlightType.TARCAP}
|
||||||
if self.flight.flight_type in cap_types:
|
if self.flight.flight_type in cap_types:
|
||||||
|
engagement_distance = int(flight_plan.engagement_distance.meters)
|
||||||
waypoint.tasks.append(
|
waypoint.tasks.append(
|
||||||
EngageTargets(max_distance=int(nautical_miles(50).meters),
|
EngageTargets(max_distance=engagement_distance,
|
||||||
targets=[Targets.All.Air]))
|
targets=[Targets.All.Air]))
|
||||||
|
|
||||||
racetrack = ControlledTask(OrbitAction(
|
racetrack = ControlledTask(OrbitAction(
|
||||||
altitude=waypoint.alt,
|
altitude=waypoint.alt,
|
||||||
pattern=OrbitAction.OrbitPattern.RaceTrack
|
pattern=OrbitAction.OrbitPattern.RaceTrack
|
||||||
))
|
))
|
||||||
self.set_waypoint_tot(
|
self.set_waypoint_tot(waypoint, flight_plan.patrol_start_time)
|
||||||
waypoint, self.flight.flight_plan.patrol_start_time)
|
|
||||||
racetrack.stop_after_time(
|
racetrack.stop_after_time(
|
||||||
int(self.flight.flight_plan.patrol_end_time.total_seconds()))
|
int(flight_plan.patrol_end_time.total_seconds()))
|
||||||
waypoint.add_task(racetrack)
|
waypoint.add_task(racetrack)
|
||||||
|
|
||||||
return waypoint
|
return waypoint
|
||||||
|
|||||||
@ -33,7 +33,7 @@ from .closestairfields import ObjectiveDistanceCache
|
|||||||
from .flight import Flight, FlightType, FlightWaypoint, FlightWaypointType
|
from .flight import Flight, FlightType, FlightWaypoint, FlightWaypointType
|
||||||
from .traveltime import GroundSpeed, TravelTime
|
from .traveltime import GroundSpeed, TravelTime
|
||||||
from .waypointbuilder import StrikeTarget, WaypointBuilder
|
from .waypointbuilder import StrikeTarget, WaypointBuilder
|
||||||
from ..conflictgen import Conflict
|
from ..conflictgen import Conflict, FRONTLINE_LENGTH
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from game import Game
|
from game import Game
|
||||||
@ -365,6 +365,12 @@ class PatrollingFlightPlan(FlightPlan):
|
|||||||
#: Maximum time to remain on station.
|
#: Maximum time to remain on station.
|
||||||
patrol_duration: timedelta
|
patrol_duration: timedelta
|
||||||
|
|
||||||
|
#: The engagement range of any Search Then Engage task, or the radius of a
|
||||||
|
#: Search Then Engage in Zone task. Any enemies of the appropriate type for
|
||||||
|
#: this mission within this range of the flight's current position (or the
|
||||||
|
#: center of the zone) will be engaged by the flight.
|
||||||
|
engagement_distance: Distance
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def patrol_start_time(self) -> timedelta:
|
def patrol_start_time(self) -> timedelta:
|
||||||
return self.package.time_over_target
|
return self.package.time_over_target
|
||||||
@ -877,6 +883,7 @@ class FlightPlanBuilder:
|
|||||||
package=self.package,
|
package=self.package,
|
||||||
flight=flight,
|
flight=flight,
|
||||||
patrol_duration=self.doctrine.cap_duration,
|
patrol_duration=self.doctrine.cap_duration,
|
||||||
|
engagement_distance=self.doctrine.cap_engagement_range,
|
||||||
takeoff=builder.takeoff(flight.departure),
|
takeoff=builder.takeoff(flight.departure),
|
||||||
patrol_start=start,
|
patrol_start=start,
|
||||||
patrol_end=end,
|
patrol_end=end,
|
||||||
@ -1010,6 +1017,7 @@ class FlightPlanBuilder:
|
|||||||
# requests an escort the CAP flight will remain on station for the
|
# requests an escort the CAP flight will remain on station for the
|
||||||
# duration of the escorted mission, or until it is winchester/bingo.
|
# duration of the escorted mission, or until it is winchester/bingo.
|
||||||
patrol_duration=self.doctrine.cap_duration,
|
patrol_duration=self.doctrine.cap_duration,
|
||||||
|
engagement_distance=self.doctrine.cap_engagement_range,
|
||||||
takeoff=builder.takeoff(flight.departure),
|
takeoff=builder.takeoff(flight.departure),
|
||||||
patrol_start=start,
|
patrol_start=start,
|
||||||
patrol_end=end,
|
patrol_end=end,
|
||||||
@ -1152,6 +1160,7 @@ class FlightPlanBuilder:
|
|||||||
takeoff=builder.takeoff(flight.departure),
|
takeoff=builder.takeoff(flight.departure),
|
||||||
patrol_start=builder.ingress(FlightWaypointType.INGRESS_CAS,
|
patrol_start=builder.ingress(FlightWaypointType.INGRESS_CAS,
|
||||||
ingress, location),
|
ingress, location),
|
||||||
|
engagement_distance=meters(FRONTLINE_LENGTH) / 2,
|
||||||
target=builder.cas(center),
|
target=builder.cas(center),
|
||||||
patrol_end=builder.egress(egress, location),
|
patrol_end=builder.egress(egress, location),
|
||||||
land=builder.land(flight.arrival),
|
land=builder.land(flight.arrival),
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user