From 132cfab9905a1ffc94165cb9cf50a3665b6d9205 Mon Sep 17 00:00:00 2001 From: Brosef Date: Mon, 23 Jun 2025 12:30:39 +0100 Subject: [PATCH] Started work on turn based systems --- src/gameUtils/__init__.py | 4 ++- src/gameUtils/turns.py | 54 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 src/gameUtils/turns.py diff --git a/src/gameUtils/__init__.py b/src/gameUtils/__init__.py index c96e437..c696dae 100644 --- a/src/gameUtils/__init__.py +++ b/src/gameUtils/__init__.py @@ -4,4 +4,6 @@ from .anim import AnimationHandler from .anim import AnimatedObject from .events import AnimStart from .events import AnimFinish -from .events import Timeout \ No newline at end of file +from .events import Timeout +from .turns import BaseTurnHandler +from .turns import RoundTable diff --git a/src/gameUtils/turns.py b/src/gameUtils/turns.py new file mode 100644 index 0000000..9dc4fc4 --- /dev/null +++ b/src/gameUtils/turns.py @@ -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 \ No newline at end of file