Модуль:Песочница/Pok: различия между версиями
Pok (обсуждение | вклад) Нет описания правки |
Pok (обсуждение | вклад) Нет описания правки |
||
| Строка 65: | Строка 65: | ||
end | end | ||
return nil | return nil | ||
end | end | ||
| Строка 82: | Строка 75: | ||
local spritePath = getSpritePath(entry) | local spritePath = getSpritePath(entry) | ||
local iconBlock = findFieldInsensitive(entry, "Icon") | local iconBlock = findFieldInsensitive(entry, "Icon") | ||
local spriteBlock = findFieldInsensitive(entry, "Sprite") | local spriteBlock = findFieldInsensitive(entry, "Sprite") | ||
| Строка 133: | Строка 125: | ||
end | end | ||
local function generateRepeatTemplate(data) | local function getTextureBaseUrl(project) | ||
if project == "Goob" then | |||
return "https://github.com/space-syndicate/Goob-Station/blob/master/Resources/Textures/" | |||
end | |||
return "https://github.com/space-syndicate/space-station-14/blob/master/Resources/Textures/" | |||
end | |||
local function generateRepeatTemplate(data, project) | |||
local spriteGroups = {} | local spriteGroups = {} | ||
| Строка 158: | Строка 158: | ||
local idLinks = {} | local idLinks = {} | ||
for _, entry in pairs(group) do | for _, entry in pairs(group) do | ||
table.insert(idLinks, "[[:Файл:" .. entry.id .. ".png]]") | local prefix = (project ~= "" and JsonPaths.has(entry.id)) and (project .. ":") or "" | ||
table.insert(idLinks, "[[:Файл:" .. prefix .. entry.id .. ".png]]") | |||
end | end | ||
table.insert(result, mw.getCurrentFrame():preprocess( | table.insert(result, mw.getCurrentFrame():preprocess( | ||
| Строка 169: | Строка 170: | ||
end | end | ||
local function generateTemplate(entry, baseUrl, project) | |||
local function generateTemplate(entry, | |||
local spritePath = getSpritePath(entry) | local spritePath = getSpritePath(entry) | ||
if not entry.id or not spritePath then | if not entry.id or not spritePath then | ||
| Строка 183: | Строка 176: | ||
end | end | ||
local prefix = (project ~= "" and JsonPaths.has(entry.id)) and (project .. ":") or "" | |||
local states = getSpriteStates(entry) | |||
local stateStr = "" | |||
if states then | |||
local links = {} | |||
for _, item in ipairs(states) do | |||
local url = baseUrl .. item.sprite .. "/" .. item.state .. ".png" | |||
table.insert(links, "[" .. url .. " " .. item.state .. "]") | |||
end | end | ||
stateStr = table.concat(links, ", ") | |||
end | end | ||
return | return mw.getCurrentFrame():preprocess( | ||
"{{Entity Sprite/Image|" .. prefix .. entry.id .. | |||
"|" .. baseUrl .. spritePath .. | |||
"|" .. stateStr .. "}}" | |||
) | |||
end | end | ||
function p.main(frame) | function p.main(frame) | ||
local action = frame.args[1] | local action = frame.args[1] | ||
local project = JsonPaths.project( | local project = JsonPaths.project() | ||
local baseUrl = getTextureBaseUrl(project) | local baseUrl = getTextureBaseUrl(project) | ||
local dataPage = JsonPaths.get("prototype/sprite.json") | |||
local spriteData = mw.loadData(dataPage) | local spriteData = mw.loadData(dataPage) | ||
if not spriteData or type(spriteData) ~= "table" then | if not spriteData or type(spriteData) ~= "table" then | ||
return "Ошибка: | return "Ошибка загрузки JSON: " .. dataPage | ||
end | end | ||
if action == "repeat" then | if action == "repeat" then | ||
return generateRepeatTemplate(spriteData) | return generateRepeatTemplate(spriteData, project) | ||
elseif action == "image" then | elseif action == "image" then | ||
local result = {} | local result = {} | ||
for _, entry in pairs(spriteData) do | for _, entry in pairs(spriteData) do | ||
local | local t = generateTemplate(entry, baseUrl, project) | ||
if | if t then | ||
table.insert(result, | table.insert(result, t) | ||
end | end | ||
end | end | ||
return table.concat(result, "\n") | return table.concat(result, "\n") | ||
end | end | ||
return nil | |||
end | end | ||
return p | return p | ||