Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/objecthierarchy/src/orxonox/objects/worldentities/ControllableEntity.h @ 1989

Last change on this file since 1989 was 1989, checked in by landauf, 16 years ago
  • added ControllableEntity, the baseclass of all players, vehicles and ships.
  • moved Template to core
  • some changes in Camera
  • added 6 constants to WorldEntity to identify relative directions
  • changed vom Radian to Degree as default angle unit
File size: 5.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 *      Fabian 'x3n' Landau
24 *   Co-authors:
25 *      ...
26 *
27 */
28
29#ifndef _ControllableEntity_H__
30#define _ControllableEntity_H__
31
32#include "OrxonoxPrereqs.h"
33
34#include "WorldEntity.h"
35#include "objects/Tickable.h"
36
37namespace orxonox
38{
39    class _OrxonoxExport ControllableEntity : public WorldEntity, public Tickable
40    {
41        public:
42            ControllableEntity();
43            virtual ~ControllableEntity();
44
45            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
46            virtual void tick(float dt);
47            void registerVariables();
48
49            virtual void setPlayer(PlayerInfo* player);
50            virtual void removePlayer();
51            inline PlayerInfo* getPlayer() const
52                { return this->player_; }
53
54            virtual void startLocalControl();
55            virtual void stopLocalControl();
56
57            virtual void moveFrontBack(float value) {}
58            virtual void moveRightLeft(float value) {}
59            virtual void moveUpDown(float value) {}
60
61            virtual void rotateYaw(float value) {}
62            virtual void rotatePitch(float value) {}
63            virtual void rotateRoll(float value) {}
64
65            virtual void fire() {}
66            virtual void altFire() {}
67
68            virtual void greet() {}
69            virtual void use() {}
70            virtual void switchCamera() {}
71
72        protected:
73            using WorldEntity::setPosition;
74            using WorldEntity::translate;
75            using WorldEntity::setOrientation;
76            using WorldEntity::rotate;
77            using WorldEntity::lookAt;
78            using WorldEntity::setDirection;
79
80            void setPosition(const Vector3& position);
81            void translate(const Vector3& distance, Ogre::Node::TransformSpace relativeTo = Ogre::Node::TS_LOCAL);
82            void setOrientation(const Quaternion& orientation);
83            void rotate(const Quaternion& rotation, Ogre::Node::TransformSpace relativeTo = Ogre::Node::TS_LOCAL);
84            void yaw(const Degree& angle, Ogre::Node::TransformSpace relativeTo = Ogre::Node::TS_LOCAL);
85            void pitch(const Degree& angle, Ogre::Node::TransformSpace relativeTo = Ogre::Node::TS_LOCAL);
86            void roll(const Degree& angle, Ogre::Node::TransformSpace relativeTo = Ogre::Node::TS_LOCAL);
87            void lookAt(const Vector3& target, Ogre::Node::TransformSpace relativeTo = Ogre::Node::TS_LOCAL, const Vector3& localDirectionVector = Vector3::NEGATIVE_UNIT_Z);
88            void setDirection(const Vector3& direction, Ogre::Node::TransformSpace relativeTo = Ogre::Node::TS_LOCAL, const Vector3& localDirectionVector = Vector3::NEGATIVE_UNIT_Z);
89
90            void setVelocity(const Vector3& velocity);
91            inline void setVelocity(float x, float y, float z)
92                { this->velocity_.x = x; this->velocity_.y = y; this->velocity_.z = z; }
93            inline const Vector3& getVelocity() const
94                { return this->velocity_; }
95
96            inline void setAcceleration(const Vector3& acceleration)
97                { this->acceleration_ = acceleration; }
98            inline void setAcceleration(float x, float y, float z)
99                { this->acceleration_.x = x; this->acceleration_.y = y; this->acceleration_.z = z; }
100            inline const Vector3& getAcceleration() const
101                { return this->acceleration_; }
102
103        private:
104            inline void setHudTemplate(const std::string& name)
105                { this->hudtemplate_ = name; }
106            inline const std::string& getHudTemplate() const
107                { return this->hudtemplate_; }
108
109            void overwrite();
110            void processOverwrite();
111
112            void processServerPosition();
113            void processServerVelocity();
114            void processServerOrientation();
115
116            void processClientPosition();
117            void processClientVelocity();
118            void processClientOrientation();
119
120            void updatePlayer();
121
122            unsigned int server_overwrite_;
123            unsigned int client_overwrite_;
124
125            Vector3 velocity_;
126            Vector3 acceleration_;
127
128            bool bControlled_;
129            Vector3 server_position_;
130            Vector3 client_position_;
131            Vector3 server_velocity_;
132            Vector3 client_velocity_;
133            Quaternion server_orientation_;
134            Quaternion client_orientation_;
135
136            PlayerInfo* player_;
137            unsigned int playerID_;
138            std::string hudtemplate_;
139            OverlayGroup* hud_;
140            Camera* camera_;
141    };
142}
143
144#endif /* _ControllableEntity_H__ */
Note: See TracBrowser for help on using the repository browser.