Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/gui/src/orxonox/objects/WorldEntity.h @ 1967

Last change on this file since 1967 was 1686, checked in by rgrieder, 16 years ago

Moved most of the GraphicsEngine code to GSRoot and GSGraphics.
GraphicsEngine is now more of a legacy object to ensure functionality until there is a new solution.

  • Property svn:eol-style set to native
File size: 9.7 KB
RevLine 
[1505]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 _WorldEntity_H__
30#define _WorldEntity_H__
31
32#include "OrxonoxPrereqs.h"
[1686]33#include <OgrePrerequisites.h>
[1505]34
35#include <OgreSceneNode.h>
36#include "util/Math.h"
37#include "util/XMLIncludes.h"
38#include "network/Synchronisable.h"
39#include "core/BaseObject.h"
[1535]40#include "Tickable.h"
[1505]41#include "../tools/Mesh.h"
42
43namespace orxonox
44{
45    class _OrxonoxExport WorldEntity : public BaseObject, public Tickable, public network::Synchronisable
46    {
47        public:
48            WorldEntity();
49            virtual ~WorldEntity();
50
51            virtual void tick(float dt);
52            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
53            virtual inline bool create(){ return Synchronisable::create(); }
54
55            void attachWorldEntity(WorldEntity* entity);
56            const WorldEntity* getAttachedWorldEntity(unsigned int index) const;
57
[1602]58            inline Ogre::SceneNode* getNode() const
[1505]59                { return this->node_; }
60
61            inline void setNode(Ogre::SceneNode* node)
62                { this->node_ = node; }
63
64            inline void setPosition(const Vector3& pos)
65                { this->node_->setPosition(pos); }
66            inline void setPositionLoader1(const Vector3& pos)
67                { this->node_->setPosition(pos); }
68            inline void setPositionLoader2(Real x, Real y, Real z)
69                { this->node_->setPosition(x, y, z); }
70            inline void setPosition(Real x, Real y, Real z)
71                { this->node_->setPosition(x, y, z); }
72            inline const Vector3& getPosition() const
73                { return this->node_->getPosition(); }
[1625]74            inline const Vector3& getWorldPosition() const
75                { return this->node_->getWorldPosition(); }
[1505]76
[1602]77            inline void translate(const Vector3& d, Ogre::Node::TransformSpace relativeTo=Ogre::Node::TS_PARENT)
[1505]78                { this->node_->translate(d, relativeTo); }
79            inline void translate(Real x, Real y, Real z, Ogre::Node::TransformSpace relativeTo=Ogre::Node::TS_PARENT)
80                { this->node_->translate(x, y, z, relativeTo); }
[1602]81            inline void translate(const Matrix3& axes, const Vector3& move, Ogre::Node::TransformSpace relativeTo=Ogre::Node::TS_PARENT)
[1505]82                { this->node_->translate(axes, move, relativeTo); }
[1602]83            inline void translate(const Matrix3& axes, Real x, Real y, Real z, Ogre::Node::TransformSpace relativeTo=Ogre::Node::TS_PARENT)
[1505]84                { this->node_->translate(axes, x, y, z, relativeTo); }
85
[1602]86            inline void yaw(const Radian& angle, Ogre::Node::TransformSpace relativeTo=Ogre::Node::TS_LOCAL)
[1505]87                { this->node_->yaw(angle, relativeTo); }
[1602]88            inline void pitch(const Radian& angle, Ogre::Node::TransformSpace relativeTo=Ogre::Node::TS_LOCAL)
[1505]89                { this->node_->pitch(angle, relativeTo); }
[1602]90            inline void roll(const Radian& angle, Ogre::Node::TransformSpace relativeTo=Ogre::Node::TS_LOCAL)
[1505]91                { this->node_->roll(angle, relativeTo); }
92            void setYawPitchRoll(const Degree& yaw, const Degree& pitch, const Degree& roll);
93
[1602]94            inline void setYaw(const Degree& angle)
[1505]95                { this->node_->yaw(angle, Ogre::Node::TS_LOCAL); }
[1602]96            inline void setPitch(const Degree& angle)
[1505]97                { this->node_->pitch(angle, Ogre::Node::TS_LOCAL); }
[1602]98            inline void setRoll(const Degree& angle)
[1505]99                { this->node_->roll(angle, Ogre::Node::TS_LOCAL); }
100
101            inline const Ogre::Quaternion& getOrientation()
102              { return this->node_->getOrientation(); }
[1625]103            inline const Ogre::Quaternion& getWorldOrientation()
104              { return this->node_->getWorldOrientation(); }
[1505]105            inline void setOrientation(const Ogre::Quaternion& quat)
106              { this->node_->setOrientation(quat); }
[1602]107            inline void rotate(const Vector3& axis, const Radian& angle, Ogre::Node::TransformSpace relativeTo=Ogre::Node::TS_LOCAL)
[1505]108              { this->node_->rotate(axis, angle, relativeTo); }
109            inline void setDirectionLoader(Real x, Real y, Real z)
110              { this->setDirection(x, y, z); }
[1602]111            inline void setDirection(Real x, Real y, Real z, Ogre::Node::TransformSpace relativeTo=Ogre::Node::TS_LOCAL, const Vector3& localDirectionVector=Vector3::NEGATIVE_UNIT_Z)
[1505]112              { this->node_->setDirection(x, y, z, relativeTo, localDirectionVector); }
[1602]113            inline void setDirection(const Vector3& vec, Ogre::Node::TransformSpace relativeTo=Ogre::Node::TS_LOCAL, const Vector3& localDirectionVector=Vector3::NEGATIVE_UNIT_Z)
[1505]114              { this->node_->setDirection(vec, relativeTo, localDirectionVector); }
[1602]115            inline void lookAt(const Vector3& targetPoint, Ogre::Node::TransformSpace relativeTo, const Vector3& localDirectionVector=Vector3::NEGATIVE_UNIT_Z)
[1505]116              { this->node_->lookAt(targetPoint, relativeTo, localDirectionVector); }
117
[1602]118            inline void setScale(const Vector3& scale)
[1505]119              { this->node_->setScale(scale); }
120            inline void setScale(Real x, Real y, Real z)
121              { this->node_->setScale(x, y, z); }
122            inline void setScale(Real scale)
123              { this->node_->setScale(scale, scale, scale); }
124            inline void setTotalScale(Real scale)
125              { this->node_->setScale(scale, scale, scale); }
126            inline const Vector3& getScale(void) const
127              { return this->node_->getScale(); }
[1602]128            inline void scale(const Vector3& scale)
[1505]129              { this->node_->scale(scale); }
130            inline void scale(Real x, Real y, Real z)
131              { this->node_->scale(x, y, z); }
132            inline void scale(Real scale)
133              { this->node_->scale(scale, scale, scale); }
134
[1602]135            void attachObject(const WorldEntity& obj) const;
136            void attachObject(WorldEntity* obj) const;
137            inline void attachObject(Ogre::MovableObject* obj) const
[1505]138              { this->node_->attachObject(obj); }
[1602]139            inline void attachObject(Mesh& mesh) const
[1505]140              { this->node_->attachObject(mesh.getEntity()); }
[1602]141            inline void detachObject(Ogre::MovableObject* obj) const
[1505]142              { this->node_->detachObject(obj); }
[1602]143            inline void detachAllObjects() const
[1505]144              { this->node_->detachAllObjects(); }
145
146            inline void setVelocity(const Vector3& velocity)
147                { this->velocity_ = velocity; }
148            inline void setVelocity(Real x, Real y, Real z)
149                { this->velocity_.x = x; this->velocity_.y = y; this->velocity_.z = z; }
150            inline const Vector3& getVelocity() const
151                { return this->velocity_; }
152
153            inline void setAcceleration(const Vector3& acceleration)
154                { this->acceleration_ = acceleration; }
155            inline void setAcceleration(Real x, Real y, Real z)
156                { this->acceleration_.x = x; this->acceleration_.y = y; this->acceleration_.z = z; }
157            inline const Vector3& getAcceleration() const
158                { return this->acceleration_; }
159
160            inline void setRotationAxisLoader(const Vector3& axis)
161                { this->rotationAxis_ = axis; rotationAxis_.normalise(); }
162            inline void setRotationAxis(const Vector3& axis)
163                { this->rotationAxis_ = axis; rotationAxis_.normalise(); }
164            inline void setRotationAxis(Real x, Real y, Real z)
165                { this->rotationAxis_.x = x; this->rotationAxis_.y = y; this->rotationAxis_.z = z; rotationAxis_.normalise(); }
166            inline const Vector3& getRotationAxis() const
167                { return this->rotationAxis_; }
168
169//            inline void setRotationRate(const Radian& angle)
170//                { this->rotationRate_ = angle; }
171            inline void setRotationRate(const Degree& angle)
172                { this->rotationRate_ = angle; this->setStatic(angle == Degree(0)); }
173            inline const Radian& getRotationRate() const
174                { return this->rotationRate_; }
175
176            inline void setMomentum(const Radian& angle)
177                { this->momentum_ = angle; }
178            inline void setMomentum(const Degree& angle)
179                { this->momentum_ = angle; }
180            inline const Radian& getMomentum() const
181                { return this->momentum_; }
182
183            inline void setStatic(bool bStatic)
184                { this->bStatic_ = bStatic; }
[1602]185            inline bool isStatic() const
[1505]186                { return this->bStatic_; }
187
188        protected:
189            void registerAllVariables();
190
191            Vector3 velocity_;
192            Vector3 acceleration_;
193            Vector3 rotationAxis_;
194            Radian rotationRate_;
195            Radian momentum_;
196
197        private:
198            static unsigned int worldEntityCounter_s;
199            Ogre::SceneNode* node_;
200            bool bStatic_;
201            std::vector<WorldEntity*> attachedWorldEntities_;
202    };
203}
204
205#endif /* _WorldEntity_H__ */
Note: See TracBrowser for help on using the repository browser.