diff --git a/README.md b/README.md index 64cfa5b..1a7c243 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ Developers can run it via [Lua](https://lua.org), [LÖVR](https://lovr.org) or [ $ cd xurfer $ love . [..] # if you have LÖVE2D installed (>v12) $ lovr . [..] # if you have LÖVR installed -$ lua main.lua [..] # if you have lua installed +$ ./main.lua [..] # if you have lua installed ``` **Example**: lovr xurfer https://snips.sh/f/_U5-XctEVE?r=1 @@ -39,8 +39,9 @@ The aim of this project is providing **a [XR Hypermedia browser](https://xrhf.is ## very hackable extensions -* XURFER does everything via browser extensions.
-* XURFER is the total sum of browser extensions.
+* XURFER does everything via browser extensions. +* XURFER is the total sum of browser extensions. +* XURFER can proxy missing api-calls to cli-cmds (like [wget/curl](xurfer/runtime/lua/main.lua) via the [unixy](xurfer/ext/unixy/main.lua) extension) So you can strip/bloat however you want, or build one yourself: @@ -51,3 +52,9 @@ $ ./lovr xurfer [i] loading 'myextension' ... ``` + +## Security + +Instead of the traditional sandbox-in-a-browser-model (Chromium/Firefox e.g.), we suggest running XURFER via [bubblewrap](https://github.com/meta-quest/bubblewrap) + +> TODO: suggest cli flags diff --git a/xurfer/conf.lua b/xurfer/conf.lua index 8b9459a..986f8f9 100644 --- a/xurfer/conf.lua +++ b/xurfer/conf.lua @@ -1,14 +1,16 @@ -- sync lovr/love positional cli arguments if arg[0] == nil and arg[1] ~= nil then arg[0] = arg[1] end -runtime = "" +package.path = package.path .. ';' .. + '?.lua;' .. + '?/init.lua;' .. + 'lib/?.lua;' -if lovr ~= nil then runtime = "lovr" end -if love ~= nil then runtime = "love" end +local runtime = require("runtime/detect") package.path = package.path .. ';' .. - arg[0] .. '/' .. runtime .. '/?.lua;' .. - arg[0] .. '/' .. runtime .. '/?/init.lua;' .. + arg[0] .. '/' .. runtime.path .. '/?.lua;' .. + arg[0] .. '/' .. runtime.path .. '/?/init.lua;' .. arg[0] .. '/lib/?.lua' -require( runtime .. "/conf") +require( runtime.path .. "/conf") diff --git a/xurfer/ecs.lua b/xurfer/ecs.lua index eec69d1..b3a538c 100644 --- a/xurfer/ecs.lua +++ b/xurfer/ecs.lua @@ -1,6 +1,6 @@ local ecs = require("tiny-ecs") -ecs.init = function() +ecs.init = function(api) print("[i] loading ecs") baseEntify = ecs.processingSystem() baseEntify.filter = ecs.rejectAll('commit') @@ -24,6 +24,7 @@ ecs.init = function() end ecs.clear = function() + trace("[ecs] ecs.clear() scene") api.ext.exec("onClear") api.ecs.clearEntities( api.world ) api.world.commit() diff --git a/xurfer/ext/3DFile/main.lua b/xurfer/ext/3DFile/main.lua index 17db0b3..06bc3ad 100644 --- a/xurfer/ext/3DFile/main.lua +++ b/xurfer/ext/3DFile/main.lua @@ -28,7 +28,7 @@ return { api.ecs.add( api.world, obj ) obj.commit('on3DFile') -- notify systems else - print("[3DFile] error: could not load " .. obj.URL.string ) + print("[3DFile] error: could not load " .. obj.URL.string .. ": " .. obj.URLResponse.data ) end end end diff --git a/xurfer/ext/http-lovr/main.lua b/xurfer/ext/http-lovr/main.lua index fae7389..8dbdfcd 100644 --- a/xurfer/ext/http-lovr/main.lua +++ b/xurfer/ext/http-lovr/main.lua @@ -43,8 +43,8 @@ http = { req.headers = headers channel:pop() -- remove last channel:push(req) -- re-push but with status (which thread ignores) - lovr.timer.sleep(.1) end + lovr.timer.sleep(.1) end ]] http.channel = lovr.thread.getChannel('http') @@ -57,14 +57,19 @@ http = { local msg local res, present = http.channel:peek() - if present and res.status ~= nil then - msg = http.channel:pop() - -- we got our urlrequest response - if http.cache[ msg.url ] then - http.cache[ msg.url ].cb( msg.status, msg.data, msg.headers ) - http.cache[ msg.url ] = nil - else - error("msg-object was not found in cache") + if present then + if res.status == nil and res.data == "Could not connect to server" then + res.status = 503 -- service unavailable + end + if res.status ~= nil then + msg = http.channel:pop() + -- we got our urlrequest response + if http.cache[ msg.url ] then + http.cache[ msg.url ].cb( msg.status, msg.data, msg.headers ) + http.cache[ msg.url ] = nil + else + error("msg-object was not found in cache") + end end end diff --git a/xurfer/ext/kitchensink/main.lua b/xurfer/ext/kitchensink/main.lua index 4d9be00..41d6a20 100644 --- a/xurfer/ext/kitchensink/main.lua +++ b/xurfer/ext/kitchensink/main.lua @@ -26,11 +26,11 @@ return { sample.load({ gameSunsetImage = lovr.graphics.newTexture( - "lovr/sample/assets/game-sunset.png", {} + "runtime/lovr/sample/assets/game-sunset.png", {} ), nineSliceImage = { image = lovr.graphics.newTexture( - "lovr/sample/assets/ui-box-slice.png", { mipmaps = false } + "runtime/lovr/sample/assets/ui-box-slice.png", { mipmaps = false } ), l = 8, t = 8, @@ -40,14 +40,14 @@ return { smileMSDFLayeredImage = { { image = lovr.graphics.newTexture( - "lovr/sample/assets/smile-bg.png", + "runtime/lovr/sample/assets/smile-bg.png", { linear = true, mipmaps = false } ), color = iui.newColor(0.944, 0.794, 0.468) }, { image = lovr.graphics.newTexture( - "lovr/sample/assets/smile-fg.png", + "runtime/lovr/sample/assets/smile-fg.png", { linear = true, mipmaps = false } ), color = iui.newColor(0.157, 0.157, 0.157) @@ -57,7 +57,7 @@ return { { image = { image = lovr.graphics.newTexture( - "lovr/sample/assets/nine-slice-interior.png", + "runtime/lovr/sample/assets/nine-slice-interior.png", { linear = true, mipmaps = false } ), l = 16, @@ -70,7 +70,7 @@ return { { image = { image = lovr.graphics.newTexture( - "lovr/sample/assets/nine-slice-frame.png", + "runtime/lovr/sample/assets/nine-slice-frame.png", { linear = true, mipmaps = false } ), l = 16, diff --git a/xurfer/ext/startupscene/main.lua b/xurfer/ext/startupscene/main.lua index 97f44b8..b06baaf 100644 --- a/xurfer/ext/startupscene/main.lua +++ b/xurfer/ext/startupscene/main.lua @@ -16,7 +16,7 @@ return { load = function() --if api.iui.idiom == "vr" then - envTex = api.graphics.newTexture("lovr/assets/img/env.png", {}) + envTex = api.graphics.newTexture("runtime/lovr/assets/img/env.png", {}) api.world.skybox = api.graphics.newTexture({ px = 'ext/startupscene/skybox/Dayright.jpg', -- 'px.png', nx = 'ext/startupscene/skybox/Dayleft.jpg', -- 'nx.png', diff --git a/xurfer/ext/unixy/main.lua b/xurfer/ext/unixy/main.lua index 11ab7e4..a523fb4 100644 --- a/xurfer/ext/unixy/main.lua +++ b/xurfer/ext/unixy/main.lua @@ -39,9 +39,15 @@ unixy = { init = function() end, - proxyCLI = function( cmdfunc, callback ) - return function(...) - return unixy.addjob( cmdfunc, callback, ...) + proxyCLI = function( cmd, cmdfunc, callback ) + if api.util.cmdExist(cmd) then + print("[i] attaching ".. cmd .. " cli-cmd to api") + return function(...) + return unixy.addjob( cmdfunc, callback, ...) + end + else + print("[!] could not attach ".. cmd .. " cli-cmd to api: not found") + return function()end end end, @@ -79,7 +85,6 @@ unixy = { callback = callback }) trace("[unixy] start job with pid " .. pid .. " => 1> " .. stdout_file .. " 2> " .. stderr_file) - print_r(unixy.jobs) end, check_jobs = function() @@ -98,7 +103,7 @@ unixy = { -- Clean up os.remove(job.stdout_file) os.remove(job.stderr_file) - job.callback(stdout, stderr, retcode, unpack(job.args) ) + job.callback(stdout, stderr, retcode, table.unpack(job.args) ) table.remove(unixy.jobs, i) else io.write(".") diff --git a/xurfer/ext/xrfragments/lovr-xrf.lua b/xurfer/ext/xrfragments/lovr-xrf.lua index 3fae145..8c9ecac 100644 --- a/xurfer/ext/xrfragments/lovr-xrf.lua +++ b/xurfer/ext/xrfragments/lovr-xrf.lua @@ -113,6 +113,7 @@ end -- utility function to traverse recursive table xrf.traverse = function(arr, cb, key) + if arr == nil then return end if key == nil then key = 'children' end for k, child in pairs(arr) do if type(child) == 'table' then diff --git a/xurfer/lib/xmlSimple.lua b/xurfer/lib/xmlSimple.lua index fea233d..576ae72 100644 --- a/xurfer/lib/xmlSimple.lua +++ b/xurfer/lib/xmlSimple.lua @@ -1,5 +1,3 @@ -module(..., package.seeall) - --------------------------------------------------------------------------------- --------------------------------------------------------------------------------- -- diff --git a/xurfer/main.lua b/xurfer/main.lua old mode 100644 new mode 100755 index 7dac0f6..cd0c66d --- a/xurfer/main.lua +++ b/xurfer/main.lua @@ -1,3 +1,4 @@ +#!/usr/bin/env lua -- -- GLB URLS -- ./lovr xurfer https://coderofsalvation.codeberg.page/xrfragment-haxe/example/assets/example.glb?bar=1&f=2#foo' -- ./lovr xurfer https://codeberg.org/coderofsalvation/xrfragment/raw/branch/main/assets/template/website/website.glb' @@ -9,23 +10,18 @@ -- ./lovr xurfer https://snips.sh/f/rHFLg-cewi?r=1' -- cube -- ./lovr xurfer https://snips.sh/f/_U5-XctEVE?r=1' -- cube, monkey, scene -local runtime = nil +print("\n X U R F Ξ R") +print(" ⠭ ⠥ ⠗ ⠋ ⠑ ⠗\n") -if lovr ~= nil then - runtime = { path = "lovr", api = lovr } -elseif love ~= nil then - runtime = { path = "love", api = love }; -end +package.path = package.path .. ';' .. '?.lua;' +require('conf') -if runtime == nil then - package.path = package.path .. ';' .. 'xurfer/?.lua' - require('conf') -end - -local util = require("util") -local ecs = require("ecs") +local runtime = require("runtime/detect") +local util = require("util") +local ecs = require("ecs") api = { + runtime = runtime, parser = { json = require("json"), xml = require("xmlSimple"), @@ -46,7 +42,8 @@ require( runtime.path .. "/main") util.loaddir( "ext", api, api.ext ) util.loaddir( "media", api, api.media ) -ecs.init() + +ecs.init(api) api.ext.exec('init') -- load urls passed on the cli @@ -55,3 +52,6 @@ foreach( arg, function(k,uri) api.ecs.add( api.world, { URI = { url = uri, method = 'GET', target = '_top' } }) end end) + +-- for runtimes (runtime/lua) which dont automatically run an update-loop (like love/lovr) +api.ext.exec('main') diff --git a/xurfer/runtime/detect.lua b/xurfer/runtime/detect.lua new file mode 100644 index 0000000..e8b619b --- /dev/null +++ b/xurfer/runtime/detect.lua @@ -0,0 +1,17 @@ +local runtime = nil +-- determine runtime +if lovr ~= nil then + runtime = { name = "lovr", path = "runtime/lovr", api = lovr } +elseif love ~= nil then + runtime = { name = "lua", path = "runtime/love", api = love } +else + runtime = { name = "lua", path = "runtime/lua", api = require("runtime/lua/api") } +end + + +runtime.os = "unixy" +if package.config:sub(1,1) == "\\" then + runtime.os = "windows" +end + +return runtime diff --git a/xurfer/love/conf.lua b/xurfer/runtime/love/conf.lua similarity index 100% rename from xurfer/love/conf.lua rename to xurfer/runtime/love/conf.lua diff --git a/xurfer/love/main.lua b/xurfer/runtime/love/main.lua similarity index 100% rename from xurfer/love/main.lua rename to xurfer/runtime/love/main.lua diff --git a/xurfer/lovr/.gitignore b/xurfer/runtime/lovr/.gitignore similarity index 100% rename from xurfer/lovr/.gitignore rename to xurfer/runtime/lovr/.gitignore diff --git a/xurfer/lovr/LICENSE b/xurfer/runtime/lovr/LICENSE similarity index 100% rename from xurfer/lovr/LICENSE rename to xurfer/runtime/lovr/LICENSE diff --git a/xurfer/lovr/README.md b/xurfer/runtime/lovr/README.md similarity index 100% rename from xurfer/lovr/README.md rename to xurfer/runtime/lovr/README.md diff --git a/xurfer/lovr/assets/img/env.png b/xurfer/runtime/lovr/assets/img/env.png similarity index 100% rename from xurfer/lovr/assets/img/env.png rename to xurfer/runtime/lovr/assets/img/env.png diff --git a/xurfer/lovr/conf.lua b/xurfer/runtime/lovr/conf.lua similarity index 100% rename from xurfer/lovr/conf.lua rename to xurfer/runtime/lovr/conf.lua diff --git a/xurfer/lovr/launch.lua b/xurfer/runtime/lovr/launch.lua similarity index 100% rename from xurfer/lovr/launch.lua rename to xurfer/runtime/lovr/launch.lua diff --git a/xurfer/lovr/lib/iui/.gitignore b/xurfer/runtime/lovr/lib/iui/.gitignore similarity index 100% rename from xurfer/lovr/lib/iui/.gitignore rename to xurfer/runtime/lovr/lib/iui/.gitignore diff --git a/xurfer/lovr/lib/iui/LICENSE b/xurfer/runtime/lovr/lib/iui/LICENSE similarity index 100% rename from xurfer/lovr/lib/iui/LICENSE rename to xurfer/runtime/lovr/lib/iui/LICENSE diff --git a/xurfer/lovr/lib/iui/README.md b/xurfer/runtime/lovr/lib/iui/README.md similarity index 100% rename from xurfer/lovr/lib/iui/README.md rename to xurfer/runtime/lovr/lib/iui/README.md diff --git a/xurfer/lovr/lib/iui/assets/cursor-default_sdf.png b/xurfer/runtime/lovr/lib/iui/assets/cursor-default_sdf.png similarity index 100% rename from xurfer/lovr/lib/iui/assets/cursor-default_sdf.png rename to xurfer/runtime/lovr/lib/iui/assets/cursor-default_sdf.png diff --git a/xurfer/lovr/lib/iui/assets/cursor-ibeam_sdf.png b/xurfer/runtime/lovr/lib/iui/assets/cursor-ibeam_sdf.png similarity index 100% rename from xurfer/lovr/lib/iui/assets/cursor-ibeam_sdf.png rename to xurfer/runtime/lovr/lib/iui/assets/cursor-ibeam_sdf.png diff --git a/xurfer/lovr/lib/iui/assets/cursor-inactive_sdf.png b/xurfer/runtime/lovr/lib/iui/assets/cursor-inactive_sdf.png similarity index 100% rename from xurfer/lovr/lib/iui/assets/cursor-inactive_sdf.png rename to xurfer/runtime/lovr/lib/iui/assets/cursor-inactive_sdf.png diff --git a/xurfer/lovr/lib/iui/assets/cursor-sizens_sdf.png b/xurfer/runtime/lovr/lib/iui/assets/cursor-sizens_sdf.png similarity index 100% rename from xurfer/lovr/lib/iui/assets/cursor-sizens_sdf.png rename to xurfer/runtime/lovr/lib/iui/assets/cursor-sizens_sdf.png diff --git a/xurfer/lovr/lib/iui/assets/cursor-sizewe_sdf.png b/xurfer/runtime/lovr/lib/iui/assets/cursor-sizewe_sdf.png similarity index 100% rename from xurfer/lovr/lib/iui/assets/cursor-sizewe_sdf.png rename to xurfer/runtime/lovr/lib/iui/assets/cursor-sizewe_sdf.png diff --git a/xurfer/lovr/lib/iui/assets/glyph-checkmark.png b/xurfer/runtime/lovr/lib/iui/assets/glyph-checkmark.png similarity index 100% rename from xurfer/lovr/lib/iui/assets/glyph-checkmark.png rename to xurfer/runtime/lovr/lib/iui/assets/glyph-checkmark.png diff --git a/xurfer/lovr/lib/iui/assets/glyph-disclosure.png b/xurfer/runtime/lovr/lib/iui/assets/glyph-disclosure.png similarity index 100% rename from xurfer/lovr/lib/iui/assets/glyph-disclosure.png rename to xurfer/runtime/lovr/lib/iui/assets/glyph-disclosure.png diff --git a/xurfer/lovr/lib/iui/color.lua b/xurfer/runtime/lovr/lib/iui/color.lua similarity index 100% rename from xurfer/lovr/lib/iui/color.lua rename to xurfer/runtime/lovr/lib/iui/color.lua diff --git a/xurfer/lovr/lib/iui/draw-queue.lua b/xurfer/runtime/lovr/lib/iui/draw-queue.lua similarity index 100% rename from xurfer/lovr/lib/iui/draw-queue.lua rename to xurfer/runtime/lovr/lib/iui/draw-queue.lua diff --git a/xurfer/lovr/lib/iui/draw.lua b/xurfer/runtime/lovr/lib/iui/draw.lua similarity index 100% rename from xurfer/lovr/lib/iui/draw.lua rename to xurfer/runtime/lovr/lib/iui/draw.lua diff --git a/xurfer/lovr/lib/iui/id.lua b/xurfer/runtime/lovr/lib/iui/id.lua similarity index 100% rename from xurfer/lovr/lib/iui/id.lua rename to xurfer/runtime/lovr/lib/iui/id.lua diff --git a/xurfer/lovr/lib/iui/init.lua b/xurfer/runtime/lovr/lib/iui/init.lua similarity index 100% rename from xurfer/lovr/lib/iui/init.lua rename to xurfer/runtime/lovr/lib/iui/init.lua diff --git a/xurfer/lovr/lib/iui/input/init.lua b/xurfer/runtime/lovr/lib/iui/input/init.lua similarity index 100% rename from xurfer/lovr/lib/iui/input/init.lua rename to xurfer/runtime/lovr/lib/iui/input/init.lua diff --git a/xurfer/lovr/lib/iui/input/input.lua b/xurfer/runtime/lovr/lib/iui/input/input.lua similarity index 100% rename from xurfer/lovr/lib/iui/input/input.lua rename to xurfer/runtime/lovr/lib/iui/input/input.lua diff --git a/xurfer/lovr/lib/iui/input/keyboard.lua b/xurfer/runtime/lovr/lib/iui/input/keyboard.lua similarity index 100% rename from xurfer/lovr/lib/iui/input/keyboard.lua rename to xurfer/runtime/lovr/lib/iui/input/keyboard.lua diff --git a/xurfer/lovr/lib/iui/input/mouse.lua b/xurfer/runtime/lovr/lib/iui/input/mouse.lua similarity index 100% rename from xurfer/lovr/lib/iui/input/mouse.lua rename to xurfer/runtime/lovr/lib/iui/input/mouse.lua diff --git a/xurfer/lovr/lib/iui/iui.lua b/xurfer/runtime/lovr/lib/iui/iui.lua similarity index 100% rename from xurfer/lovr/lib/iui/iui.lua rename to xurfer/runtime/lovr/lib/iui/iui.lua diff --git a/xurfer/lovr/lib/iui/layer.lua b/xurfer/runtime/lovr/lib/iui/layer.lua similarity index 100% rename from xurfer/lovr/lib/iui/layer.lua rename to xurfer/runtime/lovr/lib/iui/layer.lua diff --git a/xurfer/lovr/lib/iui/layout.lua b/xurfer/runtime/lovr/lib/iui/layout.lua similarity index 100% rename from xurfer/lovr/lib/iui/layout.lua rename to xurfer/runtime/lovr/lib/iui/layout.lua diff --git a/xurfer/lovr/lib/iui/pool.lua b/xurfer/runtime/lovr/lib/iui/pool.lua similarity index 100% rename from xurfer/lovr/lib/iui/pool.lua rename to xurfer/runtime/lovr/lib/iui/pool.lua diff --git a/xurfer/lovr/lib/iui/set.lua b/xurfer/runtime/lovr/lib/iui/set.lua similarity index 100% rename from xurfer/lovr/lib/iui/set.lua rename to xurfer/runtime/lovr/lib/iui/set.lua diff --git a/xurfer/lovr/lib/iui/state.lua b/xurfer/runtime/lovr/lib/iui/state.lua similarity index 100% rename from xurfer/lovr/lib/iui/state.lua rename to xurfer/runtime/lovr/lib/iui/state.lua diff --git a/xurfer/lovr/lib/iui/style.lua b/xurfer/runtime/lovr/lib/iui/style.lua similarity index 100% rename from xurfer/lovr/lib/iui/style.lua rename to xurfer/runtime/lovr/lib/iui/style.lua diff --git a/xurfer/lovr/lib/iui/types/backend/backend.t.lua b/xurfer/runtime/lovr/lib/iui/types/backend/backend.t.lua similarity index 100% rename from xurfer/lovr/lib/iui/types/backend/backend.t.lua rename to xurfer/runtime/lovr/lib/iui/types/backend/backend.t.lua diff --git a/xurfer/lovr/lib/iui/types/backend/graphics.t.lua b/xurfer/runtime/lovr/lib/iui/types/backend/graphics.t.lua similarity index 100% rename from xurfer/lovr/lib/iui/types/backend/graphics.t.lua rename to xurfer/runtime/lovr/lib/iui/types/backend/graphics.t.lua diff --git a/xurfer/lovr/lib/iui/types/backend/system.t.lua b/xurfer/runtime/lovr/lib/iui/types/backend/system.t.lua similarity index 100% rename from xurfer/lovr/lib/iui/types/backend/system.t.lua rename to xurfer/runtime/lovr/lib/iui/types/backend/system.t.lua diff --git a/xurfer/lovr/lib/iui/types/config.t.lua b/xurfer/runtime/lovr/lib/iui/types/config.t.lua similarity index 100% rename from xurfer/lovr/lib/iui/types/config.t.lua rename to xurfer/runtime/lovr/lib/iui/types/config.t.lua diff --git a/xurfer/lovr/lib/iui/utils.lua b/xurfer/runtime/lovr/lib/iui/utils.lua similarity index 100% rename from xurfer/lovr/lib/iui/utils.lua rename to xurfer/runtime/lovr/lib/iui/utils.lua diff --git a/xurfer/lovr/lib/iui/widgets/button.lua b/xurfer/runtime/lovr/lib/iui/widgets/button.lua similarity index 100% rename from xurfer/lovr/lib/iui/widgets/button.lua rename to xurfer/runtime/lovr/lib/iui/widgets/button.lua diff --git a/xurfer/lovr/lib/iui/widgets/checkbox.lua b/xurfer/runtime/lovr/lib/iui/widgets/checkbox.lua similarity index 100% rename from xurfer/lovr/lib/iui/widgets/checkbox.lua rename to xurfer/runtime/lovr/lib/iui/widgets/checkbox.lua diff --git a/xurfer/lovr/lib/iui/widgets/clip-view.lua b/xurfer/runtime/lovr/lib/iui/widgets/clip-view.lua similarity index 100% rename from xurfer/lovr/lib/iui/widgets/clip-view.lua rename to xurfer/runtime/lovr/lib/iui/widgets/clip-view.lua diff --git a/xurfer/lovr/lib/iui/widgets/divider.lua b/xurfer/runtime/lovr/lib/iui/widgets/divider.lua similarity index 100% rename from xurfer/lovr/lib/iui/widgets/divider.lua rename to xurfer/runtime/lovr/lib/iui/widgets/divider.lua diff --git a/xurfer/lovr/lib/iui/widgets/image-9-slice.lua b/xurfer/runtime/lovr/lib/iui/widgets/image-9-slice.lua similarity index 100% rename from xurfer/lovr/lib/iui/widgets/image-9-slice.lua rename to xurfer/runtime/lovr/lib/iui/widgets/image-9-slice.lua diff --git a/xurfer/lovr/lib/iui/widgets/image.lua b/xurfer/runtime/lovr/lib/iui/widgets/image.lua similarity index 100% rename from xurfer/lovr/lib/iui/widgets/image.lua rename to xurfer/runtime/lovr/lib/iui/widgets/image.lua diff --git a/xurfer/lovr/lib/iui/widgets/init.lua b/xurfer/runtime/lovr/lib/iui/widgets/init.lua similarity index 100% rename from xurfer/lovr/lib/iui/widgets/init.lua rename to xurfer/runtime/lovr/lib/iui/widgets/init.lua diff --git a/xurfer/lovr/lib/iui/widgets/label.lua b/xurfer/runtime/lovr/lib/iui/widgets/label.lua similarity index 100% rename from xurfer/lovr/lib/iui/widgets/label.lua rename to xurfer/runtime/lovr/lib/iui/widgets/label.lua diff --git a/xurfer/lovr/lib/iui/widgets/list-view.lua b/xurfer/runtime/lovr/lib/iui/widgets/list-view.lua similarity index 100% rename from xurfer/lovr/lib/iui/widgets/list-view.lua rename to xurfer/runtime/lovr/lib/iui/widgets/list-view.lua diff --git a/xurfer/lovr/lib/iui/widgets/menu-bar.lua b/xurfer/runtime/lovr/lib/iui/widgets/menu-bar.lua similarity index 100% rename from xurfer/lovr/lib/iui/widgets/menu-bar.lua rename to xurfer/runtime/lovr/lib/iui/widgets/menu-bar.lua diff --git a/xurfer/lovr/lib/iui/widgets/menu-item.lua b/xurfer/runtime/lovr/lib/iui/widgets/menu-item.lua similarity index 100% rename from xurfer/lovr/lib/iui/widgets/menu-item.lua rename to xurfer/runtime/lovr/lib/iui/widgets/menu-item.lua diff --git a/xurfer/lovr/lib/iui/widgets/msdf-image-9-slice.lua b/xurfer/runtime/lovr/lib/iui/widgets/msdf-image-9-slice.lua similarity index 100% rename from xurfer/lovr/lib/iui/widgets/msdf-image-9-slice.lua rename to xurfer/runtime/lovr/lib/iui/widgets/msdf-image-9-slice.lua diff --git a/xurfer/lovr/lib/iui/widgets/msdf-image.lua b/xurfer/runtime/lovr/lib/iui/widgets/msdf-image.lua similarity index 100% rename from xurfer/lovr/lib/iui/widgets/msdf-image.lua rename to xurfer/runtime/lovr/lib/iui/widgets/msdf-image.lua diff --git a/xurfer/lovr/lib/iui/widgets/msdf-layered-image-9-slice.lua b/xurfer/runtime/lovr/lib/iui/widgets/msdf-layered-image-9-slice.lua similarity index 100% rename from xurfer/lovr/lib/iui/widgets/msdf-layered-image-9-slice.lua rename to xurfer/runtime/lovr/lib/iui/widgets/msdf-layered-image-9-slice.lua diff --git a/xurfer/lovr/lib/iui/widgets/msdf-layered-image.lua b/xurfer/runtime/lovr/lib/iui/widgets/msdf-layered-image.lua similarity index 100% rename from xurfer/lovr/lib/iui/widgets/msdf-layered-image.lua rename to xurfer/runtime/lovr/lib/iui/widgets/msdf-layered-image.lua diff --git a/xurfer/lovr/lib/iui/widgets/panel-background.lua b/xurfer/runtime/lovr/lib/iui/widgets/panel-background.lua similarity index 100% rename from xurfer/lovr/lib/iui/widgets/panel-background.lua rename to xurfer/runtime/lovr/lib/iui/widgets/panel-background.lua diff --git a/xurfer/lovr/lib/iui/widgets/progress.lua b/xurfer/runtime/lovr/lib/iui/widgets/progress.lua similarity index 100% rename from xurfer/lovr/lib/iui/widgets/progress.lua rename to xurfer/runtime/lovr/lib/iui/widgets/progress.lua diff --git a/xurfer/lovr/lib/iui/widgets/radio.lua b/xurfer/runtime/lovr/lib/iui/widgets/radio.lua similarity index 100% rename from xurfer/lovr/lib/iui/widgets/radio.lua rename to xurfer/runtime/lovr/lib/iui/widgets/radio.lua diff --git a/xurfer/lovr/lib/iui/widgets/scroll-bar.lua b/xurfer/runtime/lovr/lib/iui/widgets/scroll-bar.lua similarity index 100% rename from xurfer/lovr/lib/iui/widgets/scroll-bar.lua rename to xurfer/runtime/lovr/lib/iui/widgets/scroll-bar.lua diff --git a/xurfer/lovr/lib/iui/widgets/scroll-view.lua b/xurfer/runtime/lovr/lib/iui/widgets/scroll-view.lua similarity index 100% rename from xurfer/lovr/lib/iui/widgets/scroll-view.lua rename to xurfer/runtime/lovr/lib/iui/widgets/scroll-view.lua diff --git a/xurfer/lovr/lib/iui/widgets/slider.lua b/xurfer/runtime/lovr/lib/iui/widgets/slider.lua similarity index 100% rename from xurfer/lovr/lib/iui/widgets/slider.lua rename to xurfer/runtime/lovr/lib/iui/widgets/slider.lua diff --git a/xurfer/lovr/lib/iui/widgets/split-view.lua b/xurfer/runtime/lovr/lib/iui/widgets/split-view.lua similarity index 100% rename from xurfer/lovr/lib/iui/widgets/split-view.lua rename to xurfer/runtime/lovr/lib/iui/widgets/split-view.lua diff --git a/xurfer/lovr/lib/iui/widgets/sub-menu.lua b/xurfer/runtime/lovr/lib/iui/widgets/sub-menu.lua similarity index 100% rename from xurfer/lovr/lib/iui/widgets/sub-menu.lua rename to xurfer/runtime/lovr/lib/iui/widgets/sub-menu.lua diff --git a/xurfer/lovr/lib/iui/widgets/tab-bar.lua b/xurfer/runtime/lovr/lib/iui/widgets/tab-bar.lua similarity index 100% rename from xurfer/lovr/lib/iui/widgets/tab-bar.lua rename to xurfer/runtime/lovr/lib/iui/widgets/tab-bar.lua diff --git a/xurfer/lovr/lib/iui/widgets/text-field.lua b/xurfer/runtime/lovr/lib/iui/widgets/text-field.lua similarity index 100% rename from xurfer/lovr/lib/iui/widgets/text-field.lua rename to xurfer/runtime/lovr/lib/iui/widgets/text-field.lua diff --git a/xurfer/lovr/lib/iui/window-manager.lua b/xurfer/runtime/lovr/lib/iui/window-manager.lua similarity index 100% rename from xurfer/lovr/lib/iui/window-manager.lua rename to xurfer/runtime/lovr/lib/iui/window-manager.lua diff --git a/xurfer/lovr/lib/lovr-iui/.gitignore b/xurfer/runtime/lovr/lib/lovr-iui/.gitignore similarity index 100% rename from xurfer/lovr/lib/lovr-iui/.gitignore rename to xurfer/runtime/lovr/lib/lovr-iui/.gitignore diff --git a/xurfer/lovr/lib/lovr-iui/LICENSE b/xurfer/runtime/lovr/lib/lovr-iui/LICENSE similarity index 100% rename from xurfer/lovr/lib/lovr-iui/LICENSE rename to xurfer/runtime/lovr/lib/lovr-iui/LICENSE diff --git a/xurfer/lovr/lib/lovr-iui/README.md b/xurfer/runtime/lovr/lib/lovr-iui/README.md similarity index 100% rename from xurfer/lovr/lib/lovr-iui/README.md rename to xurfer/runtime/lovr/lib/lovr-iui/README.md diff --git a/xurfer/lovr/lib/lovr-iui/graphics.lua b/xurfer/runtime/lovr/lib/lovr-iui/graphics.lua similarity index 100% rename from xurfer/lovr/lib/lovr-iui/graphics.lua rename to xurfer/runtime/lovr/lib/lovr-iui/graphics.lua diff --git a/xurfer/lovr/lib/lovr-iui/init.lua b/xurfer/runtime/lovr/lib/lovr-iui/init.lua similarity index 100% rename from xurfer/lovr/lib/lovr-iui/init.lua rename to xurfer/runtime/lovr/lib/lovr-iui/init.lua diff --git a/xurfer/lovr/lib/lovr-iui/shaders/ui-clip.glsl b/xurfer/runtime/lovr/lib/lovr-iui/shaders/ui-clip.glsl similarity index 100% rename from xurfer/lovr/lib/lovr-iui/shaders/ui-clip.glsl rename to xurfer/runtime/lovr/lib/lovr-iui/shaders/ui-clip.glsl diff --git a/xurfer/lovr/lib/lovr-iui/shaders/ui-image.glsl b/xurfer/runtime/lovr/lib/lovr-iui/shaders/ui-image.glsl similarity index 100% rename from xurfer/lovr/lib/lovr-iui/shaders/ui-image.glsl rename to xurfer/runtime/lovr/lib/lovr-iui/shaders/ui-image.glsl diff --git a/xurfer/lovr/lib/lovr-iui/shaders/ui-msdf.glsl b/xurfer/runtime/lovr/lib/lovr-iui/shaders/ui-msdf.glsl similarity index 100% rename from xurfer/lovr/lib/lovr-iui/shaders/ui-msdf.glsl rename to xurfer/runtime/lovr/lib/lovr-iui/shaders/ui-msdf.glsl diff --git a/xurfer/lovr/lib/lovr-iui/system.lua b/xurfer/runtime/lovr/lib/lovr-iui/system.lua similarity index 100% rename from xurfer/lovr/lib/lovr-iui/system.lua rename to xurfer/runtime/lovr/lib/lovr-iui/system.lua diff --git a/xurfer/lovr/lib/lovr-iui/vr-input.lua b/xurfer/runtime/lovr/lib/lovr-iui/vr-input.lua similarity index 100% rename from xurfer/lovr/lib/lovr-iui/vr-input.lua rename to xurfer/runtime/lovr/lib/lovr-iui/vr-input.lua diff --git a/xurfer/lovr/lib/lovr-iui/world-window.lua b/xurfer/runtime/lovr/lib/lovr-iui/world-window.lua similarity index 100% rename from xurfer/lovr/lib/lovr-iui/world-window.lua rename to xurfer/runtime/lovr/lib/lovr-iui/world-window.lua diff --git a/xurfer/lovr/lib/lovr-mouse/LICENSE b/xurfer/runtime/lovr/lib/lovr-mouse/LICENSE similarity index 100% rename from xurfer/lovr/lib/lovr-mouse/LICENSE rename to xurfer/runtime/lovr/lib/lovr-mouse/LICENSE diff --git a/xurfer/lovr/lib/lovr-mouse/init.lua b/xurfer/runtime/lovr/lib/lovr-mouse/init.lua similarity index 100% rename from xurfer/lovr/lib/lovr-mouse/init.lua rename to xurfer/runtime/lovr/lib/lovr-mouse/init.lua diff --git a/xurfer/lovr/main.lua b/xurfer/runtime/lovr/main.lua similarity index 98% rename from xurfer/lovr/main.lua rename to xurfer/runtime/lovr/main.lua index 4089329..4b336fa 100644 --- a/xurfer/lovr/main.lua +++ b/xurfer/runtime/lovr/main.lua @@ -9,8 +9,8 @@ local iui = require "lib.iui" local backend = require "lib.lovr-iui" -- modify for nested lovr path for api -iui.resourcePath = "lovr/" .. iui.resourcePath -backend.resourcePath = "lovr/" .. backend.resourcePath +iui.resourcePath = "runtime/lovr/" .. iui.resourcePath +backend.resourcePath = "runtime/lovr/" .. backend.resourcePath api.iui = iui api.backend = backend -- decorate api diff --git a/xurfer/lovr/render/model.lua b/xurfer/runtime/lovr/render/model.lua similarity index 100% rename from xurfer/lovr/render/model.lua rename to xurfer/runtime/lovr/render/model.lua diff --git a/xurfer/lovr/sample/.gitignore b/xurfer/runtime/lovr/sample/.gitignore similarity index 100% rename from xurfer/lovr/sample/.gitignore rename to xurfer/runtime/lovr/sample/.gitignore diff --git a/xurfer/lovr/sample/LICENSE b/xurfer/runtime/lovr/sample/LICENSE similarity index 100% rename from xurfer/lovr/sample/LICENSE rename to xurfer/runtime/lovr/sample/LICENSE diff --git a/xurfer/lovr/sample/README.md b/xurfer/runtime/lovr/sample/README.md similarity index 100% rename from xurfer/lovr/sample/README.md rename to xurfer/runtime/lovr/sample/README.md diff --git a/xurfer/lovr/sample/assets/game-sunset.png b/xurfer/runtime/lovr/sample/assets/game-sunset.png similarity index 100% rename from xurfer/lovr/sample/assets/game-sunset.png rename to xurfer/runtime/lovr/sample/assets/game-sunset.png diff --git a/xurfer/lovr/sample/assets/nine-slice-frame.png b/xurfer/runtime/lovr/sample/assets/nine-slice-frame.png similarity index 100% rename from xurfer/lovr/sample/assets/nine-slice-frame.png rename to xurfer/runtime/lovr/sample/assets/nine-slice-frame.png diff --git a/xurfer/lovr/sample/assets/nine-slice-interior.png b/xurfer/runtime/lovr/sample/assets/nine-slice-interior.png similarity index 100% rename from xurfer/lovr/sample/assets/nine-slice-interior.png rename to xurfer/runtime/lovr/sample/assets/nine-slice-interior.png diff --git a/xurfer/lovr/sample/assets/smile-bg.png b/xurfer/runtime/lovr/sample/assets/smile-bg.png similarity index 100% rename from xurfer/lovr/sample/assets/smile-bg.png rename to xurfer/runtime/lovr/sample/assets/smile-bg.png diff --git a/xurfer/lovr/sample/assets/smile-fg.png b/xurfer/runtime/lovr/sample/assets/smile-fg.png similarity index 100% rename from xurfer/lovr/sample/assets/smile-fg.png rename to xurfer/runtime/lovr/sample/assets/smile-fg.png diff --git a/xurfer/lovr/sample/assets/ui-box-slice.png b/xurfer/runtime/lovr/sample/assets/ui-box-slice.png similarity index 100% rename from xurfer/lovr/sample/assets/ui-box-slice.png rename to xurfer/runtime/lovr/sample/assets/ui-box-slice.png diff --git a/xurfer/lovr/sample/features/disabled-tab/disabled-tab.lua b/xurfer/runtime/lovr/sample/features/disabled-tab/disabled-tab.lua similarity index 100% rename from xurfer/lovr/sample/features/disabled-tab/disabled-tab.lua rename to xurfer/runtime/lovr/sample/features/disabled-tab/disabled-tab.lua diff --git a/xurfer/lovr/sample/features/image-tab/models/state.lua b/xurfer/runtime/lovr/sample/features/image-tab/models/state.lua similarity index 100% rename from xurfer/lovr/sample/features/image-tab/models/state.lua rename to xurfer/runtime/lovr/sample/features/image-tab/models/state.lua diff --git a/xurfer/lovr/sample/features/image-tab/models/window-state.lua b/xurfer/runtime/lovr/sample/features/image-tab/models/window-state.lua similarity index 100% rename from xurfer/lovr/sample/features/image-tab/models/window-state.lua rename to xurfer/runtime/lovr/sample/features/image-tab/models/window-state.lua diff --git a/xurfer/lovr/sample/features/image-tab/msdf.lua b/xurfer/runtime/lovr/sample/features/image-tab/msdf.lua similarity index 100% rename from xurfer/lovr/sample/features/image-tab/msdf.lua rename to xurfer/runtime/lovr/sample/features/image-tab/msdf.lua diff --git a/xurfer/lovr/sample/features/image-tab/nine-slice-msdf.lua b/xurfer/runtime/lovr/sample/features/image-tab/nine-slice-msdf.lua similarity index 100% rename from xurfer/lovr/sample/features/image-tab/nine-slice-msdf.lua rename to xurfer/runtime/lovr/sample/features/image-tab/nine-slice-msdf.lua diff --git a/xurfer/lovr/sample/features/image-tab/nine-slice.lua b/xurfer/runtime/lovr/sample/features/image-tab/nine-slice.lua similarity index 100% rename from xurfer/lovr/sample/features/image-tab/nine-slice.lua rename to xurfer/runtime/lovr/sample/features/image-tab/nine-slice.lua diff --git a/xurfer/lovr/sample/features/image-tab/simple.lua b/xurfer/runtime/lovr/sample/features/image-tab/simple.lua similarity index 100% rename from xurfer/lovr/sample/features/image-tab/simple.lua rename to xurfer/runtime/lovr/sample/features/image-tab/simple.lua diff --git a/xurfer/lovr/sample/features/image-tab/tab-image.lua b/xurfer/runtime/lovr/sample/features/image-tab/tab-image.lua similarity index 100% rename from xurfer/lovr/sample/features/image-tab/tab-image.lua rename to xurfer/runtime/lovr/sample/features/image-tab/tab-image.lua diff --git a/xurfer/lovr/sample/features/main-tab/main-tab.lua b/xurfer/runtime/lovr/sample/features/main-tab/main-tab.lua similarity index 100% rename from xurfer/lovr/sample/features/main-tab/main-tab.lua rename to xurfer/runtime/lovr/sample/features/main-tab/main-tab.lua diff --git a/xurfer/lovr/sample/features/main-tab/models/state.lua b/xurfer/runtime/lovr/sample/features/main-tab/models/state.lua similarity index 100% rename from xurfer/lovr/sample/features/main-tab/models/state.lua rename to xurfer/runtime/lovr/sample/features/main-tab/models/state.lua diff --git a/xurfer/lovr/sample/features/main-tab/models/window-state.lua b/xurfer/runtime/lovr/sample/features/main-tab/models/window-state.lua similarity index 100% rename from xurfer/lovr/sample/features/main-tab/models/window-state.lua rename to xurfer/runtime/lovr/sample/features/main-tab/models/window-state.lua diff --git a/xurfer/lovr/sample/features/main-tab/primary-pane.lua b/xurfer/runtime/lovr/sample/features/main-tab/primary-pane.lua similarity index 100% rename from xurfer/lovr/sample/features/main-tab/primary-pane.lua rename to xurfer/runtime/lovr/sample/features/main-tab/primary-pane.lua diff --git a/xurfer/lovr/sample/features/main-tab/secondary-pane.lua b/xurfer/runtime/lovr/sample/features/main-tab/secondary-pane.lua similarity index 100% rename from xurfer/lovr/sample/features/main-tab/secondary-pane.lua rename to xurfer/runtime/lovr/sample/features/main-tab/secondary-pane.lua diff --git a/xurfer/lovr/sample/init.lua b/xurfer/runtime/lovr/sample/init.lua similarity index 100% rename from xurfer/lovr/sample/init.lua rename to xurfer/runtime/lovr/sample/init.lua diff --git a/xurfer/lovr/sample/menu-bar.lua b/xurfer/runtime/lovr/sample/menu-bar.lua similarity index 100% rename from xurfer/lovr/sample/menu-bar.lua rename to xurfer/runtime/lovr/sample/menu-bar.lua diff --git a/xurfer/lovr/sample/models/app-state.lua b/xurfer/runtime/lovr/sample/models/app-state.lua similarity index 100% rename from xurfer/lovr/sample/models/app-state.lua rename to xurfer/runtime/lovr/sample/models/app-state.lua diff --git a/xurfer/lovr/sample/models/window-state.lua b/xurfer/runtime/lovr/sample/models/window-state.lua similarity index 100% rename from xurfer/lovr/sample/models/window-state.lua rename to xurfer/runtime/lovr/sample/models/window-state.lua diff --git a/xurfer/lovr/sample/tab-bar.lua b/xurfer/runtime/lovr/sample/tab-bar.lua similarity index 100% rename from xurfer/lovr/sample/tab-bar.lua rename to xurfer/runtime/lovr/sample/tab-bar.lua diff --git a/xurfer/runtime/lua/api.lua b/xurfer/runtime/lua/api.lua new file mode 100644 index 0000000..9b335ed --- /dev/null +++ b/xurfer/runtime/lua/api.lua @@ -0,0 +1,45 @@ +return { + + -- protocol.http: inited via runtime/lua/main.lua + + filesystem = { + + getDirectoryItems = function(path) + local items = {} + local cmd = "ls -1 \"" .. path .. "\"" + -- Windows + if package.config:sub(1,1) == "\\" then + cmd = "dir /b \"" .. path .. "\"" + end + local pipe = io.popen(cmd) + if not pipe then return items end + for entry in pipe:lines() do + if entry ~= "." and entry ~= ".." then + table.insert(items, entry) + end + end + pipe:close() + return items + end, + + isFile = function(path) + local f = io.open(path, "r") + if f then + -- Ensure it's not a directory disguised as a file + local _, _, code = f:read(0) + f:close() + return code ~= 21 -- EISDIR (Is a directory error code on POSIX) + end + return false + end, + + load = function(path) + local file = io.open(path, "r") + if not file then return nil end + local content = file:read("*a") + file:close() + local func = loadstring(content) + return func + end + } +} diff --git a/xurfer/runtime/lua/conf.lua b/xurfer/runtime/lua/conf.lua new file mode 100644 index 0000000..39187b7 --- /dev/null +++ b/xurfer/runtime/lua/conf.lua @@ -0,0 +1,3 @@ +package.path = package.path .. ';' .. 'xurfer/?.lua' + +loadstring = load -- lua compat for tiny-ecs diff --git a/xurfer/runtime/lua/main.lua b/xurfer/runtime/lua/main.lua new file mode 100644 index 0000000..4acd8c2 --- /dev/null +++ b/xurfer/runtime/lua/main.lua @@ -0,0 +1,63 @@ +-- The following api-calls need the unixy extension, +-- so we init them via an adhoc extension here: + +api.ext.lua = { + + enabled = true, + + main = function() + -- main loop + local last_time = os.clock() + api.ecs.filterUpdate = api.ecs.requireAll('updatethread') + api.ecs.filterDraw = api.ecs.requireAll('drawthread') + + api.protocol.http.request( "https://2wa.isvery.ninja", {}, function(status,data,headers) + print("request done") + --print_r(status) + --print_r(headers) + --print_r(data) + end) + + while true do + local current_time = os.clock() + local dt = current_time - last_time + last_time = current_time + -- update extensions + api.ext.exec("update", dt) + api.ecs.update( api.world, dt, api.ecs.filterUpdate ) + end + end, + + init = function() + + -- reroute http request + if not api.protocol.http then + + api.protocol.http = {} + + -- via wget + api.protocol.http.request = api.ext.unixy.proxyCLI( + "wget", + function(url,opts, cb) return string.format( "out=$(mktemp); wget -O $out https://2wa.isvery.ninja; cat $out; rm $out", url ) end, + function( stdout, stderr, retcode, url, opts, cb) + local status = 200 + if retcode ~= 0 then status = retcode end + cb( retcode, stdout, {string = stderr}) -- todo: parse string into key/values + end + ) + + -- via curl + api.protocol.http.request = api.ext.unixy.proxyCLI( + "curl", + function(url,opts, cb) return string.format( "curl -v -s %s", url ) end, + function( stdout, stderr, retcode, url, opts, cb) + local status = 200 + if retcode ~= 0 then status = retcode end + cb( retcode, stdout, {string = stderr}) -- todo: parse string into key/values + end + ) + + end + + end +} diff --git a/xurfer/test.glb b/xurfer/test.glb deleted file mode 100644 index 2cee76d..0000000 Binary files a/xurfer/test.glb and /dev/null differ diff --git a/xurfer/util.lua b/xurfer/util.lua index e86c390..392c62e 100644 --- a/xurfer/util.lua +++ b/xurfer/util.lua @@ -11,6 +11,12 @@ util.loaddir = function( path, api, target) end) end +util.cmdExist = function(cmd) + if api.runtime.os == 'unixy' then cmd = cmd .. " 1>/dev/null 2>/dev/null" end + local stdout, retstr, retcode = os.execute(cmd) + return retcode ~= 127 +end + util.exec = function(obj, fn,a,b,c,d,e,f) foreach( obj, when('enabled',true, util.call(fn,a,b,c,d,e,f) ) @@ -69,10 +75,6 @@ function util.dump(value, indent, seen) end end --- error on undefined variable access -local function err(t,k,v) error("Accessed an undefined variable: " .. tostring(k)) end -setmetatable(_G, { __index = err }) - function util.count(self) local i = 0 if self == nil then return i end @@ -131,42 +133,6 @@ util.call = function(fn,a,b,c,d,e,f) end end -function foreach(table, f) - if table ~= nil then - for k, v in pairs(table) do f(k, v) end - end -end - -function when(k,v,cb) - return function(kk,vv) - if type(vv) == 'table' then - if vv[k] == v then cb(kk,vv) end - end - end -end - -function trace(o) - if os.getenv('DEBUG') then - if type(o) == 'table' then - print_r(o) - else - print(o) - end - end -end - - -function util.merge(t1,t2) - local t3 = {} - foreach( t1, function(k,v) t3[k] = v end) - foreach( t2, function(k,v) t3[k] = v end) - return t3 -end - -function print_r(t) - print( util.dump(t) ) -end - util.match = function(list,k,v) local ret = false foreach( list, function(K,V) @@ -175,6 +141,13 @@ util.match = function(list,k,v) return ret end +function util.merge(t1,t2) + local t3 = {} + foreach( t1, function(k,v) t3[k] = v end) + foreach( t2, function(k,v) t3[k] = v end) + return t3 +end + -- recalculate filters for tiny-ecs systems -- usage: entity.commit = util.commit(api.world) -- once -- entity.commit() -- this recalculates the filtercache of systems @@ -213,4 +186,38 @@ util.addModuleHooks = function(mod) return mod end +-- +-- LUA SYNTAX SUGAR (from here on ) +-- + +function foreach(table, f) + if table ~= nil then + for k, v in pairs(table) do f(k, v) end + end +end + +function when(k,v,cb) + return function(kk,vv) + if type(vv) == 'table' then + if vv[k] == v then cb(kk,vv) end + end + end +end + +function trace(o) + if os.getenv('DEBUG') then + if type(o) == 'table' then + print_r(o) + else + print(o) + end + end +end + + +function print_r(t) + print( util.dump(t) ) +end + + return util