123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 |
- local options = {
- ['2_Bone_IK'] = {
- devices = {
- head = {
- position = { -.03, 1.6, .1 }
- }
- }
- },
- FPS_Controls = false,
- Window_HUD = false
- }
- function lovr.load()
- lovr.audio.stop('playback')
- local width, height = 360, 400
- local backbuffer = lovr.graphics.newTexture(width, height, { usage = { 'sample', 'render', 'transfer' } })
- local pass = lovr.graphics.newPass({ backbuffer, depth = 'd32fs8' })
- for i, category in ipairs(lovr.filesystem.getDirectoryItems('/')) do
- if lovr.filesystem.isDirectory(category) and not category:match('^%.') then
- for j, project in ipairs(lovr.filesystem.getDirectoryItems(category)) do
- local path = table.concat({ category, project }, '/')
- local file = path .. '/main.lua'
- print(('Snapping %s...'):format(path))
- if options[project] ~= false then
- local ok, chunk = pcall(lovr.filesystem.load, file)
- if not ok then
- print(string.format('Could not parse %q (%s)', file, chunk))
- else
- local env
- env = setmetatable({
- lovr = setmetatable({
- headset = setmetatable({
- getDriver = function()
- return 'openxr'
- end,
- getName = function()
- return 'Extremely Spooky Headset You Have Never Heard Of!!'
- end,
- getOriginType = function()
- return 'floor'
- end,
- getDisplayWidth = function()
- return width
- end,
- getDisplayHeight = function()
- return height
- end,
- getDisplayDimensions = function()
- return width, height
- end,
- getViewCount = function()
- return 1
- end,
- getViewPose = function()
- return env.lovr.headset.getPose('head')
- end,
- getViewAngles = function()
- return .5, .5, .5, .5
- end,
- isTracked = function(device)
- local o = options[project]
- device = (device or 'head'):gsub('^hand/', ''):gsub('/point$', '')
- return device == 'head' or (o and o.devices and o.devices[device])
- end,
- getPose = function(device)
- device = device or 'head'
- local defaultPose = {
- head = { 0, 1.7, 0; 0, 0, 0, 0 }
- }
- if not options[project] or not options[project].devices or not options[project].devices[device] then
- return unpack(defaultPose[device] or { 0, 0, 0; 0, 0, 0, 0 })
- end
- local d = options[project].devices[device]
- if d.pose then
- return unpack(d.pose)
- else
- local x, y, z, angle, ax, ay, az = 0, 0, 0, 0, 0, 0, 0
- if d.position then
- x, y, z = unpack(d.position)
- end
- if d.orientation then
- angle, ax, ay, az = unpack(d.orientation)
- elseif d.target then
- angle, ax, ay, az = select(7, mat4():target(vec3(x, y, z), vec3(unpack(d.target))):unpack())
- end
- return x, y, z, angle, ax, ay, az
- end
- end,
- getPosition = function(device)
- local x, y, z = env.lovr.headset.getPose(device)
- return x, y, z
- end,
- getOrientation = function(device)
- local angle, ax, ay, az = select(4, env.lovr.headset.getPose(device))
- return angle, ax, ay, az
- end,
- getVelocity = function(device)
- return 0, 0, 0
- end,
- getAngularVelocity = function(device)
- return 0, 0, 0
- end,
- isDown = function(device, button)
- return false
- end,
- wasPressed = function(device, button)
- return false
- end,
- wasReleased = function(device, button)
- return false
- end,
- isTouched = function(device, button)
- return false
- end,
- getAxis = function(device, axis)
- return 0, 0
- end,
- getSkeleton = function(device)
- return nil
- end,
- vibrate = function(device, strength, duration, frequency)
- -- thanks...
- end,
- newModel = function(device, options)
- return nil
- end,
- animate = function(model)
- return false
- end,
- isFocused = function()
- return true
- end,
- update = function()
- return 0
- end,
- getTime = function()
- return 0
- end,
- getDeltaTime = function()
- return 0
- end,
- getPass = function()
- for i = 1, env.lovr.headset.getViewCount() do
- pass:setViewPose(i, env.lovr.headset.getViewPose(i))
- pass:setProjection(i, env.lovr.headset.getViewAngles(i))
- end
- return pass
- end,
- submit = function()
- --
- end,
- getHands = function()
- return { 'hand/left', 'hand/right' }
- end
- }, { __index = lovr.headset }),
- load = function() end,
- update = function() end,
- draw = function() end,
- require = function(module)
- if module:match('/') then
- return require(path .. '/' .. module)
- else
- return require(path:gsub('/', '.') .. '.' .. module)
- end
- end
- }, { __index = lovr })
- }, { __index = _G })
- setfenv(chunk, env)
- lovr.graphics.setBackgroundColor(0, 0, 0, 1)
- pass:setClear(0x000000)
- lovr.filesystem.mount(lovr.filesystem.getRealDirectory(path) .. '/' .. path, '/', false)
- local ok, result = pcall(chunk)
- if not ok then
- print(('Failed to run main.lua for %s (%s)'):format(project, result))
- else
- local ok, thread = pcall(setfenv(env.lovr.run, env))
- if not ok or not thread then
- print(('\tFailed to run lovr.run for %s (%s)'):format(project, thread))
- else
- local ok, result = pcall(thread)
- if not ok then
- print(('\tFailed to run main loop for %s (%s)'):format(project, result))
- end
- local image = backbuffer:getPixels()
- lovr.filesystem.write(project .. '.png', image:encode())
- end
- end
- lovr.filesystem.unmount(path)
- lovr.graphics.submit()
- end
- end
- end
- end
- end
- lovr.event.quit()
- print('Done')
- end
|