mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-02 09:52:27 -04:00
added reach
This commit is contained in:
parent
acfb0bb710
commit
5d636da5de
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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:
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
"""
|
||||
|
@ -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()
|
||||
|
Loading…
x
Reference in New Issue
Block a user