[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