This commit is contained in:
Raffson 2022-11-13 22:22:57 +01:00
parent 2aee878a40
commit 004a99e080
No known key found for this signature in database
GPG Key ID: B0402B2C9B764D99
6 changed files with 37 additions and 9 deletions

View File

@ -194,7 +194,7 @@ class FormationAttackBuilder(IBuilder[FlightPlanT, LayoutT], ABC):
initial = None initial = None
if self.package.primary_task == FlightType.STRIKE: if self.package.primary_task == FlightType.STRIKE:
ingress = builder.nav( ingress = builder.nav(
self.package.waypoints.ingress, Distance.from_feet(20000) self.package.waypoints.ingress, self.doctrine.ingress_altitude
) )
initial = builder.ingress( initial = builder.ingress(
ingress_type, self.package.waypoints.initial, self.package.target ingress_type, self.package.waypoints.initial, self.package.target

View File

@ -36,6 +36,7 @@ class PackageWaypoints:
).find_best_ip() ).find_best_ip()
hdg = package.target.position.heading_between_point(ingress_point) hdg = package.target.position.heading_between_point(ingress_point)
# Generate a waypoint randomly between 7 & 9 NM
dist = nautical_miles(random.random() * 2 + 7).meters dist = nautical_miles(random.random() * 2 + 7).meters
initial_point = package.target.position.point_from_heading(hdg, dist) initial_point = package.target.position.point_from_heading(hdg, dist)

View File

@ -2,7 +2,7 @@ from dataclasses import dataclass
from datetime import timedelta from datetime import timedelta
from game.data.units import UnitClass from game.data.units import UnitClass
from game.utils import Distance, feet, nautical_miles from game.utils import Distance, feet, nautical_miles, Speed, knots
@dataclass @dataclass
@ -77,6 +77,16 @@ class Doctrine:
ground_unit_procurement_ratios: GroundUnitProcurementRatios ground_unit_procurement_ratios: GroundUnitProcurementRatios
rtb_speed: Speed
sead_escort_spacing: Distance
escort_spacing: Distance
sead_escort_engagement_range: Distance
escort_engagement_range: Distance
MODERN_DOCTRINE = Doctrine( MODERN_DOCTRINE = Doctrine(
cap=True, cap=True,
@ -113,6 +123,11 @@ MODERN_DOCTRINE = Doctrine(
UnitClass.RECON: 1, UnitClass.RECON: 1,
} }
), ),
rtb_speed=knots(500),
sead_escort_spacing=feet(1000),
escort_spacing=feet(2000),
sead_escort_engagement_range=nautical_miles(40),
escort_engagement_range=nautical_miles(30),
) )
COLDWAR_DOCTRINE = Doctrine( COLDWAR_DOCTRINE = Doctrine(
@ -150,6 +165,11 @@ COLDWAR_DOCTRINE = Doctrine(
UnitClass.RECON: 1, UnitClass.RECON: 1,
} }
), ),
rtb_speed=knots(450),
sead_escort_spacing=feet(500),
escort_spacing=feet(1000),
sead_escort_engagement_range=nautical_miles(25),
escort_engagement_range=nautical_miles(20),
) )
WWII_DOCTRINE = Doctrine( WWII_DOCTRINE = Doctrine(
@ -186,4 +206,9 @@ WWII_DOCTRINE = Doctrine(
UnitClass.RECON: 1, UnitClass.RECON: 1,
} }
), ),
rtb_speed=knots(300),
sead_escort_spacing=feet(100),
escort_spacing=feet(200),
sead_escort_engagement_range=nautical_miles(10),
escort_engagement_range=nautical_miles(5),
) )

View File

@ -75,11 +75,9 @@ class FlightGroupSpawner:
or self.flight.state.spawn_type is not StartType.IN_FLIGHT or self.flight.state.spawn_type is not StartType.IN_FLIGHT
): ):
grp = self.generate_flight_at_departure() grp = self.generate_flight_at_departure()
# grp.id = id(self.flight)
self.flight.group_id = grp.id self.flight.group_id = grp.id
return grp return grp
grp = self.generate_mid_mission() grp = self.generate_mid_mission()
# grp.id = id(self.flight)
self.flight.group_id = grp.id self.flight.group_id = grp.id
return grp return grp

View File

@ -19,6 +19,8 @@ class JoinPointBuilder(PydcsWaypointBuilder):
def add_tasks(self, waypoint: MovingPoint) -> None: def add_tasks(self, waypoint: MovingPoint) -> None:
waypoint.tasks.append(OptFormation.finger_four_open()) waypoint.tasks.append(OptFormation.finger_four_open())
doctrine = self.flight.coalition.doctrine
if self.flight.flight_type == FlightType.ESCORT: if self.flight.flight_type == FlightType.ESCORT:
self.configure_escort_tasks( self.configure_escort_tasks(
waypoint, waypoint,
@ -26,6 +28,8 @@ class JoinPointBuilder(PydcsWaypointBuilder):
Targets.All.Air.Planes.Fighters.id, Targets.All.Air.Planes.Fighters.id,
Targets.All.Air.Planes.MultiroleFighters.id, Targets.All.Air.Planes.MultiroleFighters.id,
], ],
max_dist=doctrine.escort_engagement_range.nautical_miles,
vertical_spacing=doctrine.escort_spacing.feet,
) )
elif self.flight.flight_type == FlightType.SEAD_ESCORT: elif self.flight.flight_type == FlightType.SEAD_ESCORT:
if isinstance(self.flight.package.target, NavalControlPoint): if isinstance(self.flight.package.target, NavalControlPoint):
@ -35,15 +39,15 @@ class JoinPointBuilder(PydcsWaypointBuilder):
Targets.All.Naval.id, Targets.All.Naval.id,
Targets.All.GroundUnits.AirDefence.AAA.SAMRelated.id, Targets.All.GroundUnits.AirDefence.AAA.SAMRelated.id,
], ],
max_dist=40, max_dist=doctrine.sead_escort_engagement_range.nautical_miles,
vertical_spacing=1000, vertical_spacing=doctrine.sead_escort_spacing.feet,
) )
else: else:
self.configure_escort_tasks( self.configure_escort_tasks(
waypoint, waypoint,
[Targets.All.GroundUnits.AirDefence.AAA.SAMRelated.id], [Targets.All.GroundUnits.AirDefence.AAA.SAMRelated.id],
max_dist=40, max_dist=doctrine.sead_escort_engagement_range.nautical_miles,
vertical_spacing=1000, vertical_spacing=doctrine.sead_escort_spacing.feet,
) )
# Let the AI use ECM to preemptively defend themselves. # Let the AI use ECM to preemptively defend themselves.

View File

@ -19,7 +19,7 @@ class SplitPointBuilder(PydcsWaypointBuilder):
waypoint.tasks.append(OptFormation.finger_four_close()) waypoint.tasks.append(OptFormation.finger_four_close())
waypoint.speed_locked = True waypoint.speed_locked = True
waypoint.speed = mach(0.85, Distance.from_feet(20000)).meters_per_second waypoint.speed = self.flight.coalition.doctrine.rtb_speed.meters_per_second
waypoint.ETA_locked = False waypoint.ETA_locked = False
if self.flight is self.package.primary_flight: if self.flight is self.package.primary_flight:
script = RunScript( script = RunScript(