Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
May 16, 2011, 3:49:59 PM (14 years ago)
Author:
ssgier
Message:

finished code for shrinking and growing

Location:
code/branches/pickup/src/modules/pickup/items
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • code/branches/pickup/src/modules/pickup/items/ShrinkPickup.cc

    r8486 r8489  
     1/*
     2 *   ORXONOX - the hottest 3D action shooter ever to exist
     3 *                    > www.orxonox.net <
     4 *
     5 *
     6 *   License notice:
     7 *
     8 *   This program is free software; you can redistribute it and/or
     9 *   modify it under the terms of the GNU General Public License
     10 *   as published by the Free Software Foundation; either version 2
     11 *   of the License, or (at your option) any later version.
     12 *
     13 *   This program is distributed in the hope that it will be useful,
     14 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
     15 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     16 *   GNU General Public License for more details.
     17 *
     18 *   You should have received a copy of the GNU General Public License
     19 *   along with this program; if not, write to the Free Software
     20 *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
     21 *
     22 *   Author:
     23 *      Damian 'Mozork' Frick
     24 *   Co-authors:
     25 *      ...
     26 *
     27 */
     28
     29
     30/**
     31    @file ShrinkPickup.cc
     32    @brief Implementation of the HealthPickup class.
     33*/
     34
     35
    136#include "ShrinkPickup.h"
    237
     
    1045#include "weaponsystem/WeaponSlot.h"
    1146#include "weaponsystem/Weapon.h"
     47#include "worldentities/CameraPosition.h"
    1248
    1349namespace orxonox
     
    1551    CreateFactory(ShrinkPickup);
    1652
    17         ShrinkPickup::ShrinkPickup(BaseObject* creator) : Pickup(creator)
     53    ShrinkPickup::ShrinkPickup(BaseObject* creator) : Pickup(creator)
    1854    {
    1955        RegisterObject(ShrinkPickup);
    2056
    2157        this->initialize();
    22                 shrinkFactor_ = 5.0;
    23                 duration_ = 5.0;
    24                 shrinkDelay_ = 1.0;
    25                 isActive_ = false;
     58        shrinkFactor_ = 5.0;
     59        duration_ = 5.0;
     60        shrinkSpeed_ = 5.0;
     61        isActive_ = false;
     62        isTerminating_ = false;
    2663    }
    2764
     
    3168    }
    3269
    33         void ShrinkPickup::initialize(void)
    34         {
    35                 this->addTarget(ClassIdentifier<Pawn>::getIdentifier());
    36         }
     70    void ShrinkPickup::initialize(void)
     71    {
     72        this->addTarget(ClassIdentifier<Pawn>::getIdentifier());
     73    }
    3774
    3875    void ShrinkPickup::changedUsed(void)
    39         {
    40                 int i; 
    41 
    42                 SUPER(ShrinkPickup, changedUsed);
     76    {
     77        SUPER(ShrinkPickup, changedUsed);
    4378
    4479        if(this->isUsed())
     
    4782            if(pawn == NULL) // If the PickupCarrier is no Pawn, then this pickup is useless and therefore is destroyed.
    4883                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                         /*this->pawn->setScale3D(this->pawn->getScale3D() / 5.0);
    55             this->pawn->setMass(this->pawn->getMass() / 5.0);
    5684
    57             const std::list<SmartPtr<CameraPosition> > cameraPositions = this->pawn->getCameraPositions();
    58             unsigned int size = cameraPositions.size();
    59             for(unsigned int index = 0; index < size; index++)
     85            defaultScale_ = this->pawn->getScale3D();
     86            defaultMass_ = this->pawn->getMass();
     87
     88            smallScale_ = defaultScale_ / shrinkFactor_;
     89            smallMass_ = defaultMass_ / shrinkFactor_;
     90
     91            actualScale_ = defaultScale_;
     92            actualMass_ = defaultMass_;
     93
     94            cameraPositions_ = this->pawn->getCameraPositions();
     95            size_ = cameraPositions_.size();
     96            isActive_ = true;
     97            durationTimer.setTimer(duration_, false, createExecutor(createFunctor(&ShrinkPickup::terminate, this)));
     98        }
     99        else
     100        {
     101            this->Pickupable::destroy();
     102        }
     103    }
     104
     105    void ShrinkPickup::tick(float dt)
     106    {
     107        if(isActive_ == true && actualScale_ > smallScale_)
     108        {
     109            float factor_ = 1 + dt*shrinkSpeed_;
     110
     111            actualScale_ /= factor_;
     112            actualMass_ /= factor_;
     113
     114            this->pawn->setScale3D(actualScale_);
     115            this->pawn->setMass(actualMass_);
     116
     117            for(int index = 0; index < size_; index++)
    60118            {
    61                 CameraPosition* cameraPos = this->pawn->getCameraPosition(index);
    62                 if(cameraPos == NULL)
    63                     continue;
    64                 cameraPos->setPosition(cameraPos->getPosition()*5.0);
    65             }*/
    66                        
    67                         i = 0;
    68                         for(std::set<WorldEntity*>::iterator it = set.begin(); it != set.end(); it++)
    69                         {
    70                                 defaultScales_.push_back((*it)->getScale());
    71                                 actualScales_.push_back((*it)->getScale());
    72                                 defaultPositions_.push_back((*it)->getPosition());
    73                                 actualPositions_.push_back((*it)->getPosition());
    74                                 //(*it)->setScale((*it)->getScale() / 5.0);
    75                                 //(*it)->setPosition((*it)->getPosition() / 5.0);
    76                         }
    77                         size_ = defaultScales_.size();
    78                         for(i = 0; i < size_; i++)
    79                         {
    80                                 smallScales_.push_back(defaultScales_.at(i) / shrinkFactor_);
    81                         }
    82                         isActive_ = true;
    83                         durationTimer.setTimer(10, false, createExecutor(createFunctor(&ShrinkPickup::terminate, this)));
     119                CameraPosition* cameraPos_ = this->pawn->getCameraPosition(index);
     120                if(cameraPos_ == NULL)
     121                continue;
     122                cameraPos_->setPosition(cameraPos_->getPosition()*factor_);
     123            }
    84124        }
    85                 else
     125        else isActive_ = false;
     126
     127        if(isTerminating_ == true && actualScale_ < defaultScale_)
    86128        {
    87                         this->Pickupable::destroy();
     129            float factor_ = 1 + dt*shrinkSpeed_;
     130
     131            actualScale_ *= factor_;
     132            actualMass_ *= factor_;
     133
     134            this->pawn->setScale3D(actualScale_);
     135            this->pawn->setMass(actualMass_);
     136
     137            for(int index = 0; index < size_; index++)
     138            {
     139                CameraPosition* cameraPos_ = this->pawn->getCameraPosition(index);
     140                if(cameraPos_ == NULL)
     141                continue;
     142                cameraPos_->setPosition(cameraPos_->getPosition()/factor_);
     143            }
    88144        }
    89         }
     145        else if(isTerminating_ == true)
     146        setUsed(false);
     147    }
    90148
    91         void ShrinkPickup::tick(float dt)
    92         {
    93                 double temp;
    94                 int i;
    95                 double k = dt / shrinkDelay_;
    96                 if(isActive_)
    97                 {
    98                         for(i = 0; i < size_; i++)
    99                         {
    100                                 temp = actualScales_.at(i);
    101                                 if(temp > smallScales_.at(i))
    102                                 {
    103                                         actualScales_.erase(i)
    104                                         actualScales_.insert(i, temp - (temp - smallScales_.at(i)) * k);
    105                                 }
    106                                 /*temp = actual;
    107                                 if(temp > smallScales[i])
    108                                 {
    109                                         actualScales[i] -= (actualScales[i] - smallScales[i]) * k;
    110                                 }*/
    111 
    112                         }
    113 
    114                         i = 0;
    115                        
    116                         std::set<WorldEntity*> set = this->pawn->getAttachedObjects();
    117                         for(std::set<WorldEntity*>::iterator it = set.begin(); it != set.end(); it++)
    118                         {
    119                                 //defaultScales.push_back((*it)->getScale());
    120                                 //actualScales.push_back((*it)->getScale());
    121                                 //defaultPositions.push_back((*it)->getPosition());
    122                                 //actualPositions.push_back((*it)->getPosition());
    123                                 //(*it)->setScale((*it)->getScale() *0.99);
    124                                 (*it)->setScale(actualScales_.at(i));
    125                                 //(*it)->setPosition((*it)->getPosition() / 5.0);
    126                         }
    127                 }
    128         }
    129 
    130         void ShrinkPickup::terminate(void)
    131         {
    132                 //this->pawn->setScale3D(this->pawn->getScale3D() * 5.0);
    133 
    134                 std::set<WorldEntity*> set = this->pawn->getAttachedObjects();
    135                 for(std::set<WorldEntity*>::iterator it = set.begin(); it != set.end(); it++)
    136                 {
    137                         (*it)->setScale((*it)->getScale() * 5.0);
    138                 }               
    139                 setUsed(false);
    140         }
     149    void ShrinkPickup::terminate(void)
     150    {
     151        isActive_ = false;
     152        isTerminating_ = true;
     153    }
    141154
    142155    Pawn* ShrinkPickup::carrierToPawnHelper(void)
     
    144157        PickupCarrier* carrier = this->getCarrier();
    145158        Pawn* pawn = dynamic_cast<Pawn*>(carrier);
    146 
    147         if(pawn == NULL)
    148         {
    149             COUT(1) << "Invalid PickupCarrier in ShrinkPickup." << std::endl;
    150         }
    151159
    152160        return pawn;
  • code/branches/pickup/src/modules/pickup/items/ShrinkPickup.h

    r8433 r8489  
     1/*
     2 *   ORXONOX - the hottest 3D action shooter ever to exist
     3 *                    > www.orxonox.net <
     4 *
     5 *
     6 *   License notice:
     7 *
     8 *   This program is free software; you can redistribute it and/or
     9 *   modify it under the terms of the GNU General Public License
     10 *   as published by the Free Software Foundation; either version 2
     11 *   of the License, or (at your option) any later version.
     12 *
     13 *   This program is distributed in the hope that it will be useful,
     14 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
     15 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     16 *   GNU General Public License for more details.
     17 *
     18 *   You should have received a copy of the GNU General Public License
     19 *   along with this program; if not, write to the Free Software
     20 *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
     21 *
     22 *   Author:
     23 *      Damian 'Mozork' Frick
     24 *   Co-authors:
     25 *      ...
     26 *
     27 */
     28
     29/**
     30    @file ShrinkPickup.h
     31    @brief Declaration of the ShrinkPickup class.
     32    @ingroup PickupItems
     33*/
     34
     35
    136#ifndef _ShrinkPickup_H__
    237#define _ShrinkPickup_H__
     
    3267                        float duration_;                        //!< determines how long the pickup will be active
    3368                float shrinkFactor_;            //shrink factor of the space ship
    34                         float shrinkDelay_;             //how long it takes to shrink to the final size
     69                        float shrinkSpeed_;
    3570                        bool isActive_;
    3671                        bool isTerminating_;
    3772                        int size_;
    38                         std::vector<float> defaultScales_;
    39                         std::vector<float> smallScales_;
    40                         std::vector<float> actualScales_;
    41                         std::vector<Vector3> defaultPositions_;
    42                         std::vector<Vector3> smallPositions_;
    43                         std::vector<Vector3> actualPositions_;
     73                        std::list<SmartPtr<CameraPosition> > cameraPositions_;
     74                        float defaultCameraPos_;
     75                        Ogre::Vector3 defaultScale_;
     76                        Ogre::Vector3 actualScale_;
     77                        Ogre::Vector3 smallScale_;
     78                        float defaultMass_;
     79                        float actualMass_;
     80                        float smallMass_;                       
    4481                        Pawn* carrierToPawnHelper(void);
    4582                        Pawn* pawn;
Note: See TracChangeset for help on using the changeset viewer.