mirror of
https://github.com/dcs-liberation/dcs_liberation.git
synced 2025-11-10 14:22:26 +00:00
46 lines
1.6 KiB
Python
46 lines
1.6 KiB
Python
from __future__ import annotations
|
|
|
|
from typing import Type
|
|
|
|
from game.theater import NavalControlPoint
|
|
from game.theater.theatergroundobject import NavalGroundObject
|
|
from .formationattack import (
|
|
FormationAttackBuilder,
|
|
FormationAttackFlightPlan,
|
|
FormationAttackLayout,
|
|
)
|
|
from .invalidobjectivelocation import InvalidObjectiveLocation
|
|
from .waypointbuilder import StrikeTarget
|
|
from ..flightwaypointtype import FlightWaypointType
|
|
|
|
|
|
class AntiShipFlightPlan(FormationAttackFlightPlan):
|
|
@staticmethod
|
|
def builder_type() -> Type[Builder]:
|
|
return Builder
|
|
|
|
|
|
class Builder(FormationAttackBuilder[AntiShipFlightPlan, FormationAttackLayout]):
|
|
def layout(self) -> FormationAttackLayout:
|
|
location = self.package.target
|
|
|
|
from game.transfers import CargoShip
|
|
|
|
if isinstance(location, NavalControlPoint):
|
|
targets = self.anti_ship_targets_for_tgo(location.find_main_tgo())
|
|
elif isinstance(location, NavalGroundObject):
|
|
targets = self.anti_ship_targets_for_tgo(location)
|
|
elif isinstance(location, CargoShip):
|
|
targets = [StrikeTarget(location.name, location)]
|
|
else:
|
|
raise InvalidObjectiveLocation(self.flight.flight_type, location)
|
|
|
|
return self._build(FlightWaypointType.INGRESS_ANTI_SHIP, targets)
|
|
|
|
@staticmethod
|
|
def anti_ship_targets_for_tgo(tgo: NavalGroundObject) -> list[StrikeTarget]:
|
|
return [StrikeTarget(f"{g.group_name} at {tgo.name}", g) for g in tgo.groups]
|
|
|
|
def build(self) -> AntiShipFlightPlan:
|
|
return AntiShipFlightPlan(self.flight, self.layout())
|