Jump to content
Main menu
Main menu
move to sidebar
hide
Navigation
Main page
Recent changes
Random page
MediaWiki help
Creopedia
Search
Search
Appearance
Log in
Personal tools
Log in
View source for Module:Creo/Components/Sprites
Module
Discussion
English
Read
View source
View history
Tools
Tools
move to sidebar
hide
Actions
Read
View source
View history
General
What links here
Related changes
Special pages
Page information
Appearance
move to sidebar
hide
←
Module:Creo/Components/Sprites
require( 'strict' ) local animation = require( 'Module:Animation' ) local gameTabs = require( 'Module:GameTabs' ) local tableLua = require( 'Module:TableLua' ) local SPRITES_MAP = mw.loadJsonData( 'Module:Creo/Components/Sprites/Map.json' ) local VARIANTS_MAP = mw.loadJsonData( 'Module:Creo/Components/Sprites/Variants.json' ) local getIndexData = require( 'Module:Creo' ).getIndexData local p = {} ---@param pattern string ---@param data table<string, any> ---@return string local function format( pattern, data ) return (pattern:gsub( '%%{(%w+)}', function ( placeholder ) if data[placeholder] == nil then return '%{' .. placeholder .. '}' end return tostring( data[placeholder] ) end )) end --- ---@param creoName string ---@param spriteGroup table ---@param variant table|nil ---@return TableProps local function getSpriteTableProps( creoName, spriteGroup, variant ) variant = variant or {} local columns = {} local rowData = {} local templateData = { creoName = creoName, variantId = variant.id or '', variantNumId = variant.numId or '' } for _, item in ipairs( spriteGroup.items ) do table.insert( columns, { id = item.label, label = item.label } ) local images = {} for _, pattern in ipairs( item.imagePatterns ) do table.insert( images, format( pattern, templateData ) ) end local animationHtml = animation.render { images = images, fps = spriteGroup.fps, } table.insert( rowData, animationHtml ) end return { caption = spriteGroup.title, columns = columns, data = { rowData }, class = 'wikitable--border wikitable--fluid', } end ---@param itemsContainer HtmlBuilder ---@param creoName string ---@param gameSpriteMap table ---@param variant table local function renderSpriteGroupsForVariant( itemsContainer, creoName, gameSpriteMap, variant ) for _, spriteGroup in ipairs( gameSpriteMap ) do local item = itemsContainer:tag( 'div' ):addClass( 't-creo-sprites-variant-item' ) if type( spriteGroup.columnSpan ) == 'number' then item:css( 'grid-column', string.format( 'span %d', spriteGroup.columnSpan ) ) end if type( spriteGroup.rowSpan ) == 'number' then item:css( 'grid-row', string.format( 'span %d', spriteGroup.rowSpan ) ) end local tableProps = getSpriteTableProps( creoName, spriteGroup, variant ) item:wikitext( tableLua.render( tableProps ) ) end end ---@param root HtmlBuilder ---@param creoName string ---@param gameSpriteMap table ---@param variant table local function renderVariant( root, creoName, gameSpriteMap, variant ) local variantDiv = root:tag( 'div' ) :addClass( 't-creo-sprites-variant' ) :tag( 'div' ) :addClass( 't-creo-sprites-variant-title' ) :wikitext( variant.name ) :done() if type( variant.id ) == 'string' and variant.id ~= '' then variantDiv:addClass( 't-creo-sprites-variant--' .. variant.id ) end local items = variantDiv:tag( 'div' ):addClass( 't-creo-sprites-variant-items' ) renderSpriteGroupsForVariant( items, creoName, gameSpriteMap, variant ) end ---@param root HtmlBuilder ---@param creoName string ---@param gameSpriteMap table ---@param variants table local function renderWithVariants( root, creoName, gameSpriteMap, variants ) for _, variant in ipairs( variants ) do renderVariant( root, creoName, gameSpriteMap, variant ) end end ---@param root HtmlBuilder ---@param creoName string ---@param gameSpriteMap table local function renderWithoutVariants( root, creoName, gameSpriteMap ) for _, spriteGroup in ipairs( gameSpriteMap ) do local tableProps = getSpriteTableProps( creoName, spriteGroup ) root:wikitext( tableLua.render( tableProps ) ) end end ---@param creoName string ---@param gameSpriteMap table ---@param gameId string ---@return string local function renderGameTabContent( creoName, gameSpriteMap, gameId ) local root = mw.html.create( 'div' ) root:addClass( 't-creo-sprites' ) :addClass( 'cp-image-pixelated' ) local variants = VARIANTS_MAP[gameId] if variants and variants[1] ~= nil then renderWithVariants( root, creoName, gameSpriteMap, variants ) else renderWithoutVariants( root, creoName, gameSpriteMap ) end return tostring( root ) end ---@param creoIndexData table ---@return table local function getGameTabsArgs( creoIndexData ) local gameTabsArgs = { noPadding = true } for _, gameId in ipairs( creoIndexData.games ) do local gameSpriteMap = SPRITES_MAP[gameId] if gameSpriteMap and gameSpriteMap[1] ~= nil then gameTabsArgs[gameId] = renderGameTabContent( creoIndexData.name, gameSpriteMap, gameId ) end end return gameTabsArgs end --- @param context ComponentContext --- @return string function p.render( context ) local creoName = context.args[1] or mw.title.getCurrentTitle().fullText local creoIndexData = getIndexData( creoName ) if not creoIndexData then return '' end return gameTabs._main( getGameTabsArgs( creoIndexData ) ) .. mw.getCurrentFrame():extensionTag { name = 'templatestyles', args = { src = 'Module:Creo/Components/Sprites/styles.css' } } end return p
Templates used on this page:
Template:Documentation
(
view source
)
Module:Creo/Components/Sprites/doc
(
view source
)
Return to
Module:Creo/Components/Sprites
.