Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/weapons/src/orxonox/objects/weaponSystem/WeaponSystem.cc @ 2912

Last change on this file since 2912 was 2912, checked in by landauf, 15 years ago

Several small adjustments in the weaponsystem (like additional const keyword, includes moved from .h to .cc where possible, …)

Firemode is now an unsigned int instead of an Enum. Instead of "fire" and "altFire" use "fire 0" and "fire 1"

  • Property svn:eol-style set to native
  • Property svn:mergeinfo set to (toggle deleted branches)
    /code/branches/gui/src/orxonox/objects/weaponSystem/WeaponSystem.ccmergedeligible
    /code/branches/lodfinal/src/orxonox/objects/weaponSystem/WeaponSystem.ccmergedeligible
    /code/branches/weaponsystem/src/orxonox/objects/weaponSystem/WeaponSystem.ccmergedeligible
    /code/branches/buildsystem2/src/orxonox/objects/weaponSystem/WeaponSystem.cc2506-2658
    /code/branches/buildsystem3/src/orxonox/objects/weaponSystem/WeaponSystem.cc2662-2708
    /code/branches/ceguilua/src/orxonox/objects/WeaponSystem.cc1802-1808
    /code/branches/core3/src/orxonox/objects/WeaponSystem.cc1572-1739
    /code/branches/gcc43/src/orxonox/objects/WeaponSystem.cc1580
    /code/branches/gui/src/orxonox/objects/WeaponSystem.cc1635-1723
    /code/branches/input/src/orxonox/objects/WeaponSystem.cc1629-1636
    /code/branches/miniprojects/src/orxonox/objects/weaponSystem/WeaponSystem.cc2754-2824
    /code/branches/network/src/orxonox/objects/weaponSystem/WeaponSystem.cc2356
    /code/branches/network64/src/orxonox/objects/weaponSystem/WeaponSystem.cc2210-2355
    /code/branches/objecthierarchy/src/orxonox/objects/WeaponSystem.cc1911-2085,​2100
    /code/branches/objecthierarchy2/src/orxonox/objects/weaponSystem/WeaponSystem.cc2171-2479
    /code/branches/overlay/src/orxonox/objects/weaponSystem/WeaponSystem.cc2117-2385
    /code/branches/physics/src/orxonox/objects/weaponSystem/WeaponSystem.cc2107-2439
    /code/branches/physics_merge/src/orxonox/objects/weaponSystem/WeaponSystem.cc2436-2457
    /code/branches/pickups/src/orxonox/objects/WeaponSystem.cc1926-2086
    /code/branches/pickups2/src/orxonox/objects/weaponSystem/WeaponSystem.cc2107-2497
    /code/branches/presentation/src/orxonox/objects/weaponSystem/WeaponSystem.cc2369-2652,​2654-2660
    /code/branches/questsystem/src/orxonox/objects/WeaponSystem.cc1894-2088
    /code/branches/questsystem2/src/orxonox/objects/weaponSystem/WeaponSystem.cc2107-2259
    /code/branches/script_trigger/src/orxonox/objects/WeaponSystem.cc1295-1953,​1955
    /code/branches/weapon/src/orxonox/objects/WeaponSystem.cc1925-2047
    /code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponSystem.cc2107-2488
