/*
* Энумераторы и фиктивные типы данных для JSDoc.
*/
/*jshint unused:false*/
// ENUMS
/**
* В какой момент должна быть поднята карта.
* @readonly
* @enum {number}
* @global
*/
var BRING_TO_TOP_ON = {
/** Никогда. */
NEVER: 0,
/** При инициализации (до задержки). */
INIT: 1,
/** При старте (после задержки). */
START: 2,
/** При старте (после задержки), все карты в поле поднимаются наверх. */
START_ALL: 3,
/** В конце движения. */
END: 4,
/** В конце движения, все карты в поле поднимаются наверх. */
END_ALL: 5
};
/**
* Тип канала {@link ActionHandler}.
* Влияет на то, будет ли поставлен или снят флаг {@link ConnectionManager#serverWaiting}.
* @readonly
* @enum {number}
* @global
*/
var CHANNEL_TYPE = {
/**
* Сервер ожидает ответа.
* По окончании действия серверу будет отправлен пустой ответ.
* Для отмены отправки ответа у сообщения должен стоять флаг `noResponse`.
* В случае присутствия этого флага, канал поведет себя как при типе `INTERRUPT`.
*/
RESPOND: 0,
/**
* Сервер не ожидает ответа как от этого действия, так и от предыдущего.
* При получении такого действия будет отменен ответ по окончании предыдущих действий.
* Для избежания отмены ответа у сообщения должен стоять флаг `noInterrupt`.
*/
INTERRUPT: 1,
/**
* Сервер ожидает действия игрока.
* Специальный тип канала, не имеет своих действий и всегда ведет к выполнению {@link ActionHandler#handlePossibleActions}.
* Такое действие всегда отменяет ответ по окончании предыдущих действий.
*/
USER_INVOLVED: 2,
/**
* Действия этого канала не влияют на другие действия.
* Используется для паралельных действий (например, подсветка карт противников).
*/
NO_ACTION: 3
};
// EXTERNALS
/**
* HTML5 2D WebGL graphics library with canvas fallback. Используется {@link external:Phaser|Phaser'ом} для рендеринга.
* @external PIXI
* @version 2.2.9
* @see {@link https://phaser.io/docs/2.6.2/PIXI.html}
* @see {@link http://www.pixijs.com/}
*/
/**
* HTML5 game framework. Использует {@link external:PIXI|PIXI} для рендеринга.
* 
* @external Phaser
* @version 2.6.2
* @see {@link https://phaser.io/docs/2.6.2/index}
*/
// TYPE DEFS
/**
* Объекты классов `Phaser.Group`, `Phaser.Sprite`, `Phaser.Text`, `Phaser.UI.Button` и все производные от них классы.
* @typedef {object} DisplayObject
* @see {@link http://phaser.io/docs/2.6.2/global.html#DisplayObject|DisplayObject}
*/
// DisplayObject
/**
* Информация о карте.
* @typedef {object} CardInfo
* @property {string} cid id карты
* @property {string} [pid/field] id игрока/поля
* @property {(number|null)} [suit] масть карты
* @property {number} [value] значение карты
*/
// CardInfo
/**
* Информация о действии переданного от сервера.
* @typedef {object} ActionInfo
* @property {string} [type] тип действия
* @property {string} [cid] id карты
* @property {string} [pid] id игрока
* @property {string} [field] id поля
* @property {number} [suit] масть карты
* @property {number} [value] значение карты
*/
// Action
// PHASER CLASSES
/**
* Класс из {@link external:Phaser|Phaser}.
* Группа игровых элементов. Позволяет размещать и контролировать множество элементов.
* Должна быть добавлена в {@link UI.Layers} для корректного отображения по вертикали.
* Далее описаны полезные свойства и методы. По ссылке ниже можно найти полную документацию.
* @class external:Phaser.Group
* @param {Phaser.Game} game игра
* @param {DisplayObject|null} [parent=(game.world)] родительская группа
* @param {string} [name='group'] имя группы
* @see {@link https://phaser.io/docs/2.6.2/Phaser.Group.html|Phaser.Group полная документация}
*/
/**
* Позиция по горизонтали.
* @name external:Phaser.Group#x
* @type {number}
*/
/**
* Позиция по вертикали.
* @name external:Phaser.Group#y
* @type {number}
*/
/**
* Прозрачность.
* @name external:Phaser.Group#alpha
* @type {number}
*/
/**
* Поворот в градусах.
* @name external:Phaser.Group#angle
* @type {number}
*/
/**
* Поворот в радианах.
* @name external:Phaser.Group#rotation
* @type {number}
*/
/**
* Отрисовывается ли элемент игрой.
* @name external:Phaser.Group#visible
* @type {boolean}
*/
/**
* Элементы, входящие в группу.
* @name external:Phaser.Group#children
* @type {DisplayObject[]}
*/
/**
* Кол-во элементов, входящих в группу.
* @name external:Phaser.Group#length
* @readOnly
* @type {number}
*/
/**
* Имя группы.
* @name external:Phaser.Group#name
* @type {string}
*/
/**
* Добавляет элемент в группу.
* @function external:Phaser.Group#add
*/
/**
* Убирает элемент из группы.
* @function external:Phaser.Group#remove
*/
/**
* Поднимает элемент группы наверх.
* @function external:Phaser.Group#bringToTop
*/
/**
* Устанавливает индекс элемента группы по вертикали.
* @function external:Phaser.Group#setChildIndex
*/
/**
* Выполняет callback для каждого элемента группы.
* @function external:Phaser.Group#forEach
*/
/**
* Возвращает элемент группы с указанным именем.
* @function external:Phaser.Group#getByName
*/
/**
* Обновляет все элементы, входящие в группу.
* @function external:Phaser.Group#update
*/
/**
* Уничтожает группу, убирая все элементы из нее, опционально уничтожая их тоже.
* @function external:Phaser.Group#destroy
*/
/**
* Удаляет все элементы из группы, опционально уничтожая их.
* @function external:Phaser.Group#removeAll
*/