Forráskód Böngészése

Added a way to remove tweens based on their target

Ivan Safrin 10 éve
szülő
commit
d8453c220f

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

@@ -54,6 +54,8 @@ namespace Polycode {
 		Number interpolateTween();
 		virtual void updateCustomTween() {}
 		void doOnComplete();
+        
+        Number *getTarget();
 		
 		/**
 		* Pauses and resumes the tween.

+ 1 - 0
Core/Contents/Include/PolyTweenManager.h

@@ -36,6 +36,7 @@ namespace Polycode {
 			void addTween(Tween *tween);
 			void Update(Number elapsed);
 			void removeTween(Tween *tween);
+            void removeTweensForTarget(Number *target);
 		
 		private:
 					

+ 4 - 0
Core/Contents/Source/PolyTween.cpp

@@ -52,6 +52,10 @@ Tween::	Tween(Number *target, int easeType, Number startVal, Number endVal, Numb
 	CoreServices::getInstance()->getTweenManager()->addTween(this);
 }
 
+Number *Tween::getTarget() {
+    return targetVal;
+}
+
 void Tween::Pause(bool pauseVal) {
 	paused = pauseVal;
 }

+ 22 - 0
Core/Contents/Source/PolyTweenManager.cpp

@@ -46,6 +46,28 @@ void TweenManager::removeTween(Tween *tween) {
 	}
 }
 
+void TweenManager::removeTweensForTarget(Number *target) {
+    std::vector<Tween*>::iterator iter = tweens.begin();
+    while (iter != tweens.end()) {
+        bool mustRemove = false;
+        if(target == (*iter)->getTarget()) {
+            mustRemove = true;
+            (*iter)->doOnComplete();
+                
+            if((*iter)->deleteOnComplete) {
+                Tween *tween = (*iter);
+                delete tween;
+            }
+        }
+        
+        if(mustRemove) {
+            iter = tweens.erase(iter);
+        } else {	
+            ++iter;						
+        }
+    }
+}
+
 void TweenManager::Update(Number elapsed) {
 
 	std::vector<Tween*>::iterator iter = tweens.begin();