mirror of
https://github.com/panda3d/panda3d.git
synced 2026-01-31 03:48:46 -06:00
97 lines
3.2 KiB
Python
97 lines
3.2 KiB
Python
from panda3d.core import NodePath
|
|
from panda3d.physics import (
|
|
ActorNode,
|
|
AngularEulerIntegrator,
|
|
ForceNode,
|
|
LinearEulerIntegrator,
|
|
LinearFrictionForce,
|
|
LinearVectorForce,
|
|
)
|
|
|
|
|
|
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 = base.loader.loadModel("models/misc/smiley")
|
|
assert not avatarNodePath.isEmpty()
|
|
|
|
# camLL = base.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(base.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(base.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(base.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(base.render)
|
|
fn.addForce(self.acForce)
|
|
self.phys.addLinearForce(self.acForce)
|
|
#self.phys.removeLinearForce(self.acForce)
|
|
#fnp.remove()
|
|
|
|
#avatarNodePath.reparentTo(base.render)
|
|
self.avatarNodePath = avatarNodePath
|
|
#self.actorNode.getPhysicsObject().resetPosition(self.avatarNodePath.getPos())
|
|
#self.actorNode.updateTransform()
|
|
|
|
|
|
def test_FallTest(base):
|
|
base.enableParticles()
|
|
base.addAngularIntegrator()
|
|
test = FallTest()
|
|
test.reparentTo(base.render)
|
|
test.setup()
|
|
# base.camera.setY(-10.0)
|