Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/trunk/src/orxonox/worldentities/MobileEntity.h @ 10938

Last change on this file since 10938 was 10437, checked in by fvultier, 10 years ago

Removed unnecessary output to console in kump minigame. Added a small description to some classes often used by PPS students: Pawn, StaticEntity, MobileEntity, ControllableEntity.

  • Property svn:eol-style set to native
File size: 5.4 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 *      Reto Grieder
24 *   Co-authors:
25 *      Martin Stypinski
26 *
27 */
28
29#ifndef _MobileEntity_H__
30#define _MobileEntity_H__
31
32#include "OrxonoxPrereqs.h"
33
34#include "util/Math.h"
35#include "tools/interfaces/Tickable.h"
36#include "WorldEntity.h"
37
38namespace orxonox
39{
40    /**
41    @brief
42        The MobileEntity is a derived class from @ref orxonox::WorldEntity and @ref orxonox::Tickable. It is supposed to be the base class of
43        @ref orxonox::MovableEntity and @ref orxonox::ControllableEntity. You will never need to instanciate a MobileEntity directly.
44        Use only its derivatives.
45        In addition to the functionalities of the @ref orxonox::WorldEntity this class has a linear and angular velocity and a linear and angular acceleration.
46        Every time the @see tick function is called the linear acceleration is multiplied by the time since the last call of tick and then added to the
47        linear velocity. Then the linear velocity is multiplied by the time since the last call of tick and then added to the position. The same happens with
48        the angular acceleration and velocity. With this procedure MobileEntities can change their position and orientation with time.
49    */
50
51    class _OrxonoxExport MobileEntity : public WorldEntity, public Tickable
52    {
53        public:
54            MobileEntity(Context* context);
55            virtual ~MobileEntity();
56
57            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
58            virtual void tick(float dt);
59
60            virtual void setPosition(const Vector3& position);
61            virtual void setOrientation(const Quaternion& orientation);
62
63            virtual void setVelocity(const Vector3& velocity);
64            inline void setVelocity(float x, float y, float z)
65                { this->setVelocity(Vector3(x, y, z)); }
66            inline const Vector3& getVelocity() const
67                { return this->linearVelocity_; }
68            /**
69            @brief Get the velocity in the coordinate-system of the MoblieEntity.
70            @return Returns the velocity of the MobileEntity in its coordinate-system.
71            */
72            inline Vector3 getLocalVelocity() const
73                { return (this->getOrientation().Inverse() * this->getVelocity()); }
74
75            virtual void setAngularVelocity(const Vector3& velocity);
76            inline void setAngularVelocity(float x, float y, float z)
77                { this->setAngularVelocity(Vector3(x, y, z)); }
78            inline const Vector3& getAngularVelocity() const
79                { return this->angularVelocity_; }
80
81            void setAcceleration(const Vector3& acceleration);
82            inline void setAcceleration(float x, float y, float z)
83                { this->setAcceleration(Vector3(x, y, z)); }
84            inline const Vector3& getAcceleration() const
85                { return this->linearAcceleration_; }
86            void addAcceleration(const Vector3& acceleration, const Vector3 &relativePosition = Vector3::ZERO); // Adds the input acceleration at the input position to the MobileEntity.
87
88            void setAngularAcceleration(const Vector3& acceleration);
89            inline void setAngularAcceleration(float x, float y, float z)
90                { this->setAngularAcceleration(Vector3(x, y, z)); }
91            inline const Vector3& getAngularAcceleration() const
92                { return this->angularAcceleration_; }
93
94            void applyCentralForce(const Vector3& force);
95            inline void applyCentralForce(float x, float y, float z)
96                { this->applyCentralForce(Vector3(x, y, z)); }
97
98            inline void setRotationRate(Degree rate)
99                { this->setAngularVelocity(this->getAngularVelocity().normalisedCopy() * rate.valueRadians()); }
100            inline Degree getRotationRate() const
101                { return Radian(this->getAngularVelocity().length()); }
102
103            inline void setRotationAxis(const Vector3& axis)
104                { this->setAngularVelocity(axis * this->getAngularVelocity().length()); }
105            inline Vector3 getRotationAxis() const
106                { return this->getAngularVelocity().normalisedCopy(); }
107
108        protected:
109            // Bullet btMotionState related
110            virtual void setWorldTransform(const btTransform& worldTrans);
111            void getWorldTransform(btTransform& worldTrans) const;
112
113            Vector3 linearAcceleration_;
114            Vector3 linearVelocity_;
115            Vector3 angularAcceleration_;
116            Vector3 angularVelocity_;
117
118        private:
119            virtual bool isCollisionTypeLegal(WorldEntity::CollisionType type) const;
120    };
121}
122
123#endif /* _MobileEntity_H__ */
Note: See TracBrowser for help on using the repository browser.