Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

Last change on this file since 889 was 871, checked in by landauf, 17 years ago

merged core branch to trunk

File size: 8.5 KB
RevLine 
[497]1#ifndef _WorldEntity_H__
2#define _WorldEntity_H__
3
[637]4#include <OgreSceneManager.h>
5#include <OgreSceneNode.h>
6
[708]7#include "../OrxonoxPrereqs.h"
8
[742]9#include "util/Math.h"
[871]10#include "util/XMLIncludes.h"
[637]11#include "network/Synchronisable.h"
[871]12//#include "util/tinyxml/tinyxml.h"
[774]13#include "core/BaseObject.h"
[497]14#include "Tickable.h"
[768]15#include "../tools/Mesh.h"
[497]16
17namespace orxonox
18{
[871]19    class _OrxonoxExport WorldEntity : public BaseObject, public Tickable//, public network::Synchronisable
20    {
21        public:
22            WorldEntity();
23            virtual ~WorldEntity();
[497]24
[871]25            virtual void tick(float dt);
26            virtual void loadParams(TiXmlElement* xmlElem);
27            virtual void XMLPort(Element& xmlelement, bool loading);
28            bool create();
[643]29
[871]30            void attachWorldEntity(WorldEntity* entity);
31            const WorldEntity* getAttachedWorldEntity(unsigned int index);
[497]32
[871]33            inline Ogre::SceneNode* getNode()
34                { return this->node_; }
[580]35
[871]36            inline void setNode(Ogre::SceneNode* node)
37                { this->node_ = node; }
[497]38
[871]39            inline void setPosition(const Vector3& pos)
40                { this->node_->setPosition(pos); }
41            inline void setPositionLoader1(const Vector3& pos)
42                { this->node_->setPosition(pos); }
43            inline void setPositionLoader2(Real x, Real y, Real z)
44                { this->node_->setPosition(x, y, z); }
45            inline void setPosition(Real x, Real y, Real z)
46                { this->node_->setPosition(x, y, z); }
47            inline const Vector3& getPosition() const
48                { return this->node_->getPosition(); }
[497]49
[871]50            inline void translate(const Vector3 &d, Ogre::Node::TransformSpace relativeTo=Ogre::Node::TS_PARENT)
51                { this->node_->translate(d, relativeTo); }
52            inline void translate(Real x, Real y, Real z, Ogre::Node::TransformSpace relativeTo=Ogre::Node::TS_PARENT)
53                { this->node_->translate(x, y, z, relativeTo); }
54            inline void translate(const Matrix3 &axes, const Vector3 &move, Ogre::Node::TransformSpace relativeTo=Ogre::Node::TS_PARENT)
55                { this->node_->translate(axes, move, relativeTo); }
56            inline void translate(const Matrix3 &axes, Real x, Real y, Real z, Ogre::Node::TransformSpace relativeTo=Ogre::Node::TS_PARENT)
57                { this->node_->translate(axes, x, y, z, relativeTo); }
[497]58
[871]59            inline void yaw(const Radian &angle, Ogre::Node::TransformSpace relativeTo=Ogre::Node::TS_LOCAL)
60                { this->node_->yaw(angle, relativeTo); }
61            inline void pitch(const Radian &angle, Ogre::Node::TransformSpace relativeTo=Ogre::Node::TS_LOCAL)
62                { this->node_->pitch(angle, relativeTo); }
63            inline void roll(const Radian &angle, Ogre::Node::TransformSpace relativeTo=Ogre::Node::TS_LOCAL)
64                { this->node_->roll(angle, relativeTo); }
65            void setYawPitchRoll(const Degree& yaw, const Degree& pitch, const Degree& roll);
[497]66
[871]67            inline void setYaw(const Degree &angle)
68                { this->node_->yaw(angle, Ogre::Node::TS_LOCAL); }
69            inline void setPitch(const Degree &angle)
70                { this->node_->pitch(angle, Ogre::Node::TS_LOCAL); }
71            inline void setRoll(const Degree &angle)
72                { this->node_->roll(angle, Ogre::Node::TS_LOCAL); }
[576]73
[871]74            inline const Ogre::Quaternion& getOrientation()
75              { return this->node_->getOrientation(); }
76            inline void setOrientation(const Ogre::Quaternion& quat)
77              { this->node_->setOrientation(quat); }
78            inline void rotate(const Vector3 &axis, const Radian &angle, Ogre::Node::TransformSpace relativeTo=Ogre::Node::TS_LOCAL)
79              { this->node_->rotate(axis, angle, relativeTo); }
80            inline void setDirectionLoader(Real x, Real y, Real z)
81              { this->setDirection(x, y, z); }
82            inline void setDirection(Real x, Real y, Real z, Ogre::Node::TransformSpace relativeTo=Ogre::Node::TS_LOCAL, const Vector3 &localDirectionVector=Vector3::NEGATIVE_UNIT_Z)
83              { this->node_->setDirection(x, y, z, relativeTo, localDirectionVector); }
84            inline void setDirection(const Vector3 &vec, Ogre::Node::TransformSpace relativeTo=Ogre::Node::TS_LOCAL, const Vector3 &localDirectionVector=Vector3::NEGATIVE_UNIT_Z)
85              { this->node_->setDirection(vec, relativeTo, localDirectionVector); }
86            inline void lookAt(const Vector3 &targetPoint, Ogre::Node::TransformSpace relativeTo, const Vector3 &localDirectionVector=Vector3::NEGATIVE_UNIT_Z)
87              { this->node_->lookAt(targetPoint, relativeTo, localDirectionVector); }
[497]88
[871]89            inline void setScale(const Vector3 &scale)
90              { this->node_->setScale(scale); }
91            inline void setScale(Real x, Real y, Real z)
92              { this->node_->setScale(x, y, z); }
93            inline void setScale(Real scale)
94              { this->node_->setScale(scale, scale, scale); }
95            inline void setTotalScale(Real scale)
96              { this->node_->setScale(scale, scale, scale); }
97            inline const Vector3& getScale(void) const
98              { return this->node_->getScale(); }
99            inline void scale(const Vector3 &scale)
100              { this->node_->scale(scale); }
101            inline void scale(Real x, Real y, Real z)
102              { this->node_->scale(x, y, z); }
103            inline void scale(Real scale)
104              { this->node_->scale(scale, scale, scale); }
[497]105
[871]106            inline void attachObject(Ogre::MovableObject *obj)
107              { this->node_->attachObject(obj); }
108            inline void attachObject(Mesh &mesh)
109              { this->node_->attachObject(mesh.getEntity()); }
110            inline void detachObject(Ogre::MovableObject *obj)
111              { this->node_->detachObject(obj); }
112            inline void detachAllObjects()
113              { this->node_->detachAllObjects(); }
[497]114
[871]115            inline void setVelocity(const Vector3& velocity)
116                { this->velocity_ = velocity; }
117            inline void setVelocity(Real x, Real y, Real z)
118                { this->velocity_.x = x; this->velocity_.y = y; this->velocity_.z = z; }
119            inline const Vector3& getVelocity() const
120                { return this->velocity_; }
[497]121
[871]122            inline void setAcceleration(const Vector3& acceleration)
123                { this->acceleration_ = acceleration; }
124            inline void setAcceleration(Real x, Real y, Real z)
125                { this->acceleration_.x = x; this->acceleration_.y = y; this->acceleration_.z = z; }
126            inline const Vector3& getAcceleration() const
127                { return this->acceleration_; }
[497]128
[871]129            inline void setRotationAxisLoader(const Vector3& axis)
130                { this->rotationAxis_ = axis; }
131            inline void setRotationAxis(const Vector3& axis)
132                { this->rotationAxis_ = axis; }
133            inline void setRotationAxis(Real x, Real y, Real z)
134                { this->rotationAxis_.x = x; this->rotationAxis_.y = y; this->rotationAxis_.z = z; }
135            inline const Vector3& getRotationAxis() const
136                { return this->rotationAxis_; }
[576]137
[871]138//            inline void setRotationRate(const Radian& angle)
139//                { this->rotationRate_ = angle; }
140            inline void setRotationRate(const Degree& angle)
141                { this->rotationRate_ = angle; this->setStatic(angle == Degree(0)); }
142            inline const Radian& getRotationRate() const
143                { return this->rotationRate_; }
[622]144
[871]145            inline void setMomentum(const Radian& angle)
146                { this->momentum_ = angle; }
147            inline void setMomentum(const Degree& angle)
148                { this->momentum_ = angle; }
149            inline const Radian& getMomentum() const
150                { return this->momentum_; }
[576]151
[871]152            inline void setStatic(bool bStatic)
153                { this->bStatic_ = bStatic; }
154            inline bool isStatic()
155                { return this->bStatic_; }
[647]156
[871]157        protected:
158            void registerAllVariables();
159
160            Vector3 velocity_;
161            Vector3 acceleration_;
162            Vector3 rotationAxis_;
163            Radian rotationRate_;
164            Radian momentum_;
165
166        private:
167            static unsigned int worldEntityCounter_s;
168            Ogre::SceneNode* node_;
169            bool bStatic_;
170            std::vector<WorldEntity*> attachedWorldEntities_;
171    };
[497]172}
173
[673]174#endif /* _WorldEntity_H__ */
Note: See TracBrowser for help on using the repository browser.