test_fall.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. from panda3d.core import NodePath
  2. from panda3d.physics import (
  3. ActorNode,
  4. AngularEulerIntegrator,
  5. ForceNode,
  6. LinearEulerIntegrator,
  7. LinearFrictionForce,
  8. LinearVectorForce,
  9. )
  10. class FallTest(NodePath):
  11. def __init__(self):
  12. NodePath.__init__(self, "FallTest")
  13. def setup(self):
  14. # Connect to Physics Manager:
  15. self.actorNode = ActorNode("FallTestActorNode")
  16. #self.actorNode.getPhysicsObject().setOriented(1)
  17. #self.actorNode.getPhysical(0).setViscosity(0.1)
  18. actorNodePath = self.attachNewNode(self.actorNode)
  19. #self.setPos(avatarNodePath, Vec3(0))
  20. #self.setHpr(avatarNodePath, Vec3(0))
  21. avatarNodePath = base.loader.loadModel("models/misc/smiley.egg")
  22. assert not avatarNodePath.isEmpty()
  23. # camLL = base.render.find("**/camLL")
  24. # camLL.reparentTo(avatarNodePath)
  25. # camLL.setPosHpr(0, -10, 0, 0, 0, 0)
  26. avatarNodePath.reparentTo(actorNodePath)
  27. #avatarNodePath.setPos(Vec3(0))
  28. #avatarNodePath.setHpr(Vec3(0))
  29. #avatarNodePath.assign(physicsActor)
  30. #self.phys = PhysicsManager()
  31. self.phys = base.physicsMgr
  32. if 1:
  33. fn=ForceNode("FallTest gravity")
  34. fnp=NodePath(fn)
  35. fnp.reparentTo(self)
  36. fnp.reparentTo(base.render)
  37. gravity=LinearVectorForce(0.0, 0.0, -.5)
  38. fn.addForce(gravity)
  39. self.phys.addLinearForce(gravity)
  40. self.gravity = gravity
  41. if 0:
  42. fn=ForceNode("FallTest viscosity")
  43. fnp=NodePath(fn)
  44. fnp.reparentTo(self)
  45. fnp.reparentTo(base.render)
  46. self.avatarViscosity=LinearFrictionForce(0.0, 1.0, 0)
  47. #self.avatarViscosity.setCoef(0.9)
  48. fn.addForce(self.avatarViscosity)
  49. self.phys.addLinearForce(self.avatarViscosity)
  50. if 0:
  51. self.phys.attachLinearIntegrator(LinearEulerIntegrator())
  52. if 0:
  53. self.phys.attachAngularIntegrator(AngularEulerIntegrator())
  54. #self.phys.attachPhysicalNode(self.node())
  55. self.phys.attachPhysicalNode(self.actorNode)
  56. if 0:
  57. self.momentumForce=LinearVectorForce(0.0, 0.0, 0.0)
  58. fn=ForceNode("FallTest momentum")
  59. fnp=NodePath(fn)
  60. fnp.reparentTo(base.render)
  61. fn.addForce(self.momentumForce)
  62. self.phys.addLinearForce(self.momentumForce)
  63. if 0:
  64. self.acForce=LinearVectorForce(0.0, 0.0, 0.0)
  65. fn=ForceNode("FallTest avatarControls")
  66. fnp=NodePath(fn)
  67. fnp.reparentTo(base.render)
  68. fn.addForce(self.acForce)
  69. self.phys.addLinearForce(self.acForce)
  70. #self.phys.removeLinearForce(self.acForce)
  71. #fnp.remove()
  72. #avatarNodePath.reparentTo(base.render)
  73. self.avatarNodePath = avatarNodePath
  74. #self.actorNode.getPhysicsObject().resetPosition(self.avatarNodePath.getPos())
  75. #self.actorNode.updateTransform()
  76. def test_FallTest(base):
  77. base.enableParticles()
  78. base.addAngularIntegrator()
  79. test = FallTest()
  80. test.reparentTo(base.render)
  81. test.setup()
  82. # base.camera.setY(-10.0)