Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/hud2/src/orxonox/hud/HUD.cc @ 1002

Last change on this file since 1002 was 1002, checked in by chaiy, 16 years ago

BarFactory created, but doesn't work yet

File size: 9.2 KB
Line 
1/*
2*   ORXONOX - the hottest 3D action shooter ever to exist
3*
4*
5*   License notice:
6*
7*   This program is free software; you can redistribute it and/or
8*   modify it under the terms of the GNU General Public License
9*   as published by the Free Software Foundation; either version 2
10*   of the License, or (at your option) any later version.
11*
12*   This program is distributed in the hope that it will be useful,
13*   but WITHOUT ANY WARRANTY; without even the implied warranty of
14*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15*   GNU General Public License for more details.
16*
17*   You should have received a copy of the GNU General Public License
18*   along with this program; if not, write to the Free Software
19*   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
20*
21*   Author:
22*      Yuning Chai
23*   Co-authors:
24*      ...
25*
26*/
27
28
29#include "OrxonoxStableHeaders.h"
30#include <OgreOverlay.h>
31#include <OgreOverlayContainer.h>
32#include <OgreOverlayManager.h>
33#include <OgreSceneNode.h>
34
35#include "HUD.h"
36#include "Bar.h"
37#include "Factories.h"
38// ugly hack
39#include "Orxonox.h"
40
41
42namespace orxonox
43{
44  using namespace Ogre;
45
46
47
48
49
50  HUD::HUD(int zoom){
51
52    Ogre::OverlayManager& overlayManager = Ogre::OverlayManager::getSingleton();
53
54//    energyCounter = new Bar(0,0,100,20,Bar::LEFT,Bar::YELLOW,"Orxonox/HUD/energyCounterPanel/energyCounter");
55
56    Ogre::OverlayContainer* energyCounterPanel = static_cast<Ogre::OverlayContainer*>(overlayManager.createOverlayElement("Panel", "Orxonox/HUD/energyCounterPanel"));
57    energyCounterPanel->setLeft(-50);
58    energyCounterPanel->setTop(10);
59    energyCounterPanel->setWidth(100);
60    energyCounterPanel->setHeight(20);
61    energyCounterPanel->setHorizontalAlignment(Ogre::GHA_CENTER);
62    energyCounterPanel->setMetricsMode(Ogre::GMM_PIXELS);       
63    energyCounterPanel->show();
64//    energyCounterPanel->addChild(energyCounter->element);
65
66    BarOverlayElementFactory *factory = new BarOverlayElementFactory();
67    overlayManager.addOverlayElementFactory(factory);
68    Ogre::OverlayElement* BarElement = overlayManager.createOverlayElementFromFactory("Bar", "BarElement");
69
70
71
72
73
74    Ogre::Overlay* orxonoxOverlay = overlayManager.create("Orxonox/HUD"); 
75    orxonoxOverlay->add2D(energyCounterPanel);
76
77    // important: don't use SceneManager to create the node! but register the creator scene manager.
78    ogreNode_ = new Ogre::SceneNode(Orxonox::getSingleton()->getSceneManager(), "hudNoedely");
79   
80    ogreNode_->setPosition(80,-60,-200);
81    ogreNode_->setScale(0.4,0.4,0.4);
82    // ugly hack, but I haven't figured out yet how we could change this, since we really need the
83    // scene manager..
84    ogreNode_->attachObject(Orxonox::getSingleton()->getSceneManager()->createEntity("head", "ogrehead.mesh"));
85    orxonoxOverlay->add3D(ogreNode_);
86
87    orxonoxOverlay->show();
88  }
89
90  void HUD::tick(float dt)
91  {
92    if (this->ogreNode_)
93    {
94      this->ogreNode_->roll(Ogre::Degree(dt*200),Ogre::Node::TS_LOCAL);
95      this->ogreNode_->yaw(Ogre::Degree(dt*200),Ogre::Node::TS_LOCAL);     
96      this->ogreNode_->pitch(Ogre::Degree(dt*200),Ogre::Node::TS_LOCAL);     
97    }
98  }
99
100  HUD::~HUD(void){}
101
102
103
104}
105
106
107
108
109
110
111/*#include "OrxonoxStableHeaders.h"
112
113#include <OgreOverlayManager.h>
114#include <OgreOverlayElement.h>
115#include <OgreStringConverter.h>
116
117#include "HUD.h"
118#include "Bar.h"
119
120namespace orxonox
121{
122  using namespace Ogre;
123
124  HUD::HUD(void)
125  {
126    init();
127
128    setTime(99,55);
129
130    setTargetWindowName("HURRA");
131    setTargetWindowDistance(12);
132    setTargetWindowStatus("Dead");
133    setTargetWindowDistance(30);
134
135    setEnergyValue(60);
136
137    setShieldLeftTopValue(true);
138    setShieldRightTopValue(false);
139    setShieldLeftBottomValue(false);
140    setShieldRightBottomValue(true);
141
142    setRocket1(11);
143    setRocket2(22);
144    setRocket3(33);
145    setRocket4(44);
146
147    setEnergyDistr(33,33,34);
148
149    setPrimar(3);
150
151    energyDistrPixelX_ = 100;
152    energyDistrPixelY_ = 86;
153
154
155  }
156
157
158  HUD::~HUD( void ){
159
160  }
161
162  void HUD::setTime(int i, int j){
163    timeMin_=i;
164    timeSec_=j;
165    timeText_->setCaption(StringConverter::toString(timeMin_) + ":" + StringConverter::toString(timeSec_));
166  }
167
168  void HUD::setTargetWindowName(std::string i){
169    targetWindowName_=i;
170    targetWindowNameText_->setCaption( targetWindowName_ );
171  }
172
173  void HUD::setTargetWindowStatus(std::string i){
174    targetWindowStatus_=i;
175    targetWindowStatusText_->setCaption( targetWindowStatus_ );
176  }
177
178  void HUD::setTargetWindowDistance(int i){
179    targetWindowDistance_=i;
180    targetWindowDistanceText_->setCaption(StringConverter::toString(targetWindowDistance_) + "km" );
181  }
182
183  void HUD::setTargetWindowHitRating(int i){
184    targetWindowHitRating_=i;
185    targetWindowHitRatingText_->setCaption(StringConverter::toString(targetWindowHitRating_) + "%" );
186  }
187
188  void HUD::setEnergyValue(int i){
189    energyValue_=i;
190    energyLength_->setWidth((int)((float)energyValue_/(float)100*200));
191  }
192
193  void HUD::setShieldLeftTopValue(bool i){
194    shieldLeftTopValue_=i;
195    if (shieldLeftTopValue_) shieldLeftTop_->show();
196    else shieldLeftTop_->hide();
197  }
198
199  void HUD::setShieldRightTopValue(bool i){
200    shieldRightTopValue_=i;
201    if (shieldRightTopValue_) shieldRightTop_->show();
202    else shieldRightTop_->hide();
203  }
204
205  void HUD::setShieldLeftBottomValue(bool i){
206    shieldLeftBottomValue_=i;
207    if (shieldLeftBottomValue_) shieldLeftBottom_->show();
208    else shieldLeftBottom_->hide();
209  }
210
211  void HUD::setShieldRightBottomValue(bool i){
212    shieldRightBottomValue_=i;
213    if (shieldRightBottomValue_) shieldRightBottom_->show();
214    else shieldRightBottom_->hide();
215  }
216
217  void HUD::setRocket1(int i){
218    rocket1_=i;
219    rocketNum1_->setCaption(StringConverter::toString(rocket1_));
220  }
221
222  void HUD::setRocket2(int i){
223    rocket2_=i;
224    rocketNum2_->setCaption(StringConverter::toString(rocket2_));
225  }
226
227  void HUD::setRocket3(int i){
228    rocket3_=i;
229    rocketNum3_->setCaption(StringConverter::toString(rocket3_));
230  }
231
232  void HUD::setRocket4(int i){
233    rocket4_=i;
234    rocketNum4_->setCaption(StringConverter::toString(rocket4_));
235  }
236
237  void HUD::setEnergyDistr(float s, float e, float l){
238    energyDistrShield_=s;
239    energyDistrEngine_=e;
240    energyDistrLaser_=l;
241
242    float energyDistrShieldInv_ = 100 - energyDistrShield_;
243    float energyDistrEngineInv_ = 100 - energyDistrEngine_;
244    float energyDistrLaserInv_ = 100 - energyDistrLaser_;
245
246    float energyDistrT_ = -energyDistrPixelX_/((energyDistrPixelX_-energyDistrPixelX_/2*energyDistrShieldInv_/(energyDistrShieldInv_+energyDistrEngineInv_))*energyDistrLaserInv_*(energyDistrShieldInv_+energyDistrEngineInv_)/energyDistrShieldInv_/(energyDistrLaserInv_+energyDistrEngineInv_)+energyDistrPixelX_/2+energyDistrPixelX_/2*energyDistrEngineInv_/(energyDistrEngineInv_+energyDistrLaserInv_));
247    float energyDistrX_ = (-energyDistrPixelX_/2-energyDistrPixelX_/2*energyDistrEngineInv_/(energyDistrEngineInv_+energyDistrLaserInv_))*energyDistrT_;
248    float energyDistrY_ = energyDistrPixelY_+energyDistrPixelY_*energyDistrLaserInv_/(energyDistrLaserInv_+energyDistrEngineInv_)*energyDistrT_;
249
250    energyDistrPoint_->setLeft((int)energyDistrX_-3);
251    energyDistrPoint_->setTop((int)energyDistrY_-3);
252
253  }
254
255  void HUD::setPrimar(int i){
256    primarValue_=i;
257    if(i==1){
258      primarChoice_->setLeft(2);
259      primarChoice_->setWidth(48);
260    }
261    if(i==2){
262      primarChoice_->setLeft(51);
263      primarChoice_->setWidth(49);
264    }
265    else{
266      primarChoice_->setLeft(101);
267      primarChoice_->setWidth(48);
268    }
269  }
270
271
272
273  void HUD::init(void)
274  {
275    timeText_ = OverlayManager::getSingleton().getOverlayElement("Orxonox/HUD1.2/Time/Text");
276
277    targetWindowNameText_ = OverlayManager::getSingleton().getOverlayElement("Orxonox/HUD1.2/TargetWindow/Name");
278    targetWindowDistanceText_ = OverlayManager::getSingleton().getOverlayElement("Orxonox/HUD1.2/TargetWindow/DistanceText");
279    targetWindowStatusText_ = OverlayManager::getSingleton().getOverlayElement("Orxonox/HUD1.2/TargetWindow/StatusText");
280    targetWindowHitRatingText_ = OverlayManager::getSingleton().getOverlayElement("Orxonox/HUD1.2/TargetWindow/HitRatingText");
281
282    energyLength_ = OverlayManager::getSingleton().getOverlayElement("Orxonox/HUD1.2/EnergyBackground");
283
284    shieldLeftTop_ = OverlayManager::getSingleton().getOverlayElement("Orxonox/HUD1.2/shieldLeftTop");
285    shieldRightTop_ = OverlayManager::getSingleton().getOverlayElement("Orxonox/HUD1.2/shieldRightTop");
286    shieldLeftBottom_ = OverlayManager::getSingleton().getOverlayElement("Orxonox/HUD1.2/shieldLeftBottom");
287    shieldRightBottom_ = OverlayManager::getSingleton().getOverlayElement("Orxonox/HUD1.2/shieldRightBottom");
288
289    rocketNum1_ = OverlayManager::getSingleton().getOverlayElement("Orxonox/HUD1.2/RocketNum1");
290    rocketNum2_ = OverlayManager::getSingleton().getOverlayElement("Orxonox/HUD1.2/RocketNum2");
291    rocketNum3_ = OverlayManager::getSingleton().getOverlayElement("Orxonox/HUD1.2/RocketNum3");
292    rocketNum4_ = OverlayManager::getSingleton().getOverlayElement("Orxonox/HUD1.2/RocketNum4");
293
294    // FIXME: unused vars!
295    float energyDistrPixelX_ = 100;
296    float energyDistrPixelY_ = 86;
297    energyDistrPoint_ = OverlayManager::getSingleton().getOverlayElement("Orxonox/HUD1.2/EnergyDistrPoint");
298
299    primarChoice_ = OverlayManager::getSingleton().getOverlayElement("Orxonox/HUD1.2/PrimarChoice");
300  }
301
302}
303*/
Note: See TracBrowser for help on using the repository browser.