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

мНет описания правки
мНет описания правки
Строка 1: Строка 1:
local p = {}
local p = {}


-- Загрузка данных
local function loadData(filePath)
local function loadData(filePath)
     local page = mw.title.new(filePath)
     local page = mw.title.new(filePath)
Строка 8: Строка 7:
end
end


-- Проверка равенства двух таблиц
local function deepEqual(t1, t2)
local function deepEqual(t1, t2)
     if t1 == t2 then return true end
     if t1 == t2 then return true end
Строка 47: Строка 45:
end
end


-- Вспомогательная функция для получения поля без учёта регистра
local function getInsensitiveKey(t, target)
local function getInsensitiveKey(t, target)
     target = target:lower()
     target = target:lower()
Строка 58: Строка 55:
end
end


-- Получение пути спрайта
local function getSpritePath(entry)
local function getSpritePath(entry)
     local spriteField = getInsensitiveKey(entry, "Sprite")
     local spriteField = getInsensitiveKey(entry, "Sprite")
Строка 77: Строка 73:
end
end


-- Генерация шаблона repeat
local function getSpriteState(entry)
    local spriteBlock = getInsensitiveKey(entry, "Sprite")
    if spriteBlock then
        if spriteBlock.state then
            return spriteBlock.state
        elseif spriteBlock.layers then
            for _, layer in pairs(spriteBlock.layers) do
                if layer.state then
                    return layer.state
                end
            end
        end
    end
 
    local iconBlock = getInsensitiveKey(entry, "Icon")
    if iconBlock and iconBlock.state then
        return iconBlock.state
    end
 
    return nil
end
 
local function generateRepeatTemplate(data)
local function generateRepeatTemplate(data)
     local spriteGroups = {}
     local spriteGroups = {}
Строка 112: Строка 129:
end
end


-- Функция генерации шаблона по записи
local function generateTemplate(entry, param, data)
local function generateTemplate(entry, param, data)
     local spritePath = getSpritePath(entry)
     local spritePath = getSpritePath(entry)
Строка 121: Строка 137:
     local spriteField = getInsensitiveKey(entry, "Sprite")
     local spriteField = getInsensitiveKey(entry, "Sprite")


    -- Определяем state
     local state = getSpriteState(entry)
     local state = nil
    if spriteField and spriteField.state then
        state = spriteField.state
    elseif spriteField and spriteField.layers then
        for _, layer in pairs(spriteField.layers) do
            if layer.state then
                state = layer.state
                break
            end
        end
    end


     if param == "image" then
     if param == "image" then