local getArgs = require('Module:Arguments').getArgs
local data = require('Module:ImasIcon/CG/Data') -- 引入角色數據
local p = {}
-- 數據表局部化
local charDataMap = data
local DEFAULT_SIZE = 42
local MIN_SIZE = 16
local MAX_SIZE = 300
-- 檢查並處理尺寸參數
local function processSize(size)
size = tonumber(size) or DEFAULT_SIZE
return math.min(MAX_SIZE, math.max(MIN_SIZE, size))
end
-- 生成頭像HTML
local function generateIcon(charData, size)
if not charData or charData[1] == -1 then
return string.format(
'<span class="EmptyIcon" style="height:%dpx;width:%dpx;background-size:%dpx"></span>',
size, size, size
)
end
local id = charData[1]
local name = charData[2]
-- 計算背景位置
local col = id % 10 -- 列 (0-9)
local row = math.floor(id / 10) -- 行
if size == DEFAULT_SIZE then
-- 使用默認尺寸的特殊類
local xPos = DEFAULT_SIZE * 10 - DEFAULT_SIZE * col
local yPos = DEFAULT_SIZE * 20 - DEFAULT_SIZE * row
return string.format(
'[[%s|<span class="Ic4" style="background-position:%dpx %dpx"></span>]]',
name, xPos, yPos
)
else
-- 自定義尺寸
local xPos = size * 10 - size * col
local yPos = size * 20 - size * row
local bgSize = size * 10
return string.format(
'[[%s|<span class="Ico" style="height:%dpx;width:%dpx;background-size:%dpx;background-position:%dpx %dpx"></span>]]',
name, size, size, bgSize, xPos, yPos
)
end
end
-- 主函數
function p.main(frame)
local args = getArgs(frame)
local charName = args[1] or ''
local size = processSize(args[2])
-- 查找角色數據
local charData = charDataMap[charName]
if not charData then
charData = charDataMap["-1"] -- 填寫不存在的值將顯示佔位圖標
end
return generateIcon(charData, size)
end
return p