Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/presentation/src/orxonox/objects/Scene.h @ 2468

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

Bugfix for dedicated mode. Should work now except for an exception with an OrxonoxOverlay. Was that there before too?

  • Property svn:eol-style set to native
File size: 5.2 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 "network/synchronisable/Synchronisable.h"
36#include "core/BaseObject.h"
37#include "util/Math.h"
38#include "objects/Tickable.h"
39
40namespace orxonox
41{
42    class _OrxonoxExport Scene : public BaseObject, public Synchronisable, public Tickable
43    {
44        public:
45            Scene(BaseObject* creator);
46            virtual ~Scene();
47
48            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
49            void registerVariables();
50
51            inline Ogre::SceneManager* getSceneManager() const
52                { return this->sceneManager_; }
53            inline Ogre::SceneNode* getRootSceneNode() const
54                { return this->rootSceneNode_; }
55
56            void setSkybox(const std::string& skybox);
57            inline const std::string& getSkybox() const
58                { return this->skybox_; }
59
60            void setAmbientLight(const ColourValue& colour);
61            inline const ColourValue& getAmbientLight() const
62                { return this->ambientLight_; }
63
64            void setShadow(bool bShadow);
65            inline bool getShadow() const
66                { return this->bShadows_; }
67
68            virtual void tick(float dt);
69
70        private:
71            void addObject(BaseObject* object);
72            BaseObject* getObject(unsigned int index) const;
73
74            void networkcallback_applySkybox()
75                { this->setSkybox(this->skybox_); }
76            void networkcallback_applyAmbientLight()
77                { this->setAmbientLight(this->ambientLight_); }
78
79            Ogre::SceneManager*      sceneManager_;
80            Ogre::SceneManager*      sceneManagerDedicated_;
81            Ogre::SceneNode*         rootSceneNode_;
82
83            std::string              skybox_;
84            ColourValue              ambientLight_;
85            std::list<BaseObject*>   objects_;
86            bool                     bShadows_;
87
88
89        /////////////
90        // Physics //
91        /////////////
92
93        public:
94            inline bool hasPhysics()
95                { return this->physicalWorld_ != 0; }
96            void setPhysicalWorld(bool wantsPhysics);
97
98            void setNegativeWorldRange(const Vector3& range);
99            inline const Vector3& getNegativeWorldRange() const
100                { return this->negativeWorldRange_; }
101
102            void setPositiveWorldRange(const Vector3& range);
103            inline const Vector3& getPositiveWorldRange() const
104                { return this->positiveWorldRange_; }
105
106            void setGravity(const Vector3& gravity);
107            inline const Vector3& getGravity() const
108                { return this->gravity_; }
109
110            void addPhysicalObject(WorldEntity* object);
111            void removePhysicalObject(WorldEntity* object);
112
113        private:
114            inline void networkcallback_hasPhysics()
115                { this->setPhysicalWorld(this->bHasPhysics_); }
116            inline void networkcallback_negativeWorldRange()
117                { this->setNegativeWorldRange(this->negativeWorldRange_); }
118            inline void networkcallback_positiveWorldRange()
119                { this->setPositiveWorldRange(this->positiveWorldRange_); }
120            inline void networkcallback_gravity()
121                { this->setGravity(this->gravity_); }
122
123            // collision callback from bullet
124            static bool collisionCallback(btManifoldPoint& cp, const btCollisionObject* colObj0, int partId0,
125                                          int index0, const btCollisionObject* colObj1, int partId1, int index1);
126
127            // Bullet objects
128            btDiscreteDynamicsWorld*             physicalWorld_;
129            bt32BitAxisSweep3*                   broadphase_;
130            btDefaultCollisionConfiguration*     collisionConfig_;
131            btCollisionDispatcher*               dispatcher_;
132            btSequentialImpulseConstraintSolver* solver_;
133
134            std::set<WorldEntity*>               physicalObjectQueue_;
135            std::set<WorldEntity*>               physicalObjects_;
136            bool                                 bHasPhysics_;
137            Vector3                              negativeWorldRange_;
138            Vector3                              positiveWorldRange_;
139            Vector3                              gravity_;
140    };
141}
142
143#endif /* _Scene_H__ */
Note: See TracBrowser for help on using the repository browser.