Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/presentationHS15/src/modules/overlays/hud/HUDWeapon.cc @ 10961

Last change on this file since 10961 was 10961, checked in by maxima, 9 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.

File size: 5.9 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 *      Fabien Vultier
24 *   Co-authors:
25 *      ...
26 *
27 */
28
29#include "HUDWeapon.h"
30
31#include "core/CoreIncludes.h"
32#include "core/XMLPort.h"
33#include "util/Convert.h"
34#include "core/class/Super.h"
35
36namespace orxonox
37{
38    RegisterClass(HUDWeapon);
39
40    HUDWeapon::HUDWeapon(Context* context) : OrxonoxOverlay(context)
41    {
42        RegisterObject(HUDWeapon);
43
44        weaponModeHUDActualSize_ = Vector2(0.0f,0.0f);
45
46        weaponModes_ = NULL;
47        weaponIndex_ = 0;
48        hudWeaponModes_.clear();
49
50        overlayElement_ = static_cast<Ogre::PanelOverlayElement* >(Ogre::OverlayManager::getSingleton().createOverlayElement("Panel", "HUDWeapon" + getUniqueNumberString()));
51        overlayElement_->setMaterialName("Orxonox/WSHUD_Weapon");
52        overlayElement_->setPosition(0.0f,0.0f);
53        overlayElement_->setDimensions(1.0f,1.0f);
54        this->background_->addChild(overlayElement_);
55    }
56
57    HUDWeapon::~HUDWeapon()
58    {
59        if (this->isInitialized())
60        {
61            destroyHUDChilds();
62        }
63    }
64
65    void HUDWeapon::XMLPort(Element& xmlelement, XMLPort::Mode mode)
66    {
67        SUPER(HUDWeapon, XMLPort, xmlelement, mode);
68
69        /*XMLPortParam(HUDWeapons, "sensitivity", setRadarSensitivity, getRadarSensitivity, xmlelement, mode);
70        XMLPortParam(HUDWeapons, "halfDotSizeDistance", setHalfDotSizeDistance, getHalfDotSizeDistance, xmlelement, mode);*/
71    }
72
73    void HUDWeapon::tick(float dt)
74    {
75        SUPER(HUDWeapon, tick, dt);
76
77        if (!weapon_)
78        {
79            // TODO: destroy this HUD id the Weapon does no more exist. (Wehen the weak pointer is NULL)
80        }
81    }   
82
83    void HUDWeapon::positionChanged()
84    {
85        OrxonoxOverlay::positionChanged();
86
87        positionHUDChilds();
88    }
89
90    void HUDWeapon::sizeChanged()
91    {
92        OrxonoxOverlay::sizeChanged();
93
94        positionHUDChilds();
95    }
96
97    void HUDWeapon::changedOwner()
98    {
99        SUPER(HUDWeapon, changedOwner);
100
101        this->owner_ = orxonox_cast<Pawn*>(this->getOwner());
102
103        updateWeaponModeList();
104    }
105
106    void HUDWeapon::changedOverlayGroup()
107    {
108        SUPER(HUDWeapon, changedOverlayGroup);
109    }   
110
111    void HUDWeapon::changedVisibility()
112    {
113        SUPER(HUDWeapon, changedVisibility);
114
115        bool visible = this->isVisible();
116
117        for (std::vector<WeakPtr<HUDWeaponMode> >::iterator it = hudWeaponModes_.begin(); it != hudWeaponModes_.end(); ++it)
118        {
119            (*it)->setVisible(visible);
120        }
121    }
122
123    void HUDWeapon::changedName()
124    {
125        SUPER(HUDWeapon, changedName);
126    }
127
128    void HUDWeapon::setWeapon(Weapon* weapon)
129    {
130        weapon_ = weapon;
131
132        if (!weapon_)
133        {
134            return;
135        }
136
137        updateWeaponModeList();
138    }
139
140    void HUDWeapon::updateWeaponModeList()
141    {
142        if (owner_ == NULL || weapon_ == NULL)
143        {
144            return;
145        }
146           
147        destroyHUDChilds();
148
149        weaponModes_ = weapon_->getAllWeaponmodes();
150
151        updateSize();
152        createHUDChilds();
153        positionHUDChilds();
154    } 
155
156    void HUDWeapon::createHUDChilds()
157    {
158        if (weaponModes_ == NULL)
159        {
160            return;
161        }
162
163        int positionIndex = 0;
164
165        for (std::multimap<unsigned int, WeaponMode*>::iterator it = weaponModes_->begin(); it != weaponModes_->end(); ++it)
166        {
167            HUDWeaponMode* hudWeaponMode = new HUDWeaponMode(this->getContext());
168            hudWeaponMode->setOwner(owner_);
169            hudWeaponMode->setOverlayGroup(this->getOverlayGroup());
170            hudWeaponMode->setWeaponMode(it->second);
171            hudWeaponMode->setWeaponIndex(this->weaponIndex_);                   
172            hudWeaponMode->setAspectCorrection(false);
173            hudWeaponMode->setPickPoint(Vector2(0.0f,0.0f));
174
175            hudWeaponModes_.push_back(hudWeaponMode);
176
177            ++ positionIndex;
178        }
179    }     
180
181    void HUDWeapon::positionHUDChilds()
182    {
183        int positionIndex = 0;
184
185        for (std::vector<WeakPtr<HUDWeaponMode> >::iterator it = hudWeaponModes_.begin(); it != hudWeaponModes_.end(); ++it)
186        {
187            (*it)->setPositionOffset(this->positionOffset_);
188            (*it)->setWeaponModeIndex(positionIndex);
189            (*it)->setWeaponIndex(this->weaponIndex_);
190            (*it)->setWeaponModeHUDActualSize(this->weaponModeHUDActualSize_);
191
192            ++ positionIndex;
193        }
194    } 
195
196    void HUDWeapon::destroyHUDChilds()
197    {
198        for (std::vector<WeakPtr<HUDWeaponMode> >::iterator it = hudWeaponModes_.begin(); it != hudWeaponModes_.end(); ++it)
199        {
200            (*it)->destroy();
201        } 
202
203        hudWeaponModes_.clear();
204    }
205
206    void HUDWeapon::updateSize()
207    {
208        if (weaponModes_ != NULL)
209        {
210            this->setSize(Vector2(weaponModeHUDActualSize_.x,weaponModeHUDActualSize_.y*weaponModes_->size()));
211            updatePosition();
212        }       
213    }
214
215    void HUDWeapon::updatePosition()
216    {
217        if (weaponModes_ != NULL)
218        {
219            this->setPosition(Vector2(weaponModeHUDActualSize_.x*weaponIndex_,0.0f) + this->positionOffset_);
220        }       
221    }       
222}
Note: See TracBrowser for help on using the repository browser.