Orxonox  0.0.5 Codename: Arcturus
Pawn.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  * ...
26  *
27  */
28 
29 #ifndef _Pawn_H__
30 #define _Pawn_H__
31 
32 #include "OrxonoxPrereqs.h"
33 
34 #include <string>
35 #include <vector>
40 
41 
42 namespace orxonox // tolua_export
43 {
55  // tolua_export
56  class _OrxonoxExport Pawn // tolua_export
57  : public ControllableEntity, public RadarViewable, public PickupCarrier
58  { // tolua_export
59  friend class WeaponSystem;
60 
61  public:
62  Pawn(Context* context);
63  virtual ~Pawn();
64 
65  virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
66  virtual void XMLEventPort(Element& xmlelement, XMLPort::Mode mode) override;
67  virtual void tick(float dt) override;
68 
69  inline bool isAlive() const
70  { return this->bAlive_; }
71 
72 
73  void setHealth(float health);
74  inline void addHealth(float health)
75  { this->setHealth(this->health_ + health); }
76  inline void removeHealth(float health)
77  { this->setHealth(this->health_ - health); }
78  inline float getHealth() const
79  { return this->health_; }
80 
81  inline void setMaxHealth(float maxhealth)
82  { this->maxHealth_ = maxhealth; this->setHealth(this->health_); }
83  inline float getMaxHealth() const
84  { return this->maxHealth_; }
85 
86  inline void setInitialHealth(float initialhealth)
87  { this->initialHealth_ = initialhealth; this->setHealth(initialhealth); }
88  inline float getInitialHealth() const
89  { return this->initialHealth_; }
90 
91  void setShieldHealth(float shieldHealth);
92 
93  inline float getShieldHealth()
94  { return this->shieldHealth_; }
95 
96  inline void addShieldHealth(float amount)
97  { this->setShieldHealth(this->shieldHealth_ + amount); }
98 
99  inline bool hasShield()
100  { return (this->getShieldHealth() > 0); }
101 
102  void setMaxShieldHealth(float maxshieldhealth);
103  inline float getMaxShieldHealth() const
104  { return this->maxShieldHealth_; }
105 
106  inline void setInitialShieldHealth(float initialshieldhealth)
107  { this->initialShieldHealth_ = initialshieldhealth; this->setShieldHealth(initialshieldhealth); }
108  inline float getInitialShieldHealth() const
109  { return this->initialShieldHealth_; }
110 
112  { this->setShieldHealth(this->initialShieldHealth_); }
114  { this->setShieldHealth(this->maxShieldHealth_); }
115 
116  inline void setShieldAbsorption(float shieldAbsorption)
117  { this->shieldAbsorption_ = shieldAbsorption; }
118  inline float getShieldAbsorption()
119  { return this->shieldAbsorption_; }
120 
121  void setShieldRechargeRate(float shieldRechargeRate);
122  inline float getShieldRechargeRate() const
123  { return this->shieldRechargeRate_; }
124 
125  void setShieldRechargeWaitTime(float shieldRechargeWaitTime);
126  inline float getShieldRechargeWaitTime() const
127  { return this->shieldRechargeWaitTime_; }
128 
130  { this->shieldRechargeWaitCountdown_ = 0; }
131 
133  { this->shieldRechargeWaitCountdown_ = this->getShieldRechargeWaitTime(); } // TODO: Implement in Projectile.cc
134 
135  void decreaseShieldRechargeCountdownTime(float dt);
136 
138  inline void setVulnerable(bool bVulnerable)
139  {
140  if (this->bVulnerable_ != bVulnerable)
141  {
142  this->bVulnerable_ = bVulnerable;
143  this->changedVulnerability();
144  }
145  }
147  inline const bool& isVulnerable() const { return this->bVulnerable_; }
149  virtual void changedVulnerability();
150 
152  { return this->lastHitOriginator_; }
153 
154  virtual void hit(Pawn* originator, const Vector3& force, const btCollisionShape* cs, float damage, float healthdamage = 0.0f, float shielddamage = 0.0f);
155  virtual void hit(Pawn* originator, btManifoldPoint& contactpoint, const btCollisionShape* cs, float damage, float healthdamage = 0.0f, float shielddamage = 0.0f);
156 
157  virtual void kill();
158 
159  virtual void fired(unsigned int firemode) override;
160  virtual void postSpawn();
161 
162  void addExplosionPart(ExplosionPart* ePart);
163  ExplosionPart * getExplosionPart();
164 
165  void addWeaponSlot(WeaponSlot * wSlot);
166  WeaponSlot * getWeaponSlot(unsigned int index) const;
167  void addWeaponSet(WeaponSet * wSet);
168  WeaponSet * getWeaponSet(unsigned int index) const;
169  void addWeaponPack(WeaponPack * wPack);
170  void addWeaponPackXML(WeaponPack * wPack);
171  WeaponPack * getWeaponPack(unsigned int index) const;
172 
173  void addMunitionXML(Munition* munition);
174  Munition* getMunitionXML() const;
175 
176  Munition* getMunition(SubclassIdentifier<Munition> * identifier);
177 
178  virtual void addedWeaponPack(WeaponPack* wPack) {}
179 
181  { this->spawnparticlesource_ = source; }
182  inline const std::string& getSpawnParticleSource() const
183  { return this->spawnparticlesource_; }
184 
185  inline void setSpawnParticleDuration(float duration)
186  { this->spawnparticleduration_ = duration; }
187  inline float getSpawnParticleDuration() const
188  { return this->spawnparticleduration_; }
189 
190  inline void setExplosionChunks(unsigned int chunks)
191  { this->numexplosionchunks_ = chunks; }
192  inline unsigned int getExplosionChunks() const
193  { return this->numexplosionchunks_; }
194 
195  // These are used with the Damage Boost Pickup to use the damage multiplier.
196  inline void setDamageMultiplier(float multiplier)
197  { this->damageMultiplier_ = multiplier; }
198  inline float getDamageMultiplier() const
199  { return this->damageMultiplier_; }
200 
201  // Some pawns can-t harvest pickups (e.g. AsteroidMinables). Checked in PickupSpawner.
202  inline void setPickupAcceptance(bool b)
203  { this->acceptsPickups_ = b; }
204  inline bool doesAcceptPickups()
205  { return this->acceptsPickups_;}
206 
207  virtual void startLocalHumanControl() override;
208 
209  void setAimPosition( Vector3 position )
210  { this->aimPosition_ = position; }
211  Vector3 getAimPosition()
212  { return this->aimPosition_; }
213 
214  virtual const Vector3& getCarrierPosition(void) const override
215  { return this->getWorldPosition(); };
216 
217  virtual void changedVisibility() override;
218 
219  void setExplosionSound(const std::string& engineSound);
220  const std::string& getExplosionSound();
221 
222  inline const WeaponSystem* getWeaponSystem() const
223  { return this->weaponSystem_; }
224 
225  static void consoleCommand_debugDrawWeapons(bool bDraw);
226 
227 
228 
229  protected:
230  virtual void preDestroy() override;
231 
232  virtual void setPlayer(PlayerInfo* player) override;
233  virtual void removePlayer() override;
234 
235  virtual void death();
236  virtual bool hasSlaves();
237  virtual Controller* getSlave();
238  virtual void goWithStyle();
239  virtual void spawneffect();
240 
241  virtual void damage(float damage, float healthdamage = 0.0f, float shielddamage = 0.0f, Pawn* originator = nullptr, const btCollisionShape* cs = nullptr);
242 
243  bool bAlive_;
245 
246  virtual std::vector<PickupCarrier*>* getCarrierChildren(void) const override
247  { return new std::vector<PickupCarrier*>(); }
248  virtual PickupCarrier* getCarrierParent(void) const override
249  { return nullptr; }
250 
251 
252  float health_;
253  float maxHealth_;
255 
263 
265  bool acceptsPickups_; // Added for the asteroidMinable class, avoid that they attempt to grab the resources
266 
268 
270 
273  unsigned int numexplosionchunks_;
274 
275  std::vector<ExplosionPart*> explosionPartList_;
276 
277  private:
278  void registerVariables();
279  inline void setWeaponSystem(WeaponSystem* weaponsystem)
280  { this->weaponSystem_ = weaponsystem; }
281  void drawWeapons(bool bDraw);
282 
283  Vector3 aimPosition_;
284 
285  WorldSound* explosionSound_; // TODO: Does this really belong here? Maybe move it to BigExplosion?
286 
287  std::vector<Model*> debugWeaponSlotModels_;
288 
289  }; // tolua_export
290 } // tolua_export
291 
292 #endif /* _Pawn_H__ */
void removeHealth(float health)
Definition: Pawn.h:76
Everything in Orxonox that has a health attribute is a Pawn.
Definition: Pawn.h:56
The a WeaponSlot defines where a Weapon is placed on a pawn.
Definition: WeaponSlot.h:59
void resetShieldRechargeCountdown()
Definition: Pawn.h:129
bool doesAcceptPickups()
Definition: Pawn.h:204
void source(const std::string &filename)
Reads the content of a file and executes the commands in it line by line.
Definition: ConsoleCommandCompilation.cc:167
std::vector< Model * > debugWeaponSlotModels_
Definition: Pawn.h:287
ControllableEntity * getLastHitOriginator() const
Definition: Pawn.h:151
WorldSound * explosionSound_
Definition: Pawn.h:285
std::vector< ExplosionPart * > explosionPartList_
Definition: Pawn.h:275
The WorldSound class is to be used for sounds with position and orientation.
Definition: WorldSound.h:44
Definition: Munition.h:48
void setAimPosition(Vector3 position)
Definition: Pawn.h:209
::std::string string
Definition: gtest-port.h:756
const bool & isVulnerable() const
Returns the state of the pawns vulnerability.
Definition: Pawn.h:147
Definition of the PickupCarrier class.
float health_
Definition: Pawn.h:252
bool acceptsPickups_
Definition: Pawn.h:265
Vector3 getAimPosition()
Definition: Pawn.h:211
void setSpawnParticleSource(const std::string &source)
Definition: Pawn.h:180
void setInitialHealth(float initialhealth)
Definition: Pawn.h:86
Vector3 aimPosition_
Definition: Pawn.h:283
float getShieldRechargeRate() const
Definition: Pawn.h:122
float maxShieldHealth_
Definition: Pawn.h:257
WeakPtr< Pawn > lastHitOriginator_
Definition: Pawn.h:267
void restoreMaxShieldHealth()
Definition: Pawn.h:113
bool bVulnerable_
If this is false, then the pawn may not take damage.
Definition: Pawn.h:244
Definition: WeaponSet.h:40
float getShieldAbsorption()
Definition: Pawn.h:118
float shieldRechargeWaitCountdown_
Definition: Pawn.h:262
Interface for receiving window events.
Definition: RadarViewable.h:48
WeakPtr wraps a pointer to an object, which becomes nullptr if the object is deleted.
Definition: CorePrereqs.h:236
std::string spawnparticlesource_
Definition: Pawn.h:271
const WeaponSystem * getWeaponSystem() const
Definition: Pawn.h:222
float getHealth() const
Definition: Pawn.h:78
void setShieldAbsorption(float shieldAbsorption)
Definition: Pawn.h:116
unsigned int getExplosionChunks() const
Definition: Pawn.h:192
float getInitialHealth() const
Definition: Pawn.h:88
float damageMultiplier_
Used by the Damage Boost Pickup.
Definition: Pawn.h:264
float getShieldRechargeWaitTime() const
Definition: Pawn.h:126
float getShieldHealth()
Definition: Pawn.h:93
void setDamageMultiplier(float multiplier)
Definition: Pawn.h:196
An orxonox::Pawn that is able to fire weapons always need to have a WeaponSystem. ...
Definition: WeaponSystem.h:47
void setPickupAcceptance(bool b)
Definition: Pawn.h:202
xmlelement
Definition: Super.h:519
void setVulnerable(bool bVulnerable)
Sets the state of the pawns vulnerability.
Definition: Pawn.h:138
float getSpawnParticleDuration() const
Definition: Pawn.h:187
void setExplosionChunks(unsigned int chunks)
Definition: Pawn.h:190
float initialHealth_
Definition: Pawn.h:254
Die Wagnis Klasse hat die folgenden Aufgaben:
Definition: ApplicationPaths.cc:66
float shieldAbsorption_
Has to be between 0 and 1.
Definition: Pawn.h:259
void addShieldHealth(float amount)
Definition: Pawn.h:96
Mode
Definition: CorePrereqs.h:102
Definition: WeaponPack.h:40
void restoreInitialShieldHealth()
Definition: Pawn.h:111
const std::string & getSpawnParticleSource() const
Definition: Pawn.h:182
virtual PickupCarrier * getCarrierParent(void) const override
Get the parent of this PickupSpawner.
Definition: Pawn.h:248
Shared library macros, enums, constants and forward declarations for the orxonox library ...
void setSpawnParticleDuration(float duration)
Definition: Pawn.h:185
Definition: ExplosionPart.h:48
Definition: Context.h:45
void setInitialShieldHealth(float initialshieldhealth)
Definition: Pawn.h:106
float getDamageMultiplier() const
Definition: Pawn.h:198
bool hasShield()
Definition: Pawn.h:99
float maxHealth_
Definition: Pawn.h:253
#define _OrxonoxExport
Definition: OrxonoxPrereqs.h:60
Definition: Controller.h:38
WeaponSystem * weaponSystem_
Definition: Pawn.h:269
void setWeaponSystem(WeaponSystem *weaponsystem)
Definition: Pawn.h:279
unsigned int numexplosionchunks_
Definition: Pawn.h:273
void addHealth(float health)
Definition: Pawn.h:74
void startShieldRechargeCountdown()
Definition: Pawn.h:132
float initialShieldHealth_
Definition: Pawn.h:258
void setMaxHealth(float maxhealth)
Definition: Pawn.h:81
The PickupCarrier interface provides the means, for any class implementing it, to possess Pickupables...
Definition: PickupCarrier.h:68
float shieldRechargeWaitTime_
Definition: Pawn.h:261
virtual void addedWeaponPack(WeaponPack *wPack)
Definition: Pawn.h:178
float shieldHealth_
Definition: Pawn.h:256
float spawnparticleduration_
Definition: Pawn.h:272
float shieldRechargeRate_
Definition: Pawn.h:260
Definition: PlayerInfo.h:39
bool isAlive() const
Definition: Pawn.h:69
virtual const Vector3 & getCarrierPosition(void) const override
Get the (absolute) position of the PickupCarrier.
Definition: Pawn.h:214
The SubclassIdentifier acts almost like an Identifier, but has some prerequisites.
Definition: SubclassIdentifier.h:90
The ControllableEntity is derived from the orxonox::MobileEntity.
Definition: ControllableEntity.h:48
virtual std::vector< PickupCarrier * > * getCarrierChildren(void) const override
Get all direct children of this PickupSpawner.
Definition: Pawn.h:246
float getMaxShieldHealth() const
Definition: Pawn.h:103
float getMaxHealth() const
Definition: Pawn.h:83
bool bAlive_
Definition: Pawn.h:243
float getInitialShieldHealth() const
Definition: Pawn.h:108