mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
Add preset formations to different flights and waypoints. (#1948)
* Update pydcs version. * Add formation presets for various flight types.
This commit is contained in:
parent
a97a4b2c15
commit
bf034e18eb
@ -8,6 +8,7 @@ Saves from 5.x are not compatible with 6.0.
|
|||||||
* **[Campaign]** Add option to manually add and remove squadrons and different aircraft type in the new game wizard / air wing configuration dialog.
|
* **[Campaign]** Add option to manually add and remove squadrons and different aircraft type in the new game wizard / air wing configuration dialog.
|
||||||
* **[Mission Generation]** Added an option to fast-forward mission generation until the point of first contact (WIP).
|
* **[Mission Generation]** Added an option to fast-forward mission generation until the point of first contact (WIP).
|
||||||
* **[Mission Generation]** Add Option to enforce the Easy Communication setting for the mission
|
* **[Mission Generation]** Add Option to enforce the Easy Communication setting for the mission
|
||||||
|
* **[Flight Planning]** Added preset formations for different flight types at hold, join, ingress, and split waypoints. Air to Air flights will tend toward line-abreast and spread-four formations. Air to ground flights will tend towards trail formation.
|
||||||
* **[Flight Planning]** Added the ability to plan tankers for recovery on package flights. AI does not plan.
|
* **[Flight Planning]** Added the ability to plan tankers for recovery on package flights. AI does not plan.
|
||||||
* **[Flight Planning]** Air to Ground flights now have ECM enabled on lock at the join point, and SEAD/DEAD also have ECM enabled on detection and lock at ingress.
|
* **[Flight Planning]** Air to Ground flights now have ECM enabled on lock at the join point, and SEAD/DEAD also have ECM enabled on detection and lock at ingress.
|
||||||
* **[Flight Planning]** AWACS flightplan changed from orbit to a racetrack to reduce data link disconnects which were caused by blind spots as a result of the bank angle.
|
* **[Flight Planning]** AWACS flightplan changed from orbit to a racetrack to reduce data link disconnects which were caused by blind spots as a result of the bank angle.
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import logging
|
import logging
|
||||||
|
|
||||||
from dcs.point import MovingPoint
|
from dcs.point import MovingPoint
|
||||||
from dcs.task import AttackGroup, WeaponType
|
from dcs.task import AttackGroup, OptFormation, WeaponType
|
||||||
|
|
||||||
from game.theater import NavalControlPoint, TheaterGroundObject
|
from game.theater import NavalControlPoint, TheaterGroundObject
|
||||||
from game.transfers import MultiGroupTransport
|
from game.transfers import MultiGroupTransport
|
||||||
@ -39,3 +39,5 @@ class BaiIngressBuilder(PydcsWaypointBuilder):
|
|||||||
task.params["altitudeEnabled"] = False
|
task.params["altitudeEnabled"] = False
|
||||||
task.params["groupAttack"] = True
|
task.params["groupAttack"] = True
|
||||||
waypoint.tasks.append(task)
|
waypoint.tasks.append(task)
|
||||||
|
|
||||||
|
waypoint.tasks.append(OptFormation.trail_open())
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import logging
|
import logging
|
||||||
|
|
||||||
from dcs.point import MovingPoint
|
from dcs.point import MovingPoint
|
||||||
from dcs.task import ControlledTask, OrbitAction
|
from dcs.task import ControlledTask, OptFormation, OrbitAction
|
||||||
|
|
||||||
from gen.flights.flightplan import LoiterFlightPlan
|
from gen.flights.flightplan import LoiterFlightPlan
|
||||||
from .pydcswaypointbuilder import PydcsWaypointBuilder
|
from .pydcswaypointbuilder import PydcsWaypointBuilder
|
||||||
@ -26,3 +26,4 @@ class HoldPointBuilder(PydcsWaypointBuilder):
|
|||||||
int((push_time - self.elapsed_mission_time).total_seconds())
|
int((push_time - self.elapsed_mission_time).total_seconds())
|
||||||
)
|
)
|
||||||
waypoint.add_task(loiter)
|
waypoint.add_task(loiter)
|
||||||
|
waypoint.add_task(OptFormation.finger_four_close())
|
||||||
|
|||||||
@ -1,7 +1,14 @@
|
|||||||
from typing import List, Type
|
from typing import List, Type
|
||||||
|
|
||||||
from dcs.point import MovingPoint
|
from dcs.point import MovingPoint
|
||||||
from dcs.task import ControlledTask, EngageTargets, OptECMUsing, TargetType, Targets
|
from dcs.task import (
|
||||||
|
ControlledTask,
|
||||||
|
EngageTargets,
|
||||||
|
OptECMUsing,
|
||||||
|
OptFormation,
|
||||||
|
TargetType,
|
||||||
|
Targets,
|
||||||
|
)
|
||||||
|
|
||||||
from game.ato import FlightType
|
from game.ato import FlightType
|
||||||
from game.utils import nautical_miles
|
from game.utils import nautical_miles
|
||||||
@ -19,6 +26,11 @@ class JoinPointBuilder(PydcsWaypointBuilder):
|
|||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if self.flight.count < 4:
|
||||||
|
waypoint.tasks.append(OptFormation.line_abreast_open())
|
||||||
|
else:
|
||||||
|
waypoint.tasks.append(OptFormation.spread_four_open())
|
||||||
|
|
||||||
elif self.flight.flight_type == FlightType.SEAD_ESCORT:
|
elif self.flight.flight_type == FlightType.SEAD_ESCORT:
|
||||||
self.configure_escort_tasks(
|
self.configure_escort_tasks(
|
||||||
waypoint, [Targets.All.GroundUnits.AirDefence.AAA.SAMRelated]
|
waypoint, [Targets.All.GroundUnits.AirDefence.AAA.SAMRelated]
|
||||||
@ -28,6 +40,11 @@ class JoinPointBuilder(PydcsWaypointBuilder):
|
|||||||
ecm_option = OptECMUsing(value=OptECMUsing.Values.UseIfDetectedLockByRadar)
|
ecm_option = OptECMUsing(value=OptECMUsing.Values.UseIfDetectedLockByRadar)
|
||||||
waypoint.tasks.append(ecm_option)
|
waypoint.tasks.append(ecm_option)
|
||||||
|
|
||||||
|
if self.flight.count < 4:
|
||||||
|
waypoint.tasks.append(OptFormation.line_abreast_open())
|
||||||
|
else:
|
||||||
|
waypoint.tasks.append(OptFormation.spread_four_open())
|
||||||
|
|
||||||
elif not self.flight.flight_type.is_air_to_air:
|
elif not self.flight.flight_type.is_air_to_air:
|
||||||
# Capture any non A/A type to avoid issues with SPJs that use the primary radar such as the F/A-18C.
|
# Capture any non A/A type to avoid issues with SPJs that use the primary radar such as the F/A-18C.
|
||||||
# You can bully them with STT to not be able to fire radar guided missiles at you,
|
# You can bully them with STT to not be able to fire radar guided missiles at you,
|
||||||
@ -37,6 +54,8 @@ class JoinPointBuilder(PydcsWaypointBuilder):
|
|||||||
ecm_option = OptECMUsing(value=OptECMUsing.Values.UseIfOnlyLockByRadar)
|
ecm_option = OptECMUsing(value=OptECMUsing.Values.UseIfOnlyLockByRadar)
|
||||||
waypoint.tasks.append(ecm_option)
|
waypoint.tasks.append(ecm_option)
|
||||||
|
|
||||||
|
waypoint.tasks.append(OptFormation.finger_four_open())
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def configure_escort_tasks(
|
def configure_escort_tasks(
|
||||||
waypoint: MovingPoint, target_types: List[Type[TargetType]]
|
waypoint: MovingPoint, target_types: List[Type[TargetType]]
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import logging
|
import logging
|
||||||
|
|
||||||
from dcs.point import MovingPoint
|
from dcs.point import MovingPoint
|
||||||
from dcs.task import BombingRunway
|
from dcs.task import BombingRunway, OptFormation
|
||||||
|
|
||||||
from game.theater import Airfield
|
from game.theater import Airfield
|
||||||
from .pydcswaypointbuilder import PydcsWaypointBuilder
|
from .pydcswaypointbuilder import PydcsWaypointBuilder
|
||||||
@ -20,3 +20,4 @@ class OcaRunwayIngressBuilder(PydcsWaypointBuilder):
|
|||||||
waypoint.tasks.append(
|
waypoint.tasks.append(
|
||||||
BombingRunway(airport_id=target.airport.id, group_attack=True)
|
BombingRunway(airport_id=target.airport.id, group_attack=True)
|
||||||
)
|
)
|
||||||
|
waypoint.tasks.append(OptFormation.trail_open())
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
from dcs.point import MovingPoint
|
from dcs.point import MovingPoint
|
||||||
from dcs.task import OptECMUsing
|
from dcs.task import OptECMUsing, OptFormation
|
||||||
|
|
||||||
from .pydcswaypointbuilder import PydcsWaypointBuilder
|
from .pydcswaypointbuilder import PydcsWaypointBuilder
|
||||||
|
|
||||||
@ -15,3 +15,5 @@ class SplitPointBuilder(PydcsWaypointBuilder):
|
|||||||
# Let the AI use ECM to defend themselves.
|
# Let the AI use ECM to defend themselves.
|
||||||
ecm_option = OptECMUsing(value=OptECMUsing.Values.UseIfOnlyLockByRadar)
|
ecm_option = OptECMUsing(value=OptECMUsing.Values.UseIfOnlyLockByRadar)
|
||||||
waypoint.tasks.append(ecm_option)
|
waypoint.tasks.append(ecm_option)
|
||||||
|
|
||||||
|
waypoint.tasks.append(OptFormation.finger_four_close())
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
from dcs import Point
|
from dcs import Point
|
||||||
from dcs.planes import B_17G, B_52H, Tu_22M3
|
from dcs.planes import B_17G, B_52H, Tu_22M3
|
||||||
from dcs.point import MovingPoint
|
from dcs.point import MovingPoint
|
||||||
from dcs.task import Bombing, WeaponType
|
from dcs.task import Bombing, OptFormation, WeaponType
|
||||||
|
|
||||||
from .pydcswaypointbuilder import PydcsWaypointBuilder
|
from .pydcswaypointbuilder import PydcsWaypointBuilder
|
||||||
|
|
||||||
@ -13,6 +13,8 @@ class StrikeIngressBuilder(PydcsWaypointBuilder):
|
|||||||
else:
|
else:
|
||||||
self.add_strike_tasks(waypoint)
|
self.add_strike_tasks(waypoint)
|
||||||
|
|
||||||
|
waypoint.tasks.append(OptFormation.trail_open())
|
||||||
|
|
||||||
def add_bombing_tasks(self, waypoint: MovingPoint) -> None:
|
def add_bombing_tasks(self, waypoint: MovingPoint) -> None:
|
||||||
targets = self.waypoint.targets
|
targets = self.waypoint.targets
|
||||||
if not targets:
|
if not targets:
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import logging
|
import logging
|
||||||
|
|
||||||
from dcs.point import MovingPoint
|
from dcs.point import MovingPoint
|
||||||
from dcs.task import EngageTargets, Targets
|
from dcs.task import EngageTargets, OptFormation, Targets
|
||||||
|
|
||||||
from game.utils import nautical_miles
|
from game.utils import nautical_miles
|
||||||
from gen.flights.flightplan import SweepFlightPlan
|
from gen.flights.flightplan import SweepFlightPlan
|
||||||
@ -27,3 +27,8 @@ class SweepIngressBuilder(PydcsWaypointBuilder):
|
|||||||
],
|
],
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if self.flight.count < 4:
|
||||||
|
waypoint.tasks.append(OptFormation.line_abreast_open())
|
||||||
|
else:
|
||||||
|
waypoint.tasks.append(OptFormation.spread_four_open())
|
||||||
|
|||||||
@ -26,7 +26,7 @@ Pillow==9.0.0
|
|||||||
pluggy==0.13.1
|
pluggy==0.13.1
|
||||||
pre-commit==2.10.1
|
pre-commit==2.10.1
|
||||||
py==1.10.0
|
py==1.10.0
|
||||||
-e git+https://github.com/pydcs/dcs@5d1f581b260fdc6091744ab927a58cdee586e681#egg=pydcs
|
-e git+https://github.com/pydcs/dcs@5a2abc26f79772837d445c28d6354accd3b76122#egg=pydcs
|
||||||
pyinstaller==4.3
|
pyinstaller==4.3
|
||||||
pyinstaller-hooks-contrib==2021.1
|
pyinstaller-hooks-contrib==2021.1
|
||||||
pyparsing==2.4.7
|
pyparsing==2.4.7
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user