From fe6d1f085a264a82cd7875b04aa52a0ee1e4c2b2 Mon Sep 17 00:00:00 2001 From: Joe Shochet Date: Sun, 12 Oct 2003 06:14:56 +0000 Subject: [PATCH] new task API with extraArgs --- .../src/extensions/HTTPChannel-extensions.py | 9 ++-- direct/src/task/Task.py | 53 +++++++++---------- 2 files changed, 28 insertions(+), 34 deletions(-) diff --git a/direct/src/extensions/HTTPChannel-extensions.py b/direct/src/extensions/HTTPChannel-extensions.py index 9d322e6fe3..b4767ec567 100644 --- a/direct/src/extensions/HTTPChannel-extensions.py +++ b/direct/src/extensions/HTTPChannel-extensions.py @@ -15,20 +15,17 @@ """ if not name: name = self.getUrl().cStr() - import Task task = Task.Task(self.doTask) task.callback = callback - task.extraArgs = extraArgs - - return taskMgr.add(task, name) + task.callbackArgs = extraArgs + return taskMgr.add(task, name) def doTask(self, task): import Task if self.run(): return Task.cont - if task.callback: - task.callback(*task.extraArgs) + task.callback(*task.callbackArgs) return Task.done diff --git a/direct/src/task/Task.py b/direct/src/task/Task.py index 9aa8338edf..b32fddc890 100644 --- a/direct/src/task/Task.py +++ b/direct/src/task/Task.py @@ -71,6 +71,7 @@ class Task: self.pstats = None self.__removed = 0 self.__onDoLaterList = 0 + self.extraArgs = None def setOnDoLaterList(self, status): self.__onDoLaterList = status @@ -121,7 +122,6 @@ class Task: else: return ('Task id: %s, no name' % (self.id)) - def pause(delayTime): def func(self): if (self.time < self.delayTime): @@ -407,7 +407,14 @@ class TaskManager: continue return cont - def __spawnDoLater(self, task): + def doMethodLater(self, delayTime, func, taskName, extraArgs=None, uponDeath=None): + task = Task(func) + task.delayTime = delayTime + task.name = taskName + if extraArgs: + task.extraArgs = extraArgs + if uponDeath: + task.uponDeath = uponDeath if TaskManager.notify.getDebug(): TaskManager.notify.debug('spawning doLater: %s' % (task)) # Add this task to the nameDict @@ -429,18 +436,7 @@ class TaskManager: sentArgs = [task, task.name, task.id]) return task - def doLater(self, delayTime, task, taskName): - if TaskManager.notify.getDebug(): - TaskManager.notify.debug('doLater: %s' % (taskName)) - task.delayTime = delayTime - task.name = taskName - return self.__spawnDoLater(task) - - def doMethodLater(self, delayTime, func, taskName): - task = Task(func) - return self.doLater(delayTime, task, taskName) - - def add(self, funcOrTask, name, priority = 0): + def add(self, funcOrTask, name, priority=0, extraArgs=None, uponDeath=None): """ Add a new task to the taskMgr. You can add a Task object or a method that takes one argument. @@ -448,22 +444,17 @@ class TaskManager: if TaskManager.notify.getDebug(): TaskManager.notify.debug('add: %s' % (name)) if isinstance(funcOrTask, Task): - funcOrTask.setPriority(priority) - return self.__spawnTaskNamed(funcOrTask, name) + task = funcOrTask elif callable(funcOrTask): - return self.__spawnMethodNamed(funcOrTask, name, priority) + task = Task(funcOrTask, priority) else: self.notify.error('add: Tried to add a task that was not a Task or a func') - - def __spawnMethodNamed(self, func, name, priority=0): - task = Task(func, priority) - return self.__spawnTaskNamed(task, name) - - def __spawnTaskNamed(self, task, name): - if TaskManager.notify.getDebug(): - TaskManager.notify.debug('__spawnTaskNamed: %s' % (name)) - # Init params + task.setPriority(priority) task.name = name + if extraArgs: + task.extraArgs = extraArgs + if uponDeath: + task.uponDeath = uponDeath # be sure to ask the globalClock for the current frame time # rather than use a cached value; globalClock's frame time may # have been synced since the start of this frame @@ -606,13 +597,19 @@ class TaskManager: task.setCurrentTimeFrame(self.currentTime, self.currentFrame) if not self.taskTimerVerbose: # don't record timing info - ret = task(task) + if task.extraArgs: + ret = apply(task, task.extraArgs) + else: + ret = task(task) else: # Run the task and check the return value if task.pstats: task.pstats.start() startTime = globalClock.getRealTime() - ret = task(task) + if task.extraArgs: + ret = apply(task, task.extraArgs) + else: + ret = task(task) endTime = globalClock.getRealTime() if task.pstats: task.pstats.stop()