mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-03 18:31:55 -04:00
first rev
This commit is contained in:
parent
6c46fccb42
commit
bb3f17e923
31
direct/src/showbase/DelayedCallback.py
Executable file
31
direct/src/showbase/DelayedCallback.py
Executable file
@ -0,0 +1,31 @@
|
||||
from direct.task.Task import Task
|
||||
|
||||
class DelayedCallback:
|
||||
""" waits N frames and then calls a callback """
|
||||
def __init__(self, frames, callback, cancelFunc=None):
|
||||
# checkFunc is optional; called every frame, if returns True, FrameDelay is cancelled
|
||||
# and callback is not called
|
||||
self._frames = frames
|
||||
self._callback = callback
|
||||
self._cancelFunc = cancelFunc
|
||||
self._taskName = uniqueName(self.__class__.__name__)
|
||||
self._startTask()
|
||||
def destroy(self):
|
||||
self._stopTask()
|
||||
def finish(self):
|
||||
self._callback()
|
||||
self.destroy()
|
||||
def _startTask(self):
|
||||
taskMgr.add(self._frameTask, self._taskName)
|
||||
self._counter = 0
|
||||
def _stopTask(self):
|
||||
taskMgr.remove(self._taskName)
|
||||
def _frameTask(self, task=None):
|
||||
if self._cancelFunc():
|
||||
self.destroy()
|
||||
return Task.done
|
||||
self._counter += 1
|
||||
if self._counter >= self._frames:
|
||||
self.finish()
|
||||
return Task.done
|
||||
return Task.cont
|
Loading…
x
Reference in New Issue
Block a user