xrforge-v2/src/plugin/janusxr/layout/grid.lua

73 lines
2.3 KiB
Lua
Raw Normal View History

local grid = {
--render = function(items)
-- local jml = ''
-- local gridsize = tonumber( app.opts.plugin_openbrush_layout_grid_size )
-- for i,v in pairs(items) do
-- local url = v.redirect and v.redirect or v.url
-- local pos = {x=0,y=0,z=0}
-- local posStr = pos.x .. ' ' .. pos.y .. ' ' .. pos.z
-- jml = jml .. ' <link url="' .. url .. '" url_pos="' .. posStr .. '" url_scale="1 1 1" auto_load="true"/>\n'
-- end
-- return jml
--end
render = function(items)
local jml = ''
-- Distance between items in meters. gridsize = 5 means 5m x 5m spacing.
local gridsize = tonumber(app.opts.plugin_openbrush_layout_grid_size) or 5
-- Square spiral: Start at (0, 0) right, up, left, down, increasing the step length
local x = 0
local z = 0
local dx = 1
local dz = 0
local steps = 1
local stepsTaken = 0
local turns = 0
local index = 0
for i, v in pairs(items) do
local url = v.redirect and v.redirect or v.url
local overlay = v.title:match('#overlay') and true or false
-- Position current item
local pos = {
x = overlay and 0 or x * gridsize,
y = 0,
z = overlay and 0 or z * gridsize
}
local posStr = pos.x .. ' ' .. pos.y .. ' ' .. pos.z
local is_nested_room = false
if is_nested_room then
jml = jml .. ' <link url="' .. url .. '" url_pos="' .. posStr
.. '" url_scale="1 1 1" auto_load="true"/>\n'
else
jml = jml .. ' <object id="' .. url .. '" pos="' .. posStr .. '"/>\n'
end
if not overlay then
index = index + 1
-- Move to next position in the spiral
if index < #items then
x = x + dx
z = z + dz
stepsTaken = stepsTaken + 1
if stepsTaken == steps then
stepsTaken = 0
-- Rotate clockwise: right -> up -> left -> down
local oldDx = dx
dx = -dz
dz = oldDx
turns = turns + 1
-- Increase the length after every second turn
if turns % 2 == 0 then
steps = steps + 1
end
end
end
end
end
return jml
end
}
return grid