From 6fad764537069e08e264cad30d1c55484ccbea25 Mon Sep 17 00:00:00 2001 From: Sabine Lim Date: Sun, 14 May 2023 19:42:06 +1000 Subject: [PATCH 1/2] Untracked --- Basalt/plugins/xml.lua | 45 +++++++++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 18 deletions(-) diff --git a/Basalt/plugins/xml.lua b/Basalt/plugins/xml.lua index affb3a3..1836176 100644 --- a/Basalt/plugins/xml.lua +++ b/Basalt/plugins/xml.lua @@ -167,7 +167,7 @@ local function registerFunctionEvent(self, data, event, renderContext) end end -local effectStack = {} +local currentEffect = nil local clearEffectDependencies = function(effect) for _, dependency in ipairs(effect.dependencies) do @@ -186,15 +186,14 @@ return { reactive = function(initialValue) local value = initialValue local observerEffects = {} - local getter = function() - local invokingEffect = effectStack[#effectStack] - if (invokingEffect ~= nil) then - table.insert(observerEffects, invokingEffect) - table.insert(invokingEffect.dependencies, observerEffects) + local get = function() + if (currentEffect ~= nil) then + table.insert(observerEffects, currentEffect) + table.insert(currentEffect.dependencies, observerEffects) end return value end - local setter = function(newValue) + local set = function(newValue) value = newValue local observerEffectsCopy = {} for index, effect in ipairs(observerEffects) do @@ -204,16 +203,25 @@ return { effect.execute() end end - return getter, setter + return get, set + end, + + untracked = function(getter) + local lastEffect = currentEffect + currentEffect = nil + local value = getter() + currentEffect = lastEffect + return value end, effect = function(effectFn) local effect = {dependencies = {}} local execute = function() clearEffectDependencies(effect) - table.insert(effectStack, effect) + local lastEffect = currentEffect + currentEffect = effect effectFn() - table.remove(effectStack) + currentEffect = lastEffect end effect.execute = execute effect.execute() @@ -326,12 +334,12 @@ return { end end - local function addXMLObjectType(tab, addFn, self, renderContext) - if (tab ~= nil) then - if (tab.properties ~= nil) then - tab = {tab} + local function addXMLObjectType(node, addFn, self, renderContext) + if (node ~= nil) then + if (node.properties ~= nil) then + node = {node} end - for _, v in pairs(tab) do + for _, v in pairs(node) do local obj = addFn(self, v["@id"] or uuid()) lastXMLReferences[obj:getName()] = obj xmlDefaultValues(v, obj, renderContext) @@ -348,9 +356,10 @@ return { local _OBJECTS = basalt.getObjects() for _, childNode in pairs(children) do - if (childNode.___name~="animation") then - local objectKey = childNode.___name:gsub("^%l", string.upper) - if(_OBJECTS[objectKey] ~= nil) then + local tagName = childNode.___name + if (tagName ~= "animation") then + local objectKey = tagName:gsub("^%l", string.upper) + if (_OBJECTS[objectKey] ~= nil) then local addFn = self["add" .. objectKey] addXMLObjectType(childNode, addFn, self, renderContext) end -- 2.49.1 From ba81a2a09205b7f3df0e70e675867f603ee7c409 Mon Sep 17 00:00:00 2001 From: Sabine Lim Date: Sun, 14 May 2023 19:51:04 +1000 Subject: [PATCH 2/2] Rename lastEffect to prevEffect --- Basalt/plugins/xml.lua | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Basalt/plugins/xml.lua b/Basalt/plugins/xml.lua index 1836176..db97a78 100644 --- a/Basalt/plugins/xml.lua +++ b/Basalt/plugins/xml.lua @@ -207,10 +207,10 @@ return { end, untracked = function(getter) - local lastEffect = currentEffect + local prevEffect = currentEffect currentEffect = nil local value = getter() - currentEffect = lastEffect + currentEffect = prevEffect return value end, @@ -218,10 +218,10 @@ return { local effect = {dependencies = {}} local execute = function() clearEffectDependencies(effect) - local lastEffect = currentEffect + local prevEffect = currentEffect currentEffect = effect effectFn() - currentEffect = lastEffect + currentEffect = prevEffect end effect.execute = execute effect.execute() -- 2.49.1