added FrameDelayedCallback, DelayedCallback->DelayedFunctor

This commit is contained in:
Darren Ranalli 2006-07-21 04:21:39 +00:00
parent fd73cf9560
commit ae56529276
1 changed files with 39 additions and 8 deletions

View File

@ -2258,17 +2258,18 @@ class DelayedCall:
del self._func
func()
class DelayedCallback:
""" waits for this object to be called, then calls your callback after a delay """
def __init__(self, callback, name=None, delay=None):
self._callback = callback
class DelayedFunctor:
""" Waits for this object to be called, then calls supplied functor after a delay.
Effectively inserts a time delay between the caller and the functor. """
def __init__(self, functor, name=None, delay=None):
self._functor = functor
self._name = name
# FunctionInterval requires __name__
self.__name__ = self._name
self._delay = delay
def _doCallback(self):
cb = Functor(self._callback, *self._args, **self._kwArgs)
del self._callback
def _callFunctor(self):
cb = Functor(self._functor, *self._args, **self._kwArgs)
del self._functor
del self._name
del self._delay
del self._args
@ -2279,7 +2280,37 @@ class DelayedCallback:
def __call__(self, *args, **kwArgs):
self._args = args
self._kwArgs = kwArgs
self._delayedCall = DelayedCall(self._doCallback, self._name, self._delay)
self._delayedCall = DelayedCall(self._callFunctor, self._name, self._delay)
class FrameDelayedCallback:
""" 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):
if self._cancelFunc():
self.destroy()
return task.done
self._counter += 1
if self._counter >= self._frames:
self.finish()
return task.done
return task.cont
import __builtin__
__builtin__.Functor = Functor