Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/trunk/src/orxonox/objects/WorldEntity.h @ 1052

Last change on this file since 1052 was 1052, checked in by landauf, 16 years ago

merged core2 back to trunk
there might be some errors, wasn't able to test it yet due to some strange g++ and linker behaviour.

File size: 9.4 KB
Line 
1/*
2 *   ORXONOX - the hottest 3D action shooter ever to exist
3 *
4 *
5 *   License notice:
6 *
7 *   This program is free software; you can redistribute it and/or
8 *   modify it under the terms of the GNU General Public License
9 *   as published by the Free Software Foundation; either version 2
10 *   of the License, or (at your option) any later version.
11 *
12 *   This program is distributed in the hope that it will be useful,
13 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
14 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 *   GNU General Public License for more details.
16 *
17 *   You should have received a copy of the GNU General Public License
18 *   along with this program; if not, write to the Free Software
19 *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
20 *
21 *   Author:
22 *      Fabian 'x3n' Landau
23 *   Co-authors:
24 *      ...
25 *
26 */
27
28#ifndef _WorldEntity_H__
29#define _WorldEntity_H__
30
31#include "OrxonoxPrereqs.h"
32
33#include <OgreSceneManager.h>
34#include <OgreSceneNode.h>
35
36#include "util/Math.h"
37#include "util/XMLIncludes.h"
38#include "network/Synchronisable.h"
39#include "core/BaseObject.h"
40#include "core/Tickable.h"
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 loadParams(TiXmlElement* xmlElem);
53            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
54            inline bool create(){ return true; }
55
56            void attachWorldEntity(WorldEntity* entity);
57            const WorldEntity* getAttachedWorldEntity(unsigned int index) const;
58
59            inline Ogre::SceneNode* getNode()
60                { return this->node_; }
61
62            inline void setNode(Ogre::SceneNode* node)
63                { this->node_ = node; }
64
65            inline void setPosition(const Vector3& pos)
66                { this->node_->setPosition(pos); }
67            inline void setPositionLoader1(const Vector3& pos)
68                { this->node_->setPosition(pos); }
69            inline void setPositionLoader2(Real x, Real y, Real z)
70                { this->node_->setPosition(x, y, z); }
71            inline void setPosition(Real x, Real y, Real z)
72                { this->node_->setPosition(x, y, z); }
73            inline const Vector3& getPosition() const
74                { return this->node_->getPosition(); }
75
76            inline void translate(const Vector3 &d, Ogre::Node::TransformSpace relativeTo=Ogre::Node::TS_PARENT)
77                { this->node_->translate(d, relativeTo); }
78            inline void translate(Real x, Real y, Real z, Ogre::Node::TransformSpace relativeTo=Ogre::Node::TS_PARENT)
79                { this->node_->translate(x, y, z, relativeTo); }
80            inline void translate(const Matrix3 &axes, const Vector3 &move, Ogre::Node::TransformSpace relativeTo=Ogre::Node::TS_PARENT)
81                { this->node_->translate(axes, move, relativeTo); }
82            inline void translate(const Matrix3 &axes, Real x, Real y, Real z, Ogre::Node::TransformSpace relativeTo=Ogre::Node::TS_PARENT)
83                { this->node_->translate(axes, x, y, z, relativeTo); }
84
85            inline void yaw(const Radian &angle, Ogre::Node::TransformSpace relativeTo=Ogre::Node::TS_LOCAL)
86                { this->node_->yaw(angle, relativeTo); }
87            inline void pitch(const Radian &angle, Ogre::Node::TransformSpace relativeTo=Ogre::Node::TS_LOCAL)
88                { this->node_->pitch(angle, relativeTo); }
89            inline void roll(const Radian &angle, Ogre::Node::TransformSpace relativeTo=Ogre::Node::TS_LOCAL)
90                { this->node_->roll(angle, relativeTo); }
91            void setYawPitchRoll(const Degree& yaw, const Degree& pitch, const Degree& roll);
92
93            inline void setYaw(const Degree &angle)
94                { this->node_->yaw(angle, Ogre::Node::TS_LOCAL); }
95            inline void setPitch(const Degree &angle)
96                { this->node_->pitch(angle, Ogre::Node::TS_LOCAL); }
97            inline void setRoll(const Degree &angle)
98                { this->node_->roll(angle, Ogre::Node::TS_LOCAL); }
99
100            inline const Ogre::Quaternion& getOrientation()
101              { return this->node_->getOrientation(); }
102            inline void setOrientation(const Ogre::Quaternion& quat)
103              { this->node_->setOrientation(quat); }
104            inline void rotate(const Vector3 &axis, const Radian &angle, Ogre::Node::TransformSpace relativeTo=Ogre::Node::TS_LOCAL)
105              { this->node_->rotate(axis, angle, relativeTo); }
106            inline void setDirectionLoader(Real x, Real y, Real z)
107              { this->setDirection(x, y, z); }
108            inline void setDirection(Real x, Real y, Real z, Ogre::Node::TransformSpace relativeTo=Ogre::Node::TS_LOCAL, const Vector3 &localDirectionVector=Vector3::NEGATIVE_UNIT_Z)
109              { this->node_->setDirection(x, y, z, relativeTo, localDirectionVector); }
110            inline void setDirection(const Vector3 &vec, Ogre::Node::TransformSpace relativeTo=Ogre::Node::TS_LOCAL, const Vector3 &localDirectionVector=Vector3::NEGATIVE_UNIT_Z)
111              { this->node_->setDirection(vec, relativeTo, localDirectionVector); }
112            inline void lookAt(const Vector3 &targetPoint, Ogre::Node::TransformSpace relativeTo, const Vector3 &localDirectionVector=Vector3::NEGATIVE_UNIT_Z)
113              { this->node_->lookAt(targetPoint, relativeTo, localDirectionVector); }
114
115            inline void setScale(const Vector3 &scale)
116              { this->node_->setScale(scale); }
117            inline void setScale(Real x, Real y, Real z)
118              { this->node_->setScale(x, y, z); }
119            inline void setScale(Real scale)
120              { this->node_->setScale(scale, scale, scale); }
121            inline void setTotalScale(Real scale)
122              { this->node_->setScale(scale, scale, scale); }
123            inline const Vector3& getScale(void) const
124              { return this->node_->getScale(); }
125            inline void scale(const Vector3 &scale)
126              { this->node_->scale(scale); }
127            inline void scale(Real x, Real y, Real z)
128              { this->node_->scale(x, y, z); }
129            inline void scale(Real scale)
130              { this->node_->scale(scale, scale, scale); }
131
132            inline void attachObject(Ogre::MovableObject *obj)
133              { this->node_->attachObject(obj); }
134            inline void attachObject(Mesh &mesh)
135              { this->node_->attachObject(mesh.getEntity()); }
136            inline void detachObject(Ogre::MovableObject *obj)
137              { this->node_->detachObject(obj); }
138            inline void detachAllObjects()
139              { this->node_->detachAllObjects(); }
140
141            inline void setVelocity(const Vector3& velocity)
142                { this->velocity_ = velocity; }
143            inline void setVelocity(Real x, Real y, Real z)
144                { this->velocity_.x = x; this->velocity_.y = y; this->velocity_.z = z; }
145            inline const Vector3& getVelocity() const
146                { return this->velocity_; }
147
148            inline void setAcceleration(const Vector3& acceleration)
149                { this->acceleration_ = acceleration; }
150            inline void setAcceleration(Real x, Real y, Real z)
151                { this->acceleration_.x = x; this->acceleration_.y = y; this->acceleration_.z = z; }
152            inline const Vector3& getAcceleration() const
153                { return this->acceleration_; }
154
155            inline void setRotationAxisLoader(const Vector3& axis)
156                { this->rotationAxis_ = axis; }
157            inline void setRotationAxis(const Vector3& axis)
158                { this->rotationAxis_ = axis; }
159            inline void setRotationAxis(Real x, Real y, Real z)
160                { this->rotationAxis_.x = x; this->rotationAxis_.y = y; this->rotationAxis_.z = z; }
161            inline const Vector3& getRotationAxis() const
162                { return this->rotationAxis_; }
163
164//            inline void setRotationRate(const Radian& angle)
165//                { this->rotationRate_ = angle; }
166            inline void setRotationRate(const Degree& angle)
167                { this->rotationRate_ = angle; this->setStatic(angle == Degree(0)); }
168            inline const Radian& getRotationRate() const
169                { return this->rotationRate_; }
170
171            inline void setMomentum(const Radian& angle)
172                { this->momentum_ = angle; }
173            inline void setMomentum(const Degree& angle)
174                { this->momentum_ = angle; }
175            inline const Radian& getMomentum() const
176                { return this->momentum_; }
177
178            inline void setStatic(bool bStatic)
179                { this->bStatic_ = bStatic; }
180            inline bool isStatic()
181                { return this->bStatic_; }
182
183        protected:
184            void registerAllVariables();
185
186            Vector3 velocity_;
187            Vector3 acceleration_;
188            Vector3 rotationAxis_;
189            Radian rotationRate_;
190            Radian momentum_;
191
192        private:
193            static unsigned int worldEntityCounter_s;
194            Ogre::SceneNode* node_;
195            bool bStatic_;
196            std::vector<WorldEntity*> attachedWorldEntities_;
197    };
198}
199
200#endif /* _WorldEntity_H__ */
Note: See TracBrowser for help on using the repository browser.