Модуль:Entity Sprite/all: различия между версиями
Pok (обсуждение | вклад) Нет описания правки |
Pok (обсуждение | вклад) Нет описания правки |
||
| Строка 11: | Строка 11: | ||
return path | return path | ||
end | end | ||
| Строка 89: | Строка 18: | ||
local function addField(name, value) | local function addField(name, value) | ||
if value ~= nil then | if value ~= nil then | ||
parts | table.insert(parts, name .. "=" .. tostring(value)) | ||
end | end | ||
end | end | ||
addField("sprite", | addField("sprite", normalizeSpritePath(entry.sprite)) | ||
addField("state", entry.state) | addField("state", entry.state) | ||
addField("scale", entry.scale) | addField("scale", entry.scale) | ||
| Строка 112: | Строка 41: | ||
table.sort(layerParts) | table.sort(layerParts) | ||
layers | table.insert(layers, table.concat(layerParts, ",")) | ||
end | end | ||
table.sort(layers) | table.sort(layers) | ||
parts | table.insert(parts, "layers=" .. table.concat(layers, "|")) | ||
end | end | ||
table.sort(parts) | table.sort(parts) | ||
return table.concat(parts, ";") | return table.concat(parts, ";") | ||
end | |||
local function getSpriteStates(entry) | |||
local result = {} | |||
if entry.layers and type(entry.layers) == "table" then | |||
for _, layer in ipairs(entry.layers) do | |||
if layer.visible ~= false and layer.state then | |||
table.insert(result, { | |||
state = tostring(layer.state), | |||
sprite = normalizeSpritePath(layer.sprite or entry.sprite) | |||
}) | |||
end | |||
end | |||
elseif entry.state and entry.sprite then | |||
table.insert(result, { | |||
state = tostring(entry.state), | |||
sprite = normalizeSpritePath(entry.sprite) | |||
}) | |||
end | |||
return (#result > 0) and result or nil | |||
end | |||
local function getSpritePath(entry) | |||
return normalizeSpritePath(entry.sprite) | |||
end | |||
local function getPrefix(id, project) | |||
if project ~= "" and JsonPaths.has(id, project) then | |||
return project .. ":" | |||
end | |||
return "" | |||
end | end | ||
| Строка 138: | Строка 100: | ||
local item = mw.text.trim(part) | local item = mw.text.trim(part) | ||
if item ~= "" then | if item ~= "" then | ||
result | table.insert(result, item) | ||
end | end | ||
end | end | ||
| Строка 215: | Строка 177: | ||
return result | return result | ||
end | |||
local function buildFileLink(id, project) | |||
local prefix = getPrefix(id, project) | |||
return "[[:Файл:" .. prefix .. id .. ".png]]" | |||
end | |||
local function buildSpriteUrl(baseUrl, spritePath) | |||
return baseUrl .. spritePath | |||
end | |||
local function buildSpritePathLink(baseUrl, spritePath) | |||
local url = buildSpriteUrl(baseUrl, spritePath) | |||
return "[" .. url .. " " .. spritePath .. "]" | |||
end | |||
local function buildStateLink(baseUrl, spritePath, state) | |||
local url = buildSpriteUrl(baseUrl, spritePath) .. "/" .. state .. ".png" | |||
return "[" .. url .. " " .. state .. "]" | |||
end | |||
local function buildSpriteStateLinks(baseUrl, states) | |||
if not states or #states == 0 then | |||
return "" | |||
end | |||
local links = {} | |||
for _, item in ipairs(states) do | |||
if item.sprite and item.state then | |||
table.insert(links, buildStateLink(baseUrl, item.sprite, item.state)) | |||
end | |||
end | |||
return table.concat(links, ", ") | |||
end | |||
local function buildRepeatSpriteValue(baseUrl, entry) | |||
local spritePath = getSpritePath(entry) | |||
if not spritePath then | |||
return "" | |||
end | |||
local pathLink = buildSpritePathLink(baseUrl, spritePath) | |||
local states = getSpriteStates(entry) | |||
if states and #states > 0 and states[1].state and states[1].state ~= "" then | |||
return pathLink .. " (" .. buildStateLink(baseUrl, spritePath, states[1].state) .. ")" | |||
end | |||
return pathLink | |||
end | end | ||
| Строка 224: | Строка 237: | ||
spriteGroups[key] = spriteGroups[key] or {} | spriteGroups[key] = spriteGroups[key] or {} | ||
spriteGroups[key] | table.insert(spriteGroups[key], { id = id, entry = entry }) | ||
end | end | ||
| Строка 234: | Строка 247: | ||
for _, obj in ipairs(group) do | for _, obj in ipairs(group) do | ||
table.insert(idLinks, buildFileLink(obj.id, project)) | |||
end | end | ||
local firstId = group[1].id | local firstId = group[1].id | ||
local firstEntry = group[1].entry | local firstEntry = group[1].entry | ||
local prefix = | local prefix = getPrefix(firstId, project) | ||
local spriteValue = buildRepeatSpriteValue(baseUrl, firstEntry) | |||
table.insert(result, mw.getCurrentFrame():preprocess( | |||
"{{Entity Sprite/Repeat|файлы=" .. table.concat(idLinks, " ") .. | "{{Entity Sprite/Repeat|файлы=" .. table.concat(idLinks, " ") .. | ||
"|перенаправление=" .. prefix .. firstId .. | "|перенаправление=" .. prefix .. firstId .. | ||
| Строка 261: | Строка 261: | ||
"|спрайт=" .. spriteValue .. | "|спрайт=" .. spriteValue .. | ||
"}}" | "}}" | ||
) | )) | ||
end | end | ||
end | end | ||
| Строка 274: | Строка 274: | ||
end | end | ||
local prefix = | local prefix = getPrefix(id, project) | ||
local states = getSpriteStates(entry) | |||
local | local stateStr = buildSpriteStateLinks(baseUrl, states) | ||
local stateStr = | |||
return | return mw.getCurrentFrame():preprocess( | ||
"{{Entity Sprite/Image|файл=" .. prefix .. id .. | "{{Entity Sprite/Image|файл=" .. prefix .. id .. | ||
"|id=" .. id .. | "|id=" .. id .. | ||
"|путь=" .. baseUrl | "|путь=" .. buildSpriteUrl(baseUrl, spritePath) .. | ||
"|state=" .. stateStr .. | "|state=" .. stateStr .. | ||
"}}" | "}}" | ||
| Строка 322: | Строка 321: | ||
local t = generateTemplate(id, entry, baseUrl, project) | local t = generateTemplate(id, entry, baseUrl, project) | ||
if t then | if t then | ||
result | table.insert(result, t) | ||
end | end | ||
end | end | ||