Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/questsystem5/src/orxonox/objects/worldentities/ControllableEntity.h @ 2957

Last change on this file since 2957 was 2908, checked in by dafrick, 16 years ago

Reverted to revision 2906 (because I'm too stupid to merge correctly, 2nd try will follow shortly. ;))

  • Property svn:eol-style set to native
File size: 6.9 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 *      Reto Grieder
26 *
27 */
28
29#ifndef _ControllableEntity_H__
30#define _ControllableEntity_H__
31
32#include "OrxonoxPrereqs.h"
33
34#include "MobileEntity.h"
35#include "objects/weaponSystem/WeaponSystem.h"
36
37namespace orxonox
38{
39    class _OrxonoxExport ControllableEntity : public MobileEntity
40    {
41        public:
42            ControllableEntity(BaseObject* creator);
43            virtual ~ControllableEntity();
44
45            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
46            virtual void tick(float dt);
47            void registerVariables();
48            void setConfigValues();
49
50            virtual void changedGametype();
51
52            virtual void setPlayer(PlayerInfo* player);
53            virtual void removePlayer();
54            inline PlayerInfo* getPlayer() const
55                { return this->player_; }
56
57            inline void setDestroyWhenPlayerLeft(bool bDestroy)
58                { this->bDestroyWhenPlayerLeft_ = bDestroy; }
59            inline bool getDestroyWhenPlayerLeft() const
60                { return this->bDestroyWhenPlayerLeft_; }
61
62            virtual void moveFrontBack(const Vector2& value) {}
63            virtual void moveRightLeft(const Vector2& value) {}
64            virtual void moveUpDown(const Vector2& value) {}
65
66            virtual void rotateYaw(const Vector2& value);
67            virtual void rotatePitch(const Vector2& value);
68            virtual void rotateRoll(const Vector2& value);
69
70            inline void moveFrontBack(float value)
71                { this->moveFrontBack(Vector2(value, 0)); }
72            inline void moveRightLeft(float value)
73                { this->moveRightLeft(Vector2(value, 0)); }
74            inline void moveUpDown(float value)
75                { this->moveUpDown(Vector2(value, 0)); }
76
77            inline void rotateYaw(float value)
78                { this->rotateYaw(Vector2(value, 0)); }
79            inline void rotatePitch(float value)
80                { this->rotatePitch(Vector2(value, 0)); }
81            inline void rotateRoll(float value)
82                { this->rotateRoll(Vector2(value, 0)); }
83
84            virtual void fire(WeaponMode::Enum fireMode) {}
85            virtual void altFire(WeaponMode::Enum fireMode) {}
86
87            virtual void boost() {}
88            virtual void greet() {}
89            virtual void use() {}
90            virtual void dropItems() {}
91            virtual void switchCamera();
92            virtual void mouseLook();
93
94            inline const std::string& getHudTemplate() const
95                { return this->hudtemplate_; }
96
97            inline Camera* getCamera() const
98                { return this->camera_; }
99            inline OverlayGroup* getHUD() const
100                { return this->hud_; }
101
102            void addCameraPosition(CameraPosition* position);
103            CameraPosition* getCameraPosition(unsigned int index) const;
104            inline const std::list<CameraPosition*>& getCameraPositions() const
105                { return this->cameraPositions_; }
106
107            inline void setCameraPositionTemplate(const std::string& name)
108                { this->cameraPositionTemplate_ = name; }
109            inline const std::string& getCameraPositionTemkplate() const
110                { return this->cameraPositionTemplate_; }
111
112            using WorldEntity::setPosition;
113            using WorldEntity::setOrientation;
114            using MobileEntity::setVelocity;
115            using MobileEntity::setAngularVelocity;
116
117            void setPosition(const Vector3& position);
118            void setOrientation(const Quaternion& orientation);
119            void setVelocity(const Vector3& velocity);
120            void setAngularVelocity(const Vector3& velocity);
121
122            inline bool hasLocalController() const
123                { return this->bHasLocalController_; }
124            inline bool hasHumanController() const
125                { return this->bHasHumanController_; }
126
127            inline const GametypeInfo* getGametypeInfo() const
128                { return this->gtinfo_; }
129
130            inline bool isInMouseLook() const
131                { return this->bMouseLook_; }
132            inline float getMouseLookSpeed() const
133                { return this->mouseLookSpeed_; }
134
135        protected:
136            virtual void startLocalHumanControl();
137            virtual void stopLocalHumanControl();
138
139            inline void setHudTemplate(const std::string& name)
140                { this->hudtemplate_ = name; }
141
142        private:
143            void overwrite();
144            void processOverwrite();
145
146            void processServerPosition();
147            void processServerLinearVelocity();
148            void processServerOrientation();
149            void processServerAngularVelocity();
150
151            void processClientPosition();
152            void processClientLinearVelocity();
153            void processClientOrientation();
154            void processClientAngularVelocity();
155
156            void networkcallback_changedplayerID();
157            void networkcallback_changedgtinfoID();
158
159            // Bullet btMotionState related
160            void setWorldTransform(const btTransform& worldTrans);
161
162            unsigned int server_overwrite_;
163            unsigned int client_overwrite_;
164
165            bool bHasLocalController_;
166            bool bHasHumanController_;
167            bool bDestroyWhenPlayerLeft_;
168
169            Vector3 server_position_;
170            Vector3 client_position_;
171            Vector3 server_linear_velocity_;
172            Vector3 client_linear_velocity_;
173            Quaternion server_orientation_;
174            Quaternion client_orientation_;
175            Vector3 server_angular_velocity_;
176            Vector3 client_angular_velocity_;
177
178            PlayerInfo* player_;
179            unsigned int playerID_;
180
181            std::string hudtemplate_;
182            OverlayGroup* hud_;
183
184            Camera* camera_;
185            bool bMouseLook_;
186            float mouseLookSpeed_;
187            Ogre::SceneNode* cameraPositionRootNode_;
188            std::list<CameraPosition*> cameraPositions_;
189            std::string cameraPositionTemplate_;
190
191            const GametypeInfo* gtinfo_;
192            unsigned int gtinfoID_;
193    };
194}
195
196#endif /* _ControllableEntity_H__ */
Note: See TracBrowser for help on using the repository browser.