mirror of
https://github.com/dcs-liberation/dcs_liberation.git
synced 2025-11-10 14:22:26 +00:00
Simplfy fast forward settings, introduce ability to skip combat instead of resolving. (#3448)
This PR simplifies fast forward settings and introduces the ability to skip combat instead of resolving.
This commit is contained in:
@@ -8,6 +8,7 @@ from typing import TYPE_CHECKING
|
||||
from shapely.ops import unary_union
|
||||
|
||||
from game.ato.flightstate import InCombat, InFlight
|
||||
from game.settings.settings import CombatResolutionMethod
|
||||
from game.utils import dcs_to_shapely_point
|
||||
from .joinablecombat import JoinableCombat
|
||||
from .. import GameUpdateEvents
|
||||
@@ -67,7 +68,15 @@ class AirCombat(JoinableCombat):
|
||||
events: GameUpdateEvents,
|
||||
time: datetime,
|
||||
elapsed_time: timedelta,
|
||||
resolution_method: CombatResolutionMethod,
|
||||
) -> None:
|
||||
|
||||
if resolution_method is CombatResolutionMethod.SKIP:
|
||||
for flight in self.flights:
|
||||
assert isinstance(flight.state, InCombat)
|
||||
flight.state.exit_combat(events, time, elapsed_time)
|
||||
return
|
||||
|
||||
blue = []
|
||||
red = []
|
||||
for flight in self.flights:
|
||||
|
||||
@@ -8,6 +8,7 @@ from typing import TYPE_CHECKING
|
||||
from .frozencombat import FrozenCombat
|
||||
from .. import GameUpdateEvents
|
||||
from ...ato.flightstate import InCombat
|
||||
from game.settings.settings import CombatResolutionMethod
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from game.ato import Flight
|
||||
@@ -34,6 +35,7 @@ class AtIp(FrozenCombat):
|
||||
events: GameUpdateEvents,
|
||||
time: datetime,
|
||||
elapsed_time: timedelta,
|
||||
resolution_method: CombatResolutionMethod,
|
||||
) -> None:
|
||||
logging.debug(
|
||||
f"{self.flight} attack on {self.flight.package.target} auto-resolved with "
|
||||
|
||||
@@ -7,6 +7,7 @@ from datetime import datetime, timedelta
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from game.ato.flightstate import InCombat
|
||||
from game.settings.settings import CombatResolutionMethod
|
||||
from .frozencombat import FrozenCombat
|
||||
from .. import GameUpdateEvents
|
||||
|
||||
@@ -43,8 +44,14 @@ class DefendingSam(FrozenCombat):
|
||||
events: GameUpdateEvents,
|
||||
time: datetime,
|
||||
elapsed_time: timedelta,
|
||||
resolution_method: CombatResolutionMethod,
|
||||
) -> None:
|
||||
assert isinstance(self.flight.state, InCombat)
|
||||
|
||||
if resolution_method is CombatResolutionMethod.SKIP:
|
||||
self.flight.state.exit_combat(events, time, elapsed_time)
|
||||
return
|
||||
|
||||
if random.random() >= 0.5:
|
||||
logging.debug(f"Air defense combat auto-resolved with {self.flight} lost")
|
||||
self.flight.kill(results, events)
|
||||
|
||||
@@ -7,6 +7,7 @@ from datetime import datetime, timedelta
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from game.ato.flightstate import InCombat, InFlight
|
||||
from game.settings.settings import CombatResolutionMethod
|
||||
from .. import GameUpdateEvents
|
||||
|
||||
if TYPE_CHECKING:
|
||||
@@ -26,10 +27,11 @@ class FrozenCombat(ABC):
|
||||
duration: timedelta,
|
||||
results: SimulationResults,
|
||||
events: GameUpdateEvents,
|
||||
resolution_method: CombatResolutionMethod,
|
||||
) -> bool:
|
||||
self.elapsed_time += duration
|
||||
if self.elapsed_time >= self.freeze_duration:
|
||||
self.resolve(results, events, time, self.elapsed_time)
|
||||
self.resolve(results, events, time, self.elapsed_time, resolution_method)
|
||||
return True
|
||||
return False
|
||||
|
||||
@@ -40,6 +42,7 @@ class FrozenCombat(ABC):
|
||||
events: GameUpdateEvents,
|
||||
time: datetime,
|
||||
elapsed_time: timedelta,
|
||||
resolution_method: CombatResolutionMethod,
|
||||
) -> None: ...
|
||||
|
||||
@abstractmethod
|
||||
|
||||
Reference in New Issue
Block a user