- Fixed reactive not using getResolved
- Fixed responsive using default value instead of lower priority state value
This commit is contained in:
@@ -232,6 +232,7 @@ function BaseElement:setState(stateName, priority)
|
|||||||
end
|
end
|
||||||
|
|
||||||
states[stateName] = priority or 0
|
states[stateName] = priority or 0
|
||||||
|
|
||||||
self.set("states", states)
|
self.set("states", states)
|
||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
@@ -299,7 +300,9 @@ end
|
|||||||
function BaseElement:updateConditionalStates()
|
function BaseElement:updateConditionalStates()
|
||||||
for stateName, stateInfo in pairs(self._registeredStates) do
|
for stateName, stateInfo in pairs(self._registeredStates) do
|
||||||
if stateInfo.condition then
|
if stateInfo.condition then
|
||||||
if stateInfo.condition(self) then
|
local result = stateInfo.condition(self)
|
||||||
|
|
||||||
|
if result then
|
||||||
self:setState(stateName, stateInfo.priority)
|
self:setState(stateName, stateInfo.priority)
|
||||||
else
|
else
|
||||||
self:unsetState(stateName)
|
self:unsetState(stateName)
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ local function parseExpression(expr, element, propName)
|
|||||||
if objName == "self" then
|
if objName == "self" then
|
||||||
-- Check if property exists
|
-- Check if property exists
|
||||||
if element._properties[propName] then
|
if element._properties[propName] then
|
||||||
return element.get(propName)
|
return element.getResolved(propName)
|
||||||
end
|
end
|
||||||
if element._registeredStates and element._registeredStates[propName] then
|
if element._registeredStates and element._registeredStates[propName] then
|
||||||
return element:hasState(propName)
|
return element:hasState(propName)
|
||||||
@@ -104,7 +104,7 @@ local function parseExpression(expr, element, propName)
|
|||||||
return nil
|
return nil
|
||||||
elseif objName == "parent" then
|
elseif objName == "parent" then
|
||||||
if element.parent._properties[propName] then
|
if element.parent._properties[propName] then
|
||||||
return element.parent.get(propName)
|
return element.parent.getResolved(propName)
|
||||||
end
|
end
|
||||||
if element.parent._registeredStates and element.parent._registeredStates[propName] then
|
if element.parent._registeredStates and element.parent._registeredStates[propName] then
|
||||||
return element.parent:hasState(propName)
|
return element.parent:hasState(propName)
|
||||||
@@ -125,7 +125,7 @@ local function parseExpression(expr, element, propName)
|
|||||||
end
|
end
|
||||||
|
|
||||||
if target._properties[propName] then
|
if target._properties[propName] then
|
||||||
return target.get(propName)
|
return target.getResolved(propName)
|
||||||
end
|
end
|
||||||
if target._registeredStates and target._registeredStates[propName] then
|
if target._registeredStates and target._registeredStates[propName] then
|
||||||
return target:hasState(propName)
|
return target:hasState(propName)
|
||||||
|
|||||||
@@ -335,12 +335,16 @@ function PropertySystem:__init()
|
|||||||
end
|
end
|
||||||
|
|
||||||
self.getResolved = function(name, ...)
|
self.getResolved = function(name, ...)
|
||||||
local currentState = self:getCurrentState()
|
local activeStates = self:getActiveStates()
|
||||||
local value
|
local value = nil
|
||||||
|
for _, stateInfo in ipairs(activeStates) do
|
||||||
|
if self._states and self._states[stateInfo.name] and self._states[stateInfo.name][name] ~= nil then
|
||||||
|
value = self._states[stateInfo.name][name]
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
if currentState and self._states and self._states[currentState] and self._states[currentState][name] ~= nil then
|
if value == nil then
|
||||||
value = self._states[currentState][name]
|
|
||||||
else
|
|
||||||
value = self._values[name]
|
value = self._values[name]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user