Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/particles2/src/orxonox/worldentities/pawns/Pawn.h @ 6078

Last change on this file since 6078 was 6078, checked in by landauf, 14 years ago

delete weaponpacks which were defined in xml but don't fit onto the weaponslots (in the future we could put them into the inventory).

+ some small changes

  • Property svn:eol-style set to native
File size: 5.2 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/RadarViewable.h"
36#include "worldentities/ControllableEntity.h"
37#include "pickup/PickupCollection.h"
38
39namespace orxonox
40{
41    class _OrxonoxExport Pawn : public ControllableEntity, public RadarViewable
42    {
43        friend class WeaponSystem;
44
45        public:
46            Pawn(BaseObject* creator);
47            virtual ~Pawn();
48
49            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
50            virtual void tick(float dt);
51            void registerVariables();
52
53            inline bool isAlive() const
54                { return this->bAlive_; }
55
56            virtual void setHealth(float health);
57            inline void addHealth(float health)
58                { this->setHealth(this->health_ + health); }
59            inline void removeHealth(float health)
60                { this->setHealth(this->health_ - health); }
61            inline float getHealth() const
62                { return this->health_; }
63
64            inline void setMaxHealth(float maxhealth)
65                { this->maxHealth_ = maxhealth; this->setHealth(this->health_); }
66            inline float getMaxHealth() const
67                { return this->maxHealth_; }
68
69            inline void setInitialHealth(float initialhealth)
70                { this->initialHealth_ = initialhealth; this->setHealth(initialhealth); }
71            inline float getInitialHealth() const
72                { return this->initialHealth_; }
73
74            inline ControllableEntity* getLastHitOriginator() const
75                { return this->lastHitOriginator_; }
76
77            virtual void damage(float damage, Pawn* originator = 0);
78            virtual void hit(Pawn* originator, const Vector3& force, float damage);
79            virtual void kill();
80
81            virtual void fire(unsigned int firemode);
82            virtual void reload();
83            virtual void doFire(uint8_t firemode);
84            virtual void postSpawn();
85
86            void addWeaponSlot(WeaponSlot * wSlot);
87            WeaponSlot * getWeaponSlot(unsigned int index) const;
88            void addWeaponSet(WeaponSet * wSet);
89            WeaponSet * getWeaponSet(unsigned int index) const;
90            void addWeaponPack(WeaponPack * wPack);
91            void addWeaponPackXML(WeaponPack * wPack);
92            WeaponPack * getWeaponPack(unsigned int index) const;
93
94            inline const WorldEntity* getWorldEntity() const
95                { return const_cast<Pawn*>(this); }
96
97            inline void setSpawnParticleSource(const std::string& source)
98                { this->spawnparticlesource_ = source; }
99            inline const std::string& getSpawnParticleSource() const
100                { return this->spawnparticlesource_; }
101
102            inline void setSpawnParticleDuration(float duration)
103                { this->spawnparticleduration_ = duration; }
104            inline float getSpawnParticleDuration() const
105                { return this->spawnparticleduration_; }
106
107            inline void setExplosionChunks(unsigned int chunks)
108                { this->numexplosionchunks_ = chunks; }
109            inline unsigned int getExplosionChunks() const
110                { return this->numexplosionchunks_; }
111
112            virtual void dropItems();
113            inline PickupCollection& getPickups()
114                { return this->pickups_; }
115            virtual void useItem()
116                { this->pickups_.useItem(); }
117
118            virtual void startLocalHumanControl();
119
120        protected:
121            virtual void setPlayer(PlayerInfo* player);
122            virtual void removePlayer();
123
124            virtual void death();
125            virtual void goWithStyle();
126            virtual void deatheffect();
127            virtual void spawneffect();
128
129            bool bAlive_;
130
131            PickupCollection pickups_;
132
133            float health_;
134            float maxHealth_;
135            float initialHealth_;
136
137            Pawn* lastHitOriginator_;
138
139            WeaponSystem* weaponSystem_;
140            bool bReload_;
141
142            std::string spawnparticlesource_;
143            float spawnparticleduration_;
144            unsigned int numexplosionchunks_;
145
146        private:
147            inline void setWeaponSystem(WeaponSystem* weaponsystem)
148                { this->weaponSystem_ = weaponsystem; }
149    };
150}
151
152#endif /* _Pawn_H__ */
Note: See TracBrowser for help on using the repository browser.