七日内新公告:全站维护公告
  • 你好~!欢迎来到萌娘百科镜像站!如需查看或编辑,请联系本站管理员注册账号。
  • 本镜像站和其他萌娘百科的镜像站无关,请注意分别。

Module:ImasIcon/CG

贴贴♀百科,万娘皆可贴的百科全书!转载请标注来源页面的网页链接,并声明引自贴贴百科。内容不可商用。
跳转到导航 跳转到搜索
模块文档  [创建] [刷新]
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