Card/CardDelayedTweens.js

/**
* Сохраняет информацию о твине, который нужно будет запустить.
* @param  {string} key           уникальное имя информации
* @param  {arguments} args       аргументы, которые будут переданы функции запуска твина
* @param  {number} durationIndex индекс длительности твина в `args`. 
*                                Будет изменено непосредственно в переданных аргументах.
* @param  {number} delayIndex    индекс задержки твина в `args`. 
*                                Будет обнулено непосредственно в переданных аргументах.
*/
Card.prototype._saveDelayedTweenInfo = function(key, args, durationIndex, delayIndex){
	var startTime = Date.now() + args[delayIndex];

	// Обнуляем задержку
	args[delayIndex] = 0;

	// Запоминаем настройки движения
	this._delayedTweenInfos[key] = {
		startTime: startTime,
		args: args,
		durationIndex: durationIndex
	};

	if(this.inDebugMode){
		console.log('Card: Saved', key, 'info', this.id, this._delayedTweenInfos[key]);
	}
};

/**
* Удаляет информацию о твине.
* @param  {string} key уникальное имя информации
*/
Card.prototype._removeDelayedTweenInfo = function(key){
	if(this._delayedTweenInfos[key]){
		delete this._delayedTweenInfos[key];
	}
};

/**
* Запускает функцию, запускающую твин с сохраненными аргументами.
* @param  {string}   key 	уникальное имя информации о твине
* @param  {function} func 	функция, которая будет вызывана
*/
Card.prototype._tryStartDelayedTween = function(key, func){
	var info = this._delayedTweenInfos[key];
	if(!info || info.startTime > Date.now()){
		return;
	}

	info.args[info.durationIndex] -= Date.now() - info.startTime;
	delete this._delayedTweenInfos[key];
	func.apply(this, info.args);
	if(this.inDebugMode){
		console.log('Card: Used', key, 'info', this.id, info);
	}
};