Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/cpp11_v2/src/orxonox/Scene.h @ 11026

Last change on this file since 11026 was 10845, checked in by landauf, 9 years ago

always use 'virtual' in the declaration of virtual functions even if they are inherited

  • Property svn:eol-style set to native
File size: 6.4 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 *      Reto Grieder (physics)
25 *   Co-authors:
26 *      ...
27 *
28 */
29
30#ifndef _Scene_H__
31#define _Scene_H__
32
33#include "OrxonoxPrereqs.h"
34
35#include <list>
36#include <set>
37#include <string>
38
39#include "util/Math.h"
40#include "util/OgreForwardRefs.h"
41#include "core/BaseObject.h"
42#include "core/object/Context.h"
43#include "network/synchronisable/Synchronisable.h"
44#include "tools/interfaces/Tickable.h"
45
46namespace orxonox
47{
48    class _OrxonoxExport Scene : public BaseObject, public Synchronisable, public Tickable, public Context
49    {
50        public:
51            Scene(Context* context);
52            virtual ~Scene();
53
54            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
55            void registerVariables();
56
57            inline Ogre::SceneManager* getSceneManager() const
58                { return this->sceneManager_; }
59            inline Ogre::SceneNode* getRootSceneNode() const
60                { return this->rootSceneNode_; }
61
62            void setSkybox(const std::string& skybox);
63            inline const std::string& getSkybox() const
64                { return this->skybox_; }
65
66            void setAmbientLight(const ColourValue& colour);
67            inline const ColourValue& getAmbientLight() const
68                { return this->ambientLight_; }
69
70            void setShadow(bool bShadow);
71            inline bool getShadow() const
72                { return this->bShadows_; }
73
74            inline void setSoundReferenceDistance(float distance)
75                { this->soundReferenceDistance_ = distance; }
76            inline float getSoundReferenceDistance() const
77                { return this->soundReferenceDistance_; }
78
79            inline Radar* getRadar()
80                { return this->radar_; }
81
82            virtual inline uint32_t getSceneID() const override { return this->getObjectID(); }
83
84            virtual void tick(float dt) override;
85
86        private:
87            void addObject(BaseObject* object);
88            BaseObject* getObject(unsigned int index) const;
89
90            void networkcallback_applySkybox()
91                { this->setSkybox(this->skybox_); }
92            void networkcallback_applyAmbientLight()
93                { this->setAmbientLight(this->ambientLight_); }
94            void networkcallback_applyShadows()
95                { this->setShadow(this->bShadows_); }
96
97            Ogre::SceneManager*      sceneManager_;
98            Ogre::SceneNode*         rootSceneNode_;
99
100            std::string              skybox_;
101            ColourValue              ambientLight_;
102            std::list<BaseObject*>   objects_;
103            bool                     bShadows_;
104            float                    soundReferenceDistance_;
105            Radar*                   radar_;
106
107
108        /////////////
109        // Physics //
110        /////////////
111
112        public:
113            inline bool hasPhysics() const
114                { return this->physicalWorld_ != nullptr; }
115            void setPhysicalWorld(bool wantsPhysics);
116
117            void setNegativeWorldRange(const Vector3& range);
118            inline const Vector3& getNegativeWorldRange() const
119                { return this->negativeWorldRange_; }
120
121            void setPositiveWorldRange(const Vector3& range);
122            inline const Vector3& getPositiveWorldRange() const
123                { return this->positiveWorldRange_; }
124
125            void setGravity(const Vector3& gravity);
126            inline const Vector3& getGravity() const
127                { return this->gravity_; }
128
129            void addPhysicalObject(WorldEntity* object);
130            void removePhysicalObject(WorldEntity* object);
131
132            inline bool isUpdatingPhysics() const
133                { return this->bIsUpdatingPhysics_; }
134
135            void setDebugDrawPhysics(bool bDraw, bool bFill, float fillAlpha);
136
137            static void consoleCommand_debugDrawPhysics(bool bDraw, bool bFill, float fillAlpha);
138
139        private:
140            inline void networkcallback_hasPhysics()
141                { this->setPhysicalWorld(this->bHasPhysics_); }
142            inline void networkcallback_negativeWorldRange()
143                { this->setNegativeWorldRange(this->negativeWorldRange_); }
144            inline void networkcallback_positiveWorldRange()
145                { this->setPositiveWorldRange(this->positiveWorldRange_); }
146            inline void networkcallback_gravity()
147                { this->setGravity(this->gravity_); }
148
149            // collision callback from bullet
150            static bool collisionCallback(btManifoldPoint& cp, const btCollisionObject* colObj0, int partId0,
151                                          int index0, const btCollisionObject* colObj1, int partId1, int index1);
152
153            // Bullet objects
154            btDiscreteDynamicsWorld*             physicalWorld_;
155            bt32BitAxisSweep3*                   broadphase_;
156            btDefaultCollisionConfiguration*     collisionConfig_;
157            btCollisionDispatcher*               dispatcher_;
158            btSequentialImpulseConstraintSolver* solver_;
159
160            std::set<WorldEntity*>               physicalObjectQueue_;
161            std::set<WorldEntity*>               physicalObjects_;
162            bool                                 bHasPhysics_;
163            Vector3                              negativeWorldRange_;
164            Vector3                              positiveWorldRange_;
165            Vector3                              gravity_;
166
167            BulletDebugDrawer*                   debugDrawer_;
168            bool                                 bDebugDrawPhysics_;
169            bool                                 bIsUpdatingPhysics_;
170    };
171}
172
173#endif /* _Scene_H__ */
Note: See TracBrowser for help on using the repository browser.