local random = lovr.math.random local boxes = {} local selectedBox = nil local hitpoint = nil local red = { 1, .5, .5 } local green = { .5, 1, .5 } local device = 'hand/left/point' function lovr.load() lovr.graphics.setBackgroundColor(.2, .2, .22) world = lovr.physics.newWorld(0, 0, 0) -- Make a bunch of random spinning boxes XD for x = -3, 3 do for z = 1, 10 do local y = .5 + lovr.math.randomNormal(.1) local box = world:newBoxCollider(x, y, -z, .28) box:setOrientation(random(2 * math.pi), random(), random(), random()) box:setAngularVelocity(random(), random(), random()) table.insert(boxes, box) end end end function lovr.update(dt) selectedBox = nil world:update(dt) local origin = vector(lovr.headset.getPosition(device)) local direction = vector(lovr.headset.getDirection(device)) local collider, shape, x, y, z = world:raycast(origin, origin + direction * 50) if collider then selectedBox = collider hitpoint = vector(x, y, z) end end function lovr.draw(pass) -- Boxes for i, box in ipairs(boxes) do pass:setColor(box == selectedBox and green or red) pass:cube(vector(box:getPosition()), .28, box:getOrientation()) end -- Dot if selectedBox then pass:setColor(0, 0, 1) pass:sphere(hitpoint, .01) end -- Laser pointer local hand = vector(lovr.headset.getPosition(device)) local direction = vector(lovr.headset.getDirection(device)) pass:setColor(1, 1, 1) pass:line(hand, selectedBox and hitpoint or (hand + direction * 50)) end