Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/presentationFS16/src/orxonox/worldentities/pawns/Pawn.h @ 11208

Last change on this file since 11208 was 11208, checked in by fvultier, 8 years ago

merged discharger, thats the last one

  • Property svn:eol-style set to native
File size: 11.0 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>
[11052]35#include <vector>
[6524]36#include "interfaces/PickupCarrier.h"
[3196]37#include "interfaces/RadarViewable.h"
[5735]38#include "worldentities/ControllableEntity.h"
[11052]39#include "worldentities/ExplosionPart.h"
[2072]40
[9939]41
[6711]42namespace orxonox // tolua_export
[10437]43{
44    /**
45    @brief
[11052]46        Everything in Orxonox that has a health attribute is a Pawn. After a Pawn is spawned its health is set to
[10437]47        its initial health. In every call of the Pawns tick function the game checks whether the pawns health is at
48        or below zero. If it is, the pawn gets killed.
49
[11052]50        Pawns can carry pickups and fire weapons. They can also have shields.
[10437]51
52        Notice that every Pawn is a ControllableEntity.
53    */
54
55    // tolua_export
[6711]56    class _OrxonoxExport Pawn // tolua_export
57        : public ControllableEntity, public RadarViewable, public PickupCarrier
58    { // tolua_export
[3053]59        friend class WeaponSystem;
60
[2072]61        public:
[9667]62            Pawn(Context* context);
[2072]63            virtual ~Pawn();
64
[11071]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;
[2072]68
69            inline bool isAlive() const
70                { return this->bAlive_; }
71
[9016]72
[11071]73            void setHealth(float health);
[2072]74            inline void addHealth(float health)
75                { this->setHealth(this->health_ + health); }
76            inline void removeHealth(float health)
77                { this->setHealth(this->health_ - health); }
[2662]78            inline float getHealth() const
[2072]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
[11071]91            void setShieldHealth(float shieldHealth);
[8706]92
[7163]93            inline float getShieldHealth()
[8855]94                { return this->shieldHealth_; }
[7163]95
[8706]96            inline void addShieldHealth(float amount)
[8855]97                { this->setShieldHealth(this->shieldHealth_ + amount); }
[8706]98
99            inline bool hasShield()
[8855]100                { return (this->getShieldHealth() > 0); }
[8706]101
[11071]102            void setMaxShieldHealth(float maxshieldhealth);
[8706]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
111            inline void restoreInitialShieldHealth()
112                { this->setShieldHealth(this->initialShieldHealth_); }
113            inline void restoreMaxShieldHealth()
114                { this->setShieldHealth(this->maxShieldHealth_); }
115
[7163]116            inline void setShieldAbsorption(float shieldAbsorption)
[8855]117                { this->shieldAbsorption_ = shieldAbsorption; }
[7163]118            inline float getShieldAbsorption()
[8855]119                { return this->shieldAbsorption_; }
[7163]120
[11071]121            void setShieldRechargeRate(float shieldRechargeRate);
[11052]122            inline float getShieldRechargeRate() const
123                { return this->shieldRechargeRate_; }
[8706]124
[11071]125            void setShieldRechargeWaitTime(float shieldRechargeWaitTime);
[11052]126            inline float getShieldRechargeWaitTime() const
127                { return this->shieldRechargeWaitTime_; }
[8706]128
[11052]129            inline void resetShieldRechargeCountdown()
130                { this->shieldRechargeWaitCountdown_ = 0; }
[8706]131
[11052]132            inline void startShieldRechargeCountdown()
133                { this->shieldRechargeWaitCountdown_ = this->getShieldRechargeWaitTime(); } // TODO: Implement in Projectile.cc
[8706]134
[11071]135            void decreaseShieldRechargeCountdownTime(float dt);
[8706]136
[11052]137            /** @brief Sets the state of the pawns vulnerability. @param bVulnerable */
138            inline void setVulnerable(bool bVulnerable)
139            {
140                if (this->bVulnerable_ != bVulnerable)
141                {
142                    this->bVulnerable_ = bVulnerable;
143                    this->changedVulnerability();
144                }
145            }
146            /** @brief Returns the state of the pawns vulnerability. @return The state of the vulnerability */
147            inline const bool& isVulnerable() const { return this->bVulnerable_; }
148            /** @brief This function gets called if the vulnerability of the pawn changes. */
149            virtual void changedVulnerability();
150
[2072]151            inline ControllableEntity* getLastHitOriginator() const
152                { return this->lastHitOriginator_; }
153
[10216]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);
[8706]156
[2072]157            virtual void kill();
158
[11208]159            virtual void pushed(unsigned int firemode) override;
160            virtual void released(unsigned int firemode) override;
[2072]161            virtual void postSpawn();
162
[11052]163            void addExplosionPart(ExplosionPart* ePart);
164            ExplosionPart * getExplosionPart();
165
[3053]166            void addWeaponSlot(WeaponSlot * wSlot);
[2662]167            WeaponSlot * getWeaponSlot(unsigned int index) const;
[3053]168            void addWeaponSet(WeaponSet * wSet);
[2662]169            WeaponSet * getWeaponSet(unsigned int index) const;
[3053]170            void addWeaponPack(WeaponPack * wPack);
[6417]171            void addWeaponPackXML(WeaponPack * wPack);
[3053]172            WeaponPack * getWeaponPack(unsigned int index) const;
[2662]173
[11052]174            void addMunitionXML(Munition* munition);
175            Munition* getMunitionXML() const;
176           
177            Munition* getMunition(SubclassIdentifier<Munition> * identifier);
178
[7163]179            virtual void addedWeaponPack(WeaponPack* wPack) {}
180
[2662]181            inline void setSpawnParticleSource(const std::string& source)
182                { this->spawnparticlesource_ = source; }
183            inline const std::string& getSpawnParticleSource() const
184                { return this->spawnparticlesource_; }
185
186            inline void setSpawnParticleDuration(float duration)
187                { this->spawnparticleduration_ = duration; }
188            inline float getSpawnParticleDuration() const
189                { return this->spawnparticleduration_; }
190
191            inline void setExplosionChunks(unsigned int chunks)
192                { this->numexplosionchunks_ = chunks; }
193            inline unsigned int getExplosionChunks() const
194                { return this->numexplosionchunks_; }
195
[9348]196            // These are used with the Damage Boost Pickup to use the damage multiplier.
197            inline void setDamageMultiplier(float multiplier)
198                { this->damageMultiplier_ = multiplier; }
199            inline float getDamageMultiplier() const
200                { return this->damageMultiplier_; }
201
202
[11071]203            virtual void startLocalHumanControl() override;
[2662]204
[6417]205            void setAimPosition( Vector3 position )
206                { this->aimPosition_ = position; }
207            Vector3 getAimPosition()
208                { return this->aimPosition_; }
[7163]209
[11071]210            virtual const Vector3& getCarrierPosition(void) const override
[6540]211                { return this->getWorldPosition(); };
[6417]212
[11071]213            virtual void changedVisibility() override;
[9254]214
[9939]215            void setExplosionSound(const std::string& engineSound);
216            const std::string& getExplosionSound();
217
[11071]218            inline const WeaponSystem* getWeaponSystem() const
[11052]219                { return this->weaponSystem_; }
220
[11176]221            static void consoleCommand_debugDrawWeapons(bool bDraw);
222
[2072]223        protected:
[11071]224            virtual void preDestroy() override;
[7889]225
[11071]226            virtual void setPlayer(PlayerInfo* player) override;
227            virtual void removePlayer() override;
[3038]228
[2072]229            virtual void death();
[9625]230            virtual bool hasSlaves();
231            virtual Controller* getSlave();
[3087]232            virtual void goWithStyle();
[2662]233            virtual void spawneffect();
[2072]234
[11071]235            virtual void damage(float damage, float healthdamage = 0.0f, float shielddamage = 0.0f, Pawn* originator = nullptr, const btCollisionShape* cs = nullptr);
[6417]236
[2072]237            bool bAlive_;
[11176]238            bool bVulnerable_; ///< If this is false, then the pawn may not take damage
[2072]239
[11071]240            virtual std::vector<PickupCarrier*>* getCarrierChildren(void) const override
[6711]241                { return new std::vector<PickupCarrier*>(); }
[11071]242            virtual PickupCarrier* getCarrierParent(void) const override
243                { return nullptr; }
[2662]244
[9016]245
[2072]246            float health_;
247            float maxHealth_;
248            float initialHealth_;
[8891]249
[7163]250            float shieldHealth_;
[8706]251            float maxShieldHealth_;
252            float initialShieldHealth_;
[9348]253            float shieldAbsorption_; ///< Has to be between 0 and 1
[11052]254            float shieldRechargeRate_;
255            float shieldRechargeWaitTime_;
256            float shieldRechargeWaitCountdown_;
[2072]257
[9348]258            float damageMultiplier_; ///< Used by the Damage Boost Pickup.
259
[7655]260            WeakPtr<Pawn> lastHitOriginator_;
[2098]261
262            WeaponSystem* weaponSystem_;
[2662]263
264            std::string spawnparticlesource_;
265            float spawnparticleduration_;
266            unsigned int numexplosionchunks_;
[3053]267
[11052]268            std::vector<ExplosionPart*> explosionPartList_;
269
[3053]270        private:
[7163]271            void registerVariables();
[3053]272            inline void setWeaponSystem(WeaponSystem* weaponsystem)
273                { this->weaponSystem_ = weaponsystem; }
[11176]274            void drawWeapons(bool bDraw);
[6417]275
276            Vector3 aimPosition_;
[9939]277
[9948]278            WorldSound* explosionSound_; // TODO: Does this really belong here? Maybe move it to BigExplosion?
[9939]279
[11176]280            std::vector<Model*> debugWeaponSlotModels_;
281
[6711]282    }; // tolua_export
283} // tolua_export
[2072]284
285#endif /* _Pawn_H__ */
Note: See TracBrowser for help on using the repository browser.