123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- local random = lovr.math.random
- local boxes = {}
- local selectedBox = nil
- local hitpoint = lovr.math.newVec3()
- local red = { 1, .5, .5 }
- local green = { .5, 1, .5 }
- 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 ox, oy, oz = lovr.headset.getPosition('hand/left/point')
- local dx, dy, dz = quat(lovr.headset.getOrientation('hand/left/point')):direction():mul(50):unpack()
- local collider, shape, x, y, z = world:raycast(ox, oy, oz, ox + dx, oy + dy, oz + dz)
- if collider then
- selectedBox = collider
- hitpoint:set(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(vec3(box:getPosition()), .28, quat(box:getOrientation()))
- end
- -- Dot
- if selectedBox then
- pass:setColor(0, 0, 1)
- pass:sphere(hitpoint, .01)
- end
- -- Laser pointer
- local hand = vec3(lovr.headset.getPosition('hand/left/point'))
- local direction = quat(lovr.headset.getOrientation('hand/left/point')):direction()
- pass:setColor(1, 1, 1)
- pass:line(hand, selectedBox and hitpoint or (hand + direction * 50))
- end
|