Browse Source

FrameDelayedCallback->FrameDelayedCall, bug fixes, moved DelayedFunctor (no changes)

Darren Ranalli 19 years ago
parent
commit
aa9e13efe1
1 changed files with 32 additions and 30 deletions
  1. 32 30
      direct/src/showbase/PythonUtil.py

+ 32 - 30
direct/src/showbase/PythonUtil.py

@@ -23,7 +23,7 @@ __all__ = ['enumerate', 'unique', 'indent', 'nonRepeatingRandomList',
 '_equal', '_notEqual', '_isNone', '_notNone', '_contains', '_notIn',
 '_equal', '_notEqual', '_isNone', '_notNone', '_contains', '_notIn',
 'ScratchPad', 'Sync', 'RefCounter', 'itype', 'getNumberedTypedString',
 'ScratchPad', 'Sync', 'RefCounter', 'itype', 'getNumberedTypedString',
 'printNumberedTyped', 'DelayedCall', 'DelayedFunctor',
 'printNumberedTyped', 'DelayedCall', 'DelayedFunctor',
-'FrameDelayedCallback', 'ArgumentEater', 'ClassTree', 'getBase',
+'FrameDelayedCall', 'ArgumentEater', 'ClassTree', 'getBase',
 'superFlattenShip','HotkeyBreaker','logMethodCalls','GoldenRatio',
 'superFlattenShip','HotkeyBreaker','logMethodCalls','GoldenRatio',
 'GoldenRectangle', 'pivotScalar', 'rad90', 'rad180', 'rad270', 'rad360']
 'GoldenRectangle', 'pivotScalar', 'rad90', 'rad180', 'rad270', 'rad360']
 
 
@@ -2360,35 +2360,13 @@ class DelayedCall:
         del self._func
         del self._func
         func()
         func()
 
 
-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 _callFunctor(self):
-        cb = Functor(self._functor, *self._args, **self._kwArgs)
-        del self._functor
-        del self._name
-        del self._delay
-        del self._args
-        del self._kwArgs
-        del self._delayedCall
-        del self.__name__
-        cb()
-    def __call__(self, *args, **kwArgs):
-        self._args = args
-        self._kwArgs = kwArgs
-        self._delayedCall = DelayedCall(self._callFunctor, self._name, self._delay)
-
-class FrameDelayedCallback:
-    """ waits N frames and then calls a callback """
-    def __init__(self, name, frames, callback, cancelFunc=None):
+class FrameDelayedCall:
+    """ calls a func after N frames """
+    def __init__(self, name, callback, frames=None, cancelFunc=None):
         # checkFunc is optional; called every frame, if returns True, FrameDelay is cancelled
         # checkFunc is optional; called every frame, if returns True, FrameDelay is cancelled
         # and callback is not called
         # and callback is not called
+        if frames is None:
+            frames = 1
         self._name = name
         self._name = name
         self._frames = frames
         self._frames = frames
         self._callback = callback
         self._callback = callback
@@ -2406,7 +2384,7 @@ class FrameDelayedCallback:
     def _stopTask(self):
     def _stopTask(self):
         taskMgr.remove(self._taskName)
         taskMgr.remove(self._taskName)
     def _frameTask(self, task):
     def _frameTask(self, task):
-        if self._cancelFunc():
+        if self._cancelFunc and self._cancelFunc():
             self.destroy()
             self.destroy()
             return task.done
             return task.done
         self._counter += 1
         self._counter += 1
@@ -2415,6 +2393,30 @@ class FrameDelayedCallback:
             return task.done
             return task.done
         return task.cont
         return task.cont
 
 
+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 _callFunctor(self):
+        cb = Functor(self._functor, *self._args, **self._kwArgs)
+        del self._functor
+        del self._name
+        del self._delay
+        del self._args
+        del self._kwArgs
+        del self._delayedCall
+        del self.__name__
+        cb()
+    def __call__(self, *args, **kwArgs):
+        self._args = args
+        self._kwArgs = kwArgs
+        self._delayedCall = DelayedCall(self._callFunctor, self._name, self._delay)
+
 class ArgumentEater:
 class ArgumentEater:
     def __init__(self, numToEat, func):
     def __init__(self, numToEat, func):
         self._numToEat = numToEat
         self._numToEat = numToEat
@@ -2737,6 +2739,6 @@ __builtin__.printStack = printStack
 __builtin__.printVerboseStack = printVerboseStack
 __builtin__.printVerboseStack = printVerboseStack
 __builtin__.DelayedCall = DelayedCall
 __builtin__.DelayedCall = DelayedCall
 __builtin__.DelayedFunctor = DelayedFunctor
 __builtin__.DelayedFunctor = DelayedFunctor
-__builtin__.FrameDelayedCallback = FrameDelayedCallback
+__builtin__.FrameDelayedCall = FrameDelayedCall
 __builtin__.ArgumentEater = ArgumentEater
 __builtin__.ArgumentEater = ArgumentEater
 __builtin__.ClassTree = ClassTree
 __builtin__.ClassTree = ClassTree