|
|
@@ -0,0 +1,140 @@
|
|
|
+scene = PhysicsScene(0, Vector3(200, 200, 200))
|
|
|
+
|
|
|
+ground = ScenePrimitive(ScenePrimitive.TYPE_PLANE, 30, 30)
|
|
|
+ground:loadTexture("Resources/green_texture.png")
|
|
|
+scene:addPhysicsChild(ground, 0, 0)
|
|
|
+
|
|
|
+-- Some obstacles
|
|
|
+local box = ScenePrimitive(ScenePrimitive.TYPE_BOX, 4,4,6)
|
|
|
+box:setPitch(25)
|
|
|
+box:setPosition(7, -15, 0)
|
|
|
+box:setColor(0.5, 0.5, 1,1)
|
|
|
+box:loadTexture("Resources/green_texture.png")
|
|
|
+scene:addPhysicsChild(box, 0, 0)
|
|
|
+
|
|
|
+box = ScenePrimitive(ScenePrimitive.TYPE_BOX, 4, 4, 6)
|
|
|
+box:setPitch(25)
|
|
|
+box:setPosition(-7,-15, 0)
|
|
|
+box:setColor(0.5,0.5,1,1)
|
|
|
+box:loadTexture("Resources/green_texture.png")
|
|
|
+scene:addPhysicsChild(box, 0, 0)
|
|
|
+
|
|
|
+box = ScenePrimitive(ScenePrimitive.TYPE_BOX, 20,2,5)
|
|
|
+box:setPosition(0,1, -4.3)
|
|
|
+box:setColor(0.5,0.5,1,1)
|
|
|
+box:loadTexture("Resources/green_texture.png")
|
|
|
+scene:addPhysicsChild(box, 0, 0)
|
|
|
+
|
|
|
+for i = 1, 10 do
|
|
|
+ box = ScenePrimitive(ScenePrimitive.TYPE_BOX, 0.7,0.7,0.7)
|
|
|
+ box:loadTexture("Resources/pink_texture.png")
|
|
|
+ box:Roll(-45 + math.random() % 90)
|
|
|
+ box:Pitch(-45 + (math.random() % 90))
|
|
|
+ box:setPosition(-3 + (math.random() % 6), 2 + i*0.5, -5 + math.random() % 3)
|
|
|
+ scene:addPhysicsChild(box, 0, 1)
|
|
|
+end
|
|
|
+
|
|
|
+-- The vehicle
|
|
|
+vehicle = ScenePrimitive(ScenePrimitive.TYPE_BOX, 1, 0.5, 2)
|
|
|
+vehicle:loadTexture("Resources/pink_texture.png")
|
|
|
+vehicle:setColor(1, 1, 0, 1)
|
|
|
+vehicle:setPosition(6,1,5)
|
|
|
+vehicleController = scene:addVehicleChild(vehicle, 5, 1)
|
|
|
+
|
|
|
+local wheel = ScenePrimitive(ScenePrimitive.TYPE_SPHERE, 0.3, 10, 10)
|
|
|
+wheel:loadTexture("Resources/pink_texture.png")
|
|
|
+wheel:setColor(0, 1, 0, 1)
|
|
|
+vehicleController:addWheel(wheel, Vector3(0.6, 0, -0.5), Vector3(0, -1, 0), Vector3(-1,0,0), 0.2, 0.3, true)
|
|
|
+scene:addEntity(wheel)
|
|
|
+
|
|
|
+wheel = ScenePrimitive(ScenePrimitive.TYPE_SPHERE, 0.3, 10, 10)
|
|
|
+wheel:loadTexture("Resources/pink_texture.png")
|
|
|
+wheel:setColor(0, 1, 0, 1)
|
|
|
+vehicleController:addWheel(wheel, Vector3(-0.6,0,-0.5), Vector3(0,-1,0), Vector3(-1,0,0), 0.2, 0.3, true)
|
|
|
+scene:addEntity(wheel)
|
|
|
+
|
|
|
+wheel = ScenePrimitive(ScenePrimitive.TYPE_SPHERE, 0.3, 10, 10)
|
|
|
+wheel:loadTexture("Resources/pink_texture.png")
|
|
|
+wheel:setColor(0, 1, 0, 1)
|
|
|
+vehicleController:addWheel(wheel, Vector3(0.6,0,0.5), Vector3(0,-1,0), Vector3(-1,0,0), 0.2, 0.3, false)
|
|
|
+scene:addEntity(wheel)
|
|
|
+
|
|
|
+wheel = ScenePrimitive(ScenePrimitive.TYPE_SPHERE, 0.3, 10, 10)
|
|
|
+wheel:loadTexture("Resources/pink_texture.png")
|
|
|
+wheel:setColor(0, 1, 0, 1)
|
|
|
+vehicleController:addWheel(wheel, Vector3(-0.6,0,0.5), Vector3(0,-1,0), Vector3(-1,0,0), 0.2, 0.3, false)
|
|
|
+scene:addEntity(wheel)
|
|
|
+
|
|
|
+local steeringValue = 0
|
|
|
+local engineForce = 0
|
|
|
+local breaking = false
|
|
|
+
|
|
|
+local testBox = ScenePrimitive(ScenePrimitive.TYPE_BOX, 4, 4, 4)
|
|
|
+testBox:loadTexture("Resources/pink_texture.png")
|
|
|
+testBox:setColor(0.3, 0.5, 1, 0.4)
|
|
|
+testBox:setPosition(-5, 2, 7)
|
|
|
+scene:addCollisionChild(testBox, 0)
|
|
|
+
|
|
|
+
|
|
|
+scene:getDefaultCamera():setPosition(16, 16, 16)
|
|
|
+scene:getDefaultCamera():lookAt(Vector3(0, 0, 0), Vector3(1, 1, 1))
|
|
|
+
|
|
|
+local function handleKeyEvent(t, e)
|
|
|
+ if not e:getDispatcher() == CoreServices.getInstance():getCore():getInput() then return end
|
|
|
+
|
|
|
+ local inputEvent = safe_cast(e, InputEvent)
|
|
|
+
|
|
|
+ local eventKeyCode = e:getEventCode()
|
|
|
+ if eventKeyCode == InputEvent.EVENT_KEYDOWN then
|
|
|
+ local keyCode = inputEvent:keyCode()
|
|
|
+
|
|
|
+ if keyCode == KEY_r then
|
|
|
+ vehicleController:warpVehicle(Vector3(6,1,5))
|
|
|
+ elseif keyCode == KEY_UP then
|
|
|
+ engineForce = -15
|
|
|
+ elseif keyCode == KEY_DOWN then
|
|
|
+ engineForce = 15
|
|
|
+ elseif keyCode == KEY_LEFT then
|
|
|
+ steeringValue = 0.5
|
|
|
+ elseif keyCode == KEY_RIGHT then
|
|
|
+ steeringValue = -0.5
|
|
|
+ elseif keyCode == KEY_SPACE then
|
|
|
+ breaking = true
|
|
|
+ end
|
|
|
+ elseif eventKeyCode == InputEvent.EVENT_KEYUP then
|
|
|
+ if inputEvent.key == KEY_DOWN then
|
|
|
+ engineForce = 0
|
|
|
+ elseif inputEvent.key == KEY_RIGHT then
|
|
|
+ steeringValue = 0
|
|
|
+ elseif inputEvent.key == KEY_SPACE then
|
|
|
+ breaking = false
|
|
|
+ end
|
|
|
+ end
|
|
|
+end
|
|
|
+CoreServices.getInstance():getCore():getInput():addEventListener(nil, handleKeyEvent, InputEvent.EVENT_KEYDOWN)
|
|
|
+CoreServices.getInstance():getCore():getInput():addEventListener(nil, handleKeyEvent, InputEvent.EVENT_KEYUP)
|
|
|
+
|
|
|
+function Update(elapsed)
|
|
|
+
|
|
|
+ if breaking then
|
|
|
+ vehicleController:setBrake(20, 2)
|
|
|
+ vehicleController:setBrake(20, 3)
|
|
|
+ vehicleController:applyEngineForce(0, 2)
|
|
|
+ vehicleController:applyEngineForce(0, 3)
|
|
|
+ else
|
|
|
+ vehicleController:setBrake(0, 2)
|
|
|
+ vehicleController:setBrake(0, 3)
|
|
|
+ vehicleController:applyEngineForce(engineForce, 2)
|
|
|
+ vehicleController:applyEngineForce(engineForce, 3)
|
|
|
+ end
|
|
|
+
|
|
|
+ vehicleController:setSteeringValue(steeringValue, 0)
|
|
|
+ vehicleController:setSteeringValue(steeringValue, 1)
|
|
|
+
|
|
|
+ local res = scene:testCollision(vehicle, testBox)
|
|
|
+ if res.collided then
|
|
|
+ testBox:setColor(1,1,0,0.5)
|
|
|
+ else
|
|
|
+ testBox:setColor(0,1,1,0.5)
|
|
|
+ end
|
|
|
+end
|