- 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
|
||||
|
||||
states[stateName] = priority or 0
|
||||
|
||||
self.set("states", states)
|
||||
return self
|
||||
end
|
||||
@@ -299,7 +300,9 @@ end
|
||||
function BaseElement:updateConditionalStates()
|
||||
for stateName, stateInfo in pairs(self._registeredStates) do
|
||||
if stateInfo.condition then
|
||||
if stateInfo.condition(self) then
|
||||
local result = stateInfo.condition(self)
|
||||
|
||||
if result then
|
||||
self:setState(stateName, stateInfo.priority)
|
||||
else
|
||||
self:unsetState(stateName)
|
||||
|
||||
@@ -90,7 +90,7 @@ local function parseExpression(expr, element, propName)
|
||||
if objName == "self" then
|
||||
-- Check if property exists
|
||||
if element._properties[propName] then
|
||||
return element.get(propName)
|
||||
return element.getResolved(propName)
|
||||
end
|
||||
if element._registeredStates and element._registeredStates[propName] then
|
||||
return element:hasState(propName)
|
||||
@@ -104,7 +104,7 @@ local function parseExpression(expr, element, propName)
|
||||
return nil
|
||||
elseif objName == "parent" then
|
||||
if element.parent._properties[propName] then
|
||||
return element.parent.get(propName)
|
||||
return element.parent.getResolved(propName)
|
||||
end
|
||||
if element.parent._registeredStates and element.parent._registeredStates[propName] then
|
||||
return element.parent:hasState(propName)
|
||||
@@ -125,7 +125,7 @@ local function parseExpression(expr, element, propName)
|
||||
end
|
||||
|
||||
if target._properties[propName] then
|
||||
return target.get(propName)
|
||||
return target.getResolved(propName)
|
||||
end
|
||||
if target._registeredStates and target._registeredStates[propName] then
|
||||
return target:hasState(propName)
|
||||
|
||||
@@ -335,12 +335,16 @@ function PropertySystem:__init()
|
||||
end
|
||||
|
||||
self.getResolved = function(name, ...)
|
||||
local currentState = self:getCurrentState()
|
||||
local value
|
||||
local activeStates = self:getActiveStates()
|
||||
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
|
||||
value = self._states[currentState][name]
|
||||
else
|
||||
if value == nil then
|
||||
value = self._values[name]
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user