49 lines
1.1 KiB
Python
49 lines
1.1 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._current >= self._count:
|
|
return
|
|
|
|
self._rest -= dt
|
|
if self._rest <= 0:
|
|
self._current += 1
|
|
self._rest += self._seconds
|
|
if self._callback:
|
|
self._callback()
|
|
|
|
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()
|