Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/core5/src/orxonox/Scene.h @ 5895

Last change on this file since 5895 was 5839, checked in by scheusso, 15 years ago

Fixed problem with scene and creators
creatorID is now always the objectID of the scene except for the case

  • if the object is the scene (then the creatorID is OBJECTID_UNKNOWN)
  • if the object is "above" the scene (e.g. level), then the cID is also OBJECTID_UNKNOWN
  • 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.