Source code for colosseumrl.FrameRateKeeper

from time import time, sleep


[docs]class FrameRateKeeper: """ Class for maintaining frame rate on server and keeping track of timeouts. """ def __init__(self, max_frame_rate: float): self.max_frame_rate: float = max_frame_rate self.max_frame_time: float = 1.0 / max_frame_rate self.frame_start_time: float = time() self.timeout_start_time: float = time() self.timeout_time: float = float('inf')
[docs] def tick(self) -> bool: """ Wait for a single frame roll to finish before returning and check to see if we have timed out Returns ------- bool: Whether or not we have timed out """ # Wait until the next frame roll wait_time = self.max_frame_time - (time() - self.frame_start_time) if wait_time > 0: sleep(wait_time) # Update time self.frame_start_time = time() # See if the timeout has triggered return (self.frame_start_time - self.timeout_start_time) > self.timeout_time
[docs] def start_timeout(self, seconds: float): """ Initiate a new timeout. You can only have one active timeout at a time. Parameters ---------- seconds: Number of seconds before triggering """ self.timeout_start_time: float = time() self.timeout_time = seconds