mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
Fix win/loss not triggering when carriers are present
This commit is contained in:
parent
6e4d1e9e5c
commit
40a733e147
@ -362,10 +362,10 @@ class Game:
|
|||||||
persistency.autosave(self)
|
persistency.autosave(self)
|
||||||
|
|
||||||
def check_win_loss(self) -> TurnState:
|
def check_win_loss(self) -> TurnState:
|
||||||
if not self.theater.player_points():
|
if not self.theater.player_points(state_check=True):
|
||||||
return TurnState.LOSS
|
return TurnState.LOSS
|
||||||
|
|
||||||
if not self.theater.enemy_points():
|
if not self.theater.enemy_points(state_check=True):
|
||||||
return TurnState.WIN
|
return TurnState.WIN
|
||||||
|
|
||||||
return TurnState.CONTINUE
|
return TurnState.CONTINUE
|
||||||
|
|||||||
@ -120,20 +120,27 @@ class ConflictTheater:
|
|||||||
)
|
)
|
||||||
return new_point
|
return new_point
|
||||||
|
|
||||||
def control_points_for(self, player: bool) -> Iterator[ControlPoint]:
|
def control_points_for(
|
||||||
|
self, player: bool, state_check: bool = False
|
||||||
|
) -> Iterator[ControlPoint]:
|
||||||
for point in self.controlpoints:
|
for point in self.controlpoints:
|
||||||
if point.captured == player:
|
if point.captured == player:
|
||||||
|
if not state_check:
|
||||||
|
yield point
|
||||||
|
elif point.is_carrier and point.runway_is_operational():
|
||||||
|
yield point
|
||||||
|
elif not point.is_carrier:
|
||||||
yield point
|
yield point
|
||||||
|
|
||||||
def player_points(self) -> List[ControlPoint]:
|
def player_points(self, state_check: bool = False) -> List[ControlPoint]:
|
||||||
return list(self.control_points_for(player=True))
|
return list(self.control_points_for(player=True, state_check=state_check))
|
||||||
|
|
||||||
def conflicts(self) -> Iterator[FrontLine]:
|
def conflicts(self) -> Iterator[FrontLine]:
|
||||||
for cp in self.player_points():
|
for cp in self.player_points():
|
||||||
yield from cp.front_lines.values()
|
yield from cp.front_lines.values()
|
||||||
|
|
||||||
def enemy_points(self) -> List[ControlPoint]:
|
def enemy_points(self, state_check: bool = False) -> List[ControlPoint]:
|
||||||
return list(self.control_points_for(player=False))
|
return list(self.control_points_for(player=False, state_check=state_check))
|
||||||
|
|
||||||
def closest_control_point(
|
def closest_control_point(
|
||||||
self, point: Point, allow_naval: bool = False
|
self, point: Point, allow_naval: bool = False
|
||||||
|
|||||||
@ -166,6 +166,8 @@ class QTopPanel(QFrame):
|
|||||||
with logged_duration("Skipping turn"):
|
with logged_duration("Skipping turn"):
|
||||||
self.game.pass_turn(no_action=True)
|
self.game.pass_turn(no_action=True)
|
||||||
GameUpdateSignal.get_instance().updateGame(self.game)
|
GameUpdateSignal.get_instance().updateGame(self.game)
|
||||||
|
state = self.game_model.game.check_win_loss()
|
||||||
|
GameUpdateSignal.get_instance().gameStateChanged(state)
|
||||||
self.proceedButton.setEnabled(True)
|
self.proceedButton.setEnabled(True)
|
||||||
|
|
||||||
def negative_start_packages(self, now: datetime) -> List[Package]:
|
def negative_start_packages(self, now: datetime) -> List[Package]:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user