Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

Last change on this file since 10739 was 10739, checked in by fvultier, 9 years ago

HUD improved. Corrected text rescaling. Renamed reload to shieldRecharge in Pawn.cc, … to avoid confusion with the weapon system.

  • Property svn:eol-style set to native
File size: 9.6 KB
RevLine 
[2072]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"
[3196]33
34#include <string>
[6524]35#include "interfaces/PickupCarrier.h"
[3196]36#include "interfaces/RadarViewable.h"
[5735]37#include "worldentities/ControllableEntity.h"
[2072]38
[9939]39
[6711]40namespace orxonox // tolua_export
[10437]41{
42    /**
43    @brief
44        Everything in Orxonoy 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
[6711]54    class _OrxonoxExport Pawn // tolua_export
55        : public ControllableEntity, public RadarViewable, public PickupCarrier
56    { // tolua_export
[3053]57        friend class WeaponSystem;
58
[2072]59        public:
[9667]60            Pawn(Context* context);
[2072]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
[9016]69
[2072]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); }
[2662]75            inline float getHealth() const
[2072]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
[8706]88            virtual void setShieldHealth(float shieldHealth);
89
[7163]90            inline float getShieldHealth()
[8855]91                { return this->shieldHealth_; }
[7163]92
[8706]93            inline void addShieldHealth(float amount)
[8855]94                { this->setShieldHealth(this->shieldHealth_ + amount); }
[8706]95
96            inline bool hasShield()
[8855]97                { return (this->getShieldHealth() > 0); }
[8706]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
[7163]113            inline void setShieldAbsorption(float shieldAbsorption)
[8855]114                { this->shieldAbsorption_ = shieldAbsorption; }
[7163]115            inline float getShieldAbsorption()
[8855]116                { return this->shieldAbsorption_; }
[7163]117
[10739]118            virtual void setShieldRechargeRate(float shieldRechargeRate);
119            inline float getShieldRechargeRate() const
120                { return this->shieldRechargeRate_; }
[8706]121
[10739]122            virtual void setShieldRechargeWaitTime(float shieldRechargeWaitTime);
123            inline float getShieldRechargeWaitTime() const
124                { return this->shieldRechargeWaitTime_; }
[8706]125
[10739]126            inline void resetShieldRechargeCountdown()
127                { this->shieldRechargeWaitCountdown_ = 0; }
[8706]128
[10739]129            inline void startShieldRechargeCountdown()
130                { this->shieldRechargeWaitCountdown_ = this->getShieldRechargeWaitTime(); } // TODO: Implement in Projectile.cc
[8706]131
[10739]132            virtual void decreaseShieldRechargeCountdownTime(float dt);
[8706]133
[2072]134            inline ControllableEntity* getLastHitOriginator() const
135                { return this->lastHitOriginator_; }
136
[10216]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);
[8706]139
[2072]140            virtual void kill();
141
[6417]142            virtual void fired(unsigned int firemode);
[3053]143            virtual void reload();
[2072]144            virtual void postSpawn();
145
[3053]146            void addWeaponSlot(WeaponSlot * wSlot);
[2662]147            WeaponSlot * getWeaponSlot(unsigned int index) const;
[3053]148            void addWeaponSet(WeaponSet * wSet);
[2662]149            WeaponSet * getWeaponSet(unsigned int index) const;
[3053]150            void addWeaponPack(WeaponPack * wPack);
[6417]151            void addWeaponPackXML(WeaponPack * wPack);
[3053]152            WeaponPack * getWeaponPack(unsigned int index) const;
[10688]153            std::vector<WeaponPack *> * getAllWeaponPacks();
[10692]154           
155            Munition * getMunition(SubclassIdentifier<Munition> * identifier);
[2662]156
[7163]157            virtual void addedWeaponPack(WeaponPack* wPack) {}
158
[2662]159            inline void setSpawnParticleSource(const std::string& source)
160                { this->spawnparticlesource_ = source; }
161            inline const std::string& getSpawnParticleSource() const
162                { return this->spawnparticlesource_; }
163
164            inline void setSpawnParticleDuration(float duration)
165                { this->spawnparticleduration_ = duration; }
166            inline float getSpawnParticleDuration() const
167                { return this->spawnparticleduration_; }
168
169            inline void setExplosionChunks(unsigned int chunks)
170                { this->numexplosionchunks_ = chunks; }
171            inline unsigned int getExplosionChunks() const
172                { return this->numexplosionchunks_; }
173
[9348]174            // These are used with the Damage Boost Pickup to use the damage multiplier.
175            inline void setDamageMultiplier(float multiplier)
176                { this->damageMultiplier_ = multiplier; }
177            inline float getDamageMultiplier() const
178                { return this->damageMultiplier_; }
179
180
[3089]181            virtual void startLocalHumanControl();
[2662]182
[6417]183            void setAimPosition( Vector3 position )
184                { this->aimPosition_ = position; }
185            Vector3 getAimPosition()
186                { return this->aimPosition_; }
[7163]187
[7547]188            virtual const Vector3& getCarrierPosition(void) const
[6540]189                { return this->getWorldPosition(); };
[6417]190
[9254]191            virtual void changedVisibility();
192
[9939]193            void setExplosionSound(const std::string& engineSound);
194            const std::string& getExplosionSound();
195
[2072]196        protected:
[7889]197            virtual void preDestroy();
198
[3038]199            virtual void setPlayer(PlayerInfo* player);
200            virtual void removePlayer();
201
[2072]202            virtual void death();
[9625]203            virtual bool hasSlaves();
204            virtual Controller* getSlave();
[3087]205            virtual void goWithStyle();
[2662]206            virtual void deatheffect();
207            virtual void spawneffect();
[2072]208
[10216]209            virtual void damage(float damage, float healthdamage = 0.0f, float shielddamage = 0.0f, Pawn* originator = NULL, const btCollisionShape* cs = NULL);
[6417]210
[2072]211            bool bAlive_;
212
[7547]213            virtual std::vector<PickupCarrier*>* getCarrierChildren(void) const
[6711]214                { return new std::vector<PickupCarrier*>(); }
[7547]215            virtual PickupCarrier* getCarrierParent(void) const
[6524]216                { return NULL; }
[2662]217
[9016]218
[2072]219            float health_;
220            float maxHealth_;
221            float initialHealth_;
[8891]222
[7163]223            float shieldHealth_;
[8706]224            float maxShieldHealth_;
225            float initialShieldHealth_;
[9348]226            float shieldAbsorption_; ///< Has to be between 0 and 1
[10739]227            float shieldRechargeRate_;
228            float shieldRechargeWaitTime_;
229            float shieldRechargeWaitCountdown_;
[2072]230
[9348]231            float damageMultiplier_; ///< Used by the Damage Boost Pickup.
232
[7655]233            WeakPtr<Pawn> lastHitOriginator_;
[2098]234
235            WeaponSystem* weaponSystem_;
[10739]236            bool bShieldRecharging_;
[2662]237
238            std::string spawnparticlesource_;
239            float spawnparticleduration_;
240            unsigned int numexplosionchunks_;
[3053]241
242        private:
[7163]243            void registerVariables();
[3053]244            inline void setWeaponSystem(WeaponSystem* weaponsystem)
245                { this->weaponSystem_ = weaponsystem; }
[6417]246
247            Vector3 aimPosition_;
[9939]248
[9948]249            WorldSound* explosionSound_; // TODO: Does this really belong here? Maybe move it to BigExplosion?
[9939]250
[6711]251    }; // tolua_export
252} // tolua_export
[2072]253
254#endif /* _Pawn_H__ */
Note: See TracBrowser for help on using the repository browser.