mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-04 19:08:55 -04:00
fixed FrameDelayedCall destroy/finish if callback already called, added destroy/finish to DelayedCall
This commit is contained in:
parent
dd03048f6e
commit
89638440e5
@ -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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user