Main.lua 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. scene = PhysicsScene(0, Vector3(200, 200, 200))
  2. ground = ScenePrimitive(ScenePrimitive.TYPE_PLANE, 30, 30)
  3. ground:loadTexture("Resources/green_texture.png")
  4. scene:addPhysicsChild(ground, 0, 0)
  5. -- Some obstacles
  6. local box = ScenePrimitive(ScenePrimitive.TYPE_BOX, 4,4,6)
  7. box:setPitch(25)
  8. box:setPosition(7, -15, 0)
  9. box:setColor(0.5, 0.5, 1,1)
  10. box:loadTexture("Resources/green_texture.png")
  11. scene:addPhysicsChild(box, 0, 0)
  12. box = ScenePrimitive(ScenePrimitive.TYPE_BOX, 4, 4, 6)
  13. box:setPitch(25)
  14. box:setPosition(-7,-15, 0)
  15. box:setColor(0.5,0.5,1,1)
  16. box:loadTexture("Resources/green_texture.png")
  17. scene:addPhysicsChild(box, 0, 0)
  18. box = ScenePrimitive(ScenePrimitive.TYPE_BOX, 20,2,5)
  19. box:setPosition(0,1, -4.3)
  20. box:setColor(0.5,0.5,1,1)
  21. box:loadTexture("Resources/green_texture.png")
  22. scene:addPhysicsChild(box, 0, 0)
  23. for i = 1, 10 do
  24. box = ScenePrimitive(ScenePrimitive.TYPE_BOX, 0.7,0.7,0.7)
  25. box:loadTexture("Resources/pink_texture.png")
  26. box:Roll(-45 + math.random() % 90)
  27. box:Pitch(-45 + (math.random() % 90))
  28. box:setPosition(-3 + (math.random() % 6), 2 + i*0.5, -5 + math.random() % 3)
  29. scene:addPhysicsChild(box, 0, 1)
  30. end
  31. -- The vehicle
  32. vehicle = ScenePrimitive(ScenePrimitive.TYPE_BOX, 1, 0.5, 2)
  33. vehicle:loadTexture("Resources/pink_texture.png")
  34. vehicle:setColor(1, 1, 0, 1)
  35. vehicle:setPosition(6,1,5)
  36. vehicleController = scene:addVehicleChild(vehicle, 5, 1)
  37. local wheel = ScenePrimitive(ScenePrimitive.TYPE_SPHERE, 0.3, 10, 10)
  38. wheel:loadTexture("Resources/pink_texture.png")
  39. wheel:setColor(0, 1, 0, 1)
  40. vehicleController:addWheel(wheel, Vector3(0.6, 0, -0.5), Vector3(0, -1, 0), Vector3(-1,0,0), 0.2, 0.3, true)
  41. scene:addEntity(wheel)
  42. wheel = ScenePrimitive(ScenePrimitive.TYPE_SPHERE, 0.3, 10, 10)
  43. wheel:loadTexture("Resources/pink_texture.png")
  44. wheel:setColor(0, 1, 0, 1)
  45. vehicleController:addWheel(wheel, Vector3(-0.6,0,-0.5), Vector3(0,-1,0), Vector3(-1,0,0), 0.2, 0.3, true)
  46. scene:addEntity(wheel)
  47. wheel = ScenePrimitive(ScenePrimitive.TYPE_SPHERE, 0.3, 10, 10)
  48. wheel:loadTexture("Resources/pink_texture.png")
  49. wheel:setColor(0, 1, 0, 1)
  50. vehicleController:addWheel(wheel, Vector3(0.6,0,0.5), Vector3(0,-1,0), Vector3(-1,0,0), 0.2, 0.3, false)
  51. scene:addEntity(wheel)
  52. wheel = ScenePrimitive(ScenePrimitive.TYPE_SPHERE, 0.3, 10, 10)
  53. wheel:loadTexture("Resources/pink_texture.png")
  54. wheel:setColor(0, 1, 0, 1)
  55. vehicleController:addWheel(wheel, Vector3(-0.6,0,0.5), Vector3(0,-1,0), Vector3(-1,0,0), 0.2, 0.3, false)
  56. scene:addEntity(wheel)
  57. local steeringValue = 0
  58. local engineForce = 0
  59. local breaking = false
  60. local testBox = ScenePrimitive(ScenePrimitive.TYPE_BOX, 4, 4, 4)
  61. testBox:loadTexture("Resources/pink_texture.png")
  62. testBox:setColor(0.3, 0.5, 1, 0.4)
  63. testBox:setPosition(-5, 2, 7)
  64. scene:addCollisionChild(testBox, 0)
  65. scene:getDefaultCamera():setPosition(16, 16, 16)
  66. scene:getDefaultCamera():lookAt(Vector3(0, 0, 0), Vector3(1, 1, 1))
  67. local function handleKeyEvent(t, e)
  68. if not e:getDispatcher() == CoreServices.getInstance():getCore():getInput() then return end
  69. local inputEvent = safe_cast(e, InputEvent)
  70. local eventKeyCode = e:getEventCode()
  71. if eventKeyCode == InputEvent.EVENT_KEYDOWN then
  72. local keyCode = inputEvent:keyCode()
  73. if keyCode == KEY_r then
  74. vehicleController:warpVehicle(Vector3(6,1,5))
  75. elseif keyCode == KEY_UP then
  76. engineForce = -15
  77. elseif keyCode == KEY_DOWN then
  78. engineForce = 15
  79. elseif keyCode == KEY_LEFT then
  80. steeringValue = 0.5
  81. elseif keyCode == KEY_RIGHT then
  82. steeringValue = -0.5
  83. elseif keyCode == KEY_SPACE then
  84. breaking = true
  85. end
  86. elseif eventKeyCode == InputEvent.EVENT_KEYUP then
  87. if inputEvent.key == KEY_DOWN then
  88. engineForce = 0
  89. elseif inputEvent.key == KEY_RIGHT then
  90. steeringValue = 0
  91. elseif inputEvent.key == KEY_SPACE then
  92. breaking = false
  93. end
  94. end
  95. end
  96. CoreServices.getInstance():getCore():getInput():addEventListener(nil, handleKeyEvent, InputEvent.EVENT_KEYDOWN)
  97. CoreServices.getInstance():getCore():getInput():addEventListener(nil, handleKeyEvent, InputEvent.EVENT_KEYUP)
  98. function Update(elapsed)
  99. if breaking then
  100. vehicleController:setBrake(20, 2)
  101. vehicleController:setBrake(20, 3)
  102. vehicleController:applyEngineForce(0, 2)
  103. vehicleController:applyEngineForce(0, 3)
  104. else
  105. vehicleController:setBrake(0, 2)
  106. vehicleController:setBrake(0, 3)
  107. vehicleController:applyEngineForce(engineForce, 2)
  108. vehicleController:applyEngineForce(engineForce, 3)
  109. end
  110. vehicleController:setSteeringValue(steeringValue, 0)
  111. vehicleController:setSteeringValue(steeringValue, 1)
  112. local res = scene:testCollision(vehicle, testBox)
  113. if res.collided then
  114. testBox:setColor(1,1,0,0.5)
  115. else
  116. testBox:setColor(0,1,1,0.5)
  117. end
  118. end