Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/presentationHS15/src/orxonox/weaponsystem/WeaponPack.cc @ 11056

Last change on this file since 11056 was 10961, checked in by maxima, 10 years ago

Merged presentation and fabiens branch. Had to modify hoverHUD and invaderHUD, because the text of the healthbar wasn't correctly displayed and the weapon settings of the hovership.

  • Property svn:eol-style set to native
File size: 4.8 KB
RevLine 
[2710]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 *      Martin Polak
24 *   Co-authors:
[2915]25 *      ...
26 *
[2710]27 */
28
[2912]29#include "WeaponPack.h"
[2710]30
31#include "core/CoreIncludes.h"
32#include "core/XMLPort.h"
33
[2912]34#include "Weapon.h"
[2914]35#include "WeaponSystem.h"
[2915]36#include "DefaultWeaponmodeLink.h"
[2912]37
[2710]38namespace orxonox
39{
[9667]40    RegisterClass(WeaponPack);
[2710]41
[9667]42    WeaponPack::WeaponPack(Context* context) : BaseObject(context)
[2710]43    {
44        RegisterObject(WeaponPack);
45
[2912]46        this->weaponSystem_ = 0;
[2710]47    }
48
49    WeaponPack::~WeaponPack()
50    {
[6417]51        if (this->isInitialized())
[2915]52        {
[6417]53            if( this->weaponSystem_ )
54                this->weaponSystem_->removeWeaponPack(this);
[2915]55
56            while (!this->weapons_.empty())
[5929]57                (*this->weapons_.begin())->destroy();
[2915]58
59            for (std::set<DefaultWeaponmodeLink*>::iterator it = this->links_.begin(); it != this->links_.end(); )
[5929]60                (*(it++))->destroy();
[2915]61        }
[2710]62    }
63
[2912]64    void WeaponPack::XMLPort(Element& xmlelement, XMLPort::Mode mode)
[2710]65    {
[2912]66        SUPER(WeaponPack, XMLPort, xmlelement, mode);
67
[2918]68        XMLPortObjectExtended(WeaponPack, Weapon, "", addWeapon, getWeapon, xmlelement, mode, false, false);
[2915]69        XMLPortObject(WeaponPack, DefaultWeaponmodeLink, "links", addDefaultWeaponmodeLink, getDefaultWeaponmodeLink, xmlelement, mode);
[2912]70    }
71
[10650]72    /**
73    @brief
74        Fire all weapons in this WeaponSet with the defined weaponmode.
75    */
[2914]76    void WeaponPack::fire(unsigned int weaponmode)
[2912]77    {
[6417]78        for (std::vector<Weapon *>::iterator it = this->weapons_.begin(); it != this->weapons_.end(); ++it)
[2918]79            (*it)->fire(weaponmode);
[2710]80    }
81
[10650]82    /**
83    @brief
84        Reload all weapons in this WeaponSet.
85    */
[2918]86    void WeaponPack::reload()
87    {
[6417]88        for (std::vector<Weapon *>::iterator it = this->weapons_.begin(); it != this->weapons_.end(); ++it)
[2918]89            (*it)->reload();
90    }
91
[2914]92    void WeaponPack::addWeapon(Weapon * weapon)
[2710]93    {
[2914]94        if (!weapon)
95            return;
[2710]96
[6417]97        this->weapons_.push_back(weapon);
[2914]98        weapon->setWeaponPack(this);
[2710]99    }
100
[2915]101    void WeaponPack::removeWeapon(Weapon * weapon)
102    {
103        if (!weapon)
104            return;
105
[6417]106        std::vector<Weapon*>::iterator it = std::find(this->weapons_.begin(), this->weapons_.end(), weapon);
107        assert(it != this->weapons_.end());
108        this->weapons_.erase(it);
[2915]109        weapon->setWeaponPack(0);
110    }
111
[2914]112    Weapon * WeaponPack::getWeapon(unsigned int index) const
[2710]113    {
[2914]114        unsigned int i = 0;
[2710]115
[6417]116        for (std::vector<Weapon *>::const_iterator it = this->weapons_.begin(); it != this->weapons_.end(); ++it)
[2914]117        {
118            if (i == index)
119                return (*it);
120            ++i;
121        }
[2710]122
[2914]123        return 0;
[2710]124    }
125
[10961]126    std::vector<Weapon*>* WeaponPack::getAllWeapons()
127    {
128        return &weapons_;       
129    }   
130
[2915]131    void WeaponPack::addDefaultWeaponmodeLink(DefaultWeaponmodeLink* link)
132    {
133        this->links_.insert(link);
134    }
135
136    DefaultWeaponmodeLink* WeaponPack::getDefaultWeaponmodeLink(unsigned int index) const
137    {
138        unsigned int i = 0;
139        for (std::set<DefaultWeaponmodeLink*>::const_iterator it = this->links_.begin(); it != this->links_.end(); ++it)
140        {
141            if (i == index)
142                return (*it);
143
144            ++i;
145        }
146        return 0;
147    }
148
149    unsigned int WeaponPack::getDesiredWeaponmode(unsigned int firemode) const
150    {
151        for (std::set<DefaultWeaponmodeLink*>::const_iterator it = this->links_.begin(); it != this->links_.end(); ++it)
152            if ((*it)->getFiremode() == firemode)
153                return (*it)->getWeaponmode();
154
155        return WeaponSystem::WEAPON_MODE_UNASSIGNED;
156    }
[2918]157
158    void WeaponPack::notifyWeapons()
159    {
[6417]160        for (std::vector<Weapon *>::const_iterator it = this->weapons_.begin(); it != this->weapons_.end(); ++it)
[2918]161            (*it)->setWeaponPack(this);
162    }
[10961]163
164    void WeaponPack::updateMunition()
165    {
166        for (std::vector<Weapon *>::const_iterator it = this->weapons_.begin(); it != this->weapons_.end(); ++it)
167            (*it)->updateMunition();
168    }
[2710]169}
Note: See TracBrowser for help on using the repository browser.