From e31195d486af5f9d38ce567533f0b9031319e7b0 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Thu, 4 Jan 2024 02:35:11 +0200 Subject: [PATCH] feat(game): add `Timer` --- src/game/timer.py | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 src/game/timer.py diff --git a/src/game/timer.py b/src/game/timer.py new file mode 100644 index 0000000..1bb0db1 --- /dev/null +++ b/src/game/timer.py @@ -0,0 +1,32 @@ +from typing import Callable, Optional + +import pygame +from attrs import define, field + + +@define +class Timer: + duration: int = field(converter=int) + repeated: bool = field(default=False) + func: Optional[Callable[[None], None]] = field(default=None) + start_time: int = 0 + active: bool = False + + def activate(self) -> None: + self.active = True + self.start_time = pygame.time.get_ticks() + + def deactivate(self) -> None: + self.active = False + self.start_time = 0 + + def update(self) -> None: + current_time = pygame.time.get_ticks() + if current_time - self.start_time >= self.duration and self.active: + if self.func and self.start_time: + self.func() + + self.deactivate() + + if self.repeated: + self.activate()