12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- box = {
- position = lovr.math.newVec3(0, 1, -.25),
- size = .25
- }
- function lovr.load()
- drag = {
- active = false,
- hand = nil,
- offset = lovr.math.newVec3()
- }
- end
- function lovr.update(dt)
- for i, hand in ipairs(lovr.headset.getHands()) do
- if lovr.headset.wasPressed(hand, 'trigger') then
- local offset = box.position - vec3(lovr.headset.getPosition(hand))
- local halfSize = box.size / 2
- local x, y, z = offset:unpack()
- if math.abs(x) < halfSize and math.abs(y) < halfSize and math.abs(z) < halfSize then
- drag.active = true
- drag.hand = hand
- drag.offset:set(offset)
- end
- end
- end
- if drag.active then
- local handPosition = vec3(lovr.headset.getPosition(drag.hand))
- box.position:set(handPosition + drag.offset)
- if lovr.headset.wasReleased(drag.hand, 'trigger') then
- drag.active = false
- end
- end
- end
- function lovr.draw(pass)
- pass:setColor(drag.active and 0x80ee80 or 0xee8080)
- pass:cube(box.position, box.size, quat(), 'line')
- for i, hand in ipairs(lovr.headset.getHands()) do
- pass:setColor(0xffffff)
- pass:cube(mat4(lovr.headset.getPose(hand)):scale(.01))
- end
- end
|