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

View file

@ -1,6 +1,5 @@
local api = ...
local url = require('url')
local tween = require('tween')
local ecs = api.ecs
local xrf = require("ext/xrfragments/lovr-xrf")
xrf.level2 = api.util.addModuleHooks( require("ext/xrfragments/level2") )
@ -18,10 +17,11 @@ xrfimpl = {
function(obj, collider)
local href = obj.node.extras.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)
or
xrf.level4.import( href, obj, api.ext.URI.current, xrfimpl.onImport)
--local ok = xrf.level2.load( href, obj, api.ext.URI.current, xrfimpl.onLoad)
-- or
-- xrf.level4.import( href, obj, api.ext.URI.current, xrfimpl.onImport)
end
)