Jump to content

Module:GameData

From Creopedia

This documentation is transcluded from Module:GameData/doc.

This module is used by other modules to load game data.

The interface and methods are defined in this module. All the game submodules (e.g. Module:GameData/EvoCreo2) MUST implement all of the methods.

Game definitions: Module:GameData/Games.json

Game Module
EvoCreo 2 Module:GameData/EvoCreo2
EvoCreo Module:GameData/EvoCreo

require( 'strict' )

local games = mw.loadJsonData( 'Module:GameData/Games.json' )

local p = {}

--- Get the MediaWiki module page name for a game
---
--- @param gameId string
--- @return string
local function loadModule( gameId )
	return require( 'Module:GameData/' .. p.getGame( gameId ).name:gsub( ' ', '' ) )
end

--- Helper function to access the data for a game
---
--- @param funcName string
--- @param name string
--- @param gameId string|nil
--- @return table
local function getData( funcName, name, gameId )
	if type( gameId ) == 'string' then
		return loadModule( gameId )[funcName]( name )
	end

	local data = {}

	for _, game in pairs( games ) do
		data[game.id] = loadModule( game.id )[funcName]( name )
	end

	return data
end

--- Get the games definition
---
--- @return table
function p.getGames()
	return games
end

--- Get the game definition
---
--- @param gameId string
--- @return table
function p.getGame( gameId )
	for _, game in pairs( games ) do
		if game.id == gameId then
			return game
		end
	end

	error( string.format( 'Game not found: %s', gameId ) )
end

---------------------------------------------
--- Interface for submodules to use
--- Submodules must implement these functions
---------------------------------------------

--- Get the Creo data for a game
---
--- @param name string
--- @param gameId string|nil
--- @return table
function p.getCreo( name, gameId )
	return getData( 'getCreo', name, gameId )
end

--- Get the Move data for a game
---
--- @param name string
--- @param gameId string|nil
--- @return table
function p.getMove( name, gameId )
	return getData( 'getMove', name, gameId )
end

--- Get the Learnset data for a game
---
--- @param name string
--- @param gameId string|nil
--- @return table
function p.getLearnset( name, gameId )
	return getData( 'getLearnset', name, gameId )
end

--- Get the Item data for a game
---
--- @param name string
--- @param gameId string|nil
--- @return table
function p.getItem( name, gameId )
	return getData( 'getItem', name, gameId )
end

--- Get the Ability data for a game
---
--- @param name string
--- @param gameId string|nil
--- @return table
function p.getAbility( name, gameId )
	return getData( 'getAbility', name, gameId )
end

--- Get the Trait data for a game
---
--- @param name string
--- @param gameId string|nil
--- @return table
function p.getTrait( name, gameId )
	return getData( 'getTrait', name, gameId )
end

return p