Started work on turn based systems

This commit is contained in:
2025-06-23 12:30:39 +01:00
parent c2db8b386e
commit 132cfab990
2 changed files with 57 additions and 1 deletions

View File

@ -5,3 +5,5 @@ from .anim import AnimatedObject
from .events import AnimStart
from .events import AnimFinish
from .events import Timeout
from .turns import BaseTurnHandler
from .turns import RoundTable

54
src/gameUtils/turns.py Normal file
View File

@ -0,0 +1,54 @@
class BaseTurnHandler:
def __init__(self, playersManager):
"""
The base turn handler metaclass, used to create round
handlers such as round table.
"""
self._pm = playersManager
# The current turn number (0 based)
self.turn = 0
# The maximum number of turns
self.turns = len(self._pm)
# The current round number (0 based)
self.round = 0
# Which players are playing in this turn
self.playing = []
def next(self):
raise NotImplementedError
class RoundTable(BaseTurnHandler):
"""
A simple "round table" round system.
"""
# TODO: Add some kind of implementation with NoPE
# to determain if we actually need to re-assign PDOs.
def __init__(self, teamSize: int, *args, **kwargs):
"""
"""
super().__init__(*args, **kwargs)
if teamSize > len(self._pm):
raise Exception('Too little players for specified team size.') # TODO: Custom exception
self.temaSize = teamSize
self.turns //= self.temaSize
def next(self):
"""
Oh god I hate it.
"""
self.turn += 1
if self.turn >= self.turns:
self.turn -= self.turns
self.round += 1
self.playing = []
playerNames = self._pm.keys()
for i in range(self.temaSize):
self.playing.append(self._pm[playerNames[(i+self.temaSize)%len(playerNames)]])
return self.playing