From 4161ec9c5bd574d9695f4c32441c7ad8ba16fd43 Mon Sep 17 00:00:00 2001 From: Brosef Date: Sat, 21 Jun 2025 23:03:11 +0100 Subject: [PATCH] Added timeouts --- src/gameUtils/__init__.py | 3 ++- src/gameUtils/base.py | 26 +++++++++++++++++++++++++- src/gameUtils/events.py | 17 ++++++++++++++++- 3 files changed, 43 insertions(+), 3 deletions(-) diff --git a/src/gameUtils/__init__.py b/src/gameUtils/__init__.py index 9c07602..c96e437 100644 --- a/src/gameUtils/__init__.py +++ b/src/gameUtils/__init__.py @@ -3,4 +3,5 @@ from .utils import centre from .anim import AnimationHandler from .anim import AnimatedObject from .events import AnimStart -from .events import AnimFinish \ No newline at end of file +from .events import AnimFinish +from .events import Timeout \ No newline at end of file diff --git a/src/gameUtils/base.py b/src/gameUtils/base.py index f9c3c87..ba4f4f5 100644 --- a/src/gameUtils/base.py +++ b/src/gameUtils/base.py @@ -1,5 +1,7 @@ +from .events import Timeout from .anim import AnimatedObject import tomllib +import time class Game: def __init__(self, surface): @@ -13,12 +15,21 @@ class Game: self.surf = surface self.size = self.surf.size self.pm = None + # Holds all the timeouts that haven't been fired yet + self._timeouts = [] with open('./game.toml', 'r') as f: self.cfg = tomllib.loads(f.read()) def update(self): - pass + """ + Updates some core things in the background. + """ + + for timeout in self._timeouts.copy(): + if timeout.fireOn <= time.perf_counter(): + self.onEvent(timeout) + self._timeouts.remove(timeout) def onEvent(self, event): pass @@ -28,3 +39,16 @@ class Game: def createAnimObj(self, *args, **kwargs): return AnimatedObject(self, *args, **kwargs) + + def timeout(self, id: str, delay: float): + """ + Fires a Timeout event with the specified ID + after the specified delay. + + Args: + id (str): The timeout ID. + delay (float): How long (in seconds) + to wait before firing. + """ + + self._timeouts.append(Timeout(id, time.perf_counter()+delay)) \ No newline at end of file diff --git a/src/gameUtils/events.py b/src/gameUtils/events.py index 8fd4b36..73014dc 100644 --- a/src/gameUtils/events.py +++ b/src/gameUtils/events.py @@ -1,3 +1,5 @@ +import time + class _event: def __init__(self): self.type = self.__class__ @@ -18,4 +20,17 @@ class AnimFinish(_event): self.animationID = animationID def __repr__(self): - return f'' \ No newline at end of file + return f'' + +class Timeout(_event): + def __init__(self, timeoutID, fireOn): + super().__init__() + # The timeout ID specified by the user + self.timeoutID = timeoutID + # When the event should be fired + self.fireOn = fireOn + # When it was created + self.created = time.perf_counter() + + def __repr__(self): + return f'' \ No newline at end of file