added setting of bitMasks and tags

This commit is contained in:
Dave Schuyler 2004-09-28 22:11:57 +00:00
parent ebf10096a5
commit d0efed6b70
5 changed files with 55 additions and 21 deletions

View File

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

View File

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

View File

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

View File

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

View File

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