State/stateBoot.js

/**
* Состояние игры, отвечающее за загрузку.
* Загружает ассеты и создает соединение с сервером.  
* Асинхронное состояние.
* @namespace stateBoot
* @see {@link State}
* @see {@link StateManager}
* @property {string} key='boot' Название состояния.
*/

/* exported stateBoot */
var stateBoot = new State('boot', {

	/**
	* Инициализирует показ процесса загрузки.
	* @memberof stateBoot
	*/
	init: function(){

		if(game.inDebugMode){
			console.log('Starting up');		
		}

		this.loadCounter = 0;

		this.loadtextDOM = document.getElementById('loading-text');
		var loading = document.getElementById('loading');
		loading.style.backgroundImage = 'url("assets/loading.gif")';
	},

	/**
	* Загружает спрайты по шаблону `'key1_color_key2', 'path1_color_path2', [width], [height], [frames]`,
	* где `color` это цвета из {@link stateBoot.colors}.
	* @memberof stateBoot
	* @param  {string} key1
	* @param  {string} key2  
	* @param  {string} path1 
	* @param  {string} path2 
	* @param  {number} [width] 
	* @param  {number} [height]
	* @param  {number} [frames]
	*/
	loadAllColors: function(key1, key2, path1, path2, width, height, frames){
		this.colors.forEach(function(color){
			if(width || width === 0){
				game.load.spritesheet(key1 + '_' + color + '_' + key2, path1 + color + '_' + path2, width, height, frames);
			}
			else{				
				game.load.image(key1 + '_' + color + '_' + key2, path1 + color + '_' + path2);
			}

		});
	},

	/**
	* Цвета элементов интерфейса.
	* @type {Array}
	* @memberof stateBoot
	*/
	colors: ['grey', 'orange', 'red'/*, 'blue', 'yellow', 'green'*/],

	/**
	* Загружает ассеты.
	* @memberof stateBoot
	*/
	preload: function(){

		if(game.inDebugMode){
			console.log('Preloading');
		}

		// Лого
		game.load.image('logo', 'assets/logo.png');

		// Фоны
		game.load.image('vignette', 'assets/vignette.png');

		game.load.image('wood_light', 'assets/backgrounds/wood_light.png');
		game.load.image('wood_dark', 'assets/backgrounds/wood_dark.png');
		game.load.image('green', 'assets/backgrounds/green.png');
		game.load.image('black', 'assets/backgrounds/black.png');
		game.load.image('blue', 'assets/backgrounds/blue.png');

		// Для тестов
		game.load.image('testParticle', 'assets/test_particle.png');

		// Углы меню
		this.loadAllColors('panel', 'corners', 'assets/panels/', 'corners.png');

		// Кнопки
		this.loadAllColors('button', 'wide', 'assets/buttons/', 'wide.png', 190, 50, 4);
		this.loadAllColors('button', 'small', 'assets/buttons/', 'small.png', 49, 49, 4);
		this.loadAllColors('button', 'big', 'assets/buttons/', 'big.png', 190, 80, 4);

		this.loadAllColors('button', 'circle', 'assets/buttons/', 'circle.png');
		this.loadAllColors('button', 'radial', 'assets/buttons/', 'radial.png', 40, 38, 2);
		this.loadAllColors('button', 'checkbox', 'assets/buttons/', 'checkbox.png', 48, 38, 2);
		this.loadAllColors('button', 'arrow', 'assets/buttons/', 'arrow.png', 40, 38, 2);

		// Иконки кнопок
		this.colors.push('white');
		this.colors.push('black');
		this.loadAllColors('icon', 'cross', 'assets/icons/', 'cross.png');
		this.loadAllColors('icon', 'checkmark', 'assets/icons/', 'checkmark.png');

		game.load.spritesheet('icon_fullscreen', 'assets/icons/fullscreen.png', 30, 30, 2);
		game.load.image('icon_menu', 'assets/icons/menu.png');
		game.load.image('icon_close', 'assets/icons/close.png');
		game.load.image('icon_account', 'assets/icons/account.png');

		// Кнопки браузера
		this.colors = ['orange', 'red'];
		this.loadAllColors('button', 'largeTop', 'assets/buttons/', 'largeTop.png', 295, 49, 1);
		this.loadAllColors('button', 'largeBottom', 'assets/buttons/', 'largeBottom.png', 295, 49, 1);
		this.loadAllColors('button', 'largeMiddle', 'assets/buttons/', 'largeMiddle.png', 295, 49, 1);

		// Курсоры
		game.load.spritesheet('cursor_orange', 'assets/cursors/orange.png', 128, 128, 3);

		// Фоны полей
		game.load.image('lock', 'assets/icons/lock.png');
		game.load.image('unlock', 'assets/icons/unlock.png');
		game.load.image('skull', 'assets/icons/skull.png');

		// Поля ввода
		game.load.image('field_wide', 'assets/fields/wide.png');

		skinManager.addSkins(skins);
	},

	/**
	* Инициализирует игру и соединение с сервером.
	* @memberof stateBoot
	*/
	create: function(){
		if(game.inDebugMode){
			console.log('Initializing');
		}
		game.initialize();
	},

	/** 
	* Убирает загрузочный текст и экран. 
	* @memberof stateBoot 
	*/ 
	shutdown: function(){ 
		if(game.inDebugMode){
			console.log('Connection ready');
		}
		ui.layers.loadLabels();
		this.loadtextDOM.innerHTML = ''; 
		document.getElementById('loading').style.display = 'none';
		if(game.inDebugMode){
			console.log('Game ready');
		}
	},

	/**
	* Обновляет загрузочный текст.
	* @param {string} text загрузочный текст
	* @memberof stateBoot
	*/
	updateLoadText: function(text){
		if(this.loadCounter > 30){
			this.loadCounter = 0;
		}
		for(var i = 0; i < this.loadCounter; i++){
			text += '.';
		}
		this.loadtextDOM.innerHTML = text;
		this.loadCounter++;
	},

	/**
	* Выводит текст загрузки.
	* @memberof stateBoot
	*/
	loadUpdate: function(){
		this.updateLoadText('loading assets');
	},

	/**
	* Выводит текст загрузки.
	* @memberof stateBoot
	*/
	update: function(){
		this.updateLoadText('connecting to server');
	}
});