State/State.js

//@include:StateManager

/**
* Состояние игры. 
* Предоставляет методы, выполняющиеся при апдейте, ресайзе, а также
* при переключении между состояниями игры.  
* Основные методы (используются во всех состояниях): `{@link State#update|update}, {@link State#preRender|preRender}, {@link State#render|render}, {@link State#create|create}, {@link State#shutdown|shutdown}, {@link State#postResize|postResize}, {@link State#applySkin|applySkin}`  
* Методы, связанные с паузой симуляции игры (используются во всех состояниях): `{@link State#paused|paused}, {@link State#resumed|resumed}, {@link State#postResumed|postResumed}`  
* Второстепенные методы (используются в асинхронных состояниях): `{@link State#loadUpdate|loadUpdate}, {@link State#loadRender|loadRender}, {@link State#preload|preload}, {@link State#init|init}`  
* Неиспользуемые методы (присутствуют, но не вызываются): `resize, pauseUpdate`  
* Существующие состояния и что они делают расписаны в разделе Namespaces (state*Key*).  
* @class
* @param {string} key    название состояния
* @param {object} events методы и свойства состояния
* @extends {Phaser.State}
* @see  {@link http://phaser.io/docs/2.6.2/Phaser.State.html}
*/
var State = function(key, events){
	Phaser.State.call(this);

	/**
	* Название состояния.
	* @type {string}
	*/
	this.key = key;
	
	for(var e in events){
		if(!events.hasOwnProperty(e)){
			continue;
		}
		var event = events[e]; 
		if(typeof this['_' + e] == 'function'){
			this['_' + e] = event;
		}
		else{
			this[e] = event;
		}
	}
};

extend(State, Phaser.State);

// Методы перенаправляют вызовы из асинхронного состояния в синхронное
State.prototype.render = function(){
	if(game.state.current == game.state.currentSync){
		this._render();
	}
	else{
		game.state.getCurrent()._render();
	}
};
State.prototype._render = function(){};

State.prototype.preRender = function(){
	if(game.state.current == game.state.currentSync){
		this._preRender();
	}
	else{
		game.state.getCurrent()._preRender();
	}
};
State.prototype._preRender = function(){};

State.prototype.update = function(){
	if(game.state.current == game.state.currentSync){
		this._update();
	}
	else{
		game.state.getCurrent()._update();
	}
};
State.prototype._update = function(){};

State.prototype.paused = function(){
	if(game.state.current == game.state.currentSync){
		this._paused();
	}
	else{
		game.state.getCurrent()._paused();
	}
};
State.prototype._paused = function(){};

State.prototype.resumed = function(){
	if(game.state.current == game.state.currentSync){
		this._resumed();
	}
	else{
		game.state.getCurrent()._resumed();
	}
};
State.prototype._resumed = function(){};

// Дополнительные методы, не пресутствовавшие в Phaser.State
State.prototype.postResize = function(){};
State.prototype.postResumed = function(){};
State.prototype.applySkin = function(){};

//@include:stateBoot
//@include:statePlay
//@include:stateMenu
//@include:stateQueue
//@include:stateCredits


/**
* Во всех состояниях выполняется сразу после переключения в состояние (до preload).
* @method State#init
* @abstract
*/

/**
* В асинхронных состояниях выполняется после init и начинает загрузку ассетов.
* В синхронных состояниях выполняется сразу после переключения в состояние (после вызова init).
* @method State#preload
* @abstract
*/

/**
* В асинхронных состояниях выполняется после загрузки всех элементов в preload.  
* В синхронных состояниях выполняется сразу после переключения в состояние (после вызова init и preload).
* @method State#create
* @abstract
*/

/**
* Во всех состояниях выполняется сразу после переключения на другое состояние (до init нового состояния).
* @method State#shutdown
* @abstract
*/


/**
* Во всех состояниях выполняется, когда симуляция игры была поставлена на паузу.
* @method State#paused
* @abstract
*/

/**
* Во всех состояниях выполняется, когда симуляция игры была снята с паузы.
* @method State#resumed
* @abstract
*/

/**
* Во всех состояниях выполняется через секунду после того, как симуляция игры была снята с паузы.
* @method State#postResumed
* @abstract
*/


/**
* Во всех состояниях выполняется после окончания изменения размера игры.
* @method State#postResize
* @abstract
*/


/**
* Во всех состояниях выполняется после update, но перед render.
* @method State#preRender
* @abstract
*/

/**
* Во всех состояниях выполняется после того, как все элементы игры были выведены на экран.
* @method State#render
* @abstract
*/


/**
* В асинхронных состояниях выполняется во время загрузки элементов в preload после loadUpdate.
* В синхронных состояниях не выполняется.
* @method State#loadRender
* @abstract
*/

/**
* В асинхронных состояниях выполняется во время загрузки элементов в preload.
* В синхронных состояниях не выполняется.
* @method State#loadUpdate
* @abstract
*/


/**
* Выпоняется каждый кадр игры между preUpdate и postUpdate всех элементов игры
* как в синхронных, так и в асинхронных состояниях.
* @method State#update
* @abstract
*/

/**
* Во всех состояниях выполняется после смены скина.
* @method State#applySkin
* @abstract
*/