Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Nov 23, 2015, 3:46:58 PM (9 years ago)
Author:
vaydin
Message:

fixed position offset, added definable direction for the meshes to fly in, added size, added delay

Location:
code/branches/explosionChunksHS15/src/orxonox/worldentities
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • code/branches/explosionChunksHS15/src/orxonox/worldentities/ExplosionPart.cc

    r10810 r10837  
    8484                XMLPortParam(ExplosionPart, "effect2", setEffect2, getEffect2, xmlelement, mode).defaultValues("");
    8585                XMLPortParam(ExplosionPart, "offset", setOffset, getOffset, xmlelement, mode).defaultValues(Vector3::ZERO);
    86 
    87 
     86                XMLPortParam(ExplosionPart, "direction", setDirection, getDirection, xmlelement, mode).defaultValues(Vector3(1,1,1));
     87                XMLPortParam(ExplosionPart, "angle", setAngle, getAngle, xmlelement, mode).defaultValues(180);
     88                XMLPortParam(ExplosionPart, "size", setSize, getSize, xmlelement, mode).defaultValues(4);
     89                XMLPortParam(ExplosionPart, "delay", setDelay, getDelay, xmlelement, mode).defaultValues(0);
    8890        }
    8991
     
    9193        void ExplosionPart::Explode()
    9294        {
    93                 orxout() << "Explode" << endl;
    94 
    95 
    96 
    97                 this->model_->setVisible(true);
    98 
    99                 //this->explosionEntity_->setSyncMode(0);
    100 
    101                 //this->model_->setSyncMode(0);
    102 
    103                 if(effect1_ != "")
    104                 {
    105                         this->effect1Particle_ = new ParticleInterface(this->getScene()->getSceneManager(), effect1_, this->LOD_);
    106                         this->model_->attachOgreObject(this->effect1Particle_->getParticleSystem());
    107                 }
    108 
    109                 if(effect2_ != "")
    110                 {
    111                         this->effect2Particle_ = new ParticleInterface(this->getScene()->getSceneManager(), effect2_, this->LOD_);
    112                         this->model_->attachOgreObject(this->effect2Particle_->getParticleSystem());
    113                 }       
    114 
    115                 this->explosionEntity_->setVelocity(Vector3(rnd(-1, 1), rnd(-1, 1), rnd(-1, 1))*rnd(minSpeed_,maxSpeed_));
    116         this->explosionEntity_->setAngularVelocity(Vector3(rnd(-1, 1), rnd(-1, 1), rnd(-1, 1)).normalisedCopy() * Degree(400).valueRadians());
    117         this->explosionEntity_->setScale(4);
    118 
    119         this->explosionEntity_->attach(model_);
    120 
    121         this->attach(explosionEntity_);
    122 
    123         if (GameMode::isMaster())
    124         {
    125             this->destroyTimer_.setTimer(rnd(2, 4), false, createExecutor(createFunctor(&ExplosionPart::stop, this)));
    126         }
    127 
     95                this->destroyTimer_.setTimer(delay_, false, createExecutor(createFunctor(&ExplosionPart::ActuallyExplode, this)));
    12896        }
    12997
     
    144112        }
    145113
     114        void ExplosionPart::ActuallyExplode()
     115        {
     116                this->model_->setVisible(true);
     117
     118                //this->explosionEntity_->setSyncMode(0);
     119
     120                //this->model_->setSyncMode(0);
     121
     122                if(effect1_ != "")
     123                {
     124                        this->effect1Particle_ = new ParticleInterface(this->getScene()->getSceneManager(), effect1_, this->LOD_);
     125                        this->model_->attachOgreObject(this->effect1Particle_->getParticleSystem());
     126                }
     127
     128                if(effect2_ != "")
     129                {
     130                        this->effect2Particle_ = new ParticleInterface(this->getScene()->getSceneManager(), effect2_, this->LOD_);
     131                        this->model_->attachOgreObject(this->effect2Particle_->getParticleSystem());
     132                }
     133
     134               
     135        Vector3 velocityOffset = direction_.perpendicular();
     136        velocityOffset.normalise();
     137        Degree offsetDirection = Degree(rnd(0,360));
     138        velocityOffset = Quaternion(offsetDirection, direction_.normalisedCopy()) * velocityOffset;
     139        velocityOffset.normalise();
     140        direction_.normalise();
     141
     142        Vector3 finalDirection = direction_ + sin((rnd(0, angle_))*M_PI/180)*velocityOffset;
     143
     144                this->explosionEntity_->setVelocity(finalDirection*rnd(minSpeed_,maxSpeed_));
     145        this->explosionEntity_->setAngularVelocity(Vector3(rnd(-1, 1), rnd(-1, 1), rnd(-1, 1)).normalisedCopy() * Degree(400).valueRadians());
     146        this->explosionEntity_->setScale(size_);
     147
     148        this->explosionEntity_->attach(model_);
     149
     150        this->attach(explosionEntity_);
     151
     152        if (GameMode::isMaster())
     153        {
     154            this->destroyTimer_.setTimer(rnd(2, 4), false, createExecutor(createFunctor(&ExplosionPart::stop, this)));
     155        }
     156        }
     157
    146158
    147159
     
    180192        {
    181193                this->posOffset_ = newVector;
    182                 this->setPosition(this->getPosition() + this->posOffset_);
     194                this->explosionEntity_->setPosition(this->getPosition() + this->posOffset_);
     195        }
     196
     197        void ExplosionPart::setDirection(Vector3 newDirection)
     198        {
     199                this->direction_ = newDirection;
     200        }
     201
     202        void ExplosionPart::setAngle(float newAngle)
     203        {
     204                this->angle_ = newAngle;
     205        }
     206
     207        void ExplosionPart::setSize(float newSize)
     208        {
     209                this->size_ = newSize;
     210        }
     211
     212        void ExplosionPart::setDelay(float newDelay)
     213        {
     214                this->delay_ = newDelay;
    183215        }
    184216
     
    207239        }
    208240
     241        Vector3 ExplosionPart::getDirection()
     242        {
     243                return direction_;
     244        }
     245
     246        float ExplosionPart::getAngle()
     247        {
     248                return angle_;
     249        }
     250
     251        float ExplosionPart::getSize()
     252        {
     253                return size_;
     254        }
     255
     256        float ExplosionPart::getDelay()
     257        {
     258                return delay_;
     259        }
     260
    209261
    210262
  • code/branches/explosionChunksHS15/src/orxonox/worldentities/ExplosionPart.h

    r10810 r10837  
    5454            void Explode();
    5555            void stop();
     56            void ActuallyExplode();
    5657
    5758            void setMesh(const std::string& newString);
     
    6768            void setOffset(Vector3 newVector);
    6869            Vector3 getOffset();
     70            void setDirection(Vector3 newDirection);
     71            Vector3 getDirection();
     72            void setAngle(float newAgnle);
     73            float getAngle();
     74            void setSize(float newSize);
     75            float getSize();
     76            void setDelay(float newDelay);
     77            float getDelay();
    6978         
    7079
     
    8695            std::string effect2_;
    8796            Vector3 posOffset_;
     97            Vector3 direction_;
     98            float angle_;
     99            float size_;
     100            float delay_;
    88101
    89102            MovableEntity* explosionEntity_;
  • code/branches/explosionChunksHS15/src/orxonox/worldentities/pawns/Pawn.cc

    r10810 r10837  
    390390            explosionPartList_.back()->setPosition(this->getPosition());
    391391            explosionPartList_.back()->setVelocity(this->getVelocity());
     392            explosionPartList_.back()->setOrientation(this->getOrientation());
    392393            explosionPartList_.back()->Explode();
    393394            explosionPartList_.pop_back();
Note: See TracChangeset for help on using the changeset viewer.