Модуль:Entity Sprite: различия между версиями
Pok (обсуждение | вклад) Нет описания правки Метка: ручная отмена |
Pok (обсуждение | вклад) Нет описания правки Метка: ручная отмена |
||
| Строка 75: | Строка 75: | ||
end | end | ||
-- | -- Создаём индекс для путей | ||
local function generateTemplate(entry, param, secondaryParam, data) | local function createSpritePathIndex(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 | ||
| Строка 93: | Строка 105: | ||
elseif param == "path" then | elseif param == "path" then | ||
if secondaryParam then | if secondaryParam then | ||
-- Используем индекс для быстрого поиска | |||
local id = spritePathIndex[secondaryParam] | |||
if id then | |||
return id | |||
end | end | ||
return nil | return nil | ||
| Строка 157: | Строка 168: | ||
end | end | ||
function p.main(frame) | function p.main(frame) | ||
local param = frame.args[1] | local param = frame.args[1] | ||
| Строка 166: | Строка 176: | ||
return 'Ошибка: Невозможно загрузить данные из JSON.' | return 'Ошибка: Невозможно загрузить данные из JSON.' | ||
end | end | ||
-- Создаём индекс путей | |||
local spritePathIndex = createSpritePathIndex(data) | |||
if param == "repeat" then | if param == "repeat" then | ||
| Строка 171: | Строка 184: | ||
elseif param == "path" and secondaryParam then | elseif param == "path" and secondaryParam then | ||
for _, entry in ipairs(data) do | for _, entry in ipairs(data) do | ||
local template = generateTemplate(entry, param, secondaryParam, data) | local template = generateTemplate(entry, param, secondaryParam, data, spritePathIndex) | ||
if template then | if template then | ||
return template | return template | ||
| Строка 180: | Строка 193: | ||
local result = {} | local result = {} | ||
for _, entry in ipairs(data) do | for _, entry in ipairs(data) do | ||
local template = generateTemplate(entry, param, secondaryParam, data) | local template = generateTemplate(entry, param, secondaryParam, data, spritePathIndex) | ||
if template then | if template then | ||
table.insert(result, template) | table.insert(result, template) | ||