Guest User

Untitled

a guest
Dec 12th, 2018
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.47 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. base.cam.setPos(0, -20, 4)
  26. base.cam.lookAt(0, 0, 0)
  27.  
  28.  
  29. self.accept('f3', self.toggleDebug)
  30.  
  31.  
  32. inputState.watchWithModifiers('forward', 'w')
  33. inputState.watchWithModifiers('left', 'a')
  34. inputState.watchWithModifiers('reverse', 's')
  35. inputState.watchWithModifiers('right', 'd')
  36. inputState.watchWithModifiers('turnLeft', 'q')
  37. inputState.watchWithModifiers('turnRight', 'e')
  38.  
  39. # Task
  40. taskMgr.add(self.update, 'updateWorld')
  41.  
  42. # Physics
  43. self.setup()
  44.  
  45. def toggleDebug(self):
  46. if self.debugNP.isHidden():
  47. self.debugNP.show()
  48. else:
  49. self.debugNP.hide()
  50.  
  51.  
  52. def processInput(self): #@IndentOk
  53. speed = Vec3(0, 0, 0)
  54. omega = 0.0
  55.  
  56. if inputState.isSet('forward'): speed.setY( 3.0)
  57. if inputState.isSet('reverse'): speed.setY(-3.0)
  58. if inputState.isSet('left'): speed.setX(-3.0)
  59. if inputState.isSet('right'): speed.setX( 3.0)
  60. if inputState.isSet('turnLeft'): omega = 120.0
  61. if inputState.isSet('turnRight'): omega = -120.0
  62.  
  63. self.player.setAngularVelocity(omega)
  64. self.player.setLinearVelocity(speed, True)
  65.  
  66. def update(self, task):
  67. dt = globalClock.getDt()
  68. self.processInput()
  69. pos = self.playerNP.getPos()
  70. self.world.doPhysics(dt, 10, 0.008)
  71. pos2 = self.playerNP.getPos()
  72. distx = pos2[0]-pos[0]
  73. disty = pos2[1]-pos[1]
  74. print distx,disty
  75.  
  76. return task.cont
  77.  
  78. def setup(self):
  79. self.worldNP = render.attachNewNode('World')
  80.  
  81. # World
  82. self.debugNP = self.worldNP.attachNewNode(BulletDebugNode('Debug'))
  83. self.debugNP.show()
  84.  
  85. self.world = BulletWorld()
  86. self.world.setGravity(Vec3(0, 0, -9.81))
  87. self.world.setDebugNode(self.debugNP.node())
  88.  
  89. # Ground
  90. shape = BulletPlaneShape(Vec3(0, 0, 1), 0)
  91.  
  92.  
  93. np = self.worldNP.attachNewNode(BulletRigidBodyNode('Ground'))
  94. np.node().addShape(shape)
  95. np.setPos(0, 0, -1)
  96.  
  97. self.world.attachRigidBody(np.node())
  98.  
  99. # Character
  100. self.crouching = False
  101.  
  102. h = 1.75
  103. w = 0.4
  104. shape = BulletCapsuleShape(w, h - 2 * w, ZUp)
  105.  
  106. node = BulletCharacterControllerNode(shape, 0.4, 'Player')
  107. np = self.worldNP.attachNewNode(node)
  108. np.setPos(-2, 0, 14)
  109. np.setH(45)
  110.  
  111. self.world.attachCharacter(np.node())
  112.  
  113. self.player = node # For player control
  114. self.playerNP = np
  115.  
  116. game = Game()
  117. run()
Add Comment
Please, Sign In to add comment