diff --git a/direct/src/controls/ControlManager.py b/direct/src/controls/ControlManager.py index 422fdf2909..f8b39e0f56 100755 --- a/direct/src/controls/ControlManager.py +++ b/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(): diff --git a/direct/src/controls/DevWalker.py b/direct/src/controls/DevWalker.py index 0f11bf2e73..df0de0be83 100755 --- a/direct/src/controls/DevWalker.py +++ b/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 diff --git a/direct/src/controls/GravityWalker.py b/direct/src/controls/GravityWalker.py index 979bf7374a..444cf1860f 100755 --- a/direct/src/controls/GravityWalker.py +++ b/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 diff --git a/direct/src/controls/NonPhysicsWalker.py b/direct/src/controls/NonPhysicsWalker.py index a8470e92e2..df11f5213a 100755 --- a/direct/src/controls/NonPhysicsWalker.py +++ b/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: diff --git a/direct/src/controls/ShipPilot.py b/direct/src/controls/ShipPilot.py index b1d661b8a7..8dd8f44f13 100755 --- a/direct/src/controls/ShipPilot.py +++ b/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