Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/trunk/src/modules/overlays/hud/HUDWeapon.cc @ 11358

Last change on this file since 11358 was 11071, checked in by landauf, 9 years ago

merged branch cpp11_v3 back to trunk

  • Property svn:eol-style set to native
File size: 5.8 KB
RevLine 
[10688]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:
[10721]23 *      Fabien Vultier
[10688]24 *   Co-authors:
[10721]25 *      ...
[10688]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
[10721]44        weaponModeHUDActualSize_ = Vector2(0.0f,0.0f);
45
46        weaponIndex_ = 0;
47        hudWeaponModes_.clear();
48
[10688]49        overlayElement_ = static_cast<Ogre::PanelOverlayElement* >(Ogre::OverlayManager::getSingleton().createOverlayElement("Panel", "HUDWeapon" + getUniqueNumberString()));
50        overlayElement_->setMaterialName("Orxonox/WSHUD_Weapon");
51        overlayElement_->setPosition(0.0f,0.0f);
52        overlayElement_->setDimensions(1.0f,1.0f);
53        this->background_->addChild(overlayElement_);
54    }
55
56    HUDWeapon::~HUDWeapon()
57    {
58        if (this->isInitialized())
59        {
60            destroyHUDChilds();
61        }
62    }
63
64    void HUDWeapon::XMLPort(Element& xmlelement, XMLPort::Mode mode)
65    {
66        SUPER(HUDWeapon, XMLPort, xmlelement, mode);
67
68        /*XMLPortParam(HUDWeapons, "sensitivity", setRadarSensitivity, getRadarSensitivity, xmlelement, mode);
69        XMLPortParam(HUDWeapons, "halfDotSizeDistance", setHalfDotSizeDistance, getHalfDotSizeDistance, xmlelement, mode);*/
70    }
71
72    void HUDWeapon::tick(float dt)
73    {
74        SUPER(HUDWeapon, tick, dt);
[10721]75
76        if (!weapon_)
77        {
[11071]78            // TODO: destroy this HUD id the Weapon does no more exist. (Wehen the weak pointer is null)
[10721]79        }
[10688]80    }   
81
82    void HUDWeapon::positionChanged()
83    {
84        OrxonoxOverlay::positionChanged();
85
86        positionHUDChilds();
[10721]87    }
[10688]88
[10721]89    void HUDWeapon::sizeChanged()
90    {
91        OrxonoxOverlay::sizeChanged();
92
93        positionHUDChilds();
94    }
95
[10688]96    void HUDWeapon::changedOwner()
97    {
98        SUPER(HUDWeapon, changedOwner);
99
100        this->owner_ = orxonox_cast<Pawn*>(this->getOwner());
101
102        updateWeaponModeList();
103    }
104
105    void HUDWeapon::changedOverlayGroup()
106    {
107        SUPER(HUDWeapon, changedOverlayGroup);
108    }   
109
110    void HUDWeapon::changedVisibility()
111    {
112        SUPER(HUDWeapon, changedVisibility);
[10794]113
114        bool visible = this->isVisible();
115
[11071]116        for (HUDWeaponMode* hudWeaponMode : hudWeaponModes_)
[10794]117        {
[11071]118            hudWeaponMode->changedVisibility(); //inform all Child Overlays that our visibility has changed
119            hudWeaponMode->setVisible(visible);
[10794]120        }
[10688]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    {
[11071]142        if (owner_ == nullptr || weapon_ == nullptr)
[10688]143        {
144            return;
145        }
146           
147        destroyHUDChilds();
148
[10721]149        updateSize();
[10688]150        createHUDChilds();
[10721]151        positionHUDChilds();
[10688]152    } 
153
154    void HUDWeapon::createHUDChilds()
155    {
[11071]156        if (weapon_ == nullptr)
[10721]157        {
158            return;
159        }
160
161        int positionIndex = 0;
162
[11071]163        for (const auto& mapEntry : weapon_->getAllWeaponmodes())
[10688]164        {
165            HUDWeaponMode* hudWeaponMode = new HUDWeaponMode(this->getContext());
166            hudWeaponMode->setOwner(owner_);
[10721]167            hudWeaponMode->setOverlayGroup(this->getOverlayGroup());
[11044]168            hudWeaponMode->setVisible(this->isVisible());
[11071]169            hudWeaponMode->setWeaponMode(mapEntry.second);
[10721]170            hudWeaponMode->setWeaponIndex(this->weaponIndex_);                   
171            hudWeaponMode->setAspectCorrection(false);
172            hudWeaponMode->setPickPoint(Vector2(0.0f,0.0f));
173
[10688]174            hudWeaponModes_.push_back(hudWeaponMode);
[10721]175
176            ++ positionIndex;
177        }
[10688]178    }     
179
180    void HUDWeapon::positionHUDChilds()
181    {
182        int positionIndex = 0;
183
[11071]184        for (HUDWeaponMode* hudWeaponMode : hudWeaponModes_)
[10688]185        {
[11071]186            hudWeaponMode->setPositionOffset(this->positionOffset_);
187            hudWeaponMode->setWeaponModeIndex(positionIndex);
188            hudWeaponMode->setWeaponIndex(this->weaponIndex_);
189            hudWeaponMode->setWeaponModeHUDActualSize(this->weaponModeHUDActualSize_);
[10688]190
[10721]191            ++ positionIndex;
[10688]192        }
193    } 
194
195    void HUDWeapon::destroyHUDChilds()
196    {
[11071]197        for (HUDWeaponMode* hudWeaponMode : hudWeaponModes_)
[10688]198        {
[11071]199            hudWeaponMode->destroy();
[10688]200        } 
201
202        hudWeaponModes_.clear();
203    }
[10721]204
205    void HUDWeapon::updateSize()
206    {
[11071]207        if (weapon_ != nullptr)
[10721]208        {
[11071]209            this->setSize(Vector2(weaponModeHUDActualSize_.x,weaponModeHUDActualSize_.y*weapon_->getAllWeaponmodes().size()));
[10721]210            updatePosition();
211        }       
212    }
213
214    void HUDWeapon::updatePosition()
215    {
[11071]216        if (weapon_ != nullptr)
[10721]217        {
[10739]218            this->setPosition(Vector2(weaponModeHUDActualSize_.x*weaponIndex_,0.0f) + this->positionOffset_);
[10721]219        }       
220    }       
[10688]221}
Note: See TracBrowser for help on using the repository browser.