added reach

This commit is contained in:
Dave Schuyler 2004-04-15 22:19:39 +00:00
parent acfb0bb710
commit 5d636da5de
6 changed files with 21 additions and 15 deletions

View File

@ -194,30 +194,30 @@ class ControlManager:
return self.currentControls.getSpeeds()
def initializeCollisions(self, cTrav,
wallBitmask, floorBitmask, ghostBitmask, avatarRadius, floorOffset):
wallBitmask, floorBitmask, ghostBitmask, avatarRadius, floorOffset, reach = 4.0):
assert(self.debugPrint("initializeCollisions()"))
self.walkControls.initializeCollisions(cTrav, self.avatar,
wallBitmask, floorBitmask, avatarRadius, floorOffset)
wallBitmask, floorBitmask, avatarRadius, floorOffset, reach)
self.walkControls.setAirborneHeightFunc(self.avatar.getAirborneHeight)
self.walkControls.disableAvatarControls()
self.walkControls.setCollisionsActive(0)
self.swimControls.initializeCollisions(cTrav, self.avatar,
wallBitmask, floorBitmask, avatarRadius, floorOffset)
wallBitmask, floorBitmask, avatarRadius, floorOffset, reach)
self.swimControls.setAirborneHeightFunc(self.avatar.getAirborneHeight)
self.swimControls.disableAvatarControls()
self.swimControls.setCollisionsActive(0)
self.ghostControls.initializeCollisions(cTrav, self.avatar,
ghostBitmask, floorBitmask, avatarRadius, floorOffset)
ghostBitmask, floorBitmask, avatarRadius, floorOffset, reach)
self.ghostControls.setAirborneHeightFunc(self.avatar.getAirborneHeight)
self.ghostControls.disableAvatarControls()
self.ghostControls.setCollisionsActive(0)
if __debug__:
self.devControls.initializeCollisions(cTrav, self.avatar,
wallBitmask, floorBitmask, avatarRadius, floorOffset)
wallBitmask, floorBitmask, avatarRadius, floorOffset, reach)
self.devControls.setAirborneHeightFunc(self.avatar.getAirborneHeight)
self.devControls.disableAvatarControls()
self.devControls.setCollisionsActive(0)

View File

@ -48,7 +48,7 @@ class DevWalker(DirectObject.DirectObject):
def initializeCollisions(self, collisionTraverser, avatarNodePath,
wallCollideMask, floorCollideMask,
avatarRadius = 1.4, floorOffset = 1.0):
avatarRadius = 1.4, floorOffset = 1.0, reach = 1.0):
assert not avatarNodePath.isEmpty()
self.cTrav = collisionTraverser

View File

@ -170,7 +170,7 @@ class GravityWalker(DirectObject.DirectObject):
#assert(self.debugPrint("getSpeeds()"))
return (self.speed, self.rotationSpeed)
def setupRay(self, bitmask, floorOffset):
def setupRay(self, bitmask, floorOffset, reach):
# This is a ray cast from your head down to detect floor polygons.
# This ray start is arbitrarily high in the air. Feel free to use
# a higher or lower value depending on whether you want an avatar
@ -189,6 +189,7 @@ class GravityWalker(DirectObject.DirectObject):
self.lifter.addInPattern("enter%in")
self.lifter.addOutPattern("exit%in")
self.lifter.setOffset(floorOffset)
self.lifter.setReach(reach)
# Limit our rate-of-fall with the lifter.
# If this is too low, we actually "fall" off steep stairs
@ -273,7 +274,7 @@ class GravityWalker(DirectObject.DirectObject):
def initializeCollisions(self, collisionTraverser, avatarNodePath,
wallBitmask, floorBitmask,
avatarRadius = 1.4, floorOffset = 1.0):
avatarRadius = 1.4, floorOffset = 1.0, reach = 1.0):
"""
floorOffset is how high the avatar can reach. I.e. if the avatar
walks under a ledge that is <= floorOffset above the ground (a
@ -289,7 +290,7 @@ class GravityWalker(DirectObject.DirectObject):
self.cTrav = collisionTraverser
self.setupRay(floorBitmask, floorOffset)
self.setupRay(floorBitmask, floorOffset, reach )
self.setupWallSphere(wallBitmask, avatarRadius)
self.setupEventSphere(wallBitmask, avatarRadius)
if self.wantFloorSphere:

View File

@ -48,7 +48,7 @@ class NonPhysicsWalker(DirectObject.DirectObject):
def initializeCollisions(self, collisionTraverser, avatarNodePath,
wallCollideMask, floorCollideMask,
avatarRadius = 1.4, floorOffset = 1.0):
avatarRadius = 1.4, floorOffset = 1.0, reach = 1.0):
"""
Set up the avatar for collisions
"""
@ -69,9 +69,12 @@ class NonPhysicsWalker(DirectObject.DirectObject):
cSphereNode.setIntoCollideMask(BitMask32.allOff())
# Set up the collison ray
# This is a ray cast from your head down to detect floor polygons
# A toon is about 4.0 feet high, so start it there
self.cRay = CollisionRay(0.0, 0.0, 4.0, 0.0, 0.0, -1.0)
# This is a ray cast from your head down to detect floor polygons.
# This ray start is arbitrarily high in the air. Feel free to use
# a higher or lower value depending on whether you want an avatar
# that is outside of the world to step up to the floor when they
# get under valid floor:
self.cRay = CollisionRay(0.0, 0.0, 400000.0, 0.0, 0.0, -1.0)
cRayNode = CollisionNode('NPW.cRayNode')
cRayNode.addSolid(self.cRay)
self.cRayNodePath = avatarNodePath.attachNewNode(cRayNode)
@ -89,6 +92,7 @@ class NonPhysicsWalker(DirectObject.DirectObject):
self.lifter.setInPattern("on-floor")
self.lifter.setOutPattern("off-floor")
self.lifter.setOffset(floorOffset)
self.lifter.setReach(reach)
# Limit our rate-of-fall with the lifter.
# If this is too low, we actually "fall" off steep stairs

View File

@ -259,7 +259,7 @@ class PhysicsWalker(DirectObject.DirectObject):
def initializeCollisions(self, collisionTraverser, avatarNodePath,
wallBitmask, floorBitmask,
avatarRadius = 1.4, floorOffset = 1.0):
avatarRadius = 1.4, floorOffset = 1.0, reach = 1.0):
"""
Set up the avatar collisions
"""

View File

@ -52,7 +52,7 @@ class ShadowPlacer(DirectObject.DirectObject):
floorOffset = 0.025
# Set up the collison ray
# This is a ray cast down to detect floor polygons
self.cRay = CollisionRay(0.0, 0.0, 4.0, 0.0, 0.0, -1.0)
self.cRay = CollisionRay(0.0, 0.0, 400.0, 0.0, 0.0, -1.0)
cRayNode = CollisionNode('shadowPlacer')
cRayNode.addSolid(self.cRay)
self.cRayNodePath = NodePath(cRayNode)
@ -65,6 +65,7 @@ class ShadowPlacer(DirectObject.DirectObject):
#self.lifter.setInPattern("on-floor")
#self.lifter.setOutPattern("off-floor")
self.lifter.setOffset(floorOffset)
self.lifter.setReach(4.0)
# activate the collider with the traverser and pusher
#self.on()