added tween extension to visualize clicks

This commit is contained in:
Leon van Kammen 2026-06-18 17:39:25 +02:00
parent cd480daccc
commit 6f8bd55fc3
3 changed files with 36 additions and 22 deletions

View file

@ -1,33 +1,47 @@
local api = ... local api = ...
local tween = require "ext/tween/tween" -- https://github.com/kikito/tween.lua
return { return {
enabled = false, enabled = (lovr ~= nil),
init = function() init = function()
local tweenUpdater = api.ecs.processingSystem({ local tweenUpdater = api.ecs.processingSystem({
updatethread = true, updatethread = true,
filter = api.ecs.requireAll('tween'), filter = function(obj) return true end, --obj.tween ~= nil end,
nocache = true, nocache = true,
process = function( self, obj, dt) process = function( self, obj, dt)
print("JAAA") if obj.tween ~= nil then
foreach( obj.tween, function(k,t) if obj.tween:update(dt) ~= true then
print("TWEENING!") if obj.tween.target.scale ~= nil then
if t:update(dt) == true then obj.model:setNodeScale(
obj.tween[k] = nil -- delete tween obj.tween.subject.name,
if count(obj.tween) == 0 then obj.tween.subject.scale[1],
obj.tween = nil obj.tween.subject.scale[2],
print("deleted tweens") obj.tween.subject.scale[3]
)
end end
else
api.ecs.remove( api.world, obj )
end end
end) end
end end
}) })
api.ecs.addSystem( api.world, tweenUpdater ) api.ecs.addSystem( api.world, tweenUpdater )
end end,
---- visualize click onClick = function(obj,collider)
--onClick -- visualize click
--obj.scale = 0.66 if obj.model ~= nil and obj.node ~= nil and obj.node.scale ~= nil then
--obj.tween = obj.tween or {} local x = obj.node.scale[1]
--obj.tween['scale'] = tween.new(0.5, obj, {scale = 1}) local y = obj.node.scale[2]
local z = obj.node.scale[3]
obj.node.scale[1] = x * 0.88
obj.node.scale[2] = y * 0.88
obj.node.scale[3] = z * 0.88
api.ecs.add( api.world, {
model = obj.model,
tween = tween.new(0.13, obj.node, {scale = {x, y, z} })
})
end
end
} }

View file

@ -107,7 +107,7 @@ xrf.makeClickable = function( physicsWorld, cb)
scale[3] * (d + 0.01) -- planes e.g. scale[3] * (d + 0.01) -- planes e.g.
) )
print("making node " .. node['name'] .. " clickable: " .. node.extras.href ) print("making node " .. node['name'] .. " clickable: " .. node.extras.href )
collider:setUserData( {name = node['name'], node = node, onclick = cb }) collider:setUserData( {name = node['name'], node = node, model = model, mesh = mesh, onclick = cb })
end end
end end

View file

@ -1,6 +1,5 @@
local api = ... local api = ...
local url = require('url') local url = require('url')
local tween = require('tween')
local ecs = api.ecs local ecs = api.ecs
local xrf = require("ext/xrfragments/lovr-xrf") local xrf = require("ext/xrfragments/lovr-xrf")
xrf.level2 = api.util.addModuleHooks( require("ext/xrfragments/level2") ) xrf.level2 = api.util.addModuleHooks( require("ext/xrfragments/level2") )
@ -18,10 +17,11 @@ xrfimpl = {
function(obj, collider) function(obj, collider)
local href = obj.node.extras.href local href = obj.node.extras.href
trace("\n[xrf] href was clicked: " .. href) trace("\n[xrf] href was clicked: " .. href)
api.ext.exec("onClick", obj, collider)
local ok = xrf.level2.load( href, obj, api.ext.URI.current, xrfimpl.onLoad) --local ok = xrf.level2.load( href, obj, api.ext.URI.current, xrfimpl.onLoad)
or -- or
xrf.level4.import( href, obj, api.ext.URI.current, xrfimpl.onImport) -- xrf.level4.import( href, obj, api.ext.URI.current, xrfimpl.onImport)
end end
) )