From 20a18992d0abeb6ada2ebca6f98b5b5ca8681c38 Mon Sep 17 00:00:00 2001 From: David Rose Date: Mon, 29 Sep 2008 22:36:57 +0000 Subject: [PATCH] add replaceMethod() --- direct/src/task/TaskNew.py | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/direct/src/task/TaskNew.py b/direct/src/task/TaskNew.py index 87dc75df34..b5ac9f2d77 100644 --- a/direct/src/task/TaskNew.py +++ b/direct/src/task/TaskNew.py @@ -76,7 +76,7 @@ class TaskManager: MaxEpochSpeed = 1.0/30.0 def __init__(self): - self.mgr = AsyncTaskManager('TaskManager') + self.mgr = AsyncTaskManager.getGlobalPtr() self.resumeFunc = None self.globalClock = self.mgr.getClock() @@ -168,6 +168,11 @@ class TaskManager: indicated name. """ return self.__makeTaskList(self.mgr.findTasks(taskName)) + def getAllTasks(self): + """Returns list of all tasks, active and sleeping, in + arbitrary order. """ + return self.__makeTaskList(self.mgr.getTasks()) + def getTasks(self): """Returns list of all active tasks in arbitrary order. """ return self.__makeTaskList(self.mgr.getActiveTasks()) @@ -427,6 +432,31 @@ class TaskManager: # Set a flag so we will stop before beginning next frame self.running = False + def __tryReplaceTaskMethod(self, task, oldMethod, newFunction): + if not isinstance(task, PythonTask): + return + + method = task.getFunction() + if (type(method) == types.MethodType): + function = method.im_func + else: + function = method + if (function == oldMethod): + import new + newMethod = new.instancemethod(newFunction, + method.im_self, + method.im_class) + task.setFunction(newMethod) + # Found a match + return 1 + return 0 + + def replaceMethod(self, oldMethod, newFunction): + numFound = 0 + for task in self.getAllTasks(): + numFound += self.__tryReplaceTaskMethod(task, oldMethod, newFunction) + return numFound + def __repr__(self): return str(self.mgr)