From 6f8bd55fc30ee4c4dcddce23c8c1f1bdc9f7a786 Mon Sep 17 00:00:00 2001 From: Leon van Kammen Date: Thu, 18 Jun 2026 17:39:25 +0200 Subject: [PATCH] added tween extension to visualize clicks --- xurfer/ext/tween/main.lua | 48 +++++++++++++++++++---------- xurfer/ext/xrfragments/lovr-xrf.lua | 2 +- xurfer/ext/xrfragments/main.lua | 8 ++--- 3 files changed, 36 insertions(+), 22 deletions(-) diff --git a/xurfer/ext/tween/main.lua b/xurfer/ext/tween/main.lua index a638404..decafdb 100644 --- a/xurfer/ext/tween/main.lua +++ b/xurfer/ext/tween/main.lua @@ -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 } diff --git a/xurfer/ext/xrfragments/lovr-xrf.lua b/xurfer/ext/xrfragments/lovr-xrf.lua index 2edb459..3fae145 100644 --- a/xurfer/ext/xrfragments/lovr-xrf.lua +++ b/xurfer/ext/xrfragments/lovr-xrf.lua @@ -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 diff --git a/xurfer/ext/xrfragments/main.lua b/xurfer/ext/xrfragments/main.lua index 3fc72a0..e8b6401 100644 --- a/xurfer/ext/xrfragments/main.lua +++ b/xurfer/ext/xrfragments/main.lua @@ -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 )