mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
Speed up turn processing.
Run the expensive precondition check (package fulfillment) last.
This commit is contained in:
parent
8e59c99666
commit
c1d3c93dbb
@ -105,8 +105,9 @@ class PackageFulfiller:
|
|||||||
|
|
||||||
missing_types_str = ", ".join(sorted([t.name for t in missing_types]))
|
missing_types_str = ", ".join(sorted([t.name for t in missing_types]))
|
||||||
builder.release_planned_aircraft()
|
builder.release_planned_aircraft()
|
||||||
|
color = "Blue" if self.is_player else "Red"
|
||||||
logging.debug(
|
logging.debug(
|
||||||
f"Not enough aircraft in range for {mission.location.name} "
|
f"{color}: not enough aircraft in range for {mission.location.name} "
|
||||||
f"capable of: {missing_types_str}"
|
f"capable of: {missing_types_str}"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@ -13,11 +13,11 @@ from gen.flights.flight import FlightType
|
|||||||
@dataclass
|
@dataclass
|
||||||
class PlanAntiShip(PackagePlanningTask[NavalGroundObject]):
|
class PlanAntiShip(PackagePlanningTask[NavalGroundObject]):
|
||||||
def preconditions_met(self, state: TheaterState) -> bool:
|
def preconditions_met(self, state: TheaterState) -> bool:
|
||||||
if not super().preconditions_met(state):
|
|
||||||
return False
|
|
||||||
if self.target not in state.threatening_air_defenses:
|
if self.target not in state.threatening_air_defenses:
|
||||||
return False
|
return False
|
||||||
return self.target_area_preconditions_met(state, ignore_iads=True)
|
if not self.target_area_preconditions_met(state, ignore_iads=True):
|
||||||
|
return False
|
||||||
|
return super().preconditions_met(state)
|
||||||
|
|
||||||
def apply_effects(self, state: TheaterState) -> None:
|
def apply_effects(self, state: TheaterState) -> None:
|
||||||
state.eliminate_ship(self.target)
|
state.eliminate_ship(self.target)
|
||||||
|
|||||||
@ -12,11 +12,11 @@ from gen.flights.flight import FlightType
|
|||||||
@dataclass
|
@dataclass
|
||||||
class PlanAntiShipping(PackagePlanningTask[CargoShip]):
|
class PlanAntiShipping(PackagePlanningTask[CargoShip]):
|
||||||
def preconditions_met(self, state: TheaterState) -> bool:
|
def preconditions_met(self, state: TheaterState) -> bool:
|
||||||
if not super().preconditions_met(state):
|
|
||||||
return False
|
|
||||||
if self.target not in state.enemy_shipping:
|
if self.target not in state.enemy_shipping:
|
||||||
return False
|
return False
|
||||||
return self.target_area_preconditions_met(state)
|
if not self.target_area_preconditions_met(state):
|
||||||
|
return False
|
||||||
|
return super().preconditions_met(state)
|
||||||
|
|
||||||
def apply_effects(self, state: TheaterState) -> None:
|
def apply_effects(self, state: TheaterState) -> None:
|
||||||
state.enemy_shipping.remove(self.target)
|
state.enemy_shipping.remove(self.target)
|
||||||
|
|||||||
@ -12,11 +12,11 @@ from gen.flights.flight import FlightType
|
|||||||
@dataclass
|
@dataclass
|
||||||
class PlanBai(PackagePlanningTask[VehicleGroupGroundObject]):
|
class PlanBai(PackagePlanningTask[VehicleGroupGroundObject]):
|
||||||
def preconditions_met(self, state: TheaterState) -> bool:
|
def preconditions_met(self, state: TheaterState) -> bool:
|
||||||
if not super().preconditions_met(state):
|
|
||||||
return False
|
|
||||||
if not state.has_garrison(self.target):
|
if not state.has_garrison(self.target):
|
||||||
return False
|
return False
|
||||||
return self.target_area_preconditions_met(state)
|
if not self.target_area_preconditions_met(state):
|
||||||
|
return False
|
||||||
|
return super().preconditions_met(state)
|
||||||
|
|
||||||
def apply_effects(self, state: TheaterState) -> None:
|
def apply_effects(self, state: TheaterState) -> None:
|
||||||
state.eliminate_garrison(self.target)
|
state.eliminate_garrison(self.target)
|
||||||
|
|||||||
@ -12,9 +12,9 @@ from gen.flights.flight import FlightType
|
|||||||
@dataclass
|
@dataclass
|
||||||
class PlanBarcap(PackagePlanningTask[ControlPoint]):
|
class PlanBarcap(PackagePlanningTask[ControlPoint]):
|
||||||
def preconditions_met(self, state: TheaterState) -> bool:
|
def preconditions_met(self, state: TheaterState) -> bool:
|
||||||
if not super().preconditions_met(state):
|
if not state.barcaps_needed[self.target]:
|
||||||
return False
|
return False
|
||||||
return state.barcaps_needed[self.target] > 0
|
return super().preconditions_met(state)
|
||||||
|
|
||||||
def apply_effects(self, state: TheaterState) -> None:
|
def apply_effects(self, state: TheaterState) -> None:
|
||||||
state.barcaps_needed[self.target] -= 1
|
state.barcaps_needed[self.target] -= 1
|
||||||
|
|||||||
@ -12,9 +12,9 @@ from gen.flights.flight import FlightType
|
|||||||
@dataclass
|
@dataclass
|
||||||
class PlanCas(PackagePlanningTask[FrontLine]):
|
class PlanCas(PackagePlanningTask[FrontLine]):
|
||||||
def preconditions_met(self, state: TheaterState) -> bool:
|
def preconditions_met(self, state: TheaterState) -> bool:
|
||||||
if not super().preconditions_met(state):
|
if self.target not in state.vulnerable_front_lines:
|
||||||
return False
|
return False
|
||||||
return self.target in state.vulnerable_front_lines
|
return super().preconditions_met(state)
|
||||||
|
|
||||||
def apply_effects(self, state: TheaterState) -> None:
|
def apply_effects(self, state: TheaterState) -> None:
|
||||||
state.vulnerable_front_lines.remove(self.target)
|
state.vulnerable_front_lines.remove(self.target)
|
||||||
|
|||||||
@ -12,11 +12,11 @@ from gen.flights.flight import FlightType
|
|||||||
@dataclass
|
@dataclass
|
||||||
class PlanConvoyInterdiction(PackagePlanningTask[Convoy]):
|
class PlanConvoyInterdiction(PackagePlanningTask[Convoy]):
|
||||||
def preconditions_met(self, state: TheaterState) -> bool:
|
def preconditions_met(self, state: TheaterState) -> bool:
|
||||||
if not super().preconditions_met(state):
|
|
||||||
return False
|
|
||||||
if self.target not in state.enemy_convoys:
|
if self.target not in state.enemy_convoys:
|
||||||
return False
|
return False
|
||||||
return self.target_area_preconditions_met(state)
|
if not self.target_area_preconditions_met(state):
|
||||||
|
return False
|
||||||
|
return super().preconditions_met(state)
|
||||||
|
|
||||||
def apply_effects(self, state: TheaterState) -> None:
|
def apply_effects(self, state: TheaterState) -> None:
|
||||||
state.enemy_convoys.remove(self.target)
|
state.enemy_convoys.remove(self.target)
|
||||||
|
|||||||
@ -13,14 +13,14 @@ from gen.flights.flight import FlightType
|
|||||||
@dataclass
|
@dataclass
|
||||||
class PlanDead(PackagePlanningTask[IadsGroundObject]):
|
class PlanDead(PackagePlanningTask[IadsGroundObject]):
|
||||||
def preconditions_met(self, state: TheaterState) -> bool:
|
def preconditions_met(self, state: TheaterState) -> bool:
|
||||||
if not super().preconditions_met(state):
|
|
||||||
return False
|
|
||||||
if (
|
if (
|
||||||
self.target not in state.threatening_air_defenses
|
self.target not in state.threatening_air_defenses
|
||||||
and self.target not in state.detecting_air_defenses
|
and self.target not in state.detecting_air_defenses
|
||||||
):
|
):
|
||||||
return False
|
return False
|
||||||
return self.target_area_preconditions_met(state, ignore_iads=True)
|
if not self.target_area_preconditions_met(state, ignore_iads=True):
|
||||||
|
return False
|
||||||
|
return super().preconditions_met(state)
|
||||||
|
|
||||||
def apply_effects(self, state: TheaterState) -> None:
|
def apply_effects(self, state: TheaterState) -> None:
|
||||||
state.eliminate_air_defense(self.target)
|
state.eliminate_air_defense(self.target)
|
||||||
|
|||||||
@ -14,11 +14,11 @@ class PlanOcaStrike(PackagePlanningTask[ControlPoint]):
|
|||||||
aircraft_cold_start: bool
|
aircraft_cold_start: bool
|
||||||
|
|
||||||
def preconditions_met(self, state: TheaterState) -> bool:
|
def preconditions_met(self, state: TheaterState) -> bool:
|
||||||
if not super().preconditions_met(state):
|
|
||||||
return False
|
|
||||||
if self.target not in state.oca_targets:
|
if self.target not in state.oca_targets:
|
||||||
return False
|
return False
|
||||||
return self.target_area_preconditions_met(state)
|
if not self.target_area_preconditions_met(state):
|
||||||
|
return False
|
||||||
|
return super().preconditions_met(state)
|
||||||
|
|
||||||
def apply_effects(self, state: TheaterState) -> None:
|
def apply_effects(self, state: TheaterState) -> None:
|
||||||
state.oca_targets.remove(self.target)
|
state.oca_targets.remove(self.target)
|
||||||
|
|||||||
@ -13,11 +13,11 @@ from gen.flights.flight import FlightType
|
|||||||
@dataclass
|
@dataclass
|
||||||
class PlanStrike(PackagePlanningTask[TheaterGroundObject[Any]]):
|
class PlanStrike(PackagePlanningTask[TheaterGroundObject[Any]]):
|
||||||
def preconditions_met(self, state: TheaterState) -> bool:
|
def preconditions_met(self, state: TheaterState) -> bool:
|
||||||
if not super().preconditions_met(state):
|
|
||||||
return False
|
|
||||||
if self.target not in state.strike_targets:
|
if self.target not in state.strike_targets:
|
||||||
return False
|
return False
|
||||||
return self.target_area_preconditions_met(state)
|
if not self.target_area_preconditions_met(state):
|
||||||
|
return False
|
||||||
|
return super().preconditions_met(state)
|
||||||
|
|
||||||
def apply_effects(self, state: TheaterState) -> None:
|
def apply_effects(self, state: TheaterState) -> None:
|
||||||
state.strike_targets.remove(self.target)
|
state.strike_targets.remove(self.target)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user