Engine.TweenGroup = class
{

	constructor()
	{
		this.tweenPool = new Engine.ObjectPool(Engine.SimpleTween);
		this.activeTweens = [];//new List<SimpleTween>();
		this.timeScale = 1.0;
	}

	get timeScale()
	{
		return this._timeScale;
	}

	set timeScale(value)
	{
		this._timeScale = value;
		for(var tween of this.activeTweens)
		{
			tween.timeScale = this._timeScale;
		}
	}

	clear()
	{
		for(var tween of this.activeTweens)
		{
			tween.onStop = null;
			tween.stop();
			tween.onFinish = null;
			tween.onUpdate = null;
			this.tweenPool.returnObject(tween);
		}
		this.activeTweens.length = 0;
	}

	addNew(onUpdate /*SimpleTweenUpdate*/, onFinish /*SimpleTweenFinish*/, tweenFunc /*SimpleTween.TweenFunction*/, start /*float*/, end /*float*/, time /*float*/, toInt /*bool*/)
	{
		var tween = this.tweenPool.getNextObject();
		this.activeTweens.push(tween);
		tween.init(onUpdate, tweenFunc, start, end, time, toInt);
		tween.timeScale = this.timeScale;
		tween.onFinish = () =>  
		{
			tween.onFinish = null;
			tween.onUpdate = null;
			
			this.activeTweens.remove(tween);
			
			this.tweenPool.returnObject(tween);
			
			if (onFinish != null) onFinish();
		};
		
		tween.onStop = () =>
		{
			this.activeTweens.remove(tween);
			this.tweenPool.returnObject(tween);
		}
		
		return tween;
	}

}