Source: server/src/client-server-shared/def/typedefs.js

'use strict';
/** @name Typedefs */
/**
 * Values for Game state.
 *
 * @typedef {"0_INIT" | "1_SELECT_DRAFT" | "1_SELECT_FACTION" | "1_SELECT_TOURNAMENT" | "2_CHANGE_UP_TO_3_CARDS"} GameStateEnum
 */
/**
 * Values For Deck Mode.
 *
 * @typedef {"faction" | "draft" | "tournament"} DeckMode
 */
/**
 * Faction of a hero
 *
 * @typedef {"orcs" | "humans" | "elves" | "meca" | "none"} Faction
 */
/**
 * popularity attribute of a hero
 *
 * @typedef {"with" | "without" | "any"} Popularity
 */
/**
 * player colors
 *
 * @typedef {"blue" | "red"} Color
 */
/**
 * Possible advanced rules
 *
 * @typedef {"popularity" | "discard"} AdvRule
 */
/**
 * Possible action for a hero
 *
 * @typedef {"recruit" | "deploy" | "move" | "ability" | "dismiss" | "discard" | "replace"} HeroAction
 */
/**
 * Possible position for a hero
 *
 * @typedef {"pile" | "hand" | "discard" | "camp" | "battle_left" | "battle_center" | "battle_right"} HeroPosition
 */
/**
 * Ability Hook
 *
 * @typedef {"AfterDeploy" | "AfterDiscard" | "AfterRecruit" | "BeforeControl" | "BeforeMaintenance" | "BeforeMilitary"} AbilityHook
 */
/**
 * Ability of an Hero
 *
 * @typedef {object} Ability
 * @property {string} name - name of the ability
 * @property {AbilityHook} hook - when ability has an effect
 * @property {boolean} isOptionnal - If true, player will have choice wether to activate ability or not
 * @property {string} desc - Description of the ability effect
 */
/**
 * Hero card
 *
 * @typedef {object} HeroCard
 * @property {number} id - unique ID of hero
 * @property {string} name - name of hero
 * @property {number} cost - cost of hero
 * @property {number} power - power of hero
 * @property {Faction} faction - faction of hero
 * @property {Popularity} popularity - popularity attribute of hero
 * @property {boolean} isDraftable - Is hero available in Draft mode
 * @property {Ability} ability - Ability of a hero
 *
 */
/**
 * Battle Tile object
 *
 * @typedef {object} BattleTile
 * @property {number} id - unique ID of tile
 * @property {string} name - name of tile
 * @property {number} victoryPoints - Number of victory points
 * @property {number} victories/blue - Number of red player victories
 * @property {number} victories/red - Number of blue player victories
 *
 */
/**
 * One game global state
 *
 * @typedef {object} GameGlobalState
 * @property {GameStateEnum} gameState - Current status of the game
 * @property {Array<HeroCard>} allHeroes - Array containing all heroes
 * @property {DeckMode} deckMode - Deck mode of the game
 * @property {Array<AdvRule>} advRules - Array describing the active advandced rules, if any
 * @property {boolean} waitingFor/blue - If true, we are waiting for blue to play
 * @property {boolean} waitingFor/red - If true, we are waiting for red to play
 * @property {Color | 'both'} currentPlayer - Who is current player, can be 'both'
 * @property {Array<BattleTile>} battleTiles/left/ofBlue - Battle tiles on left side of blue player
 * @property {Array<BattleTile>} battleTiles/center/ofBlue - Battle tiles on center of blue player
 * @property {Array<BattleTile>} battleTiles/right/ofBlue - Battle tiles on right side of blue player
 * @property {number} totalFood - Total food available for players to take
 * @property {string} - All heroes in JSON format (read from a JSON file)
 */
/**
 * Hero in game
 *
 * @typedef {object} HeroInGame
 * @property {number} id - unique ID of hero
 * @property {HeroPosition} position - position of hero in game
 * @property {Array<HeroAction>} possibleActions - Actions possible on hero
 *
 */
/**
 * Possible action for a player
 *
 * @typedef {"supply" | "pass"} PlayerAction
 */
/**
 * Game state for one player
 *
 * @typedef {object} PlayerGameState
 * @property {string} name - username of this player
 * @property {Color} color - color of the player
 * @property {Faction|""} faction - Chosen faction (empty if not playing faction mode)
 * @property {Array<number>} draftHeroesIds - Will contain the IDs of the heroes selectable for draft mode
 * @property {Array<HeroInGame>} twelveHeroes - The 12 Heroes used by player
 * @property {number} foodInCamp - Number of food in camp
 * @property {number} foodInBattle/left - Food on left battle field
 * @property {number} foodInBattle/center - Food on center battle field
 * @property {number} foodInBattle/right - Food on right battle field
 * @property {Array<object>} actionsPerformed - During military phase it will contain actions made by player to be replayed by other
 * @property {Array<PlayerAction>} - Actions avalaible for the player
 *
 */
/**
 * Store data
 *
 * @typedef {object} StoreData
 * @property {GameGlobalState} game - The game global state in store
 * @property {PlayerGameState} bluePlayer - The game state for blue player
 * @property {PlayerGameState} redPlayer - The game state for red player
 */

exports.unused = {};