mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-04 02:42:49 -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