Fotobox2/timer.py

52 lines
1.2 KiB
Python

from typing import Callable
class Timer:
def __init__(self, name: str, initial: float, seconds: float, count: int, callback: Callable[[], None] = None):
self._name = name
self._enabled = False
self._initial = initial
self._seconds = seconds
self._rest = 0
self._count = count
self._current = 0
self._callback = callback
def restart(self):
self._enabled = True
self._current = 0
self._rest = self._initial
def tick(self, dt: float):
if not self._enabled or self._seconds == 0 or self._current >= self._count:
return
self._rest -= dt
if self._rest <= 0:
self._current += 1
self._rest += self._seconds
if self._callback:
self._callback()
def cancel(self):
self._enabled = False
def current(self):
return self._current
def count(self):
return self._count
def rest(self):
return self._count - self._current
def complete(self):
return self._current >= self._count
def running(self):
return self._enabled and not self.complete()