88 lines
3 KiB
Python
88 lines
3 KiB
Python
|
from panda3d.core import NodePath
|
||
|
from panda3d.physics import *
|
||
|
|
||
|
class FallTest(NodePath):
|
||
|
def __init__(self):
|
||
|
NodePath.__init__(self, "FallTest")
|
||
|
|
||
|
def setup(self):
|
||
|
# Connect to Physics Manager:
|
||
|
self.actorNode=ActorNode("FallTestActorNode")
|
||
|
#self.actorNode.getPhysicsObject().setOriented(1)
|
||
|
#self.actorNode.getPhysical(0).setViscosity(0.1)
|
||
|
|
||
|
actorNodePath=self.attachNewNode(self.actorNode)
|
||
|
#self.setPos(avatarNodePath, Vec3(0))
|
||
|
#self.setHpr(avatarNodePath, Vec3(0))
|
||
|
|
||
|
avatarNodePath=loader.loadModel("models/misc/smiley")
|
||
|
assert not avatarNodePath.isEmpty()
|
||
|
|
||
|
camLL=render.find("**/camLL")
|
||
|
camLL.reparentTo(avatarNodePath)
|
||
|
camLL.setPosHpr(0, -10, 0, 0, 0, 0)
|
||
|
avatarNodePath.reparentTo(actorNodePath)
|
||
|
#avatarNodePath.setPos(Vec3(0))
|
||
|
#avatarNodePath.setHpr(Vec3(0))
|
||
|
#avatarNodePath.assign(physicsActor)
|
||
|
#self.phys=PhysicsManager()
|
||
|
self.phys=base.physicsMgr
|
||
|
|
||
|
if 1:
|
||
|
fn=ForceNode("FallTest gravity")
|
||
|
fnp=NodePath(fn)
|
||
|
fnp.reparentTo(self)
|
||
|
fnp.reparentTo(render)
|
||
|
gravity=LinearVectorForce(0.0, 0.0, -.5)
|
||
|
fn.addForce(gravity)
|
||
|
self.phys.addLinearForce(gravity)
|
||
|
self.gravity = gravity
|
||
|
|
||
|
if 0:
|
||
|
fn=ForceNode("FallTest viscosity")
|
||
|
fnp=NodePath(fn)
|
||
|
fnp.reparentTo(self)
|
||
|
fnp.reparentTo(render)
|
||
|
self.avatarViscosity=LinearFrictionForce(0.0, 1.0, 0)
|
||
|
#self.avatarViscosity.setCoef(0.9)
|
||
|
fn.addForce(self.avatarViscosity)
|
||
|
self.phys.addLinearForce(self.avatarViscosity)
|
||
|
|
||
|
if 0:
|
||
|
self.phys.attachLinearIntegrator(LinearEulerIntegrator())
|
||
|
if 0:
|
||
|
self.phys.attachAngularIntegrator(AngularEulerIntegrator())
|
||
|
#self.phys.attachPhysicalNode(self.node())
|
||
|
self.phys.attachPhysicalNode(self.actorNode)
|
||
|
|
||
|
if 0:
|
||
|
self.momentumForce=LinearVectorForce(0.0, 0.0, 0.0)
|
||
|
fn=ForceNode("FallTest momentum")
|
||
|
fnp=NodePath(fn)
|
||
|
fnp.reparentTo(render)
|
||
|
fn.addForce(self.momentumForce)
|
||
|
self.phys.addLinearForce(self.momentumForce)
|
||
|
|
||
|
if 0:
|
||
|
self.acForce=LinearVectorForce(0.0, 0.0, 0.0)
|
||
|
fn=ForceNode("FallTest avatarControls")
|
||
|
fnp=NodePath(fn)
|
||
|
fnp.reparentTo(render)
|
||
|
fn.addForce(self.acForce)
|
||
|
self.phys.addLinearForce(self.acForce)
|
||
|
#self.phys.removeLinearForce(self.acForce)
|
||
|
#fnp.remove()
|
||
|
|
||
|
#avatarNodePath.reparentTo(render)
|
||
|
self.avatarNodePath = avatarNodePath
|
||
|
#self.actorNode.getPhysicsObject().resetPosition(self.avatarNodePath.getPos())
|
||
|
#self.actorNode.updateTransform()
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
from direct.directbase.ThreeUpStart import *
|
||
|
test=FallTest()
|
||
|
test.reparentTo(base.render)
|
||
|
test.setup()
|
||
|
base.camera.setY(-10.0)
|
||
|
base.run()
|