Module:ImagerieTest

De Poképédia
Aller à la navigation Aller à la recherche

Ce module est une version test du Module:Imagerie.


local p = {}
local ressources = {
	indexTableau = require("Module:Ressources/indexTableau"),
	tailleTableau = require("Module:Ressources/tailleTableau")
}

function p.pokemon( frame )
	-- CONFIGURATION INITIALE
	local num, generation
	if frame.args[1] == nil then return "Erreur : le numéro du Pokémon n'a pas été défini." else num = frame.args[1] end
	if frame.args['génération'] == nil then generation = 8 else generation = tonumber( frame.args['génération'] ) end
	if frame.args['forme'] then forme = frame.args['forme'] .. ' ' else forme = '' end
	local nom_gen= ''
	local symbole_chromatique = ''
	local jeux = {}
	
	-- tableau de deux éléments
	-- le premier liste les groupes de jeux ayant un sprite de face commun,
	-- le second liste les groupes de jeux ayant un sprite de dos commun
	local sprites = {}
	
	if generation == 1 then
		nom_gen = 'première'
		jeux = {"RV", "RB", "J"}
		sprites = { { RV = {"RV"}, RB = {"RB"}, J = {"J"} }, { RV = {"RV", "RB", "J"} } }
	elseif generation == 2 then
		nom_gen = 'deuxième'
		symbole_chromatique = '[[Fichier:Miniat shiny oac.png]]'
		jeux = {"OA", "O", "A", "C"}
		sprites = { { O = {"O"},  A = {"A"}, C = {"C"} }, { OA = {"O", "A", "C"} } }
	elseif generation == 3 then
		nom_gen = 'troisième'
		symbole_chromatique = '[[Fichier:Miniat shiny rfvf.png]]'
		jeux = {"RS", "RFVF", "E"}
		sprites = { { RS = {"RS", "RFVF"}, E = {"E"} }, { RS = {"RS", "RFVF", "E"} } }
	elseif generation == 4 then
		nom_gen = 'quatrième'
		symbole_chromatique = '[[Fichier:Miniat shiny dpphgss.png]]'
		jeux = {"DP", "Pt", "HGSS"}
		sprites = { { DP = {"DP", "Pt"}, HGSS = {"HGSS"} }, { DP = {"DP", "Pt", "HGSS"} } }
	elseif generation == 5 then
		nom_gen = 'cinquième'
		symbole_chromatique = '[[Fichier:Miniat shiny nbn2b2.png]]'
		jeux = {"NB", "NB2"}
		sprites = { { NB = {"NB", "NB2"} }, { NB = {"NB", "NB2"} } }
	elseif generation == 6 then
		nom_gen = 'sixième'
		symbole_chromatique = '[[Fichier:Miniat shiny xy.png]]'
		jeux = {"XY", "ROSA"}
		sprites = { { XY = {"XY", "ROSA"} }, { XY = {"XY", "ROSA"} } }
	elseif generation == 7 then
		nom_gen = 'septième'
		symbole_chromatique = '[[Fichier:Miniat shiny slusul.png]]'
		jeux = {"SL", "USUL", "LGPE"}
		sprites = { { SL = {"SL", "USUL"}, LGPE = {"LGPE"} }, { SL = {"SL", "USUL"}, LGPE = {"LGPE"} } }
	elseif generation == 8 then
		nom_gen = 'huitième'
		jeux = {"EB", "HOME"}
		sprites = { { EB = {"EB"}, HOME = {"HOME"} }, { EB = {"EB"}, HOME = {"HOME"} } }
	else return "Erreur : génération inconnue."
	end
	
	-- GESTION DES PARAMETRES DE CONFIGURATION PRINCIPAUX
	if not frame.args['absence-lgpe'] then frame.args['absence-lgpe'] = 'oui' end
	if not frame.args['absence-dos-home'] then frame.args['absence-dos-home'] = 'oui' end
	if not frame.args['absence-miniature'] then frame.args['absence-miniature'] = 'non' end
	local remove = {}
	for _, jeu in ipairs(jeux) do
		
		-- gestion des absences dans un jeu donné
		-- si l'absence a lieu pour un jeu qui servait de référence à un groupe, le reste du groupe est éclaté afin de conserver les autres membres
		-- (les valeurs deviennent des clés/valeurs supplémentaires du tableau parent)
		if frame.args['absence-' .. string.lower(jeu)] and frame.args['absence-' .. string.lower(jeu)] ~= 'non' then
			table.insert(remove, jeu)
			for _2, spritesN in ipairs(sprites) do
				if spritesN[jeu] then
					if #spritesN[jeu] > 1 then
						for _3, jeuN in ipairs(spritesN[jeu]) do
							if jeuN ~= jeu then
								spritesN[jeuN] = { jeuN }
							end
						end
					end
					spritesN[jeu] = nil
				else
					for _3, spriteN in pairs(spritesN) do
						if ressources.indexTableau(spriteN, jeu) then
							table.remove(spriteN, ressources.indexTableau(spriteN, jeu))
							break
						end
					end
				end
			end
		end
		
		local paramsSprites = { 'face', 'dos' }
		for numParam, paramSprites in ipairs(paramsSprites) do
			
			-- gestion des sprites de face/dos non prévus par le scénario standard, déclarés manuellement
			-- (les sprites sont supposés communs par groupes de jeux mais des exceptions existent)
			if frame.args['sprite-' .. paramSprites .. '-' .. string.lower(jeu)] then
				local param = frame.args['sprite-' .. paramSprites .. '-' .. string.lower(jeu)]
				for _2, jeu2 in ipairs(jeux) do
					if string.lower(jeu2) == string.lower(param) then
						param = jeu2
						break
					end
				end
				if sprites[numParam][jeu] then sprites[numParam][jeu] = nil
				else
					for _2, sprite in pairs(sprites[numParam]) do
						if ressources.indexTableau(sprite, jeu) then
							table.remove(sprite, ressources.indexTableau(sprite, jeu))
							break
						end
					end
				end
				if sprites[numParam][param] then table.insert(sprites[numParam][param], jeu)
				else sprites[numParam][param] = { jeu }
				end
			end
			
			-- gestion des jeux sans sprite de face ou de dos
			if frame.args['absence-' .. paramSprites .. '-' .. string.lower(jeu)] and frame.args['absence-' .. paramSprites .. '-' .. string.lower(jeu)] ~= 'non' then
				if sprites[numParam][jeu] then sprites[numParam][jeu] = nil
				else
					for _2, sprite in pairs(sprites[numParam]) do
						if ressources.indexTableau(sprite, jeu) then
							table.remove(sprite, ressources.indexTableau(sprite, jeu))
							break
						end
					end
				end
			end
		end
	end
	for _, jeu in ipairs(remove) do
		table.remove(jeux, ressources.indexTableau(jeux, jeu))
	end
	
	-- CREATION VIRTUELLE DU TABLEAU ET PARAMETRES DE CONFIGURATION SPECIFIQUES
	local tableau = {}
	if generation == 1 then
		tableau[1] = { "", {}, {} }
		for _, jeu in ipairs(jeux) do
			if sprites[1][jeu] then
				table.insert(tableau[1][2], {jeu, jeu, sprites[1][jeu], 1})
			end
			if sprites[2][jeu] then
				table.insert(tableau[1][3], {jeu, "dos " .. jeu, sprites[2][jeu], 1})
			end
		end
	elseif generation >= 4 and (frame.args['diff-sprites-sexe'] or frame.args['diff-sprites-face-sexe'] or frame.args['diff-sprites-dos-sexe']) then
		tableau = { 
			{ "[[Fichier:Symbole femelle.png|10px]]<br />[[Sexe des Pokémon|Femelle]]", {}, {} },
			{ "[[Fichier:Symbole mâle.png|10px]]<br />[[Sexe des Pokémon|Mâle]]", {}, {} },
			{ "[[Fichier:Symbole femelle.png|10px]] " .. symbole_chromatique .. "<br />[[Sexe des Pokémon|Femelle]] [[Pokémon chromatique|chromatique]]", {}, {} },
			{ "[[Fichier:Symbole mâle.png|10px]] " .. symbole_chromatique .. "<br />[[Sexe des Pokémon|Mâle]] [[Pokémon chromatique|chromatique]]", {}, {} }
		}
		for _, jeu in ipairs(jeux) do
			if sprites[1][jeu] then
				if frame.args['diff-sprites-sexe'] or frame.args['diff-sprites-face-sexe'] then
					table.insert(tableau[1][2], {jeu, forme .. "♀ " .. jeu, sprites[1][jeu], 1})
					table.insert(tableau[2][2], {jeu, forme .. "♂ " .. jeu, sprites[1][jeu], 1})
					table.insert(tableau[3][2], {jeu, forme .. "♀ chromatique " .. jeu, sprites[1][jeu], 1})
					table.insert(tableau[4][2], {jeu, forme .. "♂ chromatique " .. jeu, sprites[1][jeu], 1})
				else
					table.insert(tableau[1][2], {jeu, forme .. jeu, sprites[1][jeu], 2})
					table.insert(tableau[3][2], {jeu, forme .. "chromatique " .. jeu, sprites[1][jeu], 2})
				end
			end
			if sprites[2][jeu] then
				if frame.args['diff-sprites-sexe'] or frame.args['diff-sprites-dos-sexe'] then
					table.insert(tableau[1][3], {jeu, forme .. "♀ dos " .. jeu, sprites[2][jeu], 1})
					table.insert(tableau[2][3], {jeu, forme .. "♂ dos " .. jeu, sprites[2][jeu], 1})
					table.insert(tableau[3][3], {jeu, forme .. "♀ chromatique dos " .. jeu, sprites[2][jeu], 1})
					table.insert(tableau[4][3], {jeu, forme .. "♂ chromatique dos " .. jeu, sprites[2][jeu], 1})
				else
					table.insert(tableau[1][3], {jeu, forme .. "dos " .. jeu, sprites[2][jeu], 2})
					table.insert(tableau[3][3], {jeu, forme .. "chromatique dos " .. jeu, sprites[2][jeu], 2})
				end
			end
		end
	else
		tableau = { { "", {}, {} }, { symbole_chromatique .. "<br />[[Pokémon chromatique|Chromatique]]", {}, {} } }
		for _, jeu in ipairs(jeux) do
			if sprites[1][jeu] then
				table.insert(tableau[1][2], {jeu, forme .. jeu, sprites[1][jeu], 1})
				table.insert(tableau[2][2], {jeu, forme .. "chromatique " .. jeu, sprites[1][jeu], 1})
			end
			if sprites[2][jeu] then
				table.insert(tableau[1][3], {jeu, forme .. "dos " .. jeu, sprites[2][jeu], 1})
				table.insert(tableau[2][3], {jeu, forme .. "chromatique dos " .. jeu, sprites[2][jeu], 1})
			end
		end
	end
	
	-- ENTETE DU TABLEAU et ARTWORK
	local resultat = {'<table class="tableaustandard centre">'}
	local colspanMax = 2 * #jeux + 3
	if frame.args['artwork'] then
		table.insert(resultat, '<tr><th colspan="' .. colspanMax .. '" style="background-color: #C0C0FF;">Artwork officiel</th></tr><tr><td colspan="' .. colspanMax .. '">[[Fichier:' .. mw.text.split(frame:getParent():getTitle(),"/",true)[1])
		if frame.args['artwork-précisions'] then table.insert(resultat, ' (' .. frame.args['artwork-précisions'] .. ')') end
		if frame.args['artwork'] ~= "oui" then table.insert(resultat, '-' .. frame.args['artwork']) end
		table.insert(resultat, '.png|175px]]</td></tr>')
	end
	table.insert(resultat, '<tr>')
	if frame.args['absence-miniature'] == 'non' then
		table.insert(resultat, '<th colspan="' .. colspanMax .. '" style="background-color: #C0C0FF;">Miniatures et sprites de la [[' .. nom_gen .. ' génération]]</th>')
	else
		table.insert(resultat, '<th colspan="' .. colspanMax .. '" style="background-color: #C0C0FF;">Sprites de la [[' .. nom_gen .. ' génération]]</th>')
	end
	table.insert(resultat, '</tr>')
	
	local colonnesFace, colonnesDos
	-- if ressources.tailleTableau(sprites[1]) == 1 then colonnesFace = false else colonnesFace = true end
	-- if ressources.tailleTableau(sprites[2]) == 1 then colonnesDos = false else colonnesDos = true end
	colonnesFace = true
	colonnesDos = true
	if generation ~= 1 then
		table.insert(resultat, '<th')
		if colonnesFace or colonnesDos then table.insert(resultat, ' rowspan="2"') end
		table.insert(resultat, '></th>')
	end
	if frame.args['absence-miniature'] == 'non' then
		table.insert(resultat, '<th')
		if colonnesFace or colonnesDos then table.insert(resultat, ' rowspan="2"') end
		table.insert(resultat, '>Miniature</th>')
	end
	
	local colspanFace = 0
	local colspanDos = 0
	for _, jeuSprite in ipairs(jeux) do
		if sprites[1][jeuSprite] then
			for _2, jeu in ipairs(sprites[1][jeuSprite]) do
				colspanFace = colspanFace + 1
			end
		end
		if sprites[2][jeuSprite] then
			for _2, jeu in ipairs(sprites[2][jeuSprite]) do
				colspanDos = colspanDos + 1
			end
		end
	end
	
	if colspanFace > 0 then
		table.insert(resultat, '<th')
		if colonnesFace then table.insert(resultat, ' colspan="' .. colspanFace .. '"')
		elseif colonnesDos then table.insert(resultat, ' rowspan="2"')
		end
		table.insert(resultat, '>Sprites de face</th>')
	end
	
	if colspanDos > 0 then
		table.insert(resultat, '<th')
		if colonnesDos then table.insert(resultat, ' colspan="' .. colspanDos .. '"')
		elseif colonnesFace then table.insert(resultat, ' rowspan="2"')
		end
		table.insert(resultat, '>Sprites de dos</th>')
	end
	
	if generation == 4 then
		table.insert(resultat, '<th')
		if colonnesFace or colonnesDos then table.insert(resultat, ' rowspan="2"') end
		table.insert(resultat, '>Compagnon' .. frame:expandTemplate{ title = 'Sup', args = { 'HGSS' }} .. '</th>')
	end
	table.insert(resultat, '</tr>')
	if colonnesFace or colonnesDos then
		table.insert(resultat, '<tr>')
		if colonnesFace then
			for _, jeuSprite in ipairs(jeux) do
				if sprites[1][jeuSprite] then
					for _2, jeu in ipairs(sprites[1][jeuSprite]) do
						table.insert(resultat, '<th>' .. frame:expandTemplate{ title = 'Jeu', args = { jeu } } .. '</th>')
					end
				end
			end
		end
		if colonnesDos then
			for _, jeuSprite in ipairs(jeux) do
				if sprites[2][jeuSprite] then
					for _2, jeu in ipairs(sprites[2][jeuSprite]) do
						table.insert(resultat, '<th>' .. frame:expandTemplate{ title = 'Jeu', args = { jeu } } .. '</th>')
					end
				end
			end
		end
		table.insert(resultat, '</tr>')
	end
	
	-- CORPS DU TABLEAU
	local i = 1
	while tableau[i] do
		if generation ~= 1 then table.insert(resultat, '<tr><th>' .. tableau[i][1] .. '</th>') end
		local miniatExtension = "png"
		if generation >= 2 and generation <= 5 then miniatExtension = "gif" end
		if i == 1 and frame.args['absence-miniature'] == 'non' then
			table.insert(resultat, '<td rowspan="')
			if frame.args['diff-sprites-sexe'] or frame.args['diff-sprites-face-sexe'] or frame.args['diff-sprites-dos-sexe'] then table.insert(resultat, 4) else table.insert(resultat, 2) end
			table.insert(resultat, '">[[Fichier:Miniature ' .. num .. ' ' .. forme)
			if frame.args['diff-miniatures-sexe'] then table.insert(resultat, '♀ ') end
			table.insert(resultat, jeux[1] .. '.' .. miniatExtension .. ']]')
			if frame.args['diff-miniatures-sexe'] then
				table.insert(resultat, ' (femelle)<br>[[Fichier:Miniature ' .. num .. ' ' .. forme .. '♂ ' .. jeux[1] .. '.' .. miniatExtension .. ']] (mâle)')
			elseif frame.args['miniature2'] then
				for _, jeu in ipairs(jeux) do
					if string.lower(jeu) == string.lower(frame.args['miniature2']) then table.insert(resultat, ' [[Fichier:Miniature ' .. num .. ' ' .. forme .. jeu .. '.' .. miniatExtension .. ']]') end
					if jeu ~= "OA" then table.insert(resultat, frame:expandTemplate{ title = 'Sup', args = { jeu }}) end
				end
			end
			table.insert(resultat, '</td>')
		end
		if frame.args['shinylock'] and i > #tableau / 2 then
			if i == #tableau / 2 + 1 then
				table.insert(resultat, '<td colspan="' .. colspanMax .. '" rowspan="' .. #tableau / 2 .. '">\'\'Indisponible car ce Pokémon est [[Shiny Lock]]\'\'</td>')
			end
		else
			for _, sprite in ipairs(tableau[i][2]) do
				if i > #tableau / 2 and frame.args['shinylock-' .. string.lower(sprite[1])] then
					if i == #tableau / 2 + 1 then
						table.insert(resultat, '<td rowspan="' .. #tableau / 2 .. '">\'\'Indisponible car ce Pokémon est [[Shiny Lock]]\'\'</td>')
					end
				else
					table.insert(resultat, '<td')
					if colonnesFace then table.insert(resultat, ' colspan="' .. #sprite[3] .. '"') end
					table.insert(resultat, ' rowspan="' .. sprite[4] .. '">[[Fichier:Sprite ' .. num .. ' ' .. sprite[2] .. '.')
					if sprite[1] == "C" or sprite[1] == "E" then table.insert(resultat, 'gif') else table.insert(resultat, 'png') end
					table.insert(resultat, '|class=maxheight100px]]</td>')
				end
			end
			for _, sprite in ipairs(tableau[i][3]) do
				if i > #tableau / 2 and frame.args['shinylock-' .. string.lower(sprite[1])] then
					if i == #tableau / 2 + 1 then
						table.insert(resultat, '<td rowspan="' .. #tableau / 2 .. '">\'\'Indisponible car ce Pokémon est [[Shiny Lock]]\'\'</td>')
					end
				else
					table.insert(resultat, '<td')
					if colonnesDos then table.insert(resultat, ' colspan="' .. #sprite[3] .. '"') end
					table.insert(resultat, ' rowspan="' .. sprite[4] .. '">[[Fichier:Sprite ' .. num .. ' ' .. sprite[2] .. '.png|class=maxheight100px]]</td>') end
				end
				
			-- Compagnons HGSS
			if generation == 4 then
				if i == 1 then table.insert(resultat, '<td rowspan="' .. #tableau / 2 .. '">[[Fichier:Compagnon ' .. num .. ' ' .. forme .. 'ouest HGSS.gif]] [[Fichier:Compagnon ' .. num .. ' ' .. forme .. 'est HGSS.gif]]<br>[[Fichier:Compagnon ' .. num .. ' ' .. forme .. 'sud HGSS.gif]] [[Fichier:Compagnon ' .. num .. ' ' .. forme .. 'nord HGSS.gif]]</td>')
				elseif i == #tableau / 2 + 1 then table.insert(resultat, '<td rowspan="' .. #tableau / 2 .. '">[[Fichier:Compagnon ' .. num .. ' ' .. forme .. 'chromatique ouest HGSS.gif]] [[Fichier:Compagnon ' .. num .. ' ' .. forme .. 'chromatique est HGSS.gif]]<br>[[Fichier:Compagnon ' .. num .. ' ' .. forme .. 'chromatique sud HGSS.gif]] [[Fichier:Compagnon ' .. num .. ' ' .. forme .. 'chromatique nord HGSS.gif]]</td>')
				end
			end
		end
		table.insert(resultat, '</tr>')
		i = i + 1
	end
	
	-- Animations d'attaque 6G
	if generation == 6 then
		if frame.args['animations-attaque'] then
			table.insert(resultat, '<tr><th colspan="' .. colspanMax .. '>Animations d\'attaque</td></tr><tr><td colspan="' .. colspanMax .. '>')
			for i = 1, frame.args['animations-attaque'] do
				table.insert(resultat, '[[Fichier:Sprite ' .. num .. ' ' .. i .. ' XY.png]]')
			end
			table.insert(resultat, '</td></tr>')
		end
	end
	
	table.insert(resultat, '</table>')
	return table.concat(resultat, '')
end

return p