diff --git a/src/dndbuster/timer.py b/src/dndbuster/timer.py index ceae7e2..92f538c 100644 --- a/src/dndbuster/timer.py +++ b/src/dndbuster/timer.py @@ -1,58 +1,81 @@ import time -class Timer: +class SimpleTimer: def __init__(self) -> None: - self.start_seconds: float | None= None - self.pause_timer: Timer | None = None + self.start_seconds: float = 0 + self.started = False def start(self) -> None: """ Start time measurement """ - self.start_seconds = self.current_time() - + if not self.started: + self.start_seconds = self.current_time() + self.started = True def is_started(self) -> bool: """ :return: Weather time measurement has been started. """ - return self.start_seconds is not None + return self.started + + def read(self) -> float: + """ + Return measured time in seconds. + """ + if self.started: + end_seconds = self.current_time() + delta = end_seconds - self.start_seconds + return delta + else: + raise ValueError(f'{self.__class__.__name__} has to be started before there is a time measurement.') + + def reset(self) -> None: + self.started = False + + @classmethod + def current_time(cls): + return time.time() + + +class Timer(SimpleTimer): + def __init__(self) -> None: + super().__init__() + self.pause_timer = SimpleTimer() def pause(self) -> None: """ Pause time measurement. """ - self.pause_timer = Timer() self.pause_timer.start() def is_paused(self) -> bool: """ :return: Weather time measurement is paused. """ - return self.pause_timer is not None + return self.pause_timer.is_started() def resume(self) -> None: """ Resumes time measurement. """ - if self.pause_timer: + if self.is_paused(): pause_delta = self.pause_timer.read() self.start_seconds += pause_delta - self.pause_timer = None + self.pause_timer.reset() def read(self) -> float: """ Return measured time in seconds. """ - end_seconds = self.current_time() - delta = end_seconds - self.start_seconds + delta = SimpleTimer.read(self) if self.is_paused(): delta -= self.pause_timer.read() return delta - @classmethod - def current_time(cls): - return time.time() + def reset(self) -> None: + SimpleTimer.reset(self) + self.pause_timer.reset()