Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/trunk/src/orxonox/Scene.h @ 5962

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

Merged core5 branch back to the trunk.
Key features include clean level unloading and an extended XML event system.

Two important notes:
Delete your keybindings.ini files! * or you will still get parser errors when loading the key bindings.
Delete build_dir/lib/modules/libgamestates.module! * or orxonox won't start.
Best thing to do is to delete the build folder ;)

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