Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

Last change on this file since 8721 was 8706, checked in by dafrick, 14 years ago

Merging presentation branch back into trunk.
There are many new features and also a lot of other changes and bugfixes, if you want to know, digg through the svn log.
Not everything is yet working as it should, but it should be fairly stable. If you habe any bug reports, just send me an email.

  • Property svn:eol-style set to native
File size: 4.5 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    class _OrxonoxExport MobileEntity : public WorldEntity, public Tickable
41    {
42        public:
43            MobileEntity(BaseObject* creator);
44            virtual ~MobileEntity();
45
46            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
47            virtual void tick(float dt);
48
49            virtual void setPosition(const Vector3& position);
50            virtual void setOrientation(const Quaternion& orientation);
51
52            virtual void setVelocity(const Vector3& velocity);
53            inline void setVelocity(float x, float y, float z)
54                { this->setVelocity(Vector3(x, y, z)); }
55            inline const Vector3& getVelocity() const
56                { return this->linearVelocity_; }
57            inline Vector3 getLocalVelocity() const
58                { return (this->getOrientation().Inverse() * this->getVelocity()); }
59
60            virtual void setAngularVelocity(const Vector3& velocity);
61            inline void setAngularVelocity(float x, float y, float z)
62                { this->setAngularVelocity(Vector3(x, y, z)); }
63            inline const Vector3& getAngularVelocity() const
64                { return this->angularVelocity_; }
65
66            void setAcceleration(const Vector3& acceleration);
67            inline void setAcceleration(float x, float y, float z)
68                { this->setAcceleration(Vector3(x, y, z)); }
69            inline const Vector3& getAcceleration() const
70                { return this->linearAcceleration_; }
71
72            // Added for making N engines work with spaceships
73            void addAcceleration(const Vector3& acceleration, const Vector3 &relativePosition);
74            inline void addAcceleration(float x, float y, float z)
75                { this->addAcceleration(Vector3(x, y, z), Vector3(0,0,0)); }
76            // Getter function above
77
78            void setAngularAcceleration(const Vector3& acceleration);
79            inline void setAngularAcceleration(float x, float y, float z)
80                { this->setAngularAcceleration(Vector3(x, y, z)); }
81            inline const Vector3& getAngularAcceleration() const
82                { return this->angularAcceleration_; }
83
84            void applyCentralForce(const Vector3& force);
85            inline void applyCentralForce(float x, float y, float z)
86                { this->applyCentralForce(Vector3(x, y, z)); }
87
88            inline void setRotationRate(Degree rate)
89                { this->setAngularVelocity(this->getAngularVelocity().normalisedCopy() * rate.valueRadians()); }
90            inline Degree getRotationRate() const
91                { return Radian(this->getAngularVelocity().length()); }
92
93            inline void setRotationAxis(const Vector3& axis)
94                { this->setAngularVelocity(axis * this->getAngularVelocity().length()); }
95            inline Vector3 getRotationAxis() const
96                { return this->getAngularVelocity().normalisedCopy(); }
97
98        protected:
99            // Bullet btMotionState related
100            virtual void setWorldTransform(const btTransform& worldTrans);
101            void getWorldTransform(btTransform& worldTrans) const;
102
103            Vector3 linearAcceleration_;
104            Vector3 linearVelocity_;
105            Vector3 angularAcceleration_;
106            Vector3 angularVelocity_;
107
108        private:
109            virtual bool isCollisionTypeLegal(WorldEntity::CollisionType type) const;
110    };
111}
112
113#endif /* _MobileEntity_H__ */
Note: See TracBrowser for help on using the repository browser.