"using new ShipFloorCollide for avatars on a ship"

This commit is contained in:
Josh Wilson 2007-04-20 19:08:31 +00:00
parent de7e08b8ee
commit d9dcbfc429
4 changed files with 71 additions and 26 deletions

View File

@ -93,6 +93,9 @@ class ControlManager:
controls.setCollisionsActive(0)
self.controls[name] = controls
def get(self, name):
return self.controls.get(name)
def remove(self, name):
"""
name is any key that was used to refer to the
@ -245,3 +248,4 @@ class ControlManager:
onScreenDebug.add("InputState slideLeft", "%d"%(inputState.isSet("slideLeft")))
onScreenDebug.add("InputState slideRight", "%d"%(inputState.isSet("slideRight")))
return Task.cont

View File

@ -280,6 +280,13 @@ class GravityWalker(DirectObject.DirectObject):
def setFloorBitMask(self, bitMask):
self.floorBitmask = bitMask
def swapFloorBitMask(self, oldMask, newMask):
self.floorBitmask = self.floorBitmask &~ oldMask
self.floorBitmask |= newMask
if self.cRayNodePath and not self.cRayNodePath.isEmpty():
self.cRayNodePath.node().setFromCollideMask(self.floorBitmask)
def initializeCollisions(self, collisionTraverser, avatarNodePath,
avatarRadius = 1.4, floorOffset = 1.0, reach = 1.0):
"""

View File

