mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-03 02:15:43 -04:00
added reach
This commit is contained in:
parent
acfb0bb710
commit
5d636da5de
@ -194,30 +194,30 @@ class ControlManager:
|
|||||||
return self.currentControls.getSpeeds()
|
return self.currentControls.getSpeeds()
|
||||||
|
|
||||||
def initializeCollisions(self, cTrav,
|
def initializeCollisions(self, cTrav,
|
||||||
wallBitmask, floorBitmask, ghostBitmask, avatarRadius, floorOffset):
|
wallBitmask, floorBitmask, ghostBitmask, avatarRadius, floorOffset, reach = 4.0):
|
||||||
assert(self.debugPrint("initializeCollisions()"))
|
assert(self.debugPrint("initializeCollisions()"))
|
||||||
|
|
||||||
self.walkControls.initializeCollisions(cTrav, self.avatar,
|
self.walkControls.initializeCollisions(cTrav, self.avatar,
|
||||||
wallBitmask, floorBitmask, avatarRadius, floorOffset)
|
wallBitmask, floorBitmask, avatarRadius, floorOffset, reach)
|
||||||
self.walkControls.setAirborneHeightFunc(self.avatar.getAirborneHeight)
|
self.walkControls.setAirborneHeightFunc(self.avatar.getAirborneHeight)
|
||||||
self.walkControls.disableAvatarControls()
|
self.walkControls.disableAvatarControls()
|
||||||
self.walkControls.setCollisionsActive(0)
|
self.walkControls.setCollisionsActive(0)
|
||||||
|
|
||||||
self.swimControls.initializeCollisions(cTrav, self.avatar,
|
self.swimControls.initializeCollisions(cTrav, self.avatar,
|
||||||
wallBitmask, floorBitmask, avatarRadius, floorOffset)
|
wallBitmask, floorBitmask, avatarRadius, floorOffset, reach)
|
||||||
self.swimControls.setAirborneHeightFunc(self.avatar.getAirborneHeight)
|
self.swimControls.setAirborneHeightFunc(self.avatar.getAirborneHeight)
|
||||||
self.swimControls.disableAvatarControls()
|
self.swimControls.disableAvatarControls()
|
||||||
self.swimControls.setCollisionsActive(0)
|
self.swimControls.setCollisionsActive(0)
|
||||||
|
|
||||||
self.ghostControls.initializeCollisions(cTrav, self.avatar,
|
self.ghostControls.initializeCollisions(cTrav, self.avatar,
|
||||||
ghostBitmask, floorBitmask, avatarRadius, floorOffset)
|
ghostBitmask, floorBitmask, avatarRadius, floorOffset, reach)
|
||||||
self.ghostControls.setAirborneHeightFunc(self.avatar.getAirborneHeight)
|
self.ghostControls.setAirborneHeightFunc(self.avatar.getAirborneHeight)
|
||||||
self.ghostControls.disableAvatarControls()
|
self.ghostControls.disableAvatarControls()
|
||||||
self.ghostControls.setCollisionsActive(0)
|
self.ghostControls.setCollisionsActive(0)
|
||||||
|
|
||||||
if __debug__:
|
if __debug__:
|
||||||
self.devControls.initializeCollisions(cTrav, self.avatar,
|
self.devControls.initializeCollisions(cTrav, self.avatar,
|
||||||
wallBitmask, floorBitmask, avatarRadius, floorOffset)
|
wallBitmask, floorBitmask, avatarRadius, floorOffset, reach)
|
||||||
self.devControls.setAirborneHeightFunc(self.avatar.getAirborneHeight)
|
self.devControls.setAirborneHeightFunc(self.avatar.getAirborneHeight)
|
||||||
self.devControls.disableAvatarControls()
|
self.devControls.disableAvatarControls()
|
||||||
self.devControls.setCollisionsActive(0)
|
self.devControls.setCollisionsActive(0)
|
||||||
|
@ -48,7 +48,7 @@ class DevWalker(DirectObject.DirectObject):
|
|||||||
|
|
||||||
def initializeCollisions(self, collisionTraverser, avatarNodePath,
|
def initializeCollisions(self, collisionTraverser, avatarNodePath,
|
||||||
wallCollideMask, floorCollideMask,
|
wallCollideMask, floorCollideMask,
|
||||||
avatarRadius = 1.4, floorOffset = 1.0):
|
avatarRadius = 1.4, floorOffset = 1.0, reach = 1.0):
|
||||||
assert not avatarNodePath.isEmpty()
|
assert not avatarNodePath.isEmpty()
|
||||||
|
|
||||||
self.cTrav = collisionTraverser
|
self.cTrav = collisionTraverser
|
||||||
|
@ -170,7 +170,7 @@ class GravityWalker(DirectObject.DirectObject):
|
|||||||
#assert(self.debugPrint("getSpeeds()"))
|
#assert(self.debugPrint("getSpeeds()"))
|
||||||
return (self.speed, self.rotationSpeed)
|
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 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
|
# 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
|
# 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.addInPattern("enter%in")
|
||||||
self.lifter.addOutPattern("exit%in")
|
self.lifter.addOutPattern("exit%in")
|
||||||
self.lifter.setOffset(floorOffset)
|
self.lifter.setOffset(floorOffset)
|
||||||
|
self.lifter.setReach(reach)
|
||||||
|
|
||||||
# Limit our rate-of-fall with the lifter.
|
# Limit our rate-of-fall with the lifter.
|
||||||
# If this is too low, we actually "fall" off steep stairs
|
# If this is too low, we actually "fall" off steep stairs
|
||||||
@ -273,7 +274,7 @@ class GravityWalker(DirectObject.DirectObject):
|
|||||||
|
|
||||||
def initializeCollisions(self, collisionTraverser, avatarNodePath,
|
def initializeCollisions(self, collisionTraverser, avatarNodePath,
|
||||||
wallBitmask, floorBitmask,
|
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
|
floorOffset is how high the avatar can reach. I.e. if the avatar
|
||||||
walks under a ledge that is <= floorOffset above the ground (a
|
walks under a ledge that is <= floorOffset above the ground (a
|
||||||
@ -289,7 +290,7 @@ class GravityWalker(DirectObject.DirectObject):
|
|||||||
|
|
||||||
self.cTrav = collisionTraverser
|
self.cTrav = collisionTraverser
|
||||||
|
|
||||||
self.setupRay(floorBitmask, floorOffset)
|
self.setupRay(floorBitmask, floorOffset, reach )
|
||||||
self.setupWallSphere(wallBitmask, avatarRadius)
|
self.setupWallSphere(wallBitmask, avatarRadius)
|
||||||
self.setupEventSphere(wallBitmask, avatarRadius)
|
self.setupEventSphere(wallBitmask, avatarRadius)
|
||||||
if self.wantFloorSphere:
|
if self.wantFloorSphere:
|
||||||
|
@ -48,7 +48,7 @@ class NonPhysicsWalker(DirectObject.DirectObject):
|
|||||||
|
|
||||||
def initializeCollisions(self, collisionTraverser, avatarNodePath,
|
def initializeCollisions(self, collisionTraverser, avatarNodePath,
|
||||||
wallCollideMask, floorCollideMask,
|
wallCollideMask, floorCollideMask,
|
||||||
avatarRadius = 1.4, floorOffset = 1.0):
|
avatarRadius = 1.4, floorOffset = 1.0, reach = 1.0):
|
||||||
"""
|
"""
|
||||||
Set up the avatar for collisions
|
Set up the avatar for collisions
|
||||||
"""
|
"""
|
||||||
@ -69,9 +69,12 @@ class NonPhysicsWalker(DirectObject.DirectObject):
|
|||||||
cSphereNode.setIntoCollideMask(BitMask32.allOff())
|
cSphereNode.setIntoCollideMask(BitMask32.allOff())
|
||||||
|
|
||||||
# Set up the collison ray
|
# Set up the collison ray
|
||||||
# This is a ray cast from your head down to detect floor polygons
|
# 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
|
# This ray start is arbitrarily high in the air. Feel free to use
|
||||||
self.cRay = CollisionRay(0.0, 0.0, 4.0, 0.0, 0.0, -1.0)
|
# 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 = CollisionNode('NPW.cRayNode')
|
||||||
cRayNode.addSolid(self.cRay)
|
cRayNode.addSolid(self.cRay)
|
||||||
self.cRayNodePath = avatarNodePath.attachNewNode(cRayNode)
|
self.cRayNodePath = avatarNodePath.attachNewNode(cRayNode)
|
||||||
@ -89,6 +92,7 @@ class NonPhysicsWalker(DirectObject.DirectObject):
|
|||||||
self.lifter.setInPattern("on-floor")
|
self.lifter.setInPattern("on-floor")
|
||||||
self.lifter.setOutPattern("off-floor")
|
self.lifter.setOutPattern("off-floor")
|
||||||
self.lifter.setOffset(floorOffset)
|
self.lifter.setOffset(floorOffset)
|
||||||
|
self.lifter.setReach(reach)
|
||||||
|
|
||||||
# Limit our rate-of-fall with the lifter.
|
# Limit our rate-of-fall with the lifter.
|
||||||
# If this is too low, we actually "fall" off steep stairs
|
# If this is too low, we actually "fall" off steep stairs
|
||||||
|
@ -259,7 +259,7 @@ class PhysicsWalker(DirectObject.DirectObject):
|
|||||||
|
|
||||||
def initializeCollisions(self, collisionTraverser, avatarNodePath,
|
def initializeCollisions(self, collisionTraverser, avatarNodePath,
|
||||||
wallBitmask, floorBitmask,
|
wallBitmask, floorBitmask,
|
||||||
avatarRadius = 1.4, floorOffset = 1.0):
|
avatarRadius = 1.4, floorOffset = 1.0, reach = 1.0):
|
||||||
"""
|
"""
|
||||||
Set up the avatar collisions
|
Set up the avatar collisions
|
||||||
"""
|
"""
|
||||||
|
@ -52,7 +52,7 @@ class ShadowPlacer(DirectObject.DirectObject):
|
|||||||
floorOffset = 0.025
|
floorOffset = 0.025
|
||||||
# Set up the collison ray
|
# Set up the collison ray
|
||||||
# This is a ray cast down to detect floor polygons
|
# 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 = CollisionNode('shadowPlacer')
|
||||||
cRayNode.addSolid(self.cRay)
|
cRayNode.addSolid(self.cRay)
|
||||||
self.cRayNodePath = NodePath(cRayNode)
|
self.cRayNodePath = NodePath(cRayNode)
|
||||||
@ -65,6 +65,7 @@ class ShadowPlacer(DirectObject.DirectObject):
|
|||||||
#self.lifter.setInPattern("on-floor")
|
#self.lifter.setInPattern("on-floor")
|
||||||
#self.lifter.setOutPattern("off-floor")
|
#self.lifter.setOutPattern("off-floor")
|
||||||
self.lifter.setOffset(floorOffset)
|
self.lifter.setOffset(floorOffset)
|
||||||
|
self.lifter.setReach(4.0)
|
||||||
|
|
||||||
# activate the collider with the traverser and pusher
|
# activate the collider with the traverser and pusher
|
||||||
#self.on()
|
#self.on()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user