Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/fabienHS15/src/orxonox/worldentities/pawns/Pawn.h @ 10746

Last change on this file since 10746 was 10746, checked in by fvultier, 8 years ago
  • Property svn:eol-style set to native
File size: 9.5 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 *      ...
26 *
27 */
28
29#ifndef _Pawn_H__
30#define _Pawn_H__
31
32#include "OrxonoxPrereqs.h"
33
34#include <string>
35#include "interfaces/PickupCarrier.h"
36#include "interfaces/RadarViewable.h"
37#include "worldentities/ControllableEntity.h"
38
39
40namespace orxonox // tolua_export
41{
42    /**
43    @brief
44        Everything in Orxonox that has a health attribute is a Pawn. After a Pawn is spawned its health is set to
45        its initial health. In every call of the Pawns tick function the game checks whether the pawns health is at
46        or below zero. If it is, the pawn gets killed.
47
48        Pawns can carry pickups and fire weapons. The can also have shields.
49
50        Notice that every Pawn is a ControllableEntity.
51    */
52
53    // tolua_export
54    class _OrxonoxExport Pawn // tolua_export
55        : public ControllableEntity, public RadarViewable, public PickupCarrier
56    { // tolua_export
57        friend class WeaponSystem;
58
59        public:
60            Pawn(Context* context);
61            virtual ~Pawn();
62
63            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
64            virtual void tick(float dt);
65
66            inline bool isAlive() const
67                { return this->bAlive_; }
68
69
70            virtual void setHealth(float health);
71            inline void addHealth(float health)
72                { this->setHealth(this->health_ + health); }
73            inline void removeHealth(float health)
74                { this->setHealth(this->health_ - health); }
75            inline float getHealth() const
76                { return this->health_; }
77
78            inline void setMaxHealth(float maxhealth)
79                { this->maxHealth_ = maxhealth; this->setHealth(this->health_); }
80            inline float getMaxHealth() const
81                { return this->maxHealth_; }
82
83            inline void setInitialHealth(float initialhealth)
84                { this->initialHealth_ = initialhealth; this->setHealth(initialhealth); }
85            inline float getInitialHealth() const
86                { return this->initialHealth_; }
87
88            virtual void setShieldHealth(float shieldHealth);
89
90            inline float getShieldHealth()
91                { return this->shieldHealth_; }
92
93            inline void addShieldHealth(float amount)
94                { this->setShieldHealth(this->shieldHealth_ + amount); }
95
96            inline bool hasShield()
97                { return (this->getShieldHealth() > 0); }
98
99            virtual void setMaxShieldHealth(float maxshieldhealth);
100            inline float getMaxShieldHealth() const
101                { return this->maxShieldHealth_; }
102
103            inline void setInitialShieldHealth(float initialshieldhealth)
104                { this->initialShieldHealth_ = initialshieldhealth; this->setShieldHealth(initialshieldhealth); }
105            inline float getInitialShieldHealth() const
106                { return this->initialShieldHealth_; }
107
108            inline void restoreInitialShieldHealth()
109                { this->setShieldHealth(this->initialShieldHealth_); }
110            inline void restoreMaxShieldHealth()
111                { this->setShieldHealth(this->maxShieldHealth_); }
112
113            inline void setShieldAbsorption(float shieldAbsorption)
114                { this->shieldAbsorption_ = shieldAbsorption; }
115            inline float getShieldAbsorption()
116                { return this->shieldAbsorption_; }
117
118            virtual void setShieldRechargeRate(float shieldRechargeRate);
119            inline float getShieldRechargeRate() const
120                { return this->shieldRechargeRate_; }
121
122            virtual void setShieldRechargeWaitTime(float shieldRechargeWaitTime);
123            inline float getShieldRechargeWaitTime() const
124                { return this->shieldRechargeWaitTime_; }
125
126            inline void resetShieldRechargeCountdown()
127                { this->shieldRechargeWaitCountdown_ = 0; }
128
129            inline void startShieldRechargeCountdown()
130                { this->shieldRechargeWaitCountdown_ = this->getShieldRechargeWaitTime(); } // TODO: Implement in Projectile.cc
131
132            virtual void decreaseShieldRechargeCountdownTime(float dt);
133
134            inline ControllableEntity* getLastHitOriginator() const
135                { return this->lastHitOriginator_; }
136
137            virtual void hit(Pawn* originator, const Vector3& force, const btCollisionShape* cs, float damage, float healthdamage = 0.0f, float shielddamage = 0.0f);
138            virtual void hit(Pawn* originator, btManifoldPoint& contactpoint, const btCollisionShape* cs, float damage, float healthdamage = 0.0f, float shielddamage = 0.0f);
139
140            virtual void kill();
141
142            virtual void fired(unsigned int firemode);
143            virtual void postSpawn();
144
145            void addWeaponSlot(WeaponSlot * wSlot);
146            WeaponSlot * getWeaponSlot(unsigned int index) const;
147            void addWeaponSet(WeaponSet * wSet);
148            WeaponSet * getWeaponSet(unsigned int index) const;
149            void addWeaponPack(WeaponPack * wPack);
150            void addWeaponPackXML(WeaponPack * wPack);
151            WeaponPack * getWeaponPack(unsigned int index) const;
152            std::vector<WeaponPack *> * getAllWeaponPacks();
153           
154            Munition * getMunition(SubclassIdentifier<Munition> * identifier);
155
156            virtual void addedWeaponPack(WeaponPack* wPack) {}
157
158            inline void setSpawnParticleSource(const std::string& source)
159                { this->spawnparticlesource_ = source; }
160            inline const std::string& getSpawnParticleSource() const
161                { return this->spawnparticlesource_; }
162
163            inline void setSpawnParticleDuration(float duration)
164                { this->spawnparticleduration_ = duration; }
165            inline float getSpawnParticleDuration() const
166                { return this->spawnparticleduration_; }
167
168            inline void setExplosionChunks(unsigned int chunks)
169                { this->numexplosionchunks_ = chunks; }
170            inline unsigned int getExplosionChunks() const
171                { return this->numexplosionchunks_; }
172
173            // These are used with the Damage Boost Pickup to use the damage multiplier.
174            inline void setDamageMultiplier(float multiplier)
175                { this->damageMultiplier_ = multiplier; }
176            inline float getDamageMultiplier() const
177                { return this->damageMultiplier_; }
178
179
180            virtual void startLocalHumanControl();
181
182            void setAimPosition( Vector3 position )
183                { this->aimPosition_ = position; }
184            Vector3 getAimPosition()
185                { return this->aimPosition_; }
186
187            virtual const Vector3& getCarrierPosition(void) const
188                { return this->getWorldPosition(); };
189
190            virtual void changedVisibility();
191
192            void setExplosionSound(const std::string& engineSound);
193            const std::string& getExplosionSound();
194
195        protected:
196            virtual void preDestroy();
197
198            virtual void setPlayer(PlayerInfo* player);
199            virtual void removePlayer();
200
201            virtual void death();
202            virtual bool hasSlaves();
203            virtual Controller* getSlave();
204            virtual void goWithStyle();
205            virtual void deatheffect();
206            virtual void spawneffect();
207
208            virtual void damage(float damage, float healthdamage = 0.0f, float shielddamage = 0.0f, Pawn* originator = NULL, const btCollisionShape* cs = NULL);
209
210            bool bAlive_;
211
212            virtual std::vector<PickupCarrier*>* getCarrierChildren(void) const
213                { return new std::vector<PickupCarrier*>(); }
214            virtual PickupCarrier* getCarrierParent(void) const
215                { return NULL; }
216
217
218            float health_;
219            float maxHealth_;
220            float initialHealth_;
221
222            float shieldHealth_;
223            float maxShieldHealth_;
224            float initialShieldHealth_;
225            float shieldAbsorption_; ///< Has to be between 0 and 1
226            float shieldRechargeRate_;
227            float shieldRechargeWaitTime_;
228            float shieldRechargeWaitCountdown_;
229
230            float damageMultiplier_; ///< Used by the Damage Boost Pickup.
231
232            WeakPtr<Pawn> lastHitOriginator_;
233
234            WeaponSystem* weaponSystem_;
235
236            std::string spawnparticlesource_;
237            float spawnparticleduration_;
238            unsigned int numexplosionchunks_;
239
240        private:
241            void registerVariables();
242            inline void setWeaponSystem(WeaponSystem* weaponsystem)
243                { this->weaponSystem_ = weaponsystem; }
244
245            Vector3 aimPosition_;
246
247            WorldSound* explosionSound_; // TODO: Does this really belong here? Maybe move it to BigExplosion?
248
249    }; // tolua_export
250} // tolua_export
251
252#endif /* _Pawn_H__ */
Note: See TracBrowser for help on using the repository browser.