nodes/turn.pyΒΆ
Part of Tanks of Freedom.
1"""TurnManager: alternates blue / red turns, tracks game-over state.
2
3Pure state: visual feedback (HUD label, end-turn flash) is the world's job.
4"""
5
6from __future__ import annotations
7
8from enum import Enum, auto
9
10from simvx.core import Signal
11
12from .data import PLAYER_BLUE, PLAYER_RED
13
14
15class GameState(Enum):
16 PLAYER_TURN = auto()
17 AI_TURN = auto()
18 GAME_OVER = auto()
19
20
21class TurnManager:
22 def __init__(self):
23 self.current = PLAYER_BLUE
24 self.turn_number = 1
25 self.state = GameState.PLAYER_TURN
26 self.winner: int | None = None
27 self.turn_started = Signal() # (player)
28 self.turn_ended = Signal() # (player)
29 self.game_over = Signal() # (winner)
30
31 def end_turn(self) -> None:
32 self.turn_ended(self.current)
33 if self.state == GameState.GAME_OVER:
34 return
35 if self.current == PLAYER_BLUE:
36 self.current = PLAYER_RED
37 self.state = GameState.AI_TURN
38 else:
39 self.current = PLAYER_BLUE
40 self.state = GameState.PLAYER_TURN
41 self.turn_number += 1
42 self.turn_started(self.current)
43
44 def declare_winner(self, player: int) -> None:
45 self.winner = player
46 self.state = GameState.GAME_OVER
47 self.game_over(player)