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: if delay is None:
delay = .01 delay = .01
self._func = func 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): def _doCallback(self, task):
self._finished = True
func = self._func func = self._func
del self._func del self._func
func() func()
@ -2519,11 +2534,15 @@ class FrameDelayedCall:
self._callback = callback self._callback = callback
self._cancelFunc = cancelFunc self._cancelFunc = cancelFunc
self._taskName = uniqueName('%s-%s' % (self.__class__.__name__, self._name)) self._taskName = uniqueName('%s-%s' % (self.__class__.__name__, self._name))
self._finished = False
self._startTask() self._startTask()
def destroy(self): def destroy(self):
self._finished = True
self._stopTask() self._stopTask()
def finish(self): def finish(self):
self._callback() if not self._finished:
self._finished = True
self._callback()
self.destroy() self.destroy()
def _startTask(self): def _startTask(self):
taskMgr.add(self._frameTask, self._taskName) taskMgr.add(self._frameTask, self._taskName)