Source code for pyunity.values.other
__all__ = ["Clock", "ImmutableStruct"]
import time
import sys
from ..errors import PyUnityException
[docs]class Clock:
def __init__(self):
self._fps = 60
self._frameDuration = 1 / self._fps
@property
def fps(self):
return self._fps
@fps.setter
def fps(self, value):
self._fps = value
if value == 0:
self._frameDuration = 0
else:
self._frameDuration = 1 / self._fps
[docs] def Start(self, fps=None):
if fps is not None:
self.fps = fps
self._start = time.time()
[docs] def Maintain(self):
self._end = time.time()
elapsedMS = self._end - self._start
sleep = self._frameDuration - elapsedMS - 0.001
if sleep <= 0:
self._start = time.time()
return sys.float_info.epsilon
time.sleep(sleep)
self._start = time.time()
return sleep
[docs]class ImmutableStruct(type):
_names = []
def __setattr__(self, name, value):
if name in self._names:
raise PyUnityException(f"Property {name!r} is read-only")
super().__setattr__(name, value)
def __delattr__(self, name):
if name in self._names:
raise PyUnityException(f"Property {name!r} is read-only")
super().__delattr__(name)
def _set(self, name, value):
super().__setattr__(name, value)