Ivan Safrin 13 лет назад
Родитель
Сommit
29ca579b00
2 измененных файлов с 10 добавлено и 8 удалено
  1. 2 2
      Core/Contents/Include/PolyTween.h
  2. 8 6
      Core/Contents/Source/PolyTween.cpp

+ 2 - 2
Core/Contents/Include/PolyTween.h

@@ -47,7 +47,7 @@ namespace Polycode {
 		* @param time The duration of the tween.
 		* @param repeat If true, this tween will repeat over and over.
 		*/
-		Tween(Number *target, int easeType, Number startVal, Number endVal, Number time, bool repeat=false, bool deleteOnComplete=false);
+		Tween(Number *target, int easeType, Number startVal, Number endVal, Number time, bool repeat=false, bool deleteOnComplete=false, Number waitTime = 0.0);
 		virtual ~Tween();
 		
 		void handleEvent(Event *event);
@@ -105,7 +105,7 @@ namespace Polycode {
 
 	protected:
 	
-		
+		Number waitTime;
 		int easeType;
 		bool complete;
 		Number endVal;

+ 8 - 6
Core/Contents/Source/PolyTween.cpp

@@ -31,7 +31,8 @@
 
 using namespace Polycode;
 
-Tween::	Tween(Number *target, int easeType, Number startVal, Number endVal, Number time, bool repeat, bool deleteOnComplete) : EventDispatcher() {
+Tween::	Tween(Number *target, int easeType, Number startVal, Number endVal, Number time, bool repeat, bool deleteOnComplete, Number waitTime) : EventDispatcher() {
+	this->waitTime = waitTime;
 	this->deleteOnComplete = deleteOnComplete;
 	targetVal = target;
 	this->repeat = repeat;
@@ -42,7 +43,8 @@ Tween::	Tween(Number *target, int easeType, Number startVal, Number endVal, Numb
 	localTargetVal = startVal;
 	this->endTime = time;
 	tweenTime = 0;
-	*targetVal = startVal;
+	if(waitTime == 0.0)
+		*targetVal = startVal;
 	tweenTimer = new Timer(true, 1);
 	tweenTimer->addEventListener(this, 0);
 	complete = false;
@@ -77,7 +79,7 @@ void Tween::doOnComplete() {
 }
 
 void Tween::handleEvent(Event *event) {
-	if(tweenTime >= endTime) {
+	if(tweenTime >= endTime+waitTime) {
 		if(repeat){
 			Reset();
 			updateCustomTween();			
@@ -88,7 +90,7 @@ void Tween::handleEvent(Event *event) {
 		return;
 	}
 	
-	if(targetVal != NULL) {
+	if(targetVal != NULL && tweenTime > waitTime) {
 		localTargetVal = interpolateTween();
 		*targetVal = localTargetVal;
 	}
@@ -102,7 +104,7 @@ void Tween::Reset() {
 }
 
 Number Tween::interpolateTween() {
-	Number t = tweenTime;
+	Number t = tweenTime-waitTime;
 	
 	switch(easeType) {
 		case EASE_IN_QUAD:
@@ -216,7 +218,7 @@ Number Tween::interpolateTween() {
 		default:
 		case EASE_NONE:
 			// return c*t/d + b;
-			return cVal*tweenTime/endTime+startVal;
+			return cVal*t/endTime+startVal;
 			break;
 	}
 }