Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/questsystem5/src/orxonox/tools/ParticleInterface.h @ 3012

Last change on this file since 3012 was 2908, checked in by dafrick, 16 years ago

Reverted to revision 2906 (because I'm too stupid to merge correctly, 2nd try will follow shortly. ;))

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