[Orxonox-commit 3753] r8433 - code/branches/pickup/src/modules/pickup/items

ssgier at orxonox.net ssgier at orxonox.net
Mon May 9 15:58:48 CEST 2011


Author: ssgier
Date: 2011-05-09 15:58:48 +0200 (Mon, 09 May 2011)
New Revision: 8433

Modified:
   code/branches/pickup/src/modules/pickup/items/ShrinkPickup.cc
   code/branches/pickup/src/modules/pickup/items/ShrinkPickup.h
Log:
working on continuous shrinking

Modified: code/branches/pickup/src/modules/pickup/items/ShrinkPickup.cc
===================================================================
--- code/branches/pickup/src/modules/pickup/items/ShrinkPickup.cc	2011-05-09 13:56:39 UTC (rev 8432)
+++ code/branches/pickup/src/modules/pickup/items/ShrinkPickup.cc	2011-05-09 13:58:48 UTC (rev 8433)
@@ -14,11 +14,15 @@
 {
     CreateFactory(ShrinkPickup);
 
-    ShrinkPickup::ShrinkPickup(BaseObject* creator) : Pickup(creator)
+	ShrinkPickup::ShrinkPickup(BaseObject* creator) : Pickup(creator)
     {
         RegisterObject(ShrinkPickup);
 
         this->initialize();
+		shrinkFactor_ = 5.0;
+		duration_ = 5.0;
+		shrinkDelay_ = 1.0;
+		isActive_ = false;
     }
 
     ShrinkPickup::~ShrinkPickup()
@@ -33,6 +37,8 @@
 
     void ShrinkPickup::changedUsed(void)
 	{
+		int i;	
+
 		SUPER(ShrinkPickup, changedUsed);
 
         if(this->isUsed())
@@ -44,12 +50,23 @@
 			COUT(0) << "shrinking..." << endl;
 			//this->pawn->setScale3D(this->pawn->getScale3D() / 2.0);
 			std::set<WorldEntity*> set = this->pawn->getAttachedObjects();
+			
+			i = 0;
 			for(std::set<WorldEntity*>::iterator it = set.begin(); it != set.end(); it++)
 			{
-				(*it)->setScale((*it)->getScale() / 5.0);
-				(*it)->setPosition((*it)->getPosition() / 5.0);
+				defaultScales_.push_back((*it)->getScale());
+				actualScales_.push_back((*it)->getScale());
+				defaultPositions_.push_back((*it)->getPosition());
+				actualPositions_.push_back((*it)->getPosition());
+				//(*it)->setScale((*it)->getScale() / 5.0);
+				//(*it)->setPosition((*it)->getPosition() / 5.0);
 			}
-			
+			size_ = defaultScales_.size();
+			for(i = 0; i < size_; i++)
+			{
+				smallScales_.push_back(defaultScales_.at(i) / shrinkFactor_);
+			}
+			isActive_ = true;
 			durationTimer.setTimer(10, false, createExecutor(createFunctor(&ShrinkPickup::terminate, this)));
         }
 		else
@@ -58,6 +75,45 @@
         }
 	}
 
+	void ShrinkPickup::tick(float dt)
+	{
+		double temp;
+		int i;
+		double k = dt / shrinkDelay_;
+		if(isActive_)
+		{
+			for(i = 0; i < size_; i++)
+			{
+				temp = actualScales_.at(i);
+				if(temp > smallScales_.at(i))
+				{
+					actualScales_.erase(i)
+					actualScales_.insert(i, temp - (temp - smallScales_.at(i)) * k);
+				}
+				/*temp = actual;
+				if(temp > smallScales[i])
+				{
+					actualScales[i] -= (actualScales[i] - smallScales[i]) * k;
+				}*/
+
+			}
+
+			i = 0;
+			
+			std::set<WorldEntity*> set = this->pawn->getAttachedObjects();
+			for(std::set<WorldEntity*>::iterator it = set.begin(); it != set.end(); it++)
+			{
+				//defaultScales.push_back((*it)->getScale());
+				//actualScales.push_back((*it)->getScale());
+				//defaultPositions.push_back((*it)->getPosition());
+				//actualPositions.push_back((*it)->getPosition());
+				//(*it)->setScale((*it)->getScale() *0.99);
+				(*it)->setScale(actualScales_.at(i));
+				//(*it)->setPosition((*it)->getPosition() / 5.0);
+			}
+		}
+	}
+
 	void ShrinkPickup::terminate(void)
 	{
 		//this->pawn->setScale3D(this->pawn->getScale3D() * 5.0);

Modified: code/branches/pickup/src/modules/pickup/items/ShrinkPickup.h
===================================================================
--- code/branches/pickup/src/modules/pickup/items/ShrinkPickup.h	2011-05-09 13:56:39 UTC (rev 8432)
+++ code/branches/pickup/src/modules/pickup/items/ShrinkPickup.h	2011-05-09 13:58:48 UTC (rev 8433)
@@ -24,26 +24,28 @@
             virtual ~ShrinkPickup(); //!< Destructor.
             virtual void changedUsed(void); //!< Is called when the pickup has transited from used to unused or the other way around.
 			virtual void clone(OrxonoxClass*& item); //!< Creates a duplicate of the input OrxonoxClass.
+			void tick(float dt);
 
         private:
             void initialize(void);
-			const float duration;			//determines how long the pickup will be active
-    		const float shrinkFactor;		//shrink factor of the space ship
-			const float shrinkDelay;		//how long it takes to shrink to the final size
-			double factorPerCall;
-			bool isTerminating;
-			vector<float> defaultScales;
-			vector<float> smallScales;
-			vector<float> actualScales;
-			vector<float> defaultPositions;
-			vector<float> smallPositions;
-			vector<float> actualPositions;
+			
+			float duration_;			//!< determines how long the pickup will be active
+    		float shrinkFactor_;		//shrink factor of the space ship
+			float shrinkDelay_;		//how long it takes to shrink to the final size
+			bool isActive_;
+			bool isTerminating_;
+			int size_;
+			std::vector<float> defaultScales_;
+			std::vector<float> smallScales_;
+			std::vector<float> actualScales_;
+			std::vector<Vector3> defaultPositions_;
+			std::vector<Vector3> smallPositions_;
+			std::vector<Vector3> actualPositions_;
 			Pawn* carrierToPawnHelper(void);
 			Pawn* pawn;
 			Timer durationTimer;
 			void terminate(void);
 
-			
     };
 }
 




More information about the Orxonox-commit mailing list