@ -64,6 +64,13 @@ class NonPhysicsWalker(DirectObject.DirectObject):
def setFloorBitMask(self, bitMask):
self.cRayBitMask = bitMask
def swapFloorBitMask(self, oldMask, newMask):
self.cRayBitMask = self.cRayBitMask &~ oldMask
self.cRayBitMask |= newMask
if self.cRayNodePath and not self.cRayNodePath.isEmpty():
self.cRayNodePath.node().setFromCollideMask(self.cRayBitMask)
def initializeCollisions(self, collisionTraverser, avatarNodePath,
avatarRadius = 1.4, floorOffset = 1.0, reach = 1.0):
"""

View File

@ -56,6 +56,13 @@ class ShipPilot(PhysicsWalker):
def setWallBitMask(self, bitMask):
self.wallBitmask = bitMask
def swapWallBitMask(self, oldMask, newMask):
self.wallBitmask = self.wallBitmask &~ oldMask
self.wallBitmask |= newMask
if self.cSphereNodePath and not self.cSphereNodePath.isEmpty():
self.cSphereNodePath.node().setFromCollideMask(self.wallBitmask)
def setFloorBitMask(self, bitMask):
self.floorBitmask = bitMask
@ -102,33 +109,40 @@ class ShipPilot(PhysicsWalker):
self.pusher = PhysicsCollisionHandler()
self.pusher.setInPattern("enter%in")
self.pusher.setOutPattern("exit%in")
cSphereNode = CollisionNode('SP.cSphereNode')
# Front sphere:
sRadius = abs((self.portPos - self.starboardPos)[0] / 2.0)
cBowSphere = CollisionSphere(
0.0, self.bowPos[1]+sRadius, 0.0, sRadius)
cBowSphereNode = CollisionNode('SP.cBowSphereNode')
cBowSphereNode.addSolid(cBowSphere)
self.cBowSphereNodePath = self.ship.getInteractCollisionRoot().attachNewNode(
cBowSphereNode)
# self.cBowSphereNodePath.show()
cSphereNode.addSolid(cBowSphere)
# cBowSphereNode = CollisionNode('SP.cBowSphereNode')
# cBowSphereNode.addSolid(cBowSphere)
# self.cBowSphereNodePath = self.ship.getInteractCollisionRoot().attachNewNode(
# cBowSphereNode)
self.pusher.addCollider(
self.cBowSphereNodePath, self.shipNodePath)
self.pusher.setHorizontal(True)
# self.pusher.addCollider(
# self.cBowSphereNodePath, self.shipNodePath)
# Back sphere:
cSternSphere = CollisionSphere(
0.0, self.sternPos[1]-sRadius, 0.0, sRadius)
cSternSphereNode = CollisionNode('SP.cSternSphereNode')
cSternSphereNode.addSolid(cSternSphere)
self.cSternSphereNodePath = self.ship.getInteractCollisionRoot().attachNewNode(
cSternSphereNode)
# self.cSternSphereNodePath.show()
cSphereNode.addSolid(cSternSphere)
# cSternSphereNode.addSolid(cSternSphere)
# self.cSternSphereNodePath = self.ship.getInteractCollisionRoot().attachNewNode(
# cSternSphereNode)
# self.pusher.addCollider(
# self.cSternSphereNodePath, self.shipNodePath)
self.pusher.addCollider(
self.cSternSphereNodePath, self.shipNodePath)
self.cSphereNodePath = self.ship.getInteractCollisionRoot().attachNewNode(
cSphereNode)
self.pusher.addCollider(
self.cSphereNodePath, self.shipNodePath)
self.pusher.setHorizontal(True)
# hide other things on my ship that these spheres might collide
# with and which I dont need anyways...
shipCollWall = self.shipNodePath.find("**/collision_hull")
@ -144,26 +158,38 @@ class ShipPilot(PhysicsWalker):
self.collisionsActive = active
shipCollWall = self.shipNodePath.find("**/collision_hull;+s")
if active:
self.cBowSphereNodePath.node().setFromCollideMask(self.wallBitmask | self.floorBitmask)
self.cBowSphereNodePath.node().setIntoCollideMask(BitMask32.allOff())
self.cSternSphereNodePath.node().setFromCollideMask(self.wallBitmask | self.floorBitmask)
self.cSternSphereNodePath.node().setIntoCollideMask(BitMask32.allOff())
self.cTrav.addCollider(self.cBowSphereNodePath, self.pusher)
self.cTrav.addCollider(self.cSternSphereNodePath, self.pusher)
# self.cBowSphereNodePath.node().setFromCollideMask(self.wallBitmask | self.floorBitmask)
# self.cBowSphereNodePath.node().setIntoCollideMask(BitMask32.allOff())
# self.cSternSphereNodePath.node().setFromCollideMask(self.wallBitmask | self.floorBitmask)
# self.cSternSphereNodePath.node().setIntoCollideMask(BitMask32.allOff())
self.cSphereNodePath.node().setFromCollideMask(self.wallBitmask | self.floorBitmask)
self.cSphereNodePath.node().setIntoCollideMask(BitMask32.allOff())
# self.cTrav.addCollider(self.cBowSphereNodePath, self.pusher)
# self.cTrav.addCollider(self.cSternSphereNodePath, self.pusher)
self.cTrav.addCollider(self.cSphereNodePath, self.pusher)
shipCollWall.stash()
else:
self.cTrav.removeCollider(self.cBowSphereNodePath)
self.cTrav.removeCollider(self.cSternSphereNodePath)
# self.cTrav.removeCollider(self.cBowSphereNodePath)
# self.cTrav.removeCollider(self.cSternSphereNodePath)
self.cTrav.removeCollider(self.cSphereNodePath)
shipCollWall.unstash()
# Now that we have disabled collisions, make one more pass
# right now to ensure we aren't standing in a wall.
self.oneTimeCollide()
def deleteCollisions(self):
import pdb;pdb.set_trace()
assert self.debugPrint("deleteCollisions()")
del self.cTrav
"""
if hasattr(self, "cBowSphereNodePath"):
self.cBowSphereNodePath.removeNode()
del self.cBowSphereNodePath
if hasattr(self, "cSternSphereNodePath"):
self.cSternSphereNodePath.removeNode()
del self.cSternSphereNodePath
"""
if hasattr(self, "cSphereNodePath"):
self.cSphereNodePath.removeNode()
del self.cSphereNodePath
@ -186,8 +212,9 @@ class ShipPilot(PhysicsWalker):
assert self.debugPrint("takedownPhysics()")
def setTag(self, key, value):
self.cSternSphereNodePath.setTag(key, value)
self.cBowSphereNodePath.setTag(key, value)
# self.cSternSphereNodePath.setTag(key, value)
# self.cBowSphereNodePath.setTag(key, value)
self.cSphereNodePath.setTag(key, value)
def setAvatarPhysicsIndicator(self, indicator):
"""