fixed FrameDelayedCall destroy/finish if callback already called, added destroy/finish to DelayedCall

This commit is contained in:
Darren Ranalli 2007-12-20 23:13:56 +00:00
parent dd03048f6e
commit 89638440e5

View File

@ -2501,8 +2501,23 @@ class DelayedCall:
if delay is None:
delay = .01
self._func = func
taskMgr.doMethodLater(delay, self._doCallback, 'DelayedCallback-%s' % name)
self._taskName = 'DelayedCallback-%s' % name
self._delay = delay
self._finished = False
self._addDoLater()
def destroy(self):
self._finished = True
self._removeDoLater()
def finish(self):
if not self._finished:
self._doCallback()
self.destroy()
def _addDoLater(self):
taskMgr.doMethodLater(self._delay, self._doCallback, self._taskName)
def _removeDoLater(self):
taskMgr.remove(self._taskName)
def _doCallback(self, task):
self._finished = True
func = self._func
del self._func
func()
@ -2519,10 +2534,14 @@ class FrameDelayedCall:
self._callback = callback
self._cancelFunc = cancelFunc
self._taskName = uniqueName('%s-%s' % (self.__class__.__name__, self._name))
self._finished = False
self._startTask()
def destroy(self):
self._finished = True
self._stopTask()
def finish(self):
if not self._finished:
self._finished = True
self._callback()
self.destroy()
def _startTask(self):