diff --git a/direct/src/actor/Actor.py b/direct/src/actor/Actor.py index 12acce046b..4827a7cb89 100644 --- a/direct/src/actor/Actor.py +++ b/direct/src/actor/Actor.py @@ -301,12 +301,18 @@ class Actor(PandaObject, NodePath): def getPartBundleDict(self): return self.__partBundleDict - + + def getLODNames(self): """getLODNames(self): Return list of Actor LOD names. If not an LOD actor, - returns 'lodRoot'""" - return self.__partBundleDict.keys() + returns 'lodRoot' + Sorts them from highest lod to lowest. + """ + lodNames = self.__partBundleDict.keys() + # Reverse sort the doing a string->int + lodNames.sort(lambda x,y : cmp(int(y), int(x))) + return lodNames def getPartNames(self): """getPartNames(self): diff --git a/direct/src/cluster/ClusterClient.py b/direct/src/cluster/ClusterClient.py index 825ca210a4..54e62c0419 100644 --- a/direct/src/cluster/ClusterClient.py +++ b/direct/src/cluster/ClusterClient.py @@ -92,7 +92,7 @@ class ClusterManager(DirectObject.DirectObject): def startMoveCamTask(self): task = Task.Task(self.moveCameraTask,49) - taskMgr.spawnTaskNamed(task, "moveCamTask") + taskMgr.add(task, "moveCamTask") return None def moveCameraTask(self,task): @@ -113,7 +113,7 @@ class ClusterManagerSync(ClusterManager): def startSwapCoordinatorTask(self): task = Task.Task(self.swapCoordinator,51) - taskMgr.spawnTaskNamed(task, "clientSwapCoordinator") + taskMgr.add(task, "clientSwapCoordinator") return None def swapCoordinator(self,task): diff --git a/direct/src/cluster/ClusterServer.py b/direct/src/cluster/ClusterServer.py index c9095d26e4..9bf6a84e52 100644 --- a/direct/src/cluster/ClusterServer.py +++ b/direct/src/cluster/ClusterServer.py @@ -45,7 +45,7 @@ class ClusterServer(DirectObject.DirectObject): def startListenerPollTask(self): task = Task.Task(self.listenerPoll) - taskMgr.spawnTaskNamed(task, "serverListenerPollTask") + taskMgr.add(task, "serverListenerPollTask") return None def listenerPoll(self, task): @@ -69,7 +69,7 @@ class ClusterServer(DirectObject.DirectObject): def startReaderPollTask(self): task = Task.Task(self.readerPollUntilEmpty,-10) - taskMgr.spawnTaskNamed(task, "serverReaderPollTask") + taskMgr.add(task, "serverReaderPollTask") return None def readerPollUntilEmpty(self, task): @@ -144,7 +144,7 @@ class ClusterServerSync(ClusterServer): def startListenerPollTask(self): task = Task.Task(self.listenerPoll,-2) - taskMgr.spawnTaskNamed(task, "serverListenerPollTask") + taskMgr.add(task, "serverListenerPollTask") return None def listenerPoll(self, task): @@ -175,7 +175,7 @@ class ClusterServerSync(ClusterServer): def startReaderPollTask(self): task = Task.Task(self.readPos,-1) - taskMgr.spawnTaskNamed(task, "serverReadPosTask") + taskMgr.add(task, "serverReadPosTask") return None def readPos(self, task): @@ -202,7 +202,7 @@ class ClusterServerSync(ClusterServer): def startSwapCoordinator(self): task = Task.Task(self.swapCoordinatorTask, 51) - taskMgr.spawnTaskNamed(task, "serverSwapCoordinator") + taskMgr.add(task, "serverSwapCoordinator") return None def swapCoordinatorTask(self, task): diff --git a/direct/src/directdevices/DirectFastrak.py b/direct/src/directdevices/DirectFastrak.py index 4835e57cfc..04d76268d0 100644 --- a/direct/src/directdevices/DirectFastrak.py +++ b/direct/src/directdevices/DirectFastrak.py @@ -45,10 +45,10 @@ class DirectFastrak(PandaObject): # Initialize tracker self.tracker = direct.deviceManager.createTracker(self.device) # Update task - taskMgr.spawnMethodNamed(self.updateTask, self.name + '-updateTask') + taskMgr.add(self.updateTask, self.name + '-updateTask') def disable(self): - taskMgr.removeTasksNamed(self.name + '-updateTask') + taskMgr.remove(self.name + '-updateTask') def destroy(self): self.disable() diff --git a/direct/src/directdevices/DirectJoybox.py b/direct/src/directdevices/DirectJoybox.py index edee7f7640..a0f4844334 100644 --- a/direct/src/directdevices/DirectJoybox.py +++ b/direct/src/directdevices/DirectJoybox.py @@ -80,10 +80,10 @@ class DirectJoybox(PandaObject): self.acceptSwitchModeEvent() self.acceptUprightCameraEvent() # Update task - taskMgr.spawnMethodNamed(self.updateTask, self.name + '-updateTask') + taskMgr.add(self.updateTask, self.name + '-updateTask') def disable(self): - taskMgr.removeTasksNamed(self.name + '-updateTask') + taskMgr.remove(self.name + '-updateTask') # Ignore button events self.ignoreSwitchModeEvent() self.ignoreUprightCameraEvent() @@ -189,7 +189,7 @@ class DirectJoybox(PandaObject): def hideText(state, s = self): s.readout.setText('') return Task.done - taskMgr.removeTasksNamed(self.name + '-showMode') + taskMgr.remove(self.name + '-showMode') # Update display self.readout.setText(modeText) t = taskMgr.doMethodLater(3.0, hideText, self.name + '-showMode') diff --git a/direct/src/directdevices/DirectRadamec.py b/direct/src/directdevices/DirectRadamec.py index 0907a416c5..87107af488 100644 --- a/direct/src/directdevices/DirectRadamec.py +++ b/direct/src/directdevices/DirectRadamec.py @@ -46,10 +46,10 @@ class DirectRadamec(PandaObject): # Kill existing task self.disable() # Update task - taskMgr.spawnMethodNamed(self.updateTask, self.name + '-updateTask') + taskMgr.add(self.updateTask, self.name + '-updateTask') def disable(self): - taskMgr.removeTasksNamed(self.name + '-updateTask') + taskMgr.remove(self.name + '-updateTask') def destroy(self): self.disable() diff --git a/direct/src/directtools/DirectCameraControl.py b/direct/src/directtools/DirectCameraControl.py index a46ee2b4b7..c5db3d7ec5 100644 --- a/direct/src/directtools/DirectCameraControl.py +++ b/direct/src/directtools/DirectCameraControl.py @@ -84,7 +84,7 @@ class DirectCameraControl(PandaObject): self.spawnMouseRotateTask() def mouseFlyStop(self): - taskMgr.removeTasksNamed('manipulateCamera') + taskMgr.remove('manipulateCamera') stopT = globalClock.getFrameTime() deltaT = stopT - self.startT stopF = globalClock.getFrameCount() @@ -111,39 +111,39 @@ class DirectCameraControl(PandaObject): def spawnXZTranslateOrHPanYZoom(self): # Kill any existing tasks - taskMgr.removeTasksNamed('manipulateCamera') + taskMgr.remove('manipulateCamera') # Spawn the new task t = Task.Task(self.XZTranslateOrHPanYZoomTask) # For HPanYZoom t.zoomSF = Vec3(self.coaMarker.getPos(direct.camera)).length() - taskMgr.spawnTaskNamed(t, 'manipulateCamera') + taskMgr.add(t, 'manipulateCamera') def spawnXZTranslateOrHPPan(self): # Kill any existing tasks - taskMgr.removeTasksNamed('manipulateCamera') + taskMgr.remove('manipulateCamera') # Spawn new task - taskMgr.spawnMethodNamed(self.XZTranslateOrHPPanTask, - 'manipulateCamera') + taskMgr.add(self.XZTranslateOrHPPanTask, + 'manipulateCamera') def spawnXZTranslate(self): # Kill any existing tasks - taskMgr.removeTasksNamed('manipulateCamera') + taskMgr.remove('manipulateCamera') # Spawn new task - taskMgr.spawnMethodNamed(self.XZTranslateTask, 'manipulateCamera') + taskMgr.add(self.XZTranslateTask, 'manipulateCamera') def spawnHPanYZoom(self): # Kill any existing tasks - taskMgr.removeTasksNamed('manipulateCamera') + taskMgr.remove('manipulateCamera') # Spawn new task t = Task.Task(self.HPanYZoomTask) t.zoomSF = Vec3(self.coaMarker.getPos(direct.camera)).length() - taskMgr.spawnTaskNamed(t, 'manipulateCamera') + taskMgr.add(t, 'manipulateCamera') def spawnHPPan(self): # Kill any existing tasks - taskMgr.removeTasksNamed('manipulateCamera') + taskMgr.remove('manipulateCamera') # Spawn new task - taskMgr.spawnMethodNamed(self.HPPanTask, 'manipulateCamera') + taskMgr.add(self.HPPanTask, 'manipulateCamera') def XZTranslateOrHPanYZoomTask(self, state): if direct.fShift: @@ -205,7 +205,7 @@ class DirectCameraControl(PandaObject): def spawnMouseRotateTask(self): # Kill any existing tasks - taskMgr.removeTasksNamed('manipulateCamera') + taskMgr.remove('manipulateCamera') # Set at markers position in render coordinates self.camManipRef.setPos(self.coaMarkerPos) self.camManipRef.setHpr(direct.camera, ZERO_POINT) @@ -214,7 +214,7 @@ class DirectCameraControl(PandaObject): t.constrainedDir = 'y' else: t.constrainedDir = 'x' - taskMgr.spawnTaskNamed(t, 'manipulateCamera') + taskMgr.add(t, 'manipulateCamera') def mouseRotateTask(self, state): # If moving outside of center, ignore motion perpendicular to edge @@ -245,7 +245,7 @@ class DirectCameraControl(PandaObject): def spawnMouseRollTask(self): # Kill any existing tasks - taskMgr.removeTasksNamed('manipulateCamera') + taskMgr.remove('manipulateCamera') # Set at markers position in render coordinates self.camManipRef.setPos(self.coaMarkerPos) self.camManipRef.setHpr(direct.camera, ZERO_POINT) @@ -253,7 +253,7 @@ class DirectCameraControl(PandaObject): t.coaCenter = getScreenXY(self.coaMarker) t.lastAngle = getCrankAngle(t.coaCenter) t.wrtMat = direct.camera.getMat( self.camManipRef ) - taskMgr.spawnTaskNamed(t, 'manipulateCamera') + taskMgr.add(t, 'manipulateCamera') def mouseRollTask(self, state): wrtMat = state.wrtMat @@ -383,7 +383,7 @@ class DirectCameraControl(PandaObject): self.updateCoaMarkerSize() def uprightCam(self): - taskMgr.removeTasksNamed('manipulateCamera') + taskMgr.remove('manipulateCamera') # Record undo point direct.pushUndo([direct.camera]) # Pitch camera till upright @@ -395,7 +395,7 @@ class DirectCameraControl(PandaObject): task = 'manipulateCamera') def orbitUprightCam(self): - taskMgr.removeTasksNamed('manipulateCamera') + taskMgr.remove('manipulateCamera') # Record undo point direct.pushUndo([direct.camera]) # Transform camera z axis to render space @@ -439,7 +439,7 @@ class DirectCameraControl(PandaObject): self.centerCamIn(0.) def centerCamIn(self, t): - taskMgr.removeTasksNamed('manipulateCamera') + taskMgr.remove('manipulateCamera') # Record undo point direct.pushUndo([direct.camera]) # Determine marker location @@ -456,7 +456,7 @@ class DirectCameraControl(PandaObject): t.uponDeath = self.updateCoaMarkerSizeOnDeath def zoomCam(self, zoomFactor, t): - taskMgr.removeTasksNamed('manipulateCamera') + taskMgr.remove('manipulateCamera') # Record undo point direct.pushUndo([direct.camera]) # Find a point zoom factor times the current separation @@ -474,7 +474,7 @@ class DirectCameraControl(PandaObject): def spawnMoveToView(self, view): # Kill any existing tasks - taskMgr.removeTasksNamed('manipulateCamera') + taskMgr.remove('manipulateCamera') # Record undo point direct.pushUndo([direct.camera]) # Calc hprOffset @@ -525,7 +525,7 @@ class DirectCameraControl(PandaObject): def swingCamAboutWidget(self, degrees, t): # Remove existing camera manipulation task - taskMgr.removeTasksNamed('manipulateCamera') + taskMgr.remove('manipulateCamera') # Record undo point direct.pushUndo([direct.camera]) @@ -553,7 +553,7 @@ class DirectCameraControl(PandaObject): def fitOnWidget(self, nodePath = 'None Given'): # Fit the node on the screen # stop any ongoing tasks - taskMgr.removeTasksNamed('manipulateCamera') + taskMgr.remove('manipulateCamera') # How big is the node? nodeScale = direct.widget.scalingNode.getScale(render) maxScale = max(nodeScale[0],nodeScale[1],nodeScale[2]) @@ -601,16 +601,16 @@ class DirectCameraControl(PandaObject): # Push state onto undo stack direct.pushUndo(direct.selected) # Remove the task to keep the widget attached to the object - taskMgr.removeTasksNamed('followSelectedNodePath') + taskMgr.remove('followSelectedNodePath') # Spawn a task to keep the selected objects with the widget - taskMgr.spawnMethodNamed(self.stickToWidgetTask, 'stickToWidget') + taskMgr.add(self.stickToWidgetTask, 'stickToWidget') # Spawn a task to move the widget t = direct.widget.lerpPos(Point3(centerVec), CAM_MOVE_DURATION, other = direct.camera, blendType = 'easeInOut', task = 'moveToFitTask') - t.uponDeath = lambda state: taskMgr.removeTasksNamed('stickToWidget') + t.uponDeath = lambda state: taskMgr.remove('stickToWidget') def stickToWidgetTask(self, state): # Move the objects with the widget @@ -636,5 +636,5 @@ class DirectCameraControl(PandaObject): base.enableMouse() def removeManipulateCameraTask(self): - taskMgr.removeTasksNamed('manipulateCamera') + taskMgr.remove('manipulateCamera') diff --git a/direct/src/directtools/DirectManipulation.py b/direct/src/directtools/DirectManipulation.py index 1791a2a214..2c6499c50f 100644 --- a/direct/src/directtools/DirectManipulation.py +++ b/direct/src/directtools/DirectManipulation.py @@ -52,7 +52,7 @@ class DirectManipulationControl(PandaObject): self.constraint = None # Check to see if we are moving the object # We are moving the object if we either wait long enough - taskMgr.spawnTaskNamed( + taskMgr.add( Task.doLater(MANIPULATION_MOVE_DELAY, Task.Task(self.switchToMoveMode), 'manip-move-wait'), @@ -62,10 +62,10 @@ class DirectManipulationControl(PandaObject): watchMouseTask = Task.Task(self.watchMouseTask) watchMouseTask.initX = direct.dr.mouseX watchMouseTask.initY = direct.dr.mouseY - taskMgr.spawnTaskNamed(watchMouseTask, 'manip-watch-mouse') + taskMgr.add(watchMouseTask, 'manip-watch-mouse') def switchToMoveMode(self, state): - taskMgr.removeTasksNamed('manip-watch-mouse') + taskMgr.remove('manip-watch-mouse') self.mode = 'move' self.manipulateObject() return Task.done @@ -73,7 +73,7 @@ class DirectManipulationControl(PandaObject): def watchMouseTask(self, state): if (((abs (state.initX - direct.dr.mouseX)) > 0.01) or ((abs (state.initY - direct.dr.mouseY)) > 0.01)): - taskMgr.removeTasksNamed('manip-move-wait') + taskMgr.remove('manip-move-wait') self.mode = 'move' self.manipulateObject() return Task.done @@ -81,9 +81,9 @@ class DirectManipulationControl(PandaObject): return Task.cont def manipulationStop(self): - taskMgr.removeTasksNamed('manipulateObject') - taskMgr.removeTasksNamed('manip-move-wait') - taskMgr.removeTasksNamed('manip-watch-mouse') + taskMgr.remove('manipulateObject') + taskMgr.remove('manip-move-wait') + taskMgr.remove('manip-watch-mouse') # depending on flag..... if self.mode == 'select': # Check for object under mouse @@ -123,7 +123,7 @@ class DirectManipulationControl(PandaObject): if not direct.selected.last: return # Clear out old task to make sure - taskMgr.removeTasksNamed('followSelectedNodePath') + taskMgr.remove('followSelectedNodePath') # Where are the object handles relative to the selected object pos = VBase3(0) hpr = VBase3(0) @@ -136,7 +136,7 @@ class DirectManipulationControl(PandaObject): t.hpr = hpr t.base = direct.selected.last # Spawn the task - taskMgr.spawnTaskNamed(t, 'followSelectedNodePath') + taskMgr.add(t, 'followSelectedNodePath') def followSelectedNodePathTask(self, state): direct.widget.setPosHpr(state.base, state.pos, state.hpr) @@ -160,15 +160,15 @@ class DirectManipulationControl(PandaObject): self.objectHandles.manipModeColor() def removeManipulateObjectTask(self): - taskMgr.removeTasksNamed('manipulateObject') + taskMgr.remove('manipulateObject') def manipulateObject(self): # Only do this if something is selected if direct.selected: # Remove the task to keep the widget attached to the object - taskMgr.removeTasksNamed('followSelectedNodePath') + taskMgr.remove('followSelectedNodePath') # and the task to highlight the widget - taskMgr.removeTasksNamed('highlightWidgetTask') + taskMgr.remove('highlightWidgetTask') # Set manipulation flag self.fManip = 1 # Record undo point @@ -204,7 +204,7 @@ class DirectManipulationControl(PandaObject): # These are used to rotate about view vector if t.fMouseX and t.fMouseY: t.lastAngle = getCrankAngle(t.coaCenter) - taskMgr.spawnTaskNamed(t, 'manipulateObject') + taskMgr.add(t, 'manipulateObject') def manipulateObjectTask(self, state): # Widget takes precedence @@ -732,14 +732,14 @@ class ObjectHandles(NodePath,PandaObject): self.setScale(1) def multiplyScalingFactorBy(self, factor): - taskMgr.removeTasksNamed('resizeObjectHandles') + taskMgr.remove('resizeObjectHandles') sf = self.ohScalingFactor = self.ohScalingFactor * factor self.scalingNode.lerpScale(sf,sf,sf, 0.5, blendType = 'easeInOut', task = 'resizeObjectHandles') def growToFit(self): - taskMgr.removeTasksNamed('resizeObjectHandles') + taskMgr.remove('resizeObjectHandles') # Increase handles scale until they cover 30% of the min dimension pos = direct.widget.getPos(direct.camera) minDim = min(direct.dr.nearWidth, direct.dr.nearHeight) diff --git a/direct/src/directtools/DirectSession.py b/direct/src/directtools/DirectSession.py index aff9b6e27a..c2bd0e0452 100644 --- a/direct/src/directtools/DirectSession.py +++ b/direct/src/directtools/DirectSession.py @@ -417,10 +417,10 @@ class DirectSession(PandaObject): # shrink the widget self.widget.setScalingFactor(dnp.getRadius()) # Spawn task to have object handles follow the selected object - taskMgr.removeTasksNamed('followSelectedNodePath') + taskMgr.remove('followSelectedNodePath') t = Task.Task(self.followSelectedNodePathTask) t.dnp = dnp - taskMgr.spawnTaskNamed(t, 'followSelectedNodePath') + taskMgr.add(t, 'followSelectedNodePath') # Send an message marking the event messenger.send('DIRECT_selectedNodePath', [dnp]) @@ -439,7 +439,7 @@ class DirectSession(PandaObject): self.widget.hideWidget() self.selectedNPReadout.reparentTo(hidden) self.selectedNPReadout.setText(' ') - taskMgr.removeTasksNamed('followSelectedNodePath') + taskMgr.remove('followSelectedNodePath') self.ancestry = [] # Send an message marking the event messenger.send('DIRECT_deselectedNodePath', [dnp]) @@ -450,7 +450,7 @@ class DirectSession(PandaObject): self.widget.hideWidget() self.selectedNPReadout.reparentTo(hidden) self.selectedNPReadout.setText(' ') - taskMgr.removeTasksNamed('followSelectedNodePath') + taskMgr.remove('followSelectedNodePath') def setActiveParent(self, nodePath = None): # Record new parent @@ -486,7 +486,7 @@ class DirectSession(PandaObject): def flash(self, nodePath = 'None Given'): """ Highlight an object by setting it red for a few seconds """ # Clean up any existing task - taskMgr.removeTasksNamed('flashNodePath') + taskMgr.remove('flashNodePath') # Spawn new task if appropriate if nodePath == 'None Given': # If nothing specified, try selected node path @@ -502,7 +502,7 @@ class DirectSession(PandaObject): # Temporarily set node path color nodePath.setColor(flashColor) # Clean up color in a few seconds - t = taskMgr.spawnTaskNamed( + t = taskMgr.add( Task.doLater(DIRECT_FLASH_DURATION, # This is just a dummy task Task.Task(self.flashDummy), @@ -537,7 +537,7 @@ class DirectSession(PandaObject): def isolate(self, nodePath = 'None Given'): """ Show a node path and hide its siblings """ # First kill the flashing task to avoid complications - taskMgr.removeTasksNamed('flashNodePath') + taskMgr.remove('flashNodePath') # Use currently selected node path if node selected if nodePath == 'None Given': nodePath = self.selected.last @@ -551,7 +551,7 @@ class DirectSession(PandaObject): def toggleVis(self, nodePath = 'None Given'): """ Toggle visibility of node path """ # First kill the flashing task to avoid complications - taskMgr.removeTasksNamed('flashNodePath') + taskMgr.remove('flashNodePath') if nodePath == 'None Given': # If nothing specified, try selected node path nodePath = self.selected.last @@ -691,8 +691,8 @@ class DirectSession(PandaObject): # UTILITY FUNCTIONS def message(self, text): - taskMgr.removeTasksNamed('hideDirectMessage') - taskMgr.removeTasksNamed('hideDirectMessageLater') + taskMgr.remove('hideDirectMessage') + taskMgr.remove('hideDirectMessageLater') self.directMessageReadout.reparentTo(aspect2d) self.directMessageReadout.setText(text) self.hideDirectMessageLater() @@ -700,7 +700,7 @@ class DirectSession(PandaObject): def hideDirectMessageLater(self): seq = Task.doLater(3.0, Task.Task(self.hideDirectMessage), 'hideDirectMessage') - t = taskMgr.spawnTaskNamed(seq, 'hideDirectMessageLater') + t = taskMgr.add(seq, 'hideDirectMessageLater') def hideDirectMessage(self, state): self.directMessageReadout.reparentTo(hidden) @@ -831,14 +831,13 @@ class DisplayRegionList(PandaObject): def stop(self): # Kill the existing context task - taskMgr.removeTasksNamed('DIRECTContextTask') + taskMgr.remove('DIRECTContextTask') def spawnContextTask(self): - taskMgr.spawnTaskNamed(Task.Task(self.contextTask), - 'DIRECTContextTask') + taskMgr.add(self.contextTask, 'DIRECTContextTask') def removeContextTask(self): - taskMgr.removeTasksNamed('DIRECTContextTask') + taskMgr.remove('DIRECTContextTask') def contextTask(self, state): # Window Data diff --git a/direct/src/directtools/DirectUtil.py b/direct/src/directtools/DirectUtil.py index 85451d67b0..bcb7581c90 100644 --- a/direct/src/directtools/DirectUtil.py +++ b/direct/src/directtools/DirectUtil.py @@ -18,8 +18,8 @@ def lerpBackgroundColor(r,g,b,duration): b = sf * state.ec[2] + (1 - sf) * state.sc[2] setBackgroundColor(r,g,b) return Task.cont - taskMgr.removeTasksNamed('lerpBackgroundColor') - t = taskMgr.spawnMethodNamed(lerpColor, 'lerpBackgroundColor') + taskMgr.remove('lerpBackgroundColor') + t = taskMgr.add(lerpColor, 'lerpBackgroundColor') t.time = 0.0 t.duration = duration t.sc = base.win.getGsg().getColorClearValue() diff --git a/direct/src/directutil/Mopath.py b/direct/src/directutil/Mopath.py index 65eebd3811..eacfd783d8 100644 --- a/direct/src/directutil/Mopath.py +++ b/direct/src/directutil/Mopath.py @@ -106,12 +106,12 @@ class Mopath(PandaObject): self.node = node self.loop = loop self.stop() - t = taskMgr.spawnMethodNamed(self.__playTask, self.name + '-play') + t = taskMgr.add(self.__playTask, self.name + '-play') t.currentTime = time t.lastTime = globalClock.getFrameTime() def stop(self): - taskMgr.removeTasksNamed(self.name + '-play') + taskMgr.remove(self.name + '-play') def __playTask(self, state): time = globalClock.getFrameTime() diff --git a/direct/src/distributed/ClientRepository.py b/direct/src/distributed/ClientRepository.py index 8d51ba1808..ca7857a333 100644 --- a/direct/src/distributed/ClientRepository.py +++ b/direct/src/distributed/ClientRepository.py @@ -71,11 +71,11 @@ class ClientRepository(DirectObject.DirectObject): task = Task.Task(self.rawReaderPollUntilEmpty) # Start with empty string task.currentRawString = "" - taskMgr.spawnTaskNamed(task, "rawReaderPollTask") + taskMgr.add(task, "rawReaderPollTask") return None def stopRawReaderPollTask(self): - taskMgr.removeTasksNamed("rawReaderPollTask") + taskMgr.remove("rawReaderPollTask") return None def rawReaderPollUntilEmpty(self, task): @@ -107,12 +107,11 @@ class ClientRepository(DirectObject.DirectObject): # Stop any tasks we are running now self.stopRawReaderPollTask() self.stopReaderPollTask() - task = Task.Task(self.readerPollUntilEmpty) - taskMgr.spawnTaskNamed(task, "readerPollTask") + taskMgr.add(self.readerPollUntilEmpty, "readerPollTask") return None def stopReaderPollTask(self): - taskMgr.removeTasksNamed("readerPollTask") + taskMgr.remove("readerPollTask") return None def readerPollUntilEmpty(self, task): diff --git a/direct/src/distributed/DistributedSmoothNode.py b/direct/src/distributed/DistributedSmoothNode.py index 3f6e778f93..7d6b332051 100644 --- a/direct/src/distributed/DistributedSmoothNode.py +++ b/direct/src/distributed/DistributedSmoothNode.py @@ -122,9 +122,9 @@ class DistributedSmoothNode(DistributedNode.DistributedNode): elif not self.smoothStarted: taskName = self.taskName("smooth") - taskMgr.removeTasksNamed(taskName) + taskMgr.remove(taskName) self.reloadPosition() - taskMgr.spawnMethodNamed(self.doSmoothTask, taskName) + taskMgr.add(self.doSmoothTask, taskName) self.smoothStarted = 1 return @@ -137,7 +137,7 @@ class DistributedSmoothNode(DistributedNode.DistributedNode): """ if self.smoothStarted: taskName = self.taskName("smooth") - taskMgr.removeTasksNamed(taskName) + taskMgr.remove(taskName) self.forceToTruePosition() self.smoothStarted = 0 return diff --git a/direct/src/distributed/ServerRepository.py b/direct/src/distributed/ServerRepository.py index 26f155d743..45fd628f0a 100644 --- a/direct/src/distributed/ServerRepository.py +++ b/direct/src/distributed/ServerRepository.py @@ -1,103 +1,101 @@ -"""ServerRepository module: contains the ServerRepository class""" - -from PandaModules import * -from TaskManagerGlobal import * -from MsgTypes import * -import Task -import DirectNotifyGlobal - -class ServerRepository: - - def __init__(self, tcpPort, udpPort): - self.qcm = QueuedConnectionManager() - self.qcl = QueuedConnectionListener(self.qcm, 0) - self.qcr = QueuedConnectionReader(self.qcm, 0) - self.cw = ConnectionWriter(self.qcm,0) - self.tcpRendezvous = self.qcm.openTCPServerRendezvous(tcpPort, 10) - print self.tcpRendezvous - self.qcl.addConnection(self.tcpRendezvous) - self.startListenerPollTask() - self.startReaderPollTask() - self.startResetPollTask() - return None - - def startListenerPollTask(self): - task = Task.Task(self.listenerPoll) - taskMgr.spawnTaskNamed(task, "serverListenerPollTask") - return None - - def listenerPoll(self, task): - if self.qcl.newConnectionAvailable(): - print "New connection is available" - rendezvous = PointerToConnection() - netAddress = NetAddress() - newConnection = PointerToConnection() - retVal = self.qcl.getNewConnection(rendezvous, netAddress, - newConnection) - if retVal: - # Crazy dereferencing - newConnection=newConnection.p() - self.qcr.addConnection(newConnection) - print "Got a connection!" - self.lastConnection = newConnection - else: - ServerRepository.notify.warning( - "getNewConnection returned false") - return Task.cont - - def startReaderPollTask(self): - task = Task.Task(self.readerPollUntilEmpty) - taskMgr.spawnTaskNamed(task, "serverReaderPollTask") - return None - - def readerPollUntilEmpty(self, task): - while self.readerPollOnce(): - pass - return Task.cont - - def readerPollOnce(self): - availGetVal = self.qcr.dataAvailable() - if availGetVal: - datagram = NetDatagram() - readRetVal = self.qcr.getData(datagram) - if readRetVal: - self.handleDatagram(datagram) - else: - ClientRepository.notify.warning("getData returned false") - return availGetVal - - def handleDatagram(self, datagram): - print "Server got a datagram!" - dgi = DatagramIterator(datagram) - print dgi.getUint16() - print dgi.getString() - print dgi.getUint32() - print dgi.getUint16() - - newDatagram = Datagram() - newDatagram.addUint16(LOGIN_RESPONSE) - newDatagram.addUint8(ord('s')) - self.cw.send(newDatagram, self.lastConnection) - return None - - def sendAvatarGenerate(self): - datagram = Datagram() - # Message type is 1 - datagram.addUint16(ALL_OBJECT_GENERATE_WITH_REQUIRED) - # Avatar class type is 2 - datagram.addUint8(2) - # A sample id - datagram.addUint32(10) - # The only required field is the zone field - datagram.addUint32(999) - self.cw.send(datagram, self.lastConnection) - - def startResetPollTask(self): - return None - - def resetPollUntilEmpty(self): - return None - - def resetPollOnce(self): - return None - +"""ServerRepository module: contains the ServerRepository class""" + +from PandaModules import * +from TaskManagerGlobal import * +from MsgTypes import * +import Task +import DirectNotifyGlobal + +class ServerRepository: + + def __init__(self, tcpPort, udpPort): + self.qcm = QueuedConnectionManager() + self.qcl = QueuedConnectionListener(self.qcm, 0) + self.qcr = QueuedConnectionReader(self.qcm, 0) + self.cw = ConnectionWriter(self.qcm,0) + self.tcpRendezvous = self.qcm.openTCPServerRendezvous(tcpPort, 10) + print self.tcpRendezvous + self.qcl.addConnection(self.tcpRendezvous) + self.startListenerPollTask() + self.startReaderPollTask() + self.startResetPollTask() + return None + + def startListenerPollTask(self): + taskMgr.add(self.listenerPoll, "serverListenerPollTask") + return None + + def listenerPoll(self, task): + if self.qcl.newConnectionAvailable(): + print "New connection is available" + rendezvous = PointerToConnection() + netAddress = NetAddress() + newConnection = PointerToConnection() + retVal = self.qcl.getNewConnection(rendezvous, netAddress, + newConnection) + if retVal: + # Crazy dereferencing + newConnection=newConnection.p() + self.qcr.addConnection(newConnection) + print "Got a connection!" + self.lastConnection = newConnection + else: + ServerRepository.notify.warning( + "getNewConnection returned false") + return Task.cont + + def startReaderPollTask(self): + taskMgr.add(self.readerPollUntilEmpty, "serverReaderPollTask") + return None + + def readerPollUntilEmpty(self, task): + while self.readerPollOnce(): + pass + return Task.cont + + def readerPollOnce(self): + availGetVal = self.qcr.dataAvailable() + if availGetVal: + datagram = NetDatagram() + readRetVal = self.qcr.getData(datagram) + if readRetVal: + self.handleDatagram(datagram) + else: + ClientRepository.notify.warning("getData returned false") + return availGetVal + + def handleDatagram(self, datagram): + print "Server got a datagram!" + dgi = DatagramIterator(datagram) + print dgi.getUint16() + print dgi.getString() + print dgi.getUint32() + print dgi.getUint16() + + newDatagram = Datagram() + newDatagram.addUint16(LOGIN_RESPONSE) + newDatagram.addUint8(ord('s')) + self.cw.send(newDatagram, self.lastConnection) + return None + + def sendAvatarGenerate(self): + datagram = Datagram() + # Message type is 1 + datagram.addUint16(ALL_OBJECT_GENERATE_WITH_REQUIRED) + # Avatar class type is 2 + datagram.addUint8(2) + # A sample id + datagram.addUint32(10) + # The only required field is the zone field + datagram.addUint32(999) + self.cw.send(datagram, self.lastConnection) + + def startResetPollTask(self): + return None + + def resetPollUntilEmpty(self): + return None + + def resetPollOnce(self): + return None + diff --git a/direct/src/extensions/NodePath-extensions.py b/direct/src/extensions/NodePath-extensions.py index 0b1129bdf0..8775e83891 100644 --- a/direct/src/extensions/NodePath-extensions.py +++ b/direct/src/extensions/NodePath-extensions.py @@ -319,7 +319,7 @@ return lerpTask else: # spawn the lerp task - taskMgr.spawnTaskNamed(lerpTask, taskName) + taskMgr.add(lerpTask, taskName) return lerpTask def __autoLerp(self, functorFunc, time, blendType, taskName): diff --git a/direct/src/gui/DirectGuiBase.py b/direct/src/gui/DirectGuiBase.py index 3f0fe7ba16..539c738de6 100644 --- a/direct/src/gui/DirectGuiBase.py +++ b/direct/src/gui/DirectGuiBase.py @@ -789,18 +789,18 @@ class DirectGuiWidget(DirectGuiBase, NodePath): #base.mouseWatcherNode.setModifierButtons(mb) def editStart(self, event): - taskMgr.removeTasksNamed('guiEditTask') + taskMgr.remove('guiEditTask') vWidget2render2d = self.getPos(render2d) vMouse2render2d = Point3(event.getMouse()[0], 0, event.getMouse()[1]) editVec = Vec3(vWidget2render2d - vMouse2render2d) if base.mouseWatcherNode.getModifierButtons().isDown( KeyboardButton.control()): - t = taskMgr.spawnMethodNamed(self.guiScaleTask, 'guiEditTask') + t = taskMgr.add(self.guiScaleTask, 'guiEditTask') t.refPos = vWidget2render2d t.editVecLen = editVec.length() t.initScale = self.getScale() else: - t = taskMgr.spawnMethodNamed(self.guiDragTask, 'guiEditTask') + t = taskMgr.add(self.guiDragTask, 'guiEditTask') t.editVec = editVec def guiScaleTask(self, state): @@ -827,7 +827,7 @@ class DirectGuiWidget(DirectGuiBase, NodePath): return Task.cont def editStop(self, event): - taskMgr.removeTasksNamed('guiEditTask') + taskMgr.remove('guiEditTask') def setState(self): if type(self['state']) == type(0): diff --git a/direct/src/gui/DirectGuiTest.py b/direct/src/gui/DirectGuiTest.py index 95de8f1375..f38334aaca 100644 --- a/direct/src/gui/DirectGuiTest.py +++ b/direct/src/gui/DirectGuiTest.py @@ -12,8 +12,8 @@ def dummyCmd(index): # Define some commands to bind to enter, exit and click events def shrink(db): db['text2_text'] = 'Hi!' - taskMgr.removeTasksNamed('shrink') - taskMgr.removeTasksNamed('expand') + taskMgr.remove('shrink') + taskMgr.remove('expand') # Get a handle on the geometry for the rollover state rolloverSmiley = db.component('geom2') rolloverSmiley.setScale(db.component('geom0').getScale()[0]) @@ -22,17 +22,17 @@ def shrink(db): def expand(db): db['text0_text'] = 'Bye!' - taskMgr.removeTasksNamed('shrink') - taskMgr.removeTasksNamed('expand') + taskMgr.remove('shrink') + taskMgr.remove('expand') db.component('geom0').setScale(db.component('geom2').getScale()[0]) db.component('geom0').lerpScale(1,1,1, 1, blendType = 'easeInOut', task = 'expand') db.component('geom2').clearColor() def ouch(db): - taskMgr.removeTasksNamed('shrink') - taskMgr.removeTasksNamed('expand') - taskMgr.removeTasksNamed('runAway') + taskMgr.remove('shrink') + taskMgr.remove('expand') + taskMgr.remove('runAway') db.component('geom0').setScale(db.component('geom2').getScale()[0]) db.component('geom1').setScale(db.component('geom2').getScale()[0]) db['text2_text'] = 'Ouch!' diff --git a/direct/src/gui/DirectScrolledList.py b/direct/src/gui/DirectScrolledList.py index 814ec3eb40..022da2d7ed 100644 --- a/direct/src/gui/DirectScrolledList.py +++ b/direct/src/gui/DirectScrolledList.py @@ -61,7 +61,7 @@ class DirectScrolledList(DirectFrame): self.numItemsVisible = self["numItemsVisible"] def destroy(self): - taskMgr.removeTasksNamed(self.taskName("scroll")) + taskMgr.remove(self.taskName("scroll")) DirectFrame.destroy(self) def scrollBy(self, delta): @@ -122,7 +122,7 @@ class DirectScrolledList(DirectFrame): task.prevTime = 0.0 task.delta = 1 self.scrollBy(task.delta) - taskMgr.spawnTaskNamed(task, self.taskName("scroll")) + taskMgr.add(task, self.taskName("scroll")) def __decButtonDown(self, event): task = Task.Task(self.__scrollByTask) @@ -130,10 +130,10 @@ class DirectScrolledList(DirectFrame): task.prevTime = 0.0 task.delta = -1 self.scrollBy(task.delta) - taskMgr.spawnTaskNamed(task, self.taskName("scroll")) + taskMgr.add(task, self.taskName("scroll")) def __buttonUp(self, event): - taskMgr.removeTasksNamed(self.taskName("scroll")) + taskMgr.remove(self.taskName("scroll")) def addItem(self, item): """ diff --git a/direct/src/interval/Interval.py b/direct/src/interval/Interval.py index 4665b60079..50e7496282 100644 --- a/direct/src/interval/Interval.py +++ b/direct/src/interval/Interval.py @@ -94,7 +94,7 @@ class Interval(DirectObject): t0 = self.duration # Kill ongoing play task - taskMgr.removeTasksNamed(self.name + '-play') + taskMgr.remove(self.name + '-play') # Start new one self.offset = t0 self.startT = self.clock.getFrameTime() @@ -110,7 +110,7 @@ class Interval(DirectObject): assert(t0 <= self.endTime) # Spawn task - taskMgr.spawnMethodNamed(self.__playTask, self.name + '-play') + taskMgr.add(self.__playTask, self.name + '-play') def loop(self, t0=0.0, duration=0.0, scale=1.0): self.accept(self.name + '-loop', self.play, @@ -125,7 +125,7 @@ class Interval(DirectObject): for stopEvent in self.stopEventList: messenger.send(stopEvent) # Kill task - taskMgr.removeTasksNamed(self.name + '-play') + taskMgr.remove(self.name + '-play') # No more looping. self.ignore(self.name + '-loop') return self.curr_t @@ -188,7 +188,7 @@ class Interval(DirectObject): # So when you drag scale with mouse its like you started a playback def onPress(s=self,es=es): # Kill playback task - taskMgr.removeTasksNamed(s.name + '-play') + taskMgr.remove(s.name + '-play') # INIT interval s.setT(es.get(), event = IVAL_INIT) es.onPress = onPress diff --git a/direct/src/leveleditor/LevelEditor.py b/direct/src/leveleditor/LevelEditor.py index 9f58ee92ac..a251c18c39 100644 --- a/direct/src/leveleditor/LevelEditor.py +++ b/direct/src/leveleditor/LevelEditor.py @@ -593,7 +593,7 @@ class LevelEditor(NodePath, PandaObject): # Disable Pie Menu mouse interaction self.disableMouse() # Remove insertion marker task - taskMgr.removeTasksNamed('insertionMarkerTask') + taskMgr.remove('insertionMarkerTask') def reset(self, fDeleteToplevel = 1, fCreateToplevel = 1, fUpdateExplorer = 1): @@ -1369,7 +1369,7 @@ class LevelEditor(NodePath, PandaObject): # Position it # First kill autoposition task so grid can jump to its final # destination (part of cleanup - taskMgr.removeTasksNamed('autoPositionGrid') + taskMgr.remove('autoPositionGrid') # Now find where to put node path if (hotKey is not None) and nodeClass.eq(DNA_PROP): # If its a prop and a copy, place it based upon current @@ -2190,8 +2190,7 @@ class LevelEditor(NodePath, PandaObject): self.insertionMarker.create() def spawnInsertionMarkerTask(self): - t = Task.Task(self.insertionMarkerTask) - taskMgr.spawnTaskNamed(t, 'insertionMarkerTask') + taskMgr.add(self.insertionMarkerTask, 'insertionMarkerTask') def insertionMarkerTask(self, state): self.insertionMarker.setPosHpr(direct.grid, 0,0,0, 0,0,0) @@ -2227,7 +2226,7 @@ class LevelEditor(NodePath, PandaObject): return 1 def autoPositionGrid(self): - taskMgr.removeTasksNamed('autoPositionGrid') + taskMgr.remove('autoPositionGrid') # Move grid to prepare for placement of next object selectedNode = direct.selected.last if selectedNode: @@ -2266,12 +2265,12 @@ class LevelEditor(NodePath, PandaObject): t.uponDeath = self.autoPositionCleanup # Also move the camera - taskMgr.removeTasksNamed('autoMoveDelay') + taskMgr.remove('autoMoveDelay') handlesToCam = direct.widget.getPos(direct.camera) handlesToCam = handlesToCam * ( direct.dr.near/handlesToCam[1]) if ((abs(handlesToCam[0]) > (direct.dr.nearWidth * 0.4)) or (abs(handlesToCam[2]) > (direct.dr.nearHeight * 0.4))): - taskMgr.removeTasksNamed('manipulateCamera') + taskMgr.remove('manipulateCamera') direct.cameraControl.centerCamIn(0.5) def autoPositionCleanup(self,state): diff --git a/direct/src/leveleditor/PieMenu.py b/direct/src/leveleditor/PieMenu.py index f219d115c0..0a576d6f43 100644 --- a/direct/src/leveleditor/PieMenu.py +++ b/direct/src/leveleditor/PieMenu.py @@ -35,13 +35,13 @@ class PieMenu(NodePath, PandaObject): self.action(value) def removePieMenuTask(self): - taskMgr.removeTasksNamed('pieMenuTask') + taskMgr.remove('pieMenuTask') self.reparentTo(hidden) self.lines.reset() def spawnPieMenuTask(self): # Make sure no errant tasks lying around - taskMgr.removeTasksNamed('pieMenuTask') + taskMgr.remove('pieMenuTask') # Where did the user press the button? self.originX = direct.dr.mouseX @@ -61,8 +61,7 @@ class PieMenu(NodePath, PandaObject): # Spawn task to update line and select new texture self.currItem = -1 - t = Task.Task(self.pieMenuTask) - taskMgr.spawnTaskNamed(t, 'pieMenuTask') + taskMgr.add(self.pieMenuTask, 'pieMenuTask') def pieMenuTask(self,state): mouseX = direct.dr.mouseX diff --git a/direct/src/showbase/EventManager.py b/direct/src/showbase/EventManager.py index c46805dfc0..a74a6d1c10 100644 --- a/direct/src/showbase/EventManager.py +++ b/direct/src/showbase/EventManager.py @@ -73,7 +73,7 @@ class EventManager: def restart(self): - taskMgr.spawnTaskNamed(Task.Task(self.eventLoop), 'eventManager') + taskMgr.add(self.eventLoop, 'eventManager') def shutdown(self): - taskMgr.removeTasksNamed('eventManager') + taskMgr.remove('eventManager') diff --git a/direct/src/showbase/ShowBase.py b/direct/src/showbase/ShowBase.py index 2c55030520..9f85c1a9fd 100644 --- a/direct/src/showbase/ShowBase.py +++ b/direct/src/showbase/ShowBase.py @@ -437,15 +437,14 @@ class ShowBase: """enableParticles(self)""" self.particleMgrEnabled = 1 self.physicsMgrEnabled = 1 - self.taskMgr.removeTasksNamed('manager-update') - self.taskMgr.spawnTaskNamed(Task.Task(self.updateManagers), - 'manager-update') + self.taskMgr.remove('manager-update') + self.taskMgr.add(self.updateManagers, 'manager-update') def disableParticles(self): """enableParticles(self)""" self.particleMgrEnabled = 0 self.physicsMgrEnabled = 0 - self.taskMgr.removeTasksNamed('manager-update') + self.taskMgr.remove('manager-update') def toggleParticles(self): if self.particleMgrEnabled == 0: @@ -555,15 +554,15 @@ class ShowBase: self.shutdown() # give the igloop task a reasonably "late" priority, # so that it will get run after most tasks - self.taskMgr.spawnTaskNamed(Task.Task(self.igloop, 50), 'igloop') + self.taskMgr.add(self.igloop, 'igloop', priority = 50) # give the dataloop task a reasonably "early" priority, # so that it will get run before most tasks - self.taskMgr.spawnTaskNamed(Task.Task(self.dataloop, -50), 'dataloop') + self.taskMgr.add(self.dataloop, 'dataloop', priority = -50) self.eventMgr.restart() def shutdown(self): - self.taskMgr.removeTasksNamed('igloop') - self.taskMgr.removeTasksNamed('dataloop') + self.taskMgr.remove('igloop') + self.taskMgr.remove('dataloop') self.eventMgr.shutdown() def toggleBackface(self): @@ -834,7 +833,7 @@ class ShowBase: """ globalClock.setMode(ClockObject.MNonRealTime) globalClock.setDt(1.0/float(fps)) - t = taskMgr.spawnMethodNamed(self._movieTask, namePrefix + '_task') + t = taskMgr.add(self._movieTask, namePrefix + '_task') t.endT = globalClock.getFrameTime() + duration t.frameIndex = 1 t.outputString = namePrefix + '_%0' + `sd` + 'd.' + format diff --git a/direct/src/showbase/TkGlobal.py b/direct/src/showbase/TkGlobal.py index 26126ae73f..04e160e14e 100644 --- a/direct/src/showbase/TkGlobal.py +++ b/direct/src/showbase/TkGlobal.py @@ -5,8 +5,6 @@ import Pmw import __builtin__ __builtin__.tkroot = Pmw.initialise() -import Task - def tkloop(self): # Do all the tkinter events waiting on this frame # dooneevent will return 0 if there are no more events @@ -21,6 +19,6 @@ def tkloop(self): from TaskManagerGlobal import * # Spawn this task -taskMgr.spawnTaskNamed(Task.Task(tkloop), "tkloop") +taskMgr.add(tkloop, "tkloop") diff --git a/direct/src/showbase/Transitions.py b/direct/src/showbase/Transitions.py index c538058a99..cdb80238f4 100644 --- a/direct/src/showbase/Transitions.py +++ b/direct/src/showbase/Transitions.py @@ -48,7 +48,7 @@ class Transitions: Task.Task(self.__fadeInLerpDone)) # Spawn the sequence if not block: - taskMgr.spawnTaskNamed(task, self.fadeTaskName) + taskMgr.add(task, self.fadeTaskName) else: return task @@ -57,7 +57,7 @@ class Transitions: As a sequence: Fade in, execute the given task """ seq = Task.sequence(self.fadeIn(time, block=1), task) - taskMgr.spawnTaskNamed(seq, 'fadeInTaskSeq') + taskMgr.add(seq, 'fadeInTaskSeq') def fadeOut(self, t=0.5, block=0): """ @@ -125,13 +125,13 @@ class Transitions: seq = Task.sequence(self.fadeOut(time, block=1), task) # do it - taskMgr.spawnTaskNamed(seq, 'fadeOutTaskSeq') + taskMgr.add(seq, 'fadeOutTaskSeq') def noFade(self): """ Removes any current fade tasks and parents the fade polygon away """ - taskMgr.removeTasksNamed(self.fadeTaskName) + taskMgr.remove(self.fadeTaskName) if self.fade != None: self.fade.reparentTo(hidden) @@ -164,7 +164,7 @@ class Transitions: Task.Task(self.__irisInLerpDone)) # Spawn the sequence if not block: - taskMgr.spawnTaskNamed(task, self.irisTaskName) + taskMgr.add(task, self.irisTaskName) else: return task @@ -173,7 +173,7 @@ class Transitions: As a sequence: iris in, execute the given task """ seq = Task.sequence(self.irisIn(time, block=1), task) - taskMgr.spawnTaskNamed(seq, 'irisInTaskSeq') + taskMgr.add(seq, 'irisInTaskSeq') def irisOutLerpDone(self, task): # This is a helper function to the fadeIn sequence @@ -207,7 +207,7 @@ class Transitions: Task.Task(self.irisOutLerpDone)) # Spawn the sequence if not block: - taskMgr.spawnTaskNamed(task, self.irisTaskName) + taskMgr.add(task, self.irisTaskName) else: return task @@ -227,13 +227,13 @@ class Transitions: seq = Task.sequence(self.irisOut(time, block=1), task) # do it - taskMgr.spawnTaskNamed(seq, 'irisOutTaskSeq') + taskMgr.add(seq, 'irisOutTaskSeq') def noIris(self): """ Removes any current iris tasks and parents the iris polygon away """ - taskMgr.removeTasksNamed(self.irisTaskName) + taskMgr.remove(self.irisTaskName) if self.iris != None: self.iris.reparentTo(hidden) diff --git a/direct/src/task/Task.py b/direct/src/task/Task.py index 514567f058..4a3d80a032 100644 --- a/direct/src/task/Task.py +++ b/direct/src/task/Task.py @@ -53,18 +53,6 @@ def print_exc_plus(): # Store the global clock globalClock = ClockObject.getGlobalClock() -def getTimeFrame(): - # WARNING: If you are testing tasks without an igloop, - # you must manually tick the clock - - # Ask for the time last frame - t = globalClock.getFrameTime() - - # Get the new frame count - f = globalClock.getFrameCount() - - return t, f - class Task: count = 0 @@ -120,17 +108,6 @@ def pause(delayTime): task.delayTime = delayTime return task - -def release(): - def func(self): - # A release is immediately done - # TaskManager.notify.debug('release done: ' + self.name) - return done - task = Task(func) - task.name = 'release' - return task - - def sequence(*taskList): return make_sequence(taskList) @@ -240,66 +217,6 @@ def make_loop(taskList): return task -def makeSpawner(task, taskName, taskMgr): - def func(self): - self.taskMgr.spawnTaskNamed(self.task, self.taskName) - return done - newTask = Task(func) - newTask.name = taskName + "-spawner" - newTask.task = task - newTask.taskName = taskName - newTask.taskMgr = taskMgr - return newTask - - -def makeSequenceFromTimeline(timelineList, taskMgr): - timeline = [] - lastPause = 0 - sortedList = list(timelineList) - sortedList.sort() - for triple in sortedList: - t = triple[0] - lastPause - lastPause = triple[0] - task = triple[1] - taskName = triple[2] - timeline.append(pause(t)) - timeline.append(makeSpawner(task, taskName, taskMgr)) - return make_sequence(timeline) - - -def timeline(*timelineList): - def func(self): - # Step our sub task manager (returns the number of tasks remaining) - lenTaskList = self.taskMgr.step() - - # The sequence start time is the same as our start time - self.sequence.time = self.time - self.sequence.frame = self.frame - - if (not self.sequenceDone): - # Execute the sequence for this frame - seqRet = self.sequence(self.sequence) - # See if sequence is done - if (seqRet == done): - self.sequenceDone = 1 - # See if the timeline is done - if (lenTaskList == 0): - # TaskManager.notify.debug('timeline done: ' + self.name) - return done - else: - return cont - else: - return cont - else: - return cont - task = Task(func) - task.name = 'timeline' - task.taskMgr = TaskManager() - task.sequence = makeSequenceFromTimeline(timelineList, task.taskMgr) - task.sequenceDone = 0 - return task - - class TaskManager: notify = None @@ -308,7 +225,7 @@ class TaskManager: self.running = 0 self.stepping = 0 self.taskList = [] - self.currentTime, self.currentFrame = getTimeFrame() + self.currentTime, self.currentFrame = self.__getTimeFrame() if (TaskManager.notify == None): TaskManager.notify = directNotify.newCategory("TaskManager") self.taskTimerVerbose = 0 @@ -324,11 +241,32 @@ class TaskManager: self.fVerbose = value messenger.send('TaskManager-setVerbose', sentArgs = [value]) - def spawnMethodNamed(self, func, name): - task = Task(func) - return self.spawnTaskNamed(task, name) + def add(self, funcOrTask, name, priority = 0): + """ + Add a new task to the taskMgr. + You can add a Task object or a method that takes one argument. + """ + if isinstance(funcOrTask, Task): + funcOrTask.setPriority(priority) + return self.__spawnTaskNamed(funcOrTask, name) + elif callable(funcOrTask): + return self.__spawnMethodNamed(funcOrTask, name, priority) + else: + self.notify.error('Tried to add a task that was not a Task or a func') - def spawnTaskNamed(self, task, name): + def remove(self, taskOrName): + if type(taskOrName) == type(''): + return self.__removeTasksNamed(taskOrName) + elif isinstance(taskOrName, Task): + return self.__removeTask(taskOrName) + else: + self.notify.error('remove takes a string or a Task') + + 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('spawning task named: ' + name) task.name = name @@ -368,17 +306,11 @@ class TaskManager: task = Task(func) seq = doLater(delayTime, task, taskName) seq.laterTask = task - return self.spawnTaskNamed(seq, 'doLater-' + taskName) + return self.__spawnTaskNamed(seq, taskName) - def removeAllTasks(self): - # Make a shallow copy so we do not modify the list in place - taskListCopy = self.taskList[:] - for task in taskListCopy: - self.removeTask(task) - - def removeTask(self, task): - # if TaskManager.notify.getDebug(): - # TaskManager.notify.debug('removing task: ' + `task`) + def __removeTask(self, task): + if TaskManager.notify.getDebug(): + TaskManager.notify.debug('removing task: ' + `task`) if task in self.taskList: self.taskList.remove(task) if task.uponDeath: @@ -388,7 +320,7 @@ class TaskManager: messenger.send('TaskManager-removeTask', sentArgs = [task, task.name]) - def removeTasksNamed(self, taskName): + def __removeTasksNamed(self, taskName): if TaskManager.notify.getDebug(): TaskManager.notify.debug('removing tasks named: ' + taskName) @@ -400,7 +332,7 @@ class TaskManager: # Now iterate through the tasks we need to remove and remove them for task in removedTasks: - self.removeTask(task) + self.__removeTask(task) # Return the number of tasks removed return len(removedTasks) @@ -429,7 +361,7 @@ class TaskManager: # Now iterate through the tasks we need to remove and remove them for task in removedTasks: - self.removeTask(task) + self.__removeTask(task) # Return the number of tasks removed return len(removedTasks) @@ -437,7 +369,7 @@ class TaskManager: def step(self): if TaskManager.notify.getDebug(): TaskManager.notify.debug('step') - self.currentTime, self.currentFrame = getTimeFrame() + self.currentTime, self.currentFrame = self.__getTimeFrame() for task in self.taskList: task.setCurrentTimeFrame(self.currentTime, self.currentFrame) @@ -473,9 +405,9 @@ class TaskManager: if (ret == cont): continue elif (ret == done): - self.removeTask(task) + self.__removeTask(task) elif (ret == exit): - self.removeTask(task) + self.__removeTask(task) else: raise StandardError, "Task named %s did not return cont, exit, or done" % task.name return len(self.taskList) @@ -589,90 +521,8 @@ class TaskManager: import TaskManagerPanel return TaskManagerPanel.TaskManagerPanel(self) - -""" -import Task -from ShowBaseGlobal import * # to get taskMgr, and run() - -# sequence - -def seq1(state): - print 'seq1' - return Task.done -def seq2(state): - print 'seq2' - return Task.done - -t = Task.sequence(Task.pause(1.0), Task.Task(seq1), Task.release(), - Task.pause(3.0), Task.Task(seq2)) -taskMgr.spawnTaskNamed(t, 'sequence') -run() - -# If you want it to loop, make a loop -t = Task.loop(Task.pause(1.0), Task.Task(seq1), Task.release(), - Task.pause(3.0), Task.Task(seq2)) -taskMgr.spawnTaskNamed(t, 'sequence') -run() - - - -# timeline - -def keyframe1(state): - print 'keyframe1' - return Task.done -def keyframe2(state): - print 'keyframe2' - return Task.done -def keyframe3(state): - print 'keyframe3' - return Task.done - -testtl = Task.timeline( - (0.5, Task.Task(keyframe1), 'key1'), - (0.6, Task.Task(keyframe2), 'key2'), - (0.7, Task.Task(keyframe3), 'key3') - ) - -t = taskMgr.spawnTaskNamed(testtl, 'timeline') -run() - -# do later - returns a sequence - -def foo(state): - print 'later...' - return Task.done - -seq = Task.doLater(3.0, Task.Task(foo), 'fooLater') -t = taskMgr.spawnTaskNamed(seq, 'doLater-fooLater') -run() - -# tasks with state -# Combined with uponDeath - -someValue = 1 - -def func(state): - if (state.someValue > 10): - print 'true!' - return Task.done - else: - state.someValue = state.someValue + 1 - return Task.cont - -def deathFunc(state): - print 'Value at death: ', state.someValue - -task = Task.Task(func) - -# set task state here -task.someValue = someValue - -# Use instance variable uponDeath to specify function -# to perform on task removal -# Default value of uponDeath is None -task.uponDeath = deathFunc - -t = taskMgr.spawnTaskNamed(task, 'funcTask') -run() -""" + def __getTimeFrame(self): + # WARNING: If you are testing tasks without an igloop, + # you must manually tick the clock + # Ask for the time last frame + return globalClock.getFrameTime(), globalClock.getFrameCount() diff --git a/direct/src/task/Timer.py b/direct/src/task/Timer.py index c6fa6d148e..2161347cc1 100644 --- a/direct/src/task/Timer.py +++ b/direct/src/task/Timer.py @@ -28,7 +28,7 @@ class Timer: self.name = name self.startT = self.clock.getFrameTime() self.currT = 0.0 - taskMgr.spawnMethodNamed(self.__timerTask, self.name + '-run') + taskMgr.add(self.__timerTask, self.name + '-run') self.started = 1 def startCallback(self, t, callback): @@ -40,7 +40,7 @@ class Timer: self.finalT = t self.startT = self.clock.getFrameTime() self.currT = 0.0 - taskMgr.spawnMethodNamed(self.__timerTask, self.name + '-run') + taskMgr.add(self.__timerTask, self.name + '-run') self.started = 1 def stop(self): @@ -48,7 +48,7 @@ class Timer: """ if (not self.started): return 0.0 - taskMgr.removeTasksNamed(self.name + '-run') + taskMgr.remove(self.name + '-run') self.started = 0 return self.currT diff --git a/direct/src/tkpanels/AnimPanel.py b/direct/src/tkpanels/AnimPanel.py index a2f4950a8a..c1f5788e8f 100644 --- a/direct/src/tkpanels/AnimPanel.py +++ b/direct/src/tkpanels/AnimPanel.py @@ -174,7 +174,7 @@ class AnimPanel(AppShell): self.stopActorControls() self.lastT = globalClock.getFrameTime() self.playList = self.actorControlList[:] - taskMgr.spawnMethodNamed(self.play, self.id + '_UpdateTask') + taskMgr.add(self.play, self.id + '_UpdateTask') def play(self, task): if not self.playList: @@ -188,7 +188,7 @@ class AnimPanel(AppShell): return Task.cont def stopActorControls(self): - taskMgr.removeTasksNamed(self.id + '_UpdateTask') + taskMgr.remove(self.id + '_UpdateTask') def getActorControlAt(self, index): return self.actorControlList[index] diff --git a/direct/src/tkpanels/MopathRecorder.py b/direct/src/tkpanels/MopathRecorder.py index 7af7c2fdb6..20ec984ec4 100644 --- a/direct/src/tkpanels/MopathRecorder.py +++ b/direct/src/tkpanels/MopathRecorder.py @@ -655,18 +655,18 @@ class MopathRecorder(AppShell, PandaObject): Hook called upon selection of a node path used to select playback marker if subnode selected """ - taskMgr.removeTasksNamed(self.name + '-curveEditTask') + taskMgr.remove(self.name + '-curveEditTask') if nodePath.id() == self.playbackMarker.getChild(0).id(): direct.select(self.playbackMarker) elif nodePath.id() == self.tangentMarker.getChild(0).id(): direct.select(self.tangentMarker) elif nodePath.id() == self.playbackMarker.id(): self.tangentGroup.show() - taskMgr.spawnMethodNamed(self.curveEditTask, + taskMgr.add(self.curveEditTask, self.name + '-curveEditTask') elif nodePath.id() == self.tangentMarker.id(): self.tangentGroup.show() - taskMgr.spawnMethodNamed(self.curveEditTask, + taskMgr.add(self.curveEditTask, self.name + '-curveEditTask') else: self.tangentGroup.hide() @@ -755,9 +755,9 @@ class MopathRecorder(AppShell, PandaObject): direct.deselect(self.playbackMarker) direct.deselect(self.tangentMarker) # Remove tasks - taskMgr.removeTasksNamed(self.name + '-recordTask') - taskMgr.removeTasksNamed(self.name + '-playbackTask') - taskMgr.removeTasksNamed(self.name + '-curveEditTask') + taskMgr.remove(self.name + '-recordTask') + taskMgr.remove(self.name + '-playbackTask') + taskMgr.remove(self.name + '-curveEditTask') def createNewPointSet(self): self.pointSetName = self.name + '-ps-' + `self.pointSetCount` @@ -924,8 +924,8 @@ class MopathRecorder(AppShell, PandaObject): def toggleRecord(self): if self.getVariable('Recording', 'Record').get(): # Kill old tasks - taskMgr.removeTasksNamed(self.name + '-recordTask') - taskMgr.removeTasksNamed(self.name + '-curveEditTask') + taskMgr.remove(self.name + '-recordTask') + taskMgr.remove(self.name + '-curveEditTask') # Remove old curve self.nurbsCurveDrawer.hide() # Reset curve fitters @@ -966,13 +966,13 @@ class MopathRecorder(AppShell, PandaObject): # start flying nodePath along path self.startPlayback() # Start new task - t = taskMgr.spawnMethodNamed( + t = taskMgr.add( self.recordTask, self.name + '-recordTask') t.startTime = globalClock.getFrameTime() else: if self.samplingMode == 'Continuous': # Kill old task - taskMgr.removeTasksNamed(self.name + '-recordTask') + taskMgr.remove(self.name + '-recordTask') if ((self.recordingType.get() == 'Refine') or (self.recordingType.get() == 'Extend')): # Reparent node path back to parent @@ -1263,7 +1263,7 @@ class MopathRecorder(AppShell, PandaObject): # Make sure checkbutton is set self.getVariable('Playback', 'Play').set(1) # Start new playback task - t = taskMgr.spawnMethodNamed( + t = taskMgr.add( self.playbackTask, self.name + '-playbackTask') t.currentTime = self.playbackTime t.lastTime = globalClock.getFrameTime() @@ -1314,7 +1314,7 @@ class MopathRecorder(AppShell, PandaObject): def stopPlayback(self): self.getVariable('Playback', 'Play').set(0) - taskMgr.removeTasksNamed(self.name + '-playbackTask') + taskMgr.remove(self.name + '-playbackTask') def jumpToStartOfPlayback(self): self.stopPlayback() diff --git a/direct/src/tkpanels/Placer.py b/direct/src/tkpanels/Placer.py index fdf6c5a6d6..41846a0434 100644 --- a/direct/src/tkpanels/Placer.py +++ b/direct/src/tkpanels/Placer.py @@ -598,7 +598,7 @@ class Placer(AppShell): self.pushUndo() # If moving widget kill follow task and update wrts if self.nodePathMenu.get() == 'widget': - taskMgr.removeTasksNamed('followSelectedNodePath') + taskMgr.remove('followSelectedNodePath') # Record relationship between selected nodes and widget direct.selected.getWrtAll() # Record initial state diff --git a/direct/src/tkpanels/TaskManagerPanel.py b/direct/src/tkpanels/TaskManagerPanel.py index 142a61f48d..bd73392ed2 100644 --- a/direct/src/tkpanels/TaskManagerPanel.py +++ b/direct/src/tkpanels/TaskManagerPanel.py @@ -185,7 +185,7 @@ class TaskManagerWidget(PandaObject): parent = self.parent, default = 'cancel') if ok: - self.taskMgr.removeTask(self.currentTask) + self.taskMgr.remove(self.currentTask) self.updateTaskListBox() def removeMatchingTasks(self): @@ -201,7 +201,7 @@ class TaskManagerWidget(PandaObject): parent = self.parent, default = 'cancel') if ok: - self.taskMgr.removeTasksNamed(name) + self.taskMgr.remove(name) self.updateTaskListBox() def onDestroy(self): diff --git a/direct/src/tkwidgets/Dial.py b/direct/src/tkwidgets/Dial.py index e7862c7e37..c62dd43241 100644 --- a/direct/src/tkwidgets/Dial.py +++ b/direct/src/tkwidgets/Dial.py @@ -606,7 +606,7 @@ class DialWidget(Pmw.MegaWidget): def knobMouseDown(self,event): self._onButtonPress() self.knobSF = 0.0 - t = taskMgr.spawnMethodNamed(self.knobComputeVelocity, 'cv') + t = taskMgr.add(self.knobComputeVelocity, 'cv') t.lastTime = globalClock.getFrameTime() def knobComputeVelocity(self, state): @@ -633,7 +633,7 @@ class DialWidget(Pmw.MegaWidget): return -sf def knobMouseUp(self, event): - taskMgr.removeTasksNamed('cv') + taskMgr.remove('cv') self.knobSF = 0.0 self._onButtonRelease() diff --git a/direct/src/tkwidgets/Floater.py b/direct/src/tkwidgets/Floater.py index 2e1db76d24..c1eec7dbaa 100644 --- a/direct/src/tkwidgets/Floater.py +++ b/direct/src/tkwidgets/Floater.py @@ -128,7 +128,7 @@ class Floater(Pmw.MegaWidget): def _startFloaterTask(self,event): self._fFloaterTask = 1 apply(self.onPress,self['callbackData']) - taskMgr.spawnMethodNamed(self._floaterTask, 'floaterTask') + taskMgr.add(self._floaterTask, 'floaterTask') def _floaterTask(self, state): if self.velocity != 0.0: @@ -136,7 +136,7 @@ class Floater(Pmw.MegaWidget): return Task.cont def _floaterReset(self, event): - taskMgr.removeTasksNamed('floaterTask') + taskMgr.remove('floaterTask') self.velocity = 0.0 self.scale.set(0.0) apply(self.onRelease, self['callbackData'])