function lovr.load() world = lovr.physics.newWorld() -- Create the ground ground = world:newBoxCollider(0, -1, 0, 50, 2, 50) ground:setKinematic(true) ground:setFriction(1.0) -- Create boxes! boxes = {} for x = -1, 1, .25 do for y = .125, 2, .2499 do local box = world:newBoxCollider(x, y, -2 - y / 5, .25) table.insert(boxes, box) end end controllerBoxes = {} lovr.timer.step() -- Reset the timer before the first update lovr.graphics.setBackgroundColor(.8, .8, .8) end function lovr.update(dt) -- Update the physics simulation world:update(dt) -- Place boxes on controllers for i, hand in ipairs(lovr.headset.getHands()) do if not controllerBoxes[i] then controllerBoxes[i] = world:newBoxCollider(0, 0, 0, .25) controllerBoxes[i]:setKinematic(true) end controllerBoxes[i]:setPose(lovr.headset.getPose(hand)) end end -- A helper function for drawing boxes function drawBox(pass, box) local x, y, z = box:getPosition() pass:cube(x, y, z, .25, box:getOrientation()) end function lovr.draw(pass) pass:setShader(shader) pass:setColor(1, 0, 0) for i, box in ipairs(boxes) do drawBox(pass, box) end if lovr.headset.getDriver() ~= 'simulator' then pass:setColor(0, 0, 1) for i, box in ipairs(controllerBoxes) do drawBox(pass, box) end end end