File size: 4.6 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 *      Martin Polak
24 *   Co-authors:
25 *      ...
26 *
27 */
28
29#include "OrxonoxStableHeaders.h"
30#include "WeaponSystem.h"
31
32#include "core/CoreIncludes.h"
33#include "objects/worldentities/pawns/Pawn.h"
34
35#include "WeaponSlot.h"
36#include "WeaponPack.h"
37#include "WeaponSet.h"
38
39/* WeaponSystem
40 *
41 *  www.orxonox.net/wiki/WeaponSystem
42 */
43
44namespace orxonox
45{
46    CreateFactory(WeaponSystem);
47
48    WeaponSystem::WeaponSystem(BaseObject* creator) : BaseObject(creator)
49    {
50        RegisterObject(WeaponSystem);
51
52        this->pawn_ = 0;
53COUT(0) << "+WeaponSystem" << std::endl;
54    }
55
56    WeaponSystem::~WeaponSystem()
57    {
58COUT(0) << "~WeaponSystem" << std::endl;
59        if (this->isInitialized())
60        {
61            if (this->pawn_)
62                this->pawn_->setWeaponSystem(0);
63        }
64    }
65
66    void WeaponSystem::attachWeaponSet(WeaponSet *wSet)
67    {
68        if (!wSet)
69            return;
70
71        this->weaponSets_[wSet->getFireMode()] = wSet;
72        wSet->setWeaponSystem(this);
73    }
74
75    WeaponSet * WeaponSystem::getWeaponSet(unsigned int index) const
76    {
77        unsigned int i = 0;
78        for (std::map<unsigned int, WeaponSet*>::const_iterator it = this->weaponSets_.begin(); it != this->weaponSets_.end(); ++it)
79        {
80            ++i;
81            if (i > index)
82                return it->second;
83        }
84        return 0;
85    }
86
87    void WeaponSystem::attachWeaponSlot(WeaponSlot *wSlot)
88    {
89        if (!wSlot)
90            return;
91
92        this->weaponSlots_.insert(wSlot);
93        wSlot->setWeaponSystem(this);
94    }
95
96    WeaponSlot * WeaponSystem::getWeaponSlot(unsigned int index) const
97    {
98        unsigned int i = 0;
99        for (std::set<WeaponSlot*>::iterator it = this->weaponSlots_.begin(); it != this->weaponSlots_.end(); ++it)
100        {
101            ++i;
102            if (i > index)
103                return (*it);
104        }
105        return 0;
106    }
107
108    void WeaponSystem::attachWeaponPack(WeaponPack *wPack, unsigned int wSetNumber)
109    {
110        if (!wPack)
111            return;
112
113        std::map<unsigned int, WeaponSet *>::iterator it = this->weaponSets_.find(wSetNumber);
114        if (it != this->weaponSets_.end() && it->second)
115            it->second->attachWeaponPack(wPack);
116
117        this->weaponPacks_.insert(wPack);
118        wPack->setWeaponSystem(this);
119        wPack->attachNeededMunitionToAllWeapons(); // TODO - what is this?
120    }
121
122    WeaponPack * WeaponSystem::getWeaponPack(unsigned int index) const
123    {
124        unsigned int i = 0;
125        for (std::set<WeaponPack*>::iterator it = this->weaponPacks_.begin(); it != this->weaponPacks_.end(); ++it)
126        {
127            ++i;
128            if (i > index)
129                return (*it);
130        }
131        return 0;
132   }
133
134    void WeaponSystem::setNewMunition(const std::string& munitionType, Munition * munitionToAdd)
135    {
136        this->munitionSet_[munitionType] = munitionToAdd;
137    }
138
139
140    //returns the Pointer to the munitionType, if this munitionType doesn't exist returns 0, see Weapon::attachNeededMunition
141    Munition * WeaponSystem::getMunitionType(const std::string& munitionType) const
142    {
143        std::map<std::string, Munition *>::const_iterator it = this->munitionSet_.find(munitionType);
144        if (it != this->munitionSet_.end())
145            return it->second;
146        else
147            return 0;
148    }
149
150
151    //n is the n'th weaponSet, starting with zero
152    //SpaceShip.cc only needs to have the keybinding to a specific Set-number n (=firemode)
153    //in future this could be well defined and not only for 3 different WeaponModes
154    void WeaponSystem::fire(unsigned int firemode)
155    {
156        std::map<unsigned int, WeaponSet *>::iterator it = this->weaponSets_.find(firemode);
157        if (it != this->weaponSets_.end() && it->second)
158            it->second->fire();
159    }
160}
Note: See TracBrowser for help on using the repository browser.