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

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


local function getSpriteStates(entry)
local function getSpriteStates(entry)
     local iconBlock = findFieldInsensitive(entry, "Icon")
     local result = {}
    if iconBlock and iconBlock.state then
 
        return { { state = iconBlock.state, sprite = getSpritePath(entry) } }
    local function addState(state, sprite)
        table.insert(result, { state = state, sprite = sprite })
     end
     end


     local spriteBlock = findFieldInsensitive(entry, "Sprite")
     local spritePath = getSpritePath(entry)
    if not spriteBlock or not spriteBlock.layers then
        if spriteBlock and spriteBlock.state then
            return { { state = spriteBlock.state, sprite = getSpritePath(entry) } }
        end
        return nil
    end


     local firstStateLayer = nil
     local iconBlock = findFieldInsensitive(entry, "Icon")
     for _, layer in ipairs(spriteBlock.layers) do
    if iconBlock and iconBlock.state then
        if layer.state then
        addState(iconBlock.state, getSpritePath(entry))
            firstStateLayer = layer
     else
             break
        local spriteBlock = findFieldInsensitive(entry, "Sprite")
        if spriteBlock and spriteBlock.layers then
            for _, layer in ipairs(spriteBlock.layers) do
                if layer.state and layer.visible ~= false then
                    local s = layer.sprite or spritePath
                    addState(layer.state, s)
                    break
                end
            end
        elseif spriteBlock and spriteBlock.state then
             addState(spriteBlock.state, getSpritePath(entry))
         end
         end
     end
     end


    if not firstStateLayer then
     local spriteBlock = findFieldInsensitive(entry, "Sprite")
        return nil
     if spriteBlock and spriteBlock.layers then
    end
         for _, layer in ipairs(spriteBlock.layers) do
 
            local alreadyAdded = false
     local result = {}
             for _, r in ipairs(result) do
     if firstStateLayer.visible ~= false then
                if r.state == layer.state then
         if firstStateLayer.sprite then
                    alreadyAdded = true
             table.insert(result, { state = firstStateLayer.state, sprite = firstStateLayer.sprite })
                    break
        else
                end
            table.insert(result, { state = firstStateLayer.state, sprite = getSpritePath(entry) })
            end
        end
    end


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