Просмотр исходного кода

added setting of bitMasks and tags

Dave Schuyler 21 лет назад
Родитель
Сommit
d0efed6b70

+ 10 - 5
direct/src/controls/ControlManager.py

@@ -127,21 +127,26 @@ class ControlManager:
         else:
             print "Unkown controls:", name
 
+    def delete(self):
+        assert self.notify.debugCall(id(self))
+        self.disable()
+        #self.monitorTask.remove()
+
     def setSpeeds(self, forwardSpeed, jumpForce,
             reverseSpeed, rotateSpeed):
         assert self.notify.debugCall(id(self))
         for controls in self.controls.values():
             controls.setWalkSpeed(
                 forwardSpeed, jumpForce, reverseSpeed, rotateSpeed)
-
-    def delete(self):
-        assert self.notify.debugCall(id(self))
-        self.disable()
-        #self.monitorTask.remove()
     
     def getSpeeds(self):
         return self.currentControls.getSpeeds()
 
+    def setTag(self, key, value):
+        assert self.notify.debugCall(id(self))
+        for controls in self.controls.values():
+            controls.setTag(key, value)
+
     def deleteCollisions(self):
         assert self.notify.debugCall(id(self))
         for controls in self.controls.values():

+ 9 - 0
direct/src/controls/DevWalker.py

@@ -53,6 +53,12 @@ class DevWalker(DirectObject.DirectObject):
         if avatar is not None:
             pass # setup the avatar
 
+    def setWallBitMask(self, bitMask):
+        pass
+    
+    def setFloorBitMask(self, bitMask):
+        pass
+
     def initializeCollisions(self, collisionTraverser, avatarNodePath, 
             wallCollideMask, floorCollideMask,
             avatarRadius = 1.4, floorOffset = 1.0, reach = 1.0):
@@ -67,6 +73,9 @@ class DevWalker(DirectObject.DirectObject):
     def deleteCollisions(self):
         pass
 
+    def setTag(self, key, value):
+        pass
+
     def setCollisionsActive(self, active = 1):
         pass
     

+ 13 - 5
direct/src/controls/GravityWalker.py

@@ -279,8 +279,13 @@ class GravityWalker(DirectObject.DirectObject):
         self.pusherFloor = handler
         self.cFloorSphereNodePath = cSphereNodePath
 
+    def setWallBitMask(self, bitMask):
+        self.wallBitmask = bitMask
+
+    def setFloorBitMask(self, bitMask):
+        self.floorBitmask = bitMask
+
     def initializeCollisions(self, collisionTraverser, avatarNodePath,
-            wallBitmask, floorBitmask,
             avatarRadius = 1.4, floorOffset = 1.0, reach = 1.0):
         """
         floorOffset is how high the avatar can reach.  I.e. if the avatar
@@ -297,14 +302,17 @@ class GravityWalker(DirectObject.DirectObject):
         
         self.cTrav = collisionTraverser
 
-        self.setupRay(floorBitmask, floorOffset, reach )
-        self.setupWallSphere(wallBitmask, avatarRadius)
-        self.setupEventSphere(wallBitmask, avatarRadius)
+        self.setupRay(self.floorBitmask, floorOffset, reach )
+        self.setupWallSphere(self.wallBitmask, avatarRadius)
+        self.setupEventSphere(self.wallBitmask, avatarRadius)
         if self.wantFloorSphere:
-            self.setupFloorSphere(floorBitmask, avatarRadius)
+            self.setupFloorSphere(self.floorBitmask, avatarRadius)
 
         self.setCollisionsActive(1)
 
+    def setTag(self, key, value):
+        self.cEventSphereNodePath.setTag(key, value)
+
     def setAirborneHeightFunc(self, unused_parameter):
         assert self.notify.debugStateCall(self)
         self.getAirborneHeight = self.lifter.getAirborneHeight

+ 12 - 6
direct/src/controls/NonPhysicsWalker.py

@@ -52,8 +52,16 @@ class NonPhysicsWalker(DirectObject.DirectObject):
         if avatar is not None:
             pass # setup the avatar
 
+    def setAirborneHeightFunc(self, getAirborneHeight):
+        self.getAirborneHeight = getAirborneHeight
+
+    def setWallBitMask(self, bitMask):
+        self.cSphereBitMask = bitMask
+
+    def setFloorBitMask(self, bitMask):
+        self.cRayBitMask = bitMask
+
     def initializeCollisions(self, collisionTraverser, avatarNodePath,
-            wallCollideMask, floorCollideMask,
             avatarRadius = 1.4, floorOffset = 1.0, reach = 1.0):
         """
         Set up the avatar for collisions
