Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/weapons/src/orxonox/objects/worldentities/ControllableEntity.h @ 2912

Last change on this file since 2912 was 2912, checked in by landauf, 15 years ago

Several small adjustments in the weaponsystem (like additional const keyword, includes moved from .h to .cc where possible, …)

Firemode is now an unsigned int instead of an Enum. Instead of "fire" and "altFire" use "fire 0" and "fire 1"

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