Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/netp3/src/orxonox/objects/worldentities/ControllableEntity.h @ 3004

Last change on this file since 3004 was 3004, checked in by scheusso, 15 years ago

reverted changes of ControllableEntity
synchronisation now again with server and client values and overwrites (unidirectional)
problem with bidirectional synchronisation was the combination with bullet (lots of changes of client ships on the server side and thus lag in synchronisation)

  • Property svn:eol-style set to native
File size: 6.7 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 changedPlayer() {}
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 bool isInMouseLook() const
128                { return this->bMouseLook_; }
129            inline float getMouseLookSpeed() const
130                { return this->mouseLookSpeed_; }
131
132        protected:
133            virtual void startLocalHumanControl();
134            virtual void stopLocalHumanControl();
135            virtual void parentChanged();
136
137            inline void setHudTemplate(const std::string& name)
138                { this->hudtemplate_ = name; }
139
140        private:
141            void overwrite();
142            void processOverwrite();
143
144            void processServerPosition();
145            void processServerLinearVelocity();
146            void processServerOrientation();
147            void processServerAngularVelocity();
148
149            void processClientPosition();
150            void processClientLinearVelocity();
151            void processClientOrientation();
152            void processClientAngularVelocity();
153
154            void networkcallback_changedplayerID();
155
156            // Bullet btMotionState related
157            void setWorldTransform(const btTransform& worldTrans);
158
159            unsigned int server_overwrite_;
160            unsigned int client_overwrite_;
161
162            bool bHasLocalController_;
163            bool bHasHumanController_;
164            bool bDestroyWhenPlayerLeft_;
165
166            Vector3 server_position_;
167            Vector3 client_position_;
168            Vector3 server_linear_velocity_;
169            Vector3 client_linear_velocity_;
170            Quaternion server_orientation_;
171            Quaternion client_orientation_;
172            Vector3 server_angular_velocity_;
173            Vector3 client_angular_velocity_;
174
175            PlayerInfo* player_;
176            unsigned int playerID_;
177
178            std::string hudtemplate_;
179            OverlayGroup* hud_;
180
181            Camera* camera_;
182            bool bMouseLook_;
183            float mouseLookSpeed_;
184            Ogre::SceneNode* cameraPositionRootNode_;
185            std::list<CameraPosition*> cameraPositions_;
186            std::string cameraPositionTemplate_;
187    };
188}
189
190#endif /* _ControllableEntity_H__ */
Note: See TracBrowser for help on using the repository browser.