mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
Streamlining
This commit is contained in:
parent
75498fe061
commit
62a40db9ea
@ -3,7 +3,7 @@ from __future__ import annotations
|
|||||||
from collections.abc import Iterator
|
from collections.abc import Iterator
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
from typing import TYPE_CHECKING, Type, Optional
|
from typing import TYPE_CHECKING, Type
|
||||||
|
|
||||||
from game.theater import FrontLine
|
from game.theater import FrontLine
|
||||||
from game.utils import Distance, Speed, kph, dcs_to_shapely_point
|
from game.utils import Distance, Speed, kph, dcs_to_shapely_point
|
||||||
@ -23,7 +23,7 @@ if TYPE_CHECKING:
|
|||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class CasLayout(PatrollingLayout):
|
class CasLayout(PatrollingLayout):
|
||||||
ingress: Optional[FlightWaypoint]
|
ingress: FlightWaypoint
|
||||||
|
|
||||||
def iter_waypoints(self) -> Iterator[FlightWaypoint]:
|
def iter_waypoints(self) -> Iterator[FlightWaypoint]:
|
||||||
yield self.departure
|
yield self.departure
|
||||||
@ -92,17 +92,14 @@ class Builder(IBuilder[CasFlightPlan, CasLayout]):
|
|||||||
FrontLineConflictDescription,
|
FrontLineConflictDescription,
|
||||||
)
|
)
|
||||||
|
|
||||||
bounds = FrontLineConflictDescription.frontline_bounds(
|
bounds = FrontLineConflictDescription.frontline_bounds(location, self.theater)
|
||||||
location, self.theater, self.coalition.game.settings
|
patrol_start = bounds.left_position
|
||||||
)
|
patrol_end = bounds.right_position
|
||||||
ingress = bounds.left_position
|
|
||||||
center = bounds.center
|
|
||||||
egress = bounds.right_position
|
|
||||||
|
|
||||||
start_distance = ingress.distance_to_point(self.flight.departure.position)
|
start_distance = patrol_start.distance_to_point(self.flight.departure.position)
|
||||||
end_distance = egress.distance_to_point(self.flight.departure.position)
|
end_distance = patrol_end.distance_to_point(self.flight.departure.position)
|
||||||
if end_distance < start_distance:
|
if end_distance < start_distance:
|
||||||
patrol_start, patrol_end = ingress, egress
|
patrol_start, patrol_end = patrol_end, patrol_start
|
||||||
|
|
||||||
builder = WaypointBuilder(self.flight)
|
builder = WaypointBuilder(self.flight)
|
||||||
|
|
||||||
@ -116,7 +113,7 @@ class Builder(IBuilder[CasFlightPlan, CasLayout]):
|
|||||||
|
|
||||||
ip_solver = IpSolver(
|
ip_solver = IpSolver(
|
||||||
dcs_to_shapely_point(self.flight.departure.position),
|
dcs_to_shapely_point(self.flight.departure.position),
|
||||||
dcs_to_shapely_point(ingress),
|
dcs_to_shapely_point(patrol_start),
|
||||||
self.doctrine,
|
self.doctrine,
|
||||||
self.threat_zones.all,
|
self.threat_zones.all,
|
||||||
)
|
)
|
||||||
@ -127,19 +124,19 @@ class Builder(IBuilder[CasFlightPlan, CasLayout]):
|
|||||||
if dump_debug_info:
|
if dump_debug_info:
|
||||||
ip_solver.dump_debug_info()
|
ip_solver.dump_debug_info()
|
||||||
|
|
||||||
ingress_point = ingress.new_in_same_map(
|
ingress_point = patrol_start.new_in_same_map(
|
||||||
ingress_point_shapely.x, ingress_point_shapely.y
|
ingress_point_shapely.x, ingress_point_shapely.y
|
||||||
)
|
)
|
||||||
|
|
||||||
patrol_start_waypoint = builder.nav(
|
patrol_start_waypoint = builder.nav(
|
||||||
ingress, ingress_egress_altitude, use_agl_patrol_altitude
|
patrol_start, ingress_egress_altitude, use_agl_patrol_altitude
|
||||||
)
|
)
|
||||||
patrol_start_waypoint.name = "FLOT START"
|
patrol_start_waypoint.name = "FLOT START"
|
||||||
patrol_start_waypoint.pretty_name = "FLOT start"
|
patrol_start_waypoint.pretty_name = "FLOT start"
|
||||||
patrol_start_waypoint.description = "FLOT boundary"
|
patrol_start_waypoint.description = "FLOT boundary"
|
||||||
|
|
||||||
patrol_end_waypoint = builder.nav(
|
patrol_end_waypoint = builder.nav(
|
||||||
egress, ingress_egress_altitude, use_agl_patrol_altitude
|
patrol_end, ingress_egress_altitude, use_agl_patrol_altitude
|
||||||
)
|
)
|
||||||
patrol_end_waypoint.name = "FLOT END"
|
patrol_end_waypoint.name = "FLOT END"
|
||||||
patrol_end_waypoint.pretty_name = "FLOT end"
|
patrol_end_waypoint.pretty_name = "FLOT end"
|
||||||
@ -159,7 +156,7 @@ class Builder(IBuilder[CasFlightPlan, CasLayout]):
|
|||||||
use_agl_patrol_altitude,
|
use_agl_patrol_altitude,
|
||||||
),
|
),
|
||||||
nav_from=builder.nav_path(
|
nav_from=builder.nav_path(
|
||||||
egress,
|
patrol_end,
|
||||||
self.flight.arrival.position,
|
self.flight.arrival.position,
|
||||||
ingress_egress_altitude,
|
ingress_egress_altitude,
|
||||||
use_agl_patrol_altitude,
|
use_agl_patrol_altitude,
|
||||||
|
|||||||
@ -366,9 +366,7 @@ class AircraftType(UnitType[Type[FlyingType]]):
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _migrator() -> Dict[str, str]:
|
def _migrator() -> Dict[str, str]:
|
||||||
return {
|
return {"F-15E Strike Eagle (AI)": "F-15E Strike Eagle"}
|
||||||
"F-15E Strike Eagle (AI)": "F-15E Strike Eagle"
|
|
||||||
}
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def named(cls, name: str) -> AircraftType:
|
def named(cls, name: str) -> AircraftType:
|
||||||
|
|||||||
@ -86,7 +86,7 @@ class DrawingsGenerator:
|
|||||||
"""
|
"""
|
||||||
for front_line in self.game.theater.conflicts():
|
for front_line in self.game.theater.conflicts():
|
||||||
bounds = FrontLineConflictDescription.frontline_bounds(
|
bounds = FrontLineConflictDescription.frontline_bounds(
|
||||||
front_line, self.game.theater, self.game.settings
|
front_line, self.game.theater
|
||||||
)
|
)
|
||||||
|
|
||||||
end_point = bounds.left_position.point_from_heading(
|
end_point = bounds.left_position.point_from_heading(
|
||||||
|
|||||||
@ -72,11 +72,12 @@ class FrontLineConflictDescription:
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def frontline_bounds(
|
def frontline_bounds(
|
||||||
cls, front_line: FrontLine, theater: ConflictTheater, settings: Settings
|
cls, front_line: FrontLine, theater: ConflictTheater
|
||||||
) -> FrontLineBounds:
|
) -> FrontLineBounds:
|
||||||
"""
|
"""
|
||||||
Returns a vector for a valid frontline location avoiding exclusion zones.
|
Returns a vector for a valid frontline location avoiding exclusion zones.
|
||||||
"""
|
"""
|
||||||
|
settings = front_line.coalition.game.settings
|
||||||
center_position, heading = cls.frontline_position(front_line, theater, settings)
|
center_position, heading = cls.frontline_position(front_line, theater, settings)
|
||||||
left_heading = heading.left
|
left_heading = heading.left
|
||||||
right_heading = heading.right
|
right_heading = heading.right
|
||||||
@ -96,12 +97,12 @@ class FrontLineConflictDescription:
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def frontline_cas_conflict(
|
def frontline_cas_conflict(
|
||||||
cls, front_line: FrontLine, theater: ConflictTheater, settings: Settings
|
cls, front_line: FrontLine, theater: ConflictTheater
|
||||||
) -> FrontLineConflictDescription:
|
) -> FrontLineConflictDescription:
|
||||||
# TODO: Break apart the front-line and air conflict descriptions.
|
# TODO: Break apart the front-line and air conflict descriptions.
|
||||||
# We're wastefully not caching the front-line bounds here because air conflicts
|
# We're wastefully not caching the front-line bounds here because air conflicts
|
||||||
# can't compute bounds, only a position.
|
# can't compute bounds, only a position.
|
||||||
bounds = cls.frontline_bounds(front_line, theater, settings)
|
bounds = cls.frontline_bounds(front_line, theater)
|
||||||
conflict = cls(
|
conflict = cls(
|
||||||
theater=theater,
|
theater=theater,
|
||||||
front_line=front_line,
|
front_line=front_line,
|
||||||
|
|||||||
@ -204,7 +204,7 @@ class MissionGenerator:
|
|||||||
player_cp = front_line.blue_cp
|
player_cp = front_line.blue_cp
|
||||||
enemy_cp = front_line.red_cp
|
enemy_cp = front_line.red_cp
|
||||||
conflict = FrontLineConflictDescription.frontline_cas_conflict(
|
conflict = FrontLineConflictDescription.frontline_cas_conflict(
|
||||||
front_line, self.game.theater, self.game.settings
|
front_line, self.game.theater
|
||||||
)
|
)
|
||||||
# Generate frontline ops
|
# Generate frontline ops
|
||||||
player_gp = self.game.ground_planners[player_cp.id].units_per_cp[
|
player_gp = self.game.ground_planners[player_cp.id].units_per_cp[
|
||||||
|
|||||||
@ -81,7 +81,7 @@ class VisualsGenerator:
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
bounds = FrontLineConflictDescription.frontline_bounds(
|
bounds = FrontLineConflictDescription.frontline_bounds(
|
||||||
front_line, self.game.theater, self.game.settings
|
front_line, self.game.theater
|
||||||
)
|
)
|
||||||
|
|
||||||
for offset in range(
|
for offset in range(
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user