Модуль:Entity Sprite: различия между версиями

мНет описания правки
мНет описания правки
Строка 45: Строка 45:


-- Функция получения списка состояний с учётом переопределяющего sprite в слое
-- Функция получения списка состояний с учётом переопределяющего sprite в слое
local function isStateFirstKey(layer)
    for k, _ in pairs(layer) do
        return k == "state"
    end
    return false
end
local function getSpriteStates(entry)
local function getSpriteStates(entry)
    local result = {}
     local spriteBlock = findFieldInsensitive(entry, "Sprite")
     local spriteBlock = findFieldInsensitive(entry, "Sprite")
     if spriteBlock and spriteBlock.layers then
     if not spriteBlock or not spriteBlock.layers then
         for _, layer in ipairs(spriteBlock.layers) do
         local iconBlock = findFieldInsensitive(entry, "Icon")
            if layer.visible == false then
        if iconBlock and iconBlock.state then
             elseif layer.state and layer.sprite then
             return { { state = iconBlock.state, sprite = getSpritePath(entry) } }
                table.insert(result, { state = layer.state, sprite = layer.sprite })
        end
            elseif layer.state then
        if spriteBlock and spriteBlock.state then
                table.insert(result, { state = layer.state, sprite = getSpritePath(entry) })
            return { { state = spriteBlock.state, sprite = getSpritePath(entry) } }
             end
        end
        return nil
    end
 
    local firstStateLayer
    for _, layer in ipairs(spriteBlock.layers) do
        if layer.state then
             firstStateLayer = layer
            break
         end
         end
     end
     end
     if #result > 0 then
     if not firstStateLayer then
         return result
         return nil
     end
     end


     local iconBlock = findFieldInsensitive(entry, "Icon")
     local result = {}
     if iconBlock and iconBlock.state then
     if firstStateLayer.visible ~= false then
         return { { state = iconBlock.state, sprite = getSpritePath(entry) } }
         if firstStateLayer.sprite then
            table.insert(result, { state = firstStateLayer.state, sprite = firstStateLayer.sprite })
        else
            table.insert(result, { state = firstStateLayer.state, sprite = getSpritePath(entry) })
        end
     end
     end


     if spriteBlock and spriteBlock.state then
     for _, layer in ipairs(spriteBlock.layers) do
        return { { state = spriteBlock.state, sprite = getSpritePath(entry) } }
        if layer ~= firstStateLayer and layer.state and isStateFirstKey(layer) and layer.visible ~= false then
            if layer.sprite then
                table.insert(result, { state = layer.state, sprite = layer.sprite })
            else
                table.insert(result, { state = layer.state, sprite = getSpritePath(entry) })
            end
        end
     end
     end


     return nil
     return (#result > 0) and result or nil
end
end