Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/network2/src/orxonox/worldentities/ControllableEntity.h @ 6457

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

made registerVariables always private. otherwise bad things may happen with variables registered twice or even 3 times (as has happened in ControllableEntity until now)

  • Property svn:eol-style set to native
File size: 8.0 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 <list>
35#include <string>
36#include "util/Math.h"
37#include "MobileEntity.h"
38
39namespace orxonox
40{
41    class _OrxonoxExport ControllableEntity : public MobileEntity
42    {
43        friend class PlayerInfo; // PlayerInfo uses setPlayer and removePlayer
44
45        public:
46            ControllableEntity(BaseObject* creator);
47            virtual ~ControllableEntity();
48
49            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
50            virtual void tick(float dt);
51            void setConfigValues();
52
53            virtual void changedPlayer() {}
54
55            inline PlayerInfo* getPlayer() const
56                { return this->player_; }
57
58            inline void setDestroyWhenPlayerLeft(bool bDestroy)
59                { this->bDestroyWhenPlayerLeft_ = bDestroy; }
60            inline bool getDestroyWhenPlayerLeft() const
61                { return this->bDestroyWhenPlayerLeft_; }
62
63            virtual void moveFrontBack(const Vector2& value) {}
64            virtual void moveRightLeft(const Vector2& value) {}
65            virtual void moveUpDown(const Vector2& value) {}
66
67            virtual void rotateYaw(const Vector2& value);
68            virtual void rotatePitch(const Vector2& value);
69            virtual void rotateRoll(const Vector2& value);
70
71            inline void moveFrontBack(float value)
72                { this->moveFrontBack(Vector2(value, 0)); }
73            inline void moveRightLeft(float value)
74                { this->moveRightLeft(Vector2(value, 0)); }
75            inline void moveUpDown(float value)
76                { this->moveUpDown(Vector2(value, 0)); }
77
78            inline void rotateYaw(float value)
79                { this->rotateYaw(Vector2(value, 0)); }
80            inline void rotatePitch(float value)
81                { this->rotatePitch(Vector2(value, 0)); }
82            inline void rotateRoll(float value)
83                { this->rotateRoll(Vector2(value, 0)); }
84
85            void fire(unsigned int firemode);
86            virtual void fired(unsigned int firemode) {}
87            virtual void reload() {}
88
89            virtual void boost() {}
90            virtual void greet() {}
91            virtual void useItem() {}
92            virtual void dropItems() {}
93            virtual void switchCamera();
94            virtual void mouseLook();
95
96            inline const std::string& getHudTemplate() const
97                { return this->hudtemplate_; }
98
99            inline Camera* getCamera() const
100                { return this->camera_; }
101            inline OverlayGroup* getHUD() const
102                { return this->hud_; }
103
104            void addCameraPosition(CameraPosition* position);
105            CameraPosition* getCameraPosition(unsigned int index) const;
106            inline const std::list<SmartPtr<CameraPosition> >& getCameraPositions() const
107                { return this->cameraPositions_; }
108
109            inline void setCameraPositionTemplate(const std::string& name)
110                { this->cameraPositionTemplate_ = name; }
111            inline const std::string& getCameraPositionTemkplate() const
112                { return this->cameraPositionTemplate_; }
113
114            inline void setReverseCamera(CameraPosition* camera)
115                { this->reverseCamera_ = camera; }
116            inline CameraPosition* getReverseCamera() const
117                { return this->reverseCamera_; }
118
119            using WorldEntity::setPosition;
120            using WorldEntity::setOrientation;
121            using MobileEntity::setVelocity;
122            using MobileEntity::setAngularVelocity;
123
124            void setPosition(const Vector3& position);
125            void setOrientation(const Quaternion& orientation);
126            void setVelocity(const Vector3& velocity);
127            void setAngularVelocity(const Vector3& velocity);
128
129            inline bool hasLocalController() const
130                { return this->bHasLocalController_; }
131            inline bool hasHumanController() const
132                { return this->bHasHumanController_; }
133
134            inline bool isInMouseLook() const
135                { return this->bMouseLook_; }
136            inline float getMouseLookSpeed() const
137                { return this->mouseLookSpeed_; }
138
139            inline Controller* getXMLController() const
140                { return this->xmlcontroller_; }
141
142            inline Controller* getController() const
143                { return this->controller_; }
144            inline void setController(Controller* val)
145                { this->controller_ = val; }
146
147            virtual void setTarget( WorldEntity* target );
148            virtual WorldEntity* getTarget()
149                { return this->target_.get(); }
150            void setTargetInternal( uint32_t targetID );
151
152        protected:
153            virtual void setPlayer(PlayerInfo* player); // don't call this directly, use friend class PlayerInfo instead
154            virtual void removePlayer();                // don't call this directly, use friend class PlayerInfo instead
155
156            virtual void startLocalHumanControl();
157            virtual void stopLocalHumanControl();
158            virtual void parentChanged();
159
160            inline void setHudTemplate(const std::string& name)
161                { this->hudtemplate_ = name; }
162
163        private:
164            void registerVariables();
165            void setXMLController(Controller* controller);
166
167            void overwrite();
168            void processOverwrite();
169
170            void processServerPosition();
171            void processServerLinearVelocity();
172            void processServerOrientation();
173            void processServerAngularVelocity();
174
175            void processClientPosition();
176            void processClientLinearVelocity();
177            void processClientOrientation();
178            void processClientAngularVelocity();
179
180            void networkcallback_changedplayerID();
181
182            // Bullet btMotionState related
183            void setWorldTransform(const btTransform& worldTrans);
184
185            unsigned int server_overwrite_;
186            unsigned int client_overwrite_;
187
188            bool bHasLocalController_;
189            bool bHasHumanController_;
190            bool bDestroyWhenPlayerLeft_;
191
192            Vector3 server_position_;
193            Vector3 client_position_;
194            Vector3 server_linear_velocity_;
195            Vector3 client_linear_velocity_;
196            Quaternion server_orientation_;
197            Quaternion client_orientation_;
198            Vector3 server_angular_velocity_;
199            Vector3 client_angular_velocity_;
200
201            PlayerInfo* player_;
202            unsigned int playerID_;
203
204            std::string hudtemplate_;
205            OverlayGroup* hud_;
206
207            Camera* camera_;
208            bool bMouseLook_;
209            float mouseLookSpeed_;
210            Ogre::SceneNode* cameraPositionRootNode_;
211            std::list<SmartPtr<CameraPosition> > cameraPositions_;
212            CameraPosition* currentCameraPosition_;
213            std::string cameraPositionTemplate_;
214            Controller* xmlcontroller_;
215            Controller* controller_;
216            CameraPosition* reverseCamera_;
217            WeakPtr<WorldEntity> target_;
218    };
219}
220
221#endif /* _ControllableEntity_H__ */
Note: See TracBrowser for help on using the repository browser.