Tetris/src/game/timer.py
2024-01-04 05:36:00 +02:00

39 lines
930 B
Python

from typing import Callable, NamedTuple, Optional
import pygame
from attrs import define, field
@define
class Timer:
duration: float = field(converter=float)
repeated: bool = field(default=False)
func: Optional[Callable[[], 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()
class Timers(NamedTuple):
vertical: Timer
horizontal: Timer
rotation: Timer