@@ -69,7 +77,6 @@ class NonPhysicsWalker(DirectObject.DirectObject):
         cSphereNode = CollisionNode('NPW.cSphereNode')
         cSphereNode.addSolid(self.cSphere)
         self.cSphereNodePath = avatarNodePath.attachNewNode(cSphereNode)
-        self.cSphereBitMask = wallCollideMask
 
         cSphereNode.setFromCollideMask(self.cSphereBitMask)
         cSphereNode.setIntoCollideMask(BitMask32.allOff())
@@ -84,7 +91,6 @@ class NonPhysicsWalker(DirectObject.DirectObject):
         cRayNode = CollisionNode('NPW.cRayNode')
         cRayNode.addSolid(self.cRay)
         self.cRayNodePath = avatarNodePath.attachNewNode(cRayNode)
-        self.cRayBitMask = floorCollideMask
         cRayNode.setFromCollideMask(self.cRayBitMask)
         cRayNode.setIntoCollideMask(BitMask32.allOff())
 
@@ -112,9 +118,6 @@ class NonPhysicsWalker(DirectObject.DirectObject):
         # activate the collider with the traverser and pusher
         self.setCollisionsActive(1)
 
-    def setAirborneHeightFunc(self, getAirborneHeight):
-        self.getAirborneHeight = getAirborneHeight
-
     def deleteCollisions(self):
         del self.cTrav
 
@@ -129,6 +132,9 @@ class NonPhysicsWalker(DirectObject.DirectObject):
         del self.pusher
         del self.lifter
 
+    def setTag(self, key, value):
+        self.cSphereNodePath.setTag(key, value)
+
     def setCollisionsActive(self, active = 1):
         assert(self.debugPrint("setCollisionsActive(active%s)"%(active,)))
         if self.collisionsActive != active:

+ 11 - 5
direct/src/controls/ShipPilot.py

@@ -337,19 +337,20 @@ class ShipPilot(PhysicsWalker.PhysicsWalker):
 
         self.setCollisionsActive(1)
 
+    def setWallBitMask(self, bitMask):
+        self.wallBitmask = bitMask
+
+    def setFloorBitMask(self, bitMask):
+        self.floorBitmask = bitMask
+
     def initializeCollisions(self, collisionTraverser,
-            wallBitmask, floorBitmask,
             avatarRadius = 1.4, floorOffset = 1.0, reach = 1.0):
         """
         Set up the avatar collisions
         """
         assert(self.debugPrint("initializeCollisions()"))
-        
-        
         self.cTrav = collisionTraverser
         self.floorOffset = floorOffset = 7.0
-        self.wallBitmask = wallBitmask
-        self.floorBitmask = floorBitmask
         self.avatarRadius = avatarRadius
         self.floorOffset = floorOffset
         self.reach = reach
@@ -372,6 +373,11 @@ class ShipPilot(PhysicsWalker.PhysicsWalker):
         
         self.getAirborneHeight = None
 
+    def setTag(self, key, value):
+        if not hasattr(self, "collisionTags"):
+            self.collisionTags = {}
+        self.collisionTags[key] = value
+
     def setAirborneHeightFunc(self, getAirborneHeight):
         self.getAirborneHeight = getAirborneHeight