Guest User

Untitled

a guest
Dec 12th, 2018
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.28 KB | None | 0 0
  1. from pandac.PandaModules import loadPrcFileData
  2.  
  3. loadPrcFileData("", "sync-video #f")
  4. loadPrcFileData("", "show-frame-rate-meter #t")
  5.  
  6. import sys
  7. import direct.directbase.DirectStart
  8.  
  9. from direct.showbase.DirectObject import DirectObject
  10. from direct.showbase.InputStateGlobal import inputState
  11.  
  12.  
  13. from panda3d.core import Vec3
  14. from panda3d.bullet import BulletWorld
  15. from panda3d.bullet import BulletPlaneShape
  16. from panda3d.bullet import BulletRigidBodyNode
  17. from panda3d.bullet import BulletDebugNode
  18. from panda3d.bullet import BulletCapsuleShape
  19. from panda3d.bullet import BulletCharacterControllerNode
  20. from panda3d.bullet import ZUp
  21.  
  22. class Game(DirectObject):
  23.  
  24. def __init__(self):
  25.  
  26. base.cam.setPos(0, -20, 4)
  27. base.cam.lookAt(0, 0, 0)
  28.  
  29.  
  30. self.accept('f3', self.toggleDebug)
  31.  
  32.  
  33. inputState.watchWithModifiers('forward', 'w')
  34. inputState.watchWithModifiers('left', 'a')
  35. inputState.watchWithModifiers('reverse', 's')
  36. inputState.watchWithModifiers('right', 'd')
  37. inputState.watchWithModifiers('turnLeft', 'q')
  38. inputState.watchWithModifiers('turnRight', 'e')
  39.  
  40. # Task
  41. taskMgr.add(self.update, 'updateWorld')
  42.  
  43. # Physics
  44. self.setup()
  45.  
  46. def toggleDebug(self):
  47. if self.debugNP.isHidden():
  48. self.debugNP.show()
  49. else:
  50. self.debugNP.hide()
  51.  
  52.  
  53. def processInput(self): #@IndentOk
  54. speed = Vec3(0, 0, 0)
  55. omega = 0.0
  56.  
  57. if inputState.isSet('forward'): speed.setY( 3.0)
  58. if inputState.isSet('reverse'): speed.setY(-3.0)
  59. if inputState.isSet('left'): speed.setX(-3.0)
  60. if inputState.isSet('right'): speed.setX( 3.0)
  61. if inputState.isSet('turnLeft'): omega = 120.0
  62. if inputState.isSet('turnRight'): omega = -120.0
  63.  
  64. self.player.setAngularVelocity(omega)
  65. self.player.setLinearVelocity(speed, True)
  66.  
  67. def update(self, task):
  68. dt = globalClock.getDt()
  69. self.processInput()
  70. self.world.doPhysics(dt, 10, 0.008)
  71.  
  72. return task.cont
  73.  
  74. def setup(self):
  75. self.worldNP = render.attachNewNode('World')
  76.  
  77. # World
  78. self.debugNP = self.worldNP.attachNewNode(BulletDebugNode('Debug'))
  79. self.debugNP.show()
  80.  
  81. self.world = BulletWorld()
  82. self.world.setGravity(Vec3(0, 0, -9.81))
  83. self.world.setDebugNode(self.debugNP.node())
  84.  
  85. # Ground
  86. shape = BulletPlaneShape(Vec3(0, 0, 1), 0)
  87.  
  88.  
  89. np = self.worldNP.attachNewNode(BulletRigidBodyNode('Ground'))
  90. np.node().addShape(shape)
  91. np.setPos(0, 0, -1)
  92.  
  93. self.world.attachRigidBody(np.node())
  94.  
  95. # Character
  96. self.crouching = False
  97.  
  98. h = 1.75
  99. w = 0.4
  100. shape = BulletCapsuleShape(w, h - 2 * w, ZUp)
  101.  
  102. node = BulletCharacterControllerNode(shape, 0.4, 'Player')
  103. np = self.worldNP.attachNewNode(node)
  104. np.setPos(-2, 0, 14)
  105. np.setH(45)
  106.  
  107. self.world.attachCharacter(np.node())
  108.  
  109. self.player = node # For player control
  110.  
  111. game = Game()
  112. run()
Add Comment
Please, Sign In to add comment