Planet
navihomeaboutscreenshotsdownloaddevelopmentforum

Changeset 1563

Show
Ignore:
Timestamp:
06/07/08 23:40:50 (5 years ago)
Author:
landauf
Message:
  • added configurable detaillevel for particle effects to [GraphicsEngine]
  • thrusters work properly with changing gamespeed
Location:
code/trunk/src
Files:
16 modified

Legend:

Unmodified
Added
Removed
  • code/trunk/src/core/CommandEvaluation.cc

    r1543 r1563  
    7878        if (this->bEvaluatedParams_ && this->function_) 
    7979        { 
    80             COUT(4) << "CE_execute (evaluation): " << this->function_->getName() << " " << this->param_[0] << " " << this->param_[1] << " " << this->param_[2] << " " << this->param_[3] << " " << this->param_[4] << std::endl; 
     80            COUT(5) << "CE_execute (evaluation): " << this->function_->getName() << " " << this->param_[0] << " " << this->param_[1] << " " << this->param_[2] << " " << this->param_[3] << " " << this->param_[4] << std::endl; 
    8181            (*this->function_)(this->param_[0], this->param_[1], this->param_[2], this->param_[3], this->param_[4]); 
    8282            return true; 
  • code/trunk/src/orxonox/GraphicsEngine.cc

    r1538 r1563  
    5353 
    5454#include "console/InGameConsole.h" 
     55#include "tools/ParticleInterface.h" 
    5556#include "Settings.h" 
    5657 
     
    7677  { 
    7778    RegisterObject(GraphicsEngine); 
     79 
     80    this->detailLevelParticle_ = 0; 
    7881 
    7982    this->setConfigValues(); 
     
    9194    SetConfigValue(ogreLogLevelNormal_  , 4).description("Corresponding orxonox debug level for ogre Normal"); 
    9295    SetConfigValue(ogreLogLevelCritical_, 2).description("Corresponding orxonox debug level for ogre Critical"); 
     96 
     97    unsigned int old = this->detailLevelParticle_; 
     98    SetConfigValue(detailLevelParticle_, 2).description("O: off, 1: low, 2: normal, 3: high"); 
     99 
     100    if (this->detailLevelParticle_ != old) 
     101      for (Iterator<ParticleInterface> it = ObjectList<ParticleInterface>::begin(); it; ++it) 
     102        it->detailLevelChanged(this->detailLevelParticle_); 
    93103  } 
    94104 
  • code/trunk/src/orxonox/GraphicsEngine.h

    r1535 r1563  
    8080            void windowClosed      (Ogre::RenderWindow* rw); 
    8181 
     82            inline unsigned int getDetailLevelParticle() const 
     83              { return this->detailLevelParticle_; } 
     84 
    8285            static GraphicsEngine& getSingleton(); 
    8386            static GraphicsEngine* getSingletonPtr() { return &getSingleton(); } 
     
    9497                             bool, const std::string&); 
    9598 
    96             Ogre::Root*         root_;              //!< Ogre's root 
    97             Ogre::SceneManager* scene_;             //!< scene manager of the game 
    98             Ogre::RenderWindow* renderWindow_;      //!< the current render window 
    99             std::string         resourceFile_;      //!< resources file name 
    100             std::string         ogreConfigFile_;    //!< ogre config file name 
    101             std::string         ogrePluginsFile_;   //!< ogre plugins file name 
    102             std::string         ogreLogFile_;       //!< log file name for Ogre log messages 
    103             int ogreLogLevelTrivial_;               //!< Corresponding Orxonx debug level for LL_TRIVIAL 
    104             int ogreLogLevelNormal_;                //!< Corresponding Orxonx debug level for LL_NORMAL 
    105             int ogreLogLevelCritical_;              //!< Corresponding Orxonx debug level for LL_CRITICAL 
     99            Ogre::Root*         root_;                  //!< Ogre's root 
     100            Ogre::SceneManager* scene_;                 //!< scene manager of the game 
     101            Ogre::RenderWindow* renderWindow_;          //!< the current render window 
     102            std::string         resourceFile_;          //!< resources file name 
     103            std::string         ogreConfigFile_;        //!< ogre config file name 
     104            std::string         ogrePluginsFile_;       //!< ogre plugins file name 
     105            std::string         ogreLogFile_;           //!< log file name for Ogre log messages 
     106            int                 ogreLogLevelTrivial_;   //!< Corresponding Orxonx debug level for LL_TRIVIAL 
     107            int                 ogreLogLevelNormal_;    //!< Corresponding Orxonx debug level for LL_NORMAL 
     108            int                 ogreLogLevelCritical_;  //!< Corresponding Orxonx debug level for LL_CRITICAL 
     109            unsigned int        detailLevelParticle_;   //!< Detail level of particle effects (0: off, 1: low, 2: normal, 3: high) 
    106110    }; 
    107111} 
  • code/trunk/src/orxonox/Orxonox.cc

    r1556 r1563  
    7171#include "hud/HUD.h" 
    7272#include "objects/Tickable.h" 
     73#include "tools/ParticleInterface.h" 
    7374 
    7475#include "GraphicsEngine.h" 
     
    162163 
    163164  /** 
     165    @brief Changes the speed of Orxonox 
     166  */ 
     167  void Orxonox::setTimeFactor(float factor) 
     168  { 
     169    float change = factor / Orxonox::getSingleton()->getTimeFactor(); 
     170    Orxonox::getSingleton()->timefactor_ = factor; 
     171 
     172    for (Iterator<ParticleInterface> it = ObjectList<ParticleInterface>::begin(); it; ++it) 
     173        it->setSpeedFactor(it->getSpeedFactor() * change); 
     174  } 
     175 
     176  /** 
    164177   * initialization of Orxonox object 
    165178   * @param argc argument counter 
     
    379392    Level* startlevel = new Level("levels/sample.oxw"); 
    380393    Loader::open(startlevel); 
    381      
     394 
    382395    return true; 
    383396  } 
     
    421434    //Ogre::SceneManager* mSceneMgr = GraphicsEngine::getSingleton().getSceneManager(); 
    422435    //Ogre::Viewport* mViewport = mSceneMgr->getCurrentViewport(); 
    423      
     436 
    424437    //Ogre::CompositorManager::getSingleton().addCompositor(mViewport, "Bloom"); 
    425438    //Ogre::CompositorManager::getSingleton().addCompositor(mViewport, "MotionBlur"); 
  • code/trunk/src/orxonox/Orxonox.h

    r1535 r1563  
    6767      static void destroySingleton(); 
    6868 
    69       static inline void slomo(float factor) { Orxonox::getSingleton()->timefactor_ = factor; } 
    70       static inline void setTimeFactor(float factor = 1.0) { Orxonox::getSingleton()->timefactor_ = factor; } 
     69      static inline void slomo(float factor) { Orxonox::setTimeFactor(factor); } 
     70      static void setTimeFactor(float factor = 1.0); 
    7171      static inline float getTimeFactor() { return Orxonox::getSingleton()->timefactor_; } 
    7272      static inline void exit() { Orxonox::getSingleton()->abortRequest(); } 
  • code/trunk/src/orxonox/OrxonoxPrereqs.h

    r1558 r1563  
    6060//----------------------------------------------------------------------- 
    6161 
    62 namespace orxonox { 
     62namespace orxonox 
     63{ 
     64  namespace LODParticle 
     65  { 
     66    enum LOD 
     67    { 
     68      off = 0, 
     69      low = 1, 
     70      normal = 2, 
     71      high = 3 
     72    }; 
     73  } 
     74 
    6375  class GraphicsEngine; 
    6476  class Orxonox; 
  • code/trunk/src/orxonox/hud/RadarObject.cc

    r1562 r1563  
    6565{ 
    6666    unsigned int RadarObject::count_s = 0; 
     67    unsigned int RadarObject::materialcount_s = 0; 
    6768    std::map<std::string, std::map<ColourValue, std::string> > RadarObject::materials_s; 
    6869 
     
    99100        if (it == colourmap.end()) 
    100101        { 
    101             materialname = "radarmaterial" + getConvertedValue<unsigned int, std::string>(RadarObject::count_s); 
     102            materialname = "radarmaterial" + getConvertedValue<unsigned int, std::string>(RadarObject::materialcount_s++); 
    102103            Ogre::MaterialPtr material = (Ogre::MaterialPtr)Ogre::MaterialManager::getSingleton().create(materialname, "General"); 
     104            material->getTechnique(0)->getPass(0)->setSceneBlending(Ogre::SBT_TRANSPARENT_ALPHA); 
    103105            Ogre::TextureUnitState* textureunitstate = material->getTechnique(0)->getPass(0)->createTextureUnitState(); 
    104106            textureunitstate->setTextureName(texturename); 
  • code/trunk/src/orxonox/hud/RadarObject.h

    r1562 r1563  
    6464      private: 
    6565        static std::map<std::string, std::map<ColourValue, std::string> > materials_s; 
    66         unsigned static int count_s; 
     66        static unsigned int count_s; 
     67        static unsigned int materialcount_s; 
    6768        Ogre::SceneNode* node_;                 // node of object 
    6869        ColourValue colour_; 
  • code/trunk/src/orxonox/objects/ParticleProjectile.cc

    r1560 r1563  
    4343        if (this->owner_) 
    4444        { 
    45             this->particles_ = new ParticleInterface("Orxonox/shot2"); 
     45            this->particles_ = new ParticleInterface("Orxonox/shot2", LODParticle::normal); 
    4646            this->particles_->addToSceneNode(this->getNode()); 
    4747            this->particles_->getAllEmitters()->setDirection(-this->owner_->getInitialDir()); 
  • code/trunk/src/orxonox/objects/ParticleSpawner.cc

    r1559 r1563  
    4343    } 
    4444 
    45     ParticleSpawner::ParticleSpawner(const std::string& templateName, float lifetime, float delay, const Vector3& direction) 
     45    ParticleSpawner::ParticleSpawner(const std::string& templateName, LODParticle::LOD detaillevel, float lifetime, float delay, const Vector3& direction) 
    4646    { 
    4747        RegisterObject(ParticleSpawner); 
     
    5050        executor->setDefaultValues(lifetime); 
    5151        this->timer_.setTimer(delay, false, this, executor); 
    52         this->particle_ = new ParticleInterface(templateName); 
     52        this->particle_ = new ParticleInterface(templateName, detaillevel); 
    5353        this->particle_->addToSceneNode(this->getNode()); 
    5454        this->particle_->setEnabled(false); 
  • code/trunk/src/orxonox/objects/ParticleSpawner.h

    r1552 r1563  
    3333 
    3434#include "WorldEntity.h" 
    35 #include "../tools/Timer.h" 
     35#include "tools/Timer.h" 
    3636 
    3737namespace orxonox 
     
    4141        public: 
    4242            ParticleSpawner(); 
    43             ParticleSpawner(const std::string& templateName, float lifetime, float delay = 0, const Vector3& direction = Vector3::ZERO); 
     43            ParticleSpawner(const std::string& templateName, LODParticle::LOD detaillevel, float lifetime, float delay = 0, const Vector3& direction = Vector3::ZERO); 
    4444            virtual ~ParticleSpawner(); 
    4545            inline ParticleInterface* getParticleInterface() const 
  • code/trunk/src/orxonox/objects/Projectile.cc

    r1558 r1563  
    9797                    if (it->isA(Class(SpaceShipAI))) 
    9898                        ((SpaceShipAI*)(*it))->damage(this->damage_); 
    99                     ParticleSpawner* explosion = new ParticleSpawner(this->explosionTemplateName_, 2.0); 
     99                    ParticleSpawner* explosion = new ParticleSpawner(this->explosionTemplateName_, LODParticle::low, 2.0); 
    100100                    explosion->setPosition(this->getPosition()); 
    101101                    explosion->create(); 
    102                     ParticleSpawner* smoke = new ParticleSpawner(this->smokeTemplateName_, 6.0, 0.0); 
     102                    ParticleSpawner* smoke = new ParticleSpawner(this->smokeTemplateName_, LODParticle::normal, 6.0, 0.0); 
    103103                    smoke->setPosition(this->getPosition()); 
    104104                    smoke->getParticleInterface()->setSpeedFactor(3.0); 
  • code/trunk/src/orxonox/objects/SpaceShip.cc

    r1562 r1563  
    187187    { 
    188188        // START CREATING THRUSTER 
    189         this->tt1_ = new ParticleInterface("Orxonox/thruster1"); 
     189        this->tt1_ = new ParticleInterface("Orxonox/thruster1", LODParticle::low); 
    190190        this->tt1_->createNewEmitter(); 
    191191        this->tt1_->getAllEmitters()->setDirection(-this->getInitialDir()); 
     
    199199        tt1_->addToSceneNode(node2a); 
    200200 
    201         this->tt2_ = new ParticleInterface("Orxonox/thruster2"); 
     201        this->tt2_ = new ParticleInterface("Orxonox/thruster2", LODParticle::normal); 
    202202        this->tt2_->createNewEmitter(); 
    203203        this->tt2_->getAllEmitters()->setDirection(Vector3(-1, 0, 0)); 
  • code/trunk/src/orxonox/objects/SpaceShipAI.cc

    r1562 r1563  
    102102            newenemy->XMLPort(xmlelement, XMLPort::LoadObject); 
    103103 
    104             ParticleSpawner* spawneffect = new ParticleSpawner("Orxonox/fairytwirl", 2.0, 0.0, newenemy->getOrth()); 
     104            ParticleSpawner* spawneffect = new ParticleSpawner("Orxonox/fairytwirl", LODParticle::normal, 2.0, 0.0, newenemy->getOrth()); 
    105105            spawneffect->setPosition(newenemy->getPosition() - newenemy->getOrth() * 50); 
    106106            spawneffect->create(); 
     
    182182    void SpaceShipAI::kill() 
    183183    { 
    184         ParticleSpawner* explosion = new ParticleSpawner("Orxonox/BigExplosion1part1", 3.0); 
    185         explosion->setPosition(this->getPosition()); 
    186         explosion->getParticleInterface()->setKeepParticlesInLocalSpace(true); 
    187         explosion->setScale(4); 
    188         explosion->create(); 
    189  
    190         explosion = new ParticleSpawner("Orxonox/BigExplosion1part2", 3.0); 
     184        ParticleSpawner* explosion = new ParticleSpawner("Orxonox/BigExplosion1part1", LODParticle::low, 3.0); 
     185        explosion->setPosition(this->getPosition()); 
     186        explosion->getParticleInterface()->setKeepParticlesInLocalSpace(true); 
     187        explosion->setScale(4); 
     188        explosion->create(); 
     189 
     190        explosion = new ParticleSpawner("Orxonox/BigExplosion1part2", LODParticle::normal, 3.0); 
     191        explosion->setPosition(this->getPosition()); 
     192        explosion->getParticleInterface()->setKeepParticlesInLocalSpace(true); 
     193        explosion->setScale(4); 
     194        explosion->create(); 
     195        explosion = new ParticleSpawner("Orxonox/BigExplosion1part2", LODParticle::high, 3.0); 
    191196        explosion->setPosition(this->getPosition()); 
    192197        explosion->getParticleInterface()->setKeepParticlesInLocalSpace(true); 
     
    196201        Vector3 ringdirection = Vector3(rnd(), rnd(), rnd()); 
    197202        ringdirection.normalise(); 
    198         explosion = new ParticleSpawner("Orxonox/BigExplosion1part3", 3.0, 0.5, ringdirection); 
     203        explosion = new ParticleSpawner("Orxonox/BigExplosion1part3", LODParticle::normal, 3.0, 0.5, ringdirection); 
     204        explosion->setPosition(this->getPosition()); 
     205        explosion->getParticleInterface()->setKeepParticlesInLocalSpace(true); 
     206        explosion->setScale(4); 
     207        explosion->create(); 
     208        explosion = new ParticleSpawner("Orxonox/BigExplosion1part3", LODParticle::high, 3.0, 0.5, ringdirection); 
    199209        explosion->setPosition(this->getPosition()); 
    200210        explosion->getParticleInterface()->setKeepParticlesInLocalSpace(true); 
  • code/trunk/src/orxonox/tools/ParticleInterface.cc

    r1555 r1563  
    4040#include "GraphicsEngine.h" 
    4141#include "Orxonox.h" 
     42#include "core/CoreIncludes.h" 
    4243#include "util/Convert.h" 
    4344 
     
    4748  ParticleInterface* ParticleInterface::currentParticleInterface_s = 0; 
    4849 
    49   ParticleInterface::ParticleInterface(const std::string& templateName) 
     50  ParticleInterface::ParticleInterface(const std::string& templateName, LODParticle::LOD detaillevel) 
    5051  { 
     52    RegisterRootObject(ParticleInterface); 
     53 
    5154    this->sceneNode_ = 0; 
     55    this->bEnabled_ = true; 
     56    this->detaillevel_ = (unsigned int)detaillevel; 
    5257    this->particleSystem_ = GraphicsEngine::getSingleton().getSceneManager()->createParticleSystem("particles" + getConvertedValue<unsigned int, std::string>(ParticleInterface::counter_s++), templateName); 
    5358    this->particleSystem_->setSpeedFactor(Orxonox::getSingleton()->getTimeFactor()); 
     59 
     60    if (GraphicsEngine::getSingleton().getDetailLevelParticle() < (unsigned int)this->detaillevel_) 
     61    { 
     62      this->bVisible_ = false; 
     63      this->updateVisibility(); 
     64    } 
     65    else 
     66    { 
     67      this->bVisible_ = true; 
     68    } 
    5469  } 
    5570 
     
    134149  void ParticleInterface::setEnabled(bool enable) 
    135150  { 
     151    this->bEnabled_ = enable; 
     152    this->updateVisibility(); 
     153  } 
     154 
     155  void ParticleInterface::detailLevelChanged(unsigned int newlevel) 
     156  { 
     157    if (newlevel >= (unsigned int)this->detaillevel_) 
     158      this->bVisible_ = true; 
     159    else 
     160      this->bVisible_ = false; 
     161 
     162    this->updateVisibility(); 
     163  } 
     164 
     165  void ParticleInterface::updateVisibility() 
     166  { 
    136167    for (unsigned int i = 0; i < this->particleSystem_->getNumEmitters(); i++) 
    137       this->particleSystem_->getEmitter(i)->setEnabled(enable); 
     168      this->particleSystem_->getEmitter(i)->setEnabled(this->bEnabled_ && this->bVisible_); 
    138169  } 
    139170 
     
    144175  float ParticleInterface::getSpeedFactor() const 
    145176  { 
    146     return this->particleSystem_->getSpeedFactor(); 
     177    return (this->particleSystem_->getSpeedFactor() / Orxonox::getSingleton()->getTimeFactor()); 
    147178  } 
    148179 
  • code/trunk/src/orxonox/tools/ParticleInterface.h

    r1553 r1563  
    3535#include <OgreParticleEmitter.h> 
    3636 
     37#include "core/OrxonoxClass.h" 
    3738#include "util/Math.h" 
    3839 
     
    4445namespace orxonox 
    4546{ 
    46   class _OrxonoxExport ParticleInterface 
     47  class _OrxonoxExport ParticleInterface : public OrxonoxClass 
    4748  { 
    4849    public: 
    49       ParticleInterface(const std::string& templateName); 
     50      ParticleInterface(const std::string& templateName, LODParticle::LOD detaillevel); 
    5051      ~ParticleInterface(); 
    5152 
     
    7475 
    7576      void setEnabled(bool enable); 
     77      void detailLevelChanged(unsigned int newlevel); 
    7678 
    7779      inline void storeThisAsCurrentParticleInterface() 
     
    8183 
    8284    private: 
     85      void updateVisibility(); 
     86 
    8387      static ParticleInterface* currentParticleInterface_s; 
    8488      static unsigned int counter_s; 
    8589      Ogre::SceneNode* sceneNode_; 
    8690      Ogre::ParticleSystem* particleSystem_; 
     91      bool bVisible_; 
     92      bool bEnabled_; 
     93      unsigned int detaillevel_;                            //!< Detail level of this particle effect (0: off, 1: low, 2: normal, 3: high) 
    8794  }; 
    8895}