Orxonox  0.0.5 Codename: Arcturus
ControllableEntity.h
Go to the documentation of this file.
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 
39 namespace orxonox
40 {
49  {
50  friend class PlayerInfo; // PlayerInfo uses setPlayer and removePlayer
51 
52  public:
53  ControllableEntity(Context* context);
54  virtual ~ControllableEntity();
55 
56  virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
57  virtual void tick(float dt) override;
58  void setConfigValues();
59 
60  virtual void changedPlayer() {}
61 
62  inline PlayerInfo* getPlayer() const
63  { return this->player_; }
68  inline PlayerInfo* getFormerPlayer() const
69  { return this->formerPlayer_; }
70 
71  inline void setDestroyWhenPlayerLeft(bool bDestroy)
72  { this->bDestroyWhenPlayerLeft_ = bDestroy; }
73  inline bool getDestroyWhenPlayerLeft() const
74  { return this->bDestroyWhenPlayerLeft_; }
75 
76  virtual void moveFrontBack(const Vector2& value) {}
77  virtual void moveRightLeft(const Vector2& value) {}
78  virtual void moveUpDown(const Vector2& value) {}
79 
80  virtual void rotateYaw(const Vector2& value);
81  virtual void rotatePitch(const Vector2& value);
82  virtual void rotateRoll(const Vector2& value);
83 
84  inline void moveFrontBack(float value)
85  { this->moveFrontBack(Vector2(value, 0)); }
86  inline void moveRightLeft(float value)
87  { this->moveRightLeft(Vector2(value, 0)); }
88  inline void moveUpDown(float value)
89  { this->moveUpDown(Vector2(value, 0)); }
90 
91  inline void rotateYaw(float value)
92  { this->rotateYaw(Vector2(value, 0)); }
93  inline void rotatePitch(float value)
94  { this->rotatePitch(Vector2(value, 0)); }
95  inline void rotateRoll(float value)
96  { this->rotateRoll(Vector2(value, 0)); }
97 
98  void fire(unsigned int firemode);
99  virtual void fired(unsigned int firemode) {}
100  virtual void reload() {}
101 
107  virtual void boost(bool bBoost) {}
108 
109  virtual void greet() {}
110  virtual void switchCamera();
111  virtual void mouseLook();
112 
113  inline const std::string& getHudTemplate() const
114  { return this->hudtemplate_; }
115 
116  inline Camera* getCamera() const
117  { return this->camera_; }
118  inline OverlayGroup* getHUD() const
119  { return this->hud_; }
120 
121  void addCameraPosition(CameraPosition* position);
122  CameraPosition* getCameraPosition(unsigned int index) const;
123  inline const std::list<StrongPtr<CameraPosition>>& getCameraPositions() const
124  { return this->cameraPositions_; }
125  unsigned int getCurrentCameraIndex() const;
126  bool setCameraPosition(unsigned int index);
127 
128  inline void setCameraPositionTemplate(const std::string& name)
129  { this->cameraPositionTemplate_ = name; }
131  { return this->cameraPositionTemplate_; }
132 
133  inline void setReverseCamera(CameraPosition* camera)
134  { this->reverseCamera_ = camera; }
136  { return this->reverseCamera_; }
137 
142 
143  virtual void setPosition(const Vector3& position) override;
144  virtual void setOrientation(const Quaternion& orientation) override;
145  virtual void setVelocity(const Vector3& velocity) override;
146  virtual void setAngularVelocity(const Vector3& velocity) override;
147 
148  inline bool hasLocalController() const
149  { return this->bHasLocalController_; }
150  inline bool hasHumanController() const
151  { return this->bHasHumanController_; }
152 
153  inline bool isInMouseLook() const
154  { return this->bMouseLook_; }
155  inline float getMouseLookSpeed() const
156  { return this->mouseLookSpeed_; }
158  { return this->currentCameraPosition_; }
159 
160  inline Controller* getXMLController() const
161  { return this->xmlcontroller_; }
162 
163  inline Controller* getController() const
164  { return this->controller_; }
165  void setController(Controller* val);
166 
167 
168  virtual void setTarget( WorldEntity* target );
170  { return this->target_; }
171  void setTargetInternal( uint32_t targetID );
172 
173  inline void setTeam(int team)
174  { this->team_ = team; }
175  inline int getTeam() const
176  { return this->team_; }
177 
178 
179  protected:
180  virtual void preDestroy() override;
181 
182  virtual void setPlayer(PlayerInfo* player); // don't call this directly, use friend class PlayerInfo instead
183  virtual void removePlayer(); // don't call this directly, use friend class PlayerInfo instead
184 
185  virtual void startLocalHumanControl();
186  virtual void stopLocalHumanControl();
187  virtual void parentChanged() override;
188 
189  inline void setHudTemplate(const std::string& name)
190  { this->hudtemplate_ = name; }
191  // HACK-ish
192  void createHud(void);
193  void destroyHud(void);
194 
195  Ogre::SceneNode* cameraPositionRootNode_;
196 
197  private:
198  void registerVariables();
199  void setXMLController(Controller* controller);
200 
201  void overwrite();
202  void processOverwrite();
203 
204  void processServerPosition();
205  void processServerLinearVelocity();
206  void processServerOrientation();
207  void processServerAngularVelocity();
208 
209  void processClientPosition();
210  void processClientLinearVelocity();
211  void processClientOrientation();
212  void processClientAngularVelocity();
213 
214  void networkcallback_changedplayerID();
215 
216  // Bullet btMotionState related
217  virtual void setWorldTransform(const btTransform& worldTrans) override;
218 
219  unsigned int server_overwrite_;
220  unsigned int client_overwrite_;
221 
225 
234 
237  unsigned int playerID_;
238 
241 
245  std::list<StrongPtr<CameraPosition>> cameraPositions_;
252 
253  int team_ ; //<! teamnumber
254  };
255 }
256 
257 #endif /* _ControllableEntity_H__ */
void rotatePitch(float value)
Definition: ControllableEntity.h:93
virtual void setOrientation(const Quaternion &orientation)=0
Controller * getXMLController() const
Definition: ControllableEntity.h:160
unsigned int server_overwrite_
Definition: ControllableEntity.h:219
Vector3 server_angular_velocity_
Definition: ControllableEntity.h:232
bool hasLocalController() const
Definition: ControllableEntity.h:148
void setHudTemplate(const std::string &name)
Definition: ControllableEntity.h:189
CameraPosition * getReverseCamera() const
Definition: ControllableEntity.h:135
Ogre::SceneNode * cameraPositionRootNode_
Definition: ControllableEntity.h:195
Vector3 server_position_
Definition: ControllableEntity.h:226
float mouseLookSpeed_
Definition: ControllableEntity.h:244
Controller * getController() const
Definition: ControllableEntity.h:163
Definition: Camera.h:43
OverlayGroup * hud_
Definition: ControllableEntity.h:240
std::string cameraPositionTemplate_
Definition: ControllableEntity.h:247
::std::string string
Definition: gtest-port.h:756
Definition: CameraPosition.h:37
Camera * camera_
Definition: ControllableEntity.h:242
WeakPtr< Controller > controller_
Definition: ControllableEntity.h:249
bool bHasLocalController_
Definition: ControllableEntity.h:222
bool getDestroyWhenPlayerLeft() const
Definition: ControllableEntity.h:73
void rotateRoll(float value)
Definition: ControllableEntity.h:95
WeakPtr wraps a pointer to an object, which becomes nullptr if the object is deleted.
Definition: CorePrereqs.h:236
std::list< StrongPtr< CameraPosition > > cameraPositions_
Definition: ControllableEntity.h:245
CameraPosition * getCurrentCameraPosition()
Definition: ControllableEntity.h:157
const std::string & getHudTemplate() const
Definition: ControllableEntity.h:113
Quaternion server_orientation_
Definition: ControllableEntity.h:230
unsigned int client_overwrite_
Definition: ControllableEntity.h:220
std::string hudtemplate_
Definition: ControllableEntity.h:239
bool hasHumanController() const
Definition: ControllableEntity.h:150
The WorldEntity represents everything that can be put in a Scene at a certain location.
Definition: WorldEntity.h:72
PlayerInfo * getPlayer() const
Definition: ControllableEntity.h:62
xmlelement
Definition: Super.h:519
Controller * xmlcontroller_
Definition: ControllableEntity.h:248
void moveFrontBack(float value)
Definition: ControllableEntity.h:84
WeakPtr< WorldEntity > target_
Definition: ControllableEntity.h:251
Declaration and implementation of several math-functions, typedefs of some Ogre::Math classes to the ...
The MobileEntity is a derived class from orxonox::WorldEntity and orxonox::Tickable.
Definition: MobileEntity.h:53
void setCameraPositionTemplate(const std::string &name)
Definition: ControllableEntity.h:128
virtual WorldEntity * getTarget()
Definition: ControllableEntity.h:169
const std::list< StrongPtr< CameraPosition > > & getCameraPositions() const
Definition: ControllableEntity.h:123
CameraPosition * reverseCamera_
Definition: ControllableEntity.h:250
int team_
Definition: ControllableEntity.h:253
virtual void greet()
Definition: ControllableEntity.h:109
void setReverseCamera(CameraPosition *camera)
Definition: ControllableEntity.h:133
Die Wagnis Klasse hat die folgenden Aufgaben:
Definition: ApplicationPaths.cc:66
CameraPosition * currentCameraPosition_
Definition: ControllableEntity.h:246
virtual void moveUpDown(const Vector2 &value)
Definition: ControllableEntity.h:78
unsigned int playerID_
Definition: ControllableEntity.h:237
Mode
Definition: CorePrereqs.h:102
bool bDestroyWhenPlayerLeft_
Definition: ControllableEntity.h:224
Shared library macros, enums, constants and forward declarations for the orxonox library ...
Vector3 server_linear_velocity_
Definition: ControllableEntity.h:228
bool isInMouseLook() const
Definition: ControllableEntity.h:153
void rotateYaw(float value)
Definition: ControllableEntity.h:91
Vector3 client_position_
Definition: ControllableEntity.h:227
PlayerInfo * formerPlayer_
Definition: ControllableEntity.h:236
Definition: Context.h:45
PlayerInfo * player_
Definition: ControllableEntity.h:235
virtual void reload()
Definition: ControllableEntity.h:100
virtual void fired(unsigned int firemode)
Definition: ControllableEntity.h:99
int getTeam() const
Definition: ControllableEntity.h:175
#define _OrxonoxExport
Definition: OrxonoxPrereqs.h:60
Definition: Controller.h:38
void moveUpDown(float value)
Definition: ControllableEntity.h:88
OverlayGroup does almost exactly what it says: It groups OrxonoxOverlays together.
Definition: OverlayGroup.h:53
virtual void boost(bool bBoost)
Tells the ControllableEntity to either start or stop boosting.
Definition: ControllableEntity.h:107
Vector3 client_angular_velocity_
Definition: ControllableEntity.h:233
void setDestroyWhenPlayerLeft(bool bDestroy)
Definition: ControllableEntity.h:71
virtual void changedPlayer()
Definition: ControllableEntity.h:60
virtual void setVelocity(const Vector3 &velocity)
Definition: MobileEntity.cc:134
Camera * getCamera() const
Definition: ControllableEntity.h:116
float getMouseLookSpeed() const
Definition: ControllableEntity.h:155
Definition: PlayerInfo.h:39
void moveRightLeft(float value)
Definition: ControllableEntity.h:86
virtual void setAngularVelocity(const Vector3 &velocity)
Definition: MobileEntity.cc:142
PlayerInfo * getFormerPlayer() const
Get the player even after the ControllableEntity has stopped being the players ControllableEntity.
Definition: ControllableEntity.h:68
void setTeam(int team)
Definition: ControllableEntity.h:173
Vector3 client_linear_velocity_
Definition: ControllableEntity.h:229
virtual void setPosition(const Vector3 &position)=0
virtual void moveFrontBack(const Vector2 &value)
Definition: ControllableEntity.h:76
The ControllableEntity is derived from the orxonox::MobileEntity.
Definition: ControllableEntity.h:48
Quaternion client_orientation_
Definition: ControllableEntity.h:231
virtual void moveRightLeft(const Vector2 &value)
Definition: ControllableEntity.h:77
const std::string & getCameraPositionTemplate() const
Definition: ControllableEntity.h:130
bool bHasHumanController_
Definition: ControllableEntity.h:223
OverlayGroup * getHUD() const
Definition: ControllableEntity.h:118
bool bMouseLook_
Definition: ControllableEntity.h:243