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

Нет описания правки
Нет описания правки
 
(не показано 5 промежуточных версий этого же участника)
Строка 1: Строка 1:
-- Загрузка данных
-- Загрузка данных
local JsonPaths = require('Module:JsonPaths')
local JsonPaths = require('Module:JsonPaths')
local spriteData = mw.loadData(JsonPaths.get("prototype/sprite.json"))
local spriteData = mw.loadData(JsonPaths.get("component/Sprite.json"))


local p = {}
local p = {}
Строка 14: Строка 14:


return path
return path
end
local function normalizeState(state)
if state == nil then
return nil
end
state = mw.text.trim(tostring(state))
if state == "" then
return nil
end
return state
end
end


Строка 29: Строка 42:
end
end


-- Функция получения пути спрайта
-- Функция получения пути спрайта:
-- 1) сначала entry.sprite
-- 2) потом первый layers[*].sprite
local function getSpritePath(entry)
local function getSpritePath(entry)
if not entry then
if not entry then
return nil
return nil
end
end
return normalizeSpritePath(entry.sprite)
 
if entry.sprite then
return normalizeSpritePath(entry.sprite)
end
 
if type(entry.layers) == "table" then
for _, layer in ipairs(entry.layers) do
if layer and layer.sprite then
return normalizeSpritePath(layer.sprite)
end
end
end
 
return nil
end
end


Строка 74: Строка 102:


return (#result > 0) and result or nil
return (#result > 0) and result or nil
end
local function findByPathAndState(data, targetPath, targetState)
for entityId, entry in pairs(data) do
if getSpritePath(entry) == targetPath then
local states = getSpriteStates(entry)
if states then
for _, item in ipairs(states) do
if normalizeState(item.state) == targetState then
return entityId
end
end
end
end
end
return nil
end
local function findByPath(data, targetPath)
for entityId, entry in pairs(data) do
if getSpritePath(entry) == targetPath then
return entityId
end
end
return nil
end
end


Строка 80: Строка 135:
local mode = frame.args[1]
local mode = frame.args[1]
local id = frame.args[2]
local id = frame.args[2]
local stateArg = frame.args[3]


if not mode or not id then
if not mode or not id then
Строка 126: Строка 182:
if mode == "path" then
if mode == "path" then
local targetPath = normalizeSpritePath(id)
local targetPath = normalizeSpritePath(id)
local targetState = normalizeState(stateArg)


for entityId, entry in pairs(data) do
if targetState then
if getSpritePath(entry) == targetPath then
local byState = findByPathAndState(data, targetPath, targetState)
return entityId
if byState then
return JsonPaths.prefixFile(byState)
end
end
end
local byPath = findByPath(data, targetPath)
if byPath then
return JsonPaths.prefixFile(byPath)
end
end