2
0
Эх сурвалжийг харах

"switch inheritance order to satisfy MRO requirements. Removed debugging code. One-off traverse on render instead of only this object in order to preserve eventHandler states. Proper propagation of init parameters"

Josh Wilson 18 жил өмнө
parent
commit
1b12685fee

+ 9 - 8
direct/src/showbase/DistancePhasedNode.py

@@ -3,7 +3,7 @@ from direct.directnotify import DirectNotifyGlobal
 from pandac.PandaModules import *
 from PhasedObject import PhasedObject
 
-class DistancePhasedNode(NodePath, DirectObject, PhasedObject):
+class DistancePhasedNode(PhasedObject, DirectObject, NodePath):
     """
     This class defines a PhasedObject,NodePath object that will handle the phasing
     of an object in the scene graph according to its distance from some 
@@ -110,9 +110,9 @@ class DistancePhasedNode(NodePath, DirectObject, PhasedObject):
             cName = 'Phase%s-%d' % (name, self.__id)
             cSphereNode = CollisionNode(cName)
             cSphereNode.setIntoCollideMask(self.phaseCollideMask)
+            cSphereNode.setFromCollideMask(BitMask32.allOff())
             cSphereNode.addSolid(cSphere)
             cSphereNodePath = self.attachNewNode(cSphereNode)
-            cSphereNodePath.show()
             cSphereNodePath.stash()
             self._colSpheres.append(cSphereNodePath)
 
@@ -169,16 +169,17 @@ class DistancePhasedNode(NodePath, DirectObject, PhasedObject):
                 self.ignore(self.__getExitEvent(phaseName))
         
     def __handleEnterEvent(self, phaseName, cEntry):
-        print cEntry
         self.setPhase(phaseName)
 
     def __handleExitEvent(self, phaseName, cEntry):
-        print cEntry
         phase = self.getAliasPhase(phaseName) - 1
         self.setPhase(phase)
 
     def __oneTimeCollide(self):
-        base.cTrav.traverse(self)
+        # we use render here since if we only try to
+        # traverse ourself, we end up calling exit
+        # events for the rest of the eventHandlers. >:(
+        base.cTrav.traverse(render)
         base.eventMgr.doEvents()
         
 class BufferedDistancePhasedNode(DistancePhasedNode):
@@ -198,11 +199,12 @@ class BufferedDistancePhasedNode(DistancePhasedNode):
     """
     notify = directNotify.newCategory("BufferedDistancePhasedObject")
 
-    def __init__(self, name, bufferParamMap = {}):
+    def __init__(self, name, bufferParamMap = {},
+                 enterPrefix = 'enter', exitPrefix = 'exit', phaseCollideMask = BitMask32.allOn()):
         sParams = dict(bufferParamMap)
         for key in sParams:
             sParams[key] = sParams[key][0]
-        DistancePhasedNode.__init__(self, name, sParams)
+        DistancePhasedNode.__init__(self, name, sParams, enterPrefix, exitPrefix, phaseCollideMask)
         self.bufferParamMap = bufferParamMap
         self.bufferParamList = sorted(bufferParamMap.items(),
                                       key = lambda x: x[1],
@@ -248,4 +250,3 @@ if __debug__ and 0:
     p.reparentTo(render)
     p._DistancePhasedNode__oneTimeCollide()
     base.eventMgr.doEvents()
-

+ 1 - 2
direct/src/showbase/PhasedObject.py

@@ -98,7 +98,6 @@ class PhasedObject:
         Will force the unloading, in correct order, of all currently
         loaded phases.
         """
-        print 'PO - cleanup'
         if self.phase >= 0:
             self.setPhase(-1)
 
@@ -115,7 +114,7 @@ class PhasedObject:
                 lambda: self.__phaseNotFound('unload',aPhase))()
 
     def __phaseNotFound(self, mode, aPhase):
-        assert self.notify.warning('skipping phase %s%s\n' % (mode,aPhase))
+        assert self.notify.debug('%s%s() not found!\n' % (mode,aPhase))
         
 if __debug__:
     class AnfaPhasedObject(PhasedObject):