Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/resource/src/orxonox/tools/ParticleInterface.h @ 4073

Last change on this file since 4073 was 3336, checked in by rgrieder, 15 years ago

Moved Config value detailLevelParticle from GraphicsManager to ParticleInterface.
The resulting section name problem is to be resolved later. We've got a mess of config values anyway.

  • Property svn:eol-style set to native
File size: 4.1 KB
Line 
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 *      Fabian 'x3n' Landau
24 *   Co-authors:
25 *      ...
26 *
27 */
28
29#ifndef _ParticleInterface_H__
30#define _ParticleInterface_H__
31
32#include "OrxonoxPrereqs.h"
33
34#include "util/OgreForwardRefs.h"
35#include "interfaces/TimeFactorListener.h"
36
37#define getAllEmitters() \
38  storeThisAsCurrentParticleInterface(); \
39  for (unsigned int i = 0; i < ParticleInterface::getCurrentParticleInterface()->getNumEmitters(); ++i) \
40    ParticleInterface::getCurrentParticleInterface()->getEmitter(i)
41
42namespace orxonox
43{
44    class _OrxonoxExport ParticleInterface : public TimeFactorListener
45    {
46        public:
47            ParticleInterface(Ogre::SceneManager* scenemanager, const std::string& templateName, LODParticle::Value detaillevel);
48            virtual ~ParticleInterface();
49            void setConfigValues();
50
51            inline Ogre::ParticleSystem* getParticleSystem()
52                { return this->particleSystem_; }
53
54            Ogre::ParticleEmitter* createNewEmitter();
55            Ogre::ParticleEmitter* getEmitter(unsigned int emitterNr) const;
56            void removeEmitter(unsigned int emitterNr);
57            void removeAllEmitters();
58            unsigned int getNumEmitters() const;
59
60            Ogre::ParticleAffector* addAffector(const std::string& name);
61            Ogre::ParticleAffector* getAffector(unsigned int affectorNr);
62            void removeAffector(unsigned int affectorNr);
63            void removeAllAffectors();
64            unsigned int getNumAffectors() const;
65
66            inline float getSpeedFactor() const
67                { return this->speedFactor_; }
68            void setSpeedFactor(float factor);
69            bool getKeepParticlesInLocalSpace() const;
70            void setKeepParticlesInLocalSpace(bool keep);
71
72            void setEnabled(bool enable);
73            inline bool isEnabled() const
74                { return this->bEnabled_; }
75
76            void setVisible(bool visible);
77            inline bool isVisible() const
78                { return this->bVisible_; }
79
80            void setDetailLevel(unsigned int level);
81
82            inline void storeThisAsCurrentParticleInterface()
83                { ParticleInterface::currentParticleInterface_s = this; }
84            inline static ParticleInterface* getCurrentParticleInterface()
85                { return ParticleInterface::currentParticleInterface_s; }
86
87        protected:
88            virtual void changedTimeFactor(float factor_new, float factor_old);
89
90        private:
91            void updateVisibility();
92            void detailLevelChanged();
93
94            Ogre::ParticleSystem*     particleSystem_;
95            Ogre::SceneManager*       scenemanager_;
96            bool                      bVisible_;
97            bool                      bEnabled_;
98            bool                      bAllowedByLOD_;
99            unsigned int              detaillevel_;       //!< Detail level of this particle effect (0: off, 1: low, 2: normal, 3: high)
100            float                     speedFactor_;
101
102            // config values
103            unsigned int              globalDetailLevel_; //!< Global maximum detail level of particle effects (0: off, 1: low, 2: normal, 3: high)
104
105            static ParticleInterface* currentParticleInterface_s;
106            static unsigned int       counter_s;
107    };
108}
109
110#endif /* _ParticleInterface_H__ */
Note: See TracBrowser for help on using the repository browser.