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

Отмена правки 61825, сделанной Pok (обсуждение)
Метка: отмена
Нет описания правки
Метка: ручная отмена
Строка 75: Строка 75:
end
end


-- Создаём индекс для путей
-- Генерация текста для элемента JSON
local function createSpritePathIndex(data)
local function generateTemplate(entry, param, secondaryParam, data)
    local index = {}
    for _, entry in ipairs(data) do
        local spritePath = getSpritePath(entry)
        if spritePath then
            index[spritePath] = entry.id
        end
    end
    return index
end
 
-- Обновляем основную функцию
local function generateTemplate(entry, param, secondaryParam, data, spritePathIndex)
     local spritePath = getSpritePath(entry)
     local spritePath = getSpritePath(entry)
     if not entry.id or not spritePath then
     if not entry.id or not spritePath then
Строка 105: Строка 93:
     elseif param == "path" then
     elseif param == "path" then
         if secondaryParam then
         if secondaryParam then
             -- Используем индекс для быстрого поиска
             for _, entry in ipairs(data) do
            local id = spritePathIndex[secondaryParam]
                local spritePath = getSpritePath(entry)
            if id then
                if spritePath == secondaryParam then
                return id
                    return entry.id  
                end
             end
             end
             return nil
             return nil
Строка 168: Строка 157:
end
end


-- Обновляем основную функцию для использования индекса
-- Основная функция модуля
function p.main(frame)
function p.main(frame)
     local param = frame.args[1]
     local param = frame.args[1]
Строка 177: Строка 166:
         return 'Ошибка: Невозможно загрузить данные из JSON.'
         return 'Ошибка: Невозможно загрузить данные из JSON.'
     end
     end
    -- Создаём индекс путей для быстрого поиска
    local spritePathIndex = createSpritePathIndex(data)


     if param == "repeat" then
     if param == "repeat" then
         return generateRepeatTemplate(data)
         return generateRepeatTemplate(data)
     elseif param == "path" and secondaryParam then
     elseif param == "path" and secondaryParam then
         -- Используем индекс для быстрого поиска
         for _, entry in ipairs(data) do
        local entryId = spritePathIndex[secondaryParam]
            local template = generateTemplate(entry, param, secondaryParam, data)
        if entryId then
            if template then
            -- Находим соответствующий шаблон
                 return template
            for _, entry in ipairs(data) do
                if entry.id == entryId then
                    return generateTemplate(entry, param, secondaryParam, data, spritePathIndex)
                 end
             end
             end
         end
         end
Строка 198: Строка 180:
         local result = {}
         local result = {}
         for _, entry in ipairs(data) do
         for _, entry in ipairs(data) do
             local template = generateTemplate(entry, param, secondaryParam, data, spritePathIndex)
             local template = generateTemplate(entry, param, secondaryParam, data)
             if template then
             if template then
                 table.insert(result, template)
                 table.insert(result, template)