Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Dec 13, 2008, 2:55:13 PM (15 years ago)
Author:
landauf
Message:
  • deatheffect (explosion) of Pawns works on client and server (creator of the effects can't be the Pawn itself because it will be destroyed on the client before synchronizing the effects)
  • fixed a small initialization error in Shader
  • fixed a bug in the resynchronization of already deleted MovableEntities
  • ExplosionChunk only recalculates it's velocity on the Master
Location:
code/branches/objecthierarchy2/src/orxonox/objects/worldentities
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • code/branches/objecthierarchy2/src/orxonox/objects/worldentities/ExplosionChunk.cc

    r2414 r2422  
    3030#include "ExplosionChunk.h"
    3131
     32#include "core/Core.h"
    3233#include "core/CoreIncludes.h"
    3334#include "core/Executor.h"
     
    4748            ThrowException(AbortLoading, "Can't create ExplosionChunk, no scene or no scene manager given.");
    4849
     50        this->bStop_ = false;
    4951        this->LOD_ = LODParticle::normal;
    5052
     
    6365        }
    6466
    65         Vector3 velocity(rnd(-1, 1), rnd(-1, 1), rnd(-1, 1));
    66         velocity.normalise();
    67         velocity *= rnd(40, 60);
    68         this->setVelocity(velocity);
     67        if (Core::isMaster())
     68        {
     69            Vector3 velocity(rnd(-1, 1), rnd(-1, 1), rnd(-1, 1));
     70            velocity.normalise();
     71            velocity *= rnd(60, 80);
     72            this->setVelocity(velocity);
    6973
    70         this->destroyTimer_.setTimer(rnd(1, 2), false, this, createExecutor(createFunctor(&ExplosionChunk::stop)));
     74            this->destroyTimer_.setTimer(rnd(1, 2), false, this, createExecutor(createFunctor(&ExplosionChunk::stop)));
     75        }
    7176
    7277        this->registerVariables();
     
    8691    void ExplosionChunk::registerVariables()
    8792    {
    88         REGISTERDATA(this->LOD_, direction::toclient, new NetworkCallback<ExplosionChunk>(this, &ExplosionChunk::LODchanged));
     93        REGISTERDATA(this->LOD_,   direction::toclient, new NetworkCallback<ExplosionChunk>(this, &ExplosionChunk::LODchanged));
     94        REGISTERDATA(this->bStop_, direction::toclient, new NetworkCallback<ExplosionChunk>(this, &ExplosionChunk::checkStop));
    8995    }
    9096
     
    97103    }
    98104
     105    void ExplosionChunk::checkStop()
     106    {
     107        if (this->bStop_)
     108            this->stop();
     109    }
     110
    99111    void ExplosionChunk::stop()
    100112    {
     
    104116            this->smoke_->setEnabled(false);
    105117
    106         this->destroyTimer_.setTimer(1.0f, false, this, createExecutor(createFunctor(&ExplosionChunk::destroy)));
     118        if (Core::isMaster())
     119        {
     120            this->bStop_ = true;
     121            this->destroyTimer_.setTimer(1.0f, false, this, createExecutor(createFunctor(&ExplosionChunk::destroy)));
     122        }
    107123    }
    108124
     
    116132        static const unsigned int CHANGES_PER_SECOND = 5;
    117133
    118         if (rnd() < dt*CHANGES_PER_SECOND)
     134        if (Core::isMaster() && rnd() < dt*CHANGES_PER_SECOND)
    119135        {
    120136            float length = this->getVelocity().length();
  • code/branches/objecthierarchy2/src/orxonox/objects/worldentities/ExplosionChunk.h

    r2414 r2422  
    5353        private:
    5454            void LODchanged();
     55            void checkStop();
    5556            void stop();
    5657            void destroy();
    5758
     59            bool                  bStop_;
    5860            ParticleInterface*    fire_;
    5961            ParticleInterface*    smoke_;
  • code/branches/objecthierarchy2/src/orxonox/objects/worldentities/MovableEntity.cc

    r2361 r2422  
    3333#include "core/XMLPort.h"
    3434#include "core/Executor.h"
    35 #include "tools/Timer.h"
    3635
    3736namespace orxonox
     
    112111    void MovableEntity::clientConnected(unsigned int clientID)
    113112    {
    114         new Timer<MovableEntity>(rnd() * MAX_RESYNCHRONIZE_TIME, false, this, createExecutor(createFunctor(&MovableEntity::resynchronize)), true);
     113        this->resynchronizeTimer_.setTimer(rnd() * MAX_RESYNCHRONIZE_TIME, false, this, createExecutor(createFunctor(&MovableEntity::resynchronize)));
    115114    }
    116115
  • code/branches/objecthierarchy2/src/orxonox/objects/worldentities/MovableEntity.h

    r2171 r2422  
    3535#include "objects/Tickable.h"
    3636#include "network/ClientConnectionListener.h"
     37#include "tools/Timer.h"
    3738
    3839namespace orxonox
     
    119120            Vector3 overwrite_position_;
    120121            Quaternion overwrite_orientation_;
     122
     123            Timer<MovableEntity> resynchronizeTimer_;
    121124    };
    122125}
  • code/branches/objecthierarchy2/src/orxonox/objects/worldentities/pawns/Pawn.cc

    r2414 r2422  
    3030#include "Pawn.h"
    3131
     32#include "core/Core.h"
    3233#include "core/CoreIncludes.h"
    3334#include "core/XMLPort.h"
     
    145146        if (this->spawnparticlesource_ != "")
    146147        {
    147             ParticleSpawner* effect = new ParticleSpawner(this);
     148            ParticleSpawner* effect = new ParticleSpawner(this->getCreator());
    148149            effect->setPosition(this->getPosition());
    149150            effect->setOrientation(this->getOrientation());
     
    167168            this->getPlayer()->stopControl(this);
    168169
    169         this->deatheffect();
     170        if (Core::isMaster())
     171            this->deatheffect();
    170172    }
    171173
     
    174176        // play death effect
    175177        {
    176             ParticleSpawner* effect = new ParticleSpawner(this);
     178            ParticleSpawner* effect = new ParticleSpawner(this->getCreator());
    177179            effect->setPosition(this->getPosition());
    178180            effect->setOrientation(this->getOrientation());
     
    182184        }
    183185        {
    184             ParticleSpawner* effect = new ParticleSpawner(this);
     186            ParticleSpawner* effect = new ParticleSpawner(this->getCreator());
    185187            effect->setPosition(this->getPosition());
    186188            effect->setOrientation(this->getOrientation());
     
    190192        }
    191193        {
    192             ParticleSpawner* effect = new ParticleSpawner(this);
     194            ParticleSpawner* effect = new ParticleSpawner(this->getCreator());
    193195            effect->setPosition(this->getPosition());
    194196            effect->setOrientation(this->getOrientation());
     
    199201        for (unsigned int i = 0; i < this->numexplosionchunks_; ++i)
    200202        {
    201             ExplosionChunk* chunk = new ExplosionChunk(this);
     203            ExplosionChunk* chunk = new ExplosionChunk(this->getCreator());
    202204            chunk->setPosition(this->getPosition());
    203205
     
    214216    {
    215217        this->setHealth(this->initialHealth_);
    216         this->spawneffect();
     218        if (Core::isMaster())
     219            this->spawneffect();
    217220    }
    218221
  • code/branches/objecthierarchy2/src/orxonox/objects/worldentities/pawns/Spectator.cc

    r2362 r2422  
    6262
    6363        this->greetingFlare_ = new BillboardSet();
    64         this->greetingFlare_->setBillboardSet(this->getScene()->getSceneManager(), "Examples/Flare", ColourValue(1.0, 1.0, 0.8), Vector3(0, 20, 0), 1);
     64        this->greetingFlare_->setBillboardSet(this->getScene()->getSceneManager(), "Examples/Flare", ColourValue(1.0, 1.0, 0.8), Vector3(0, 0, 0), 1);
    6565        if (this->greetingFlare_->getBillboardSet())
    6666            this->getNode()->attachObject(this->greetingFlare_->getBillboardSet());
Note: See TracChangeset for help on using the changeset viewer.