| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- """Contains the Timer class."""
- __all__ = ['Timer']
- from panda3d.core import ClockObject
- from . import Task
- from .TaskManagerGlobal import taskMgr
- class Timer:
- id = 0
- def __init__(self, name=None):
- self.finalT = 0.0
- self.currT = 0.0
- if name is None:
- name = 'default-timer-%d' % Timer.id
- Timer.id += 1
- self.name = name
- self.started = 0
- self.callback = None
- def start(self, t, name):
- if self.started:
- self.stop()
- self.callback = None
- self.finalT = t
- self.name = name
- self.startT = ClockObject.getGlobalClock().getFrameTime()
- self.currT = 0.0
- taskMgr.add(self.__timerTask, self.name + '-run')
- self.started = 1
- def startCallback(self, t, callback):
- if self.started:
- self.stop()
- self.callback = callback
- self.finalT = t
- self.startT = ClockObject.getGlobalClock().getFrameTime()
- self.currT = 0.0
- taskMgr.add(self.__timerTask, self.name + '-run')
- self.started = 1
- def stop(self):
- if not self.started:
- return 0.0
- taskMgr.remove(self.name + '-run')
- self.started = 0
- return self.currT
- def resume(self):
- assert self.currT <= self.finalT
- assert self.started == 0
- self.start(self.finalT - self.currT, self.name)
- def restart(self):
- if self.callback is not None:
- self.startCallback(self.finalT, self.callback)
- else:
- self.start(self.finalT, self.name)
- def isStarted(self):
- return self.started
- def addT(self, t):
- self.finalT = self.finalT + t
- def setT(self, t):
- self.finalT = t
- def getT(self):
- return self.finalT - self.currT
- def __timerTask(self, task):
- t = ClockObject.getGlobalClock().getFrameTime()
- te = t - self.startT
- self.currT = te
- if te >= self.finalT:
- if self.callback is not None:
- self.callback()
- else:
- from direct.showbase.MessengerGlobal import messenger
- messenger.send(self.name)
- return Task.done
- return Task.cont
|