Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/presentation2/src/orxonox/worldentities/ControllableEntity.h @ 6112

Last change on this file since 6112 was 6112, checked in by scheusso, 14 years ago

first attempts to have synchronised fire direction and target
however client cannot select targets yet (probably because of classtreemask hack)

  • 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 registerVariables();
52            void setConfigValues();
53
54            virtual void changedPlayer() {}
55
56            inline PlayerInfo* getPlayer() const
57                { return this->player_; }
58
59            inline void setDestroyWhenPlayerLeft(bool bDestroy)
60                { this->bDestroyWhenPlayerLeft_ = bDestroy; }
61            inline bool getDestroyWhenPlayerLeft() const
62                { return this->bDestroyWhenPlayerLeft_; }
63
64            virtual void moveFrontBack(const Vector2& value) {}
65            virtual void moveRightLeft(const Vector2& value) {}
66            virtual void moveUpDown(const Vector2& value) {}
67
68            virtual void rotateYaw(const Vector2& value);
69            virtual void rotatePitch(const Vector2& value);
70            virtual void rotateRoll(const Vector2& value);
71
72            inline void moveFrontBack(float value)
73                { this->moveFrontBack(Vector2(value, 0)); }
74            inline void moveRightLeft(float value)
75                { this->moveRightLeft(Vector2(value, 0)); }
76            inline void moveUpDown(float value)
77                { this->moveUpDown(Vector2(value, 0)); }
78
79            inline void rotateYaw(float value)
80                { this->rotateYaw(Vector2(value, 0)); }
81            inline void rotatePitch(float value)
82                { this->rotatePitch(Vector2(value, 0)); }
83            inline void rotateRoll(float value)
84                { this->rotateRoll(Vector2(value, 0)); }
85
86            void fire(unsigned int firemode);
87            virtual void fired(unsigned int firemode) {}
88            virtual void reload() {}
89
90            virtual void boost() {}
91            virtual void greet() {}
92            virtual void useItem() {}
93            virtual void dropItems() {}
94            virtual void switchCamera();
95            virtual void mouseLook();
96
97            inline const std::string& getHudTemplate() const
98                { return this->hudtemplate_; }
99
100            inline Camera* getCamera() const
101                { return this->camera_; }
102            inline OverlayGroup* getHUD() const
103                { return this->hud_; }
104
105            void addCameraPosition(CameraPosition* position);
106            CameraPosition* getCameraPosition(unsigned int index) const;
107            inline const std::list<SmartPtr<CameraPosition> >& getCameraPositions() const
108                { return this->cameraPositions_; }
109
110            inline void setCameraPositionTemplate(const std::string& name)
111                { this->cameraPositionTemplate_ = name; }
112            inline const std::string& getCameraPositionTemkplate() const
113                { return this->cameraPositionTemplate_; }
114
115            inline void setReverseCamera(CameraPosition* camera)
116                { this->reverseCamera_ = camera; }
117            inline CameraPosition* getReverseCamera() const
118                { return this->reverseCamera_; }
119
120            using WorldEntity::setPosition;
121            using WorldEntity::setOrientation;
122            using MobileEntity::setVelocity;
123            using MobileEntity::setAngularVelocity;
124
125            void setPosition(const Vector3& position);
126            void setOrientation(const Quaternion& orientation);
127            void setVelocity(const Vector3& velocity);
128            void setAngularVelocity(const Vector3& velocity);
129
130            inline bool hasLocalController() const
131                { return this->bHasLocalController_; }
132            inline bool hasHumanController() const
133                { return this->bHasHumanController_; }
134
135            inline bool isInMouseLook() const
136                { return this->bMouseLook_; }
137            inline float getMouseLookSpeed() const
138                { return this->mouseLookSpeed_; }
139
140            inline Controller* getXMLController() const
141                { return this->xmlcontroller_; }
142
143            inline Controller* getController() const
144                { return this->controller_; }
145            inline void setController(Controller* val)
146                { this->controller_ = val; }
147           
148            virtual void setTarget( WorldEntity* target );
149            virtual WorldEntity* getTarget()
150                { return this->target_.get(); }
151            void setTargetInternal( uint32_t targetID );
152
153        protected:
154            virtual void setPlayer(PlayerInfo* player); // don't call this directly, use friend class PlayerInfo instead
155            virtual void removePlayer();                // don't call this directly, use friend class PlayerInfo instead
156
157            virtual void startLocalHumanControl();
158            virtual void stopLocalHumanControl();
159            virtual void parentChanged();
160
161            inline void setHudTemplate(const std::string& name)
162                { this->hudtemplate_ = name; }
163
164        private:
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            std::string cameraPositionTemplate_;
213            Controller* xmlcontroller_;
214            Controller* controller_;
215            CameraPosition* reverseCamera_;
216            WeakPtr<WorldEntity> target_;
217    };
218}
219
220#endif /* _ControllableEntity_H__ */
Note: See TracBrowser for help on using the repository browser.