Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/pickup/src/modules/pickup/items/ShrinkPickup.cc @ 8433

Last change on this file since 8433 was 8433, checked in by ssgier, 13 years ago

working on continuous shrinking

File size: 3.8 KB
Line 
1#include "ShrinkPickup.h"
2
3#include <sstream>
4#include "core/CoreIncludes.h"
5#include "core/XMLPort.h"
6
7#include "pickup/PickupIdentifier.h"
8#include "worldentities/pawns/Pawn.h"
9
10#include "weaponsystem/WeaponSlot.h"
11#include "weaponsystem/Weapon.h"
12
13namespace orxonox
14{
15    CreateFactory(ShrinkPickup);
16
17        ShrinkPickup::ShrinkPickup(BaseObject* creator) : Pickup(creator)
18    {
19        RegisterObject(ShrinkPickup);
20
21        this->initialize();
22                shrinkFactor_ = 5.0;
23                duration_ = 5.0;
24                shrinkDelay_ = 1.0;
25                isActive_ = false;
26    }
27
28    ShrinkPickup::~ShrinkPickup()
29    {
30
31    }
32
33        void ShrinkPickup::initialize(void)
34        {
35                this->addTarget(ClassIdentifier<Pawn>::getIdentifier());
36        }
37
38    void ShrinkPickup::changedUsed(void)
39        {
40                int i; 
41
42                SUPER(ShrinkPickup, changedUsed);
43
44        if(this->isUsed())
45        {
46            this->pawn = this->carrierToPawnHelper();
47            if(pawn == NULL) // If the PickupCarrier is no Pawn, then this pickup is useless and therefore is destroyed.
48                this->Pickupable::destroy();
49       
50                        COUT(0) << "shrinking..." << endl;
51                        //this->pawn->setScale3D(this->pawn->getScale3D() / 2.0);
52                        std::set<WorldEntity*> set = this->pawn->getAttachedObjects();
53                       
54                        i = 0;
55                        for(std::set<WorldEntity*>::iterator it = set.begin(); it != set.end(); it++)
56                        {
57                                defaultScales_.push_back((*it)->getScale());
58                                actualScales_.push_back((*it)->getScale());
59                                defaultPositions_.push_back((*it)->getPosition());
60                                actualPositions_.push_back((*it)->getPosition());
61                                //(*it)->setScale((*it)->getScale() / 5.0);
62                                //(*it)->setPosition((*it)->getPosition() / 5.0);
63                        }
64                        size_ = defaultScales_.size();
65                        for(i = 0; i < size_; i++)
66                        {
67                                smallScales_.push_back(defaultScales_.at(i) / shrinkFactor_);
68                        }
69                        isActive_ = true;
70                        durationTimer.setTimer(10, false, createExecutor(createFunctor(&ShrinkPickup::terminate, this)));
71        }
72                else
73        {
74                        this->Pickupable::destroy();
75        }
76        }
77
78        void ShrinkPickup::tick(float dt)
79        {
80                double temp;
81                int i;
82                double k = dt / shrinkDelay_;
83                if(isActive_)
84                {
85                        for(i = 0; i < size_; i++)
86                        {
87                                temp = actualScales_.at(i);
88                                if(temp > smallScales_.at(i))
89                                {
90                                        actualScales_.erase(i)
91                                        actualScales_.insert(i, temp - (temp - smallScales_.at(i)) * k);
92                                }
93                                /*temp = actual;
94                                if(temp > smallScales[i])
95                                {
96                                        actualScales[i] -= (actualScales[i] - smallScales[i]) * k;
97                                }*/
98
99                        }
100
101                        i = 0;
102                       
103                        std::set<WorldEntity*> set = this->pawn->getAttachedObjects();
104                        for(std::set<WorldEntity*>::iterator it = set.begin(); it != set.end(); it++)
105                        {
106                                //defaultScales.push_back((*it)->getScale());
107                                //actualScales.push_back((*it)->getScale());
108                                //defaultPositions.push_back((*it)->getPosition());
109                                //actualPositions.push_back((*it)->getPosition());
110                                //(*it)->setScale((*it)->getScale() *0.99);
111                                (*it)->setScale(actualScales_.at(i));
112                                //(*it)->setPosition((*it)->getPosition() / 5.0);
113                        }
114                }
115        }
116
117        void ShrinkPickup::terminate(void)
118        {
119                //this->pawn->setScale3D(this->pawn->getScale3D() * 5.0);
120
121                std::set<WorldEntity*> set = this->pawn->getAttachedObjects();
122                for(std::set<WorldEntity*>::iterator it = set.begin(); it != set.end(); it++)
123                {
124                        (*it)->setScale((*it)->getScale() * 5.0);
125                }               
126                setUsed(false);
127        }
128
129    Pawn* ShrinkPickup::carrierToPawnHelper(void)
130    {
131        PickupCarrier* carrier = this->getCarrier();
132        Pawn* pawn = dynamic_cast<Pawn*>(carrier);
133
134        if(pawn == NULL)
135        {
136            COUT(1) << "Invalid PickupCarrier in ShrinkPickup." << std::endl;
137        }
138
139        return pawn;
140    }
141
142        /**
143    @brief
144        Creates a duplicate of the input OrxonoxClass.
145    @param item
146        A pointer to the Orxonox class.
147    */
148    void ShrinkPickup::clone(OrxonoxClass*& item)
149    {
150        if(item == NULL)
151            item = new ShrinkPickup(this);
152
153        SUPER(ShrinkPickup, clone, item);
154    }
155}
Note: See TracBrowser for help on using the repository browser.