Changeset 1588 for code/branches/hud/src/orxonox/hud/HUD.cc
- Timestamp:
- Jun 11, 2008, 12:21:42 AM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/hud/src/orxonox/hud/HUD.cc
r1580 r1588 32 32 #include <string> 33 33 #include <set> 34 #include <assert.h> 34 35 #include <OgreOverlay.h> 35 36 #include <OgreOverlayContainer.h> … … 39 40 #include "core/Debug.h" 40 41 #include "core/ConsoleCommand.h" 42 #include "core/CoreIncludes.h" 41 43 #include "objects/SpaceShip.h" 42 44 #include "objects/WorldEntity.h" 43 45 #include "GraphicsEngine.h" 44 #include " BarOverlayElement.h"46 #include "HUDBar.h" 45 47 #include "RadarObject.h" 46 48 #include "RadarOverlayElement.h" … … 49 51 namespace orxonox 50 52 { 53 CreateFactory(HUD); 54 51 55 SetConsoleCommandShortcut(HUD, cycleNavigationFocus).setAccessLevel(AccessLevel::User); 52 56 SetConsoleCommandShortcut(HUD, releaseNavigationFocus).setAccessLevel(AccessLevel::User); 53 SetConsoleCommandShortcut(HUD, toggleFPS).setAccessLevel(AccessLevel::User); 54 SetConsoleCommandShortcut(HUD, toggleRenderTime).setAccessLevel(AccessLevel::User); 57 SetConsoleCommand(HUD, toggleVisibility, false).setAccessLevel(AccessLevel::User); 58 59 HUD* HUD::instance_s = 0; 55 60 56 61 using namespace Ogre; … … 58 63 HUD::HUD() 59 64 { 65 assert(instance_s == 0); 66 instance_s = this; 67 RegisterObject(HUD); 68 69 // Singleton like in Ogre. Constructor and destructor are public, 70 // but the assert prevents from having multiple instances. 71 60 72 orxonoxHUD_ = 0; 61 73 container_ = 0; … … 72 84 HUD::~HUD() 73 85 { 74 this->destroy(); 75 } 76 77 void HUD::initialise() 78 { 86 if (this->isInitialized()) 87 { 88 if (this->container_) 89 Ogre::OverlayManager::getSingleton().destroyOverlayElement(this->container_); 90 this->container_ = 0; 91 if (this->fpsText_) 92 Ogre::OverlayManager::getSingleton().destroyOverlayElement(this->fpsText_); 93 this->fpsText_ = 0; 94 if (this->rTRText_) 95 Ogre::OverlayManager::getSingleton().destroyOverlayElement(this->rTRText_); 96 this->rTRText_ = 0; 97 if (this->energyBar_) 98 delete this->energyBar_; 99 this->energyBar_ = 0; 100 /*if (this->speedoBar_) 101 Ogre::OverlayManager::getSingleton().destroyOverlayElement(this->speedoBar_);*/ 102 this->speedoBar_ = 0; 103 if (this->radar_) 104 Ogre::OverlayManager::getSingleton().destroyOverlayElement(this->radar_); 105 this->radar_ = 0; 106 if (this->orxonoxHUD_) 107 Ogre::OverlayManager::getSingleton().destroy(this->orxonoxHUD_); 108 this->orxonoxHUD_ = 0; 109 110 if (this->nav_) 111 delete this->nav_; 112 this->nav_ = 0; 113 } 114 115 instance_s = 0; 116 } 117 118 void HUD::XMLPort(Element& xmlElement, XMLPort::Mode mode) 119 { 120 BaseObject::XMLPort(xmlElement, mode); 121 79 122 showFPS_ = true; 80 123 showRenderTime_ = true; 81 124 125 XMLPortObject(HUD, HUDOverlay, "", addHUDElement, getHUDElement, xmlElement, mode, false, true); 126 82 127 // create Factories 83 Ogre::OverlayManager::getSingleton().addOverlayElementFactory(&barOverlayElementFactory_);84 128 Ogre::OverlayManager::getSingleton().addOverlayElementFactory(&radarOverlayElementFactory_); 85 86 // creating text to display fps87 fpsText_ = static_cast<TextAreaOverlayElement*>(Ogre::OverlayManager::getSingleton().createOverlayElement("TextArea", "fpsText"));88 fpsText_->setMetricsMode(Ogre::GMM_PIXELS);89 fpsText_->setDimensions(0.001, 0.001);90 fpsText_->setPosition(10, 10);91 fpsText_->setFontName("Console");92 fpsText_->setCharHeight(20);93 fpsText_->setCaption("init");94 fpsText_->show();95 96 // creating text to display render time ratio97 rTRText_ = static_cast<TextAreaOverlayElement*>(Ogre::OverlayManager::getSingleton().createOverlayElement("TextArea", "rTRText"));98 rTRText_->setMetricsMode(Ogre::GMM_PIXELS);99 rTRText_->setDimensions(0.001, 0.001);100 rTRText_->setPosition(10, 30);101 rTRText_->setFontName("Console");102 rTRText_->setCharHeight(20);103 rTRText_->setCaption("init");104 rTRText_->show();105 129 106 130 // set up screen-wide container … … 111 135 container_->setHeight(1.0); 112 136 container_->setMetricsMode(Ogre::GMM_RELATIVE); 113 container_->addChild(fpsText_);114 container_->addChild(rTRText_);115 container_->show();116 137 117 138 orxonoxHUD_ = Ogre::OverlayManager::getSingleton().create("Orxonox/HUD"); 118 139 orxonoxHUD_->add2D(container_); 119 orxonoxHUD_->show();120 121 // create energy bar122 energyBar_ = static_cast<BarOverlayElement*>(Ogre::OverlayManager::getSingleton().createOverlayElement("Bar", "energyBar"));123 energyBar_->init(0.01, 0.94, 0.4, container_);124 energyBar_->setValue(1);125 energyBar_->show();126 127 // create speedo bar128 speedoBar_ = static_cast<BarOverlayElement*>(Ogre::OverlayManager::getSingleton().createOverlayElement("Bar", "speedoBar"));129 speedoBar_->init(0.01, 0.90, 0.4, container_);130 speedoBar_->addColour(0.7, ColourValue(0.2, 0.7, 0.2));131 speedoBar_->addColour(0.4, ColourValue(0.7, 0.5, 0.2));132 speedoBar_->addColour(0.1, ColourValue(0.7, 0.2, 0.2));133 speedoBar_->show();134 140 135 141 // create radar 136 142 radar_ = static_cast<RadarOverlayElement*>(Ogre::OverlayManager::getSingleton().createOverlayElement("Radar", "radar")); 137 143 radar_->init(0.5, 0.9, 0.2, container_); 138 radar_->show();139 144 140 145 // create Navigation … … 154 159 object->setPosition(10000.0,16000.0,0.0); 155 160 addRadarObject(object); 156 } 157 158 void HUD::destroy() 159 { 160 if (this->container_) 161 Ogre::OverlayManager::getSingleton().destroyOverlayElement(this->container_); 162 this->container_ = 0; 163 if (this->fpsText_) 164 Ogre::OverlayManager::getSingleton().destroyOverlayElement(this->fpsText_); 165 this->fpsText_ = 0; 166 if (this->rTRText_) 167 Ogre::OverlayManager::getSingleton().destroyOverlayElement(this->rTRText_); 168 this->rTRText_ = 0; 169 if (this->energyBar_) 170 Ogre::OverlayManager::getSingleton().destroyOverlayElement(this->energyBar_); 171 this->energyBar_ = 0; 172 if (this->speedoBar_) 173 Ogre::OverlayManager::getSingleton().destroyOverlayElement(this->speedoBar_); 174 this->speedoBar_ = 0; 175 if (this->radar_) 176 Ogre::OverlayManager::getSingleton().destroyOverlayElement(this->radar_); 177 this->radar_ = 0; 178 if (this->orxonoxHUD_) 179 Ogre::OverlayManager::getSingleton().destroy(this->orxonoxHUD_); 180 this->orxonoxHUD_ = 0; 181 182 if (this->nav_) 183 delete this->nav_; 184 this->nav_ = 0; 161 162 orxonoxHUD_->show(); 163 } 164 165 void HUD::addHUDElement(HUDOverlay* element) 166 { 167 if (hudElements_.find(element->getName()) != hudElements_.end()) 168 { 169 COUT(1) << "Ambiguous names encountered while load the HUD overlays" << std::endl; 170 } 171 else 172 hudElements_[element->getName()] = element; 173 } 174 175 HUDOverlay* HUD::getHUDElement(unsigned int index) 176 { 177 if (index < this->hudElements_.size()) 178 { 179 std::map<std::string, HUDOverlay*>::const_iterator it = hudElements_.begin(); 180 for (unsigned int i = 0; i != index; ++it, ++i) 181 ; 182 return (*it).second; 183 } 184 else 185 return 0; 185 186 } 186 187 187 188 void HUD::tick(float dt) 188 189 { 189 if(!SpaceShip::getLocalShip())190 return;191 192 float v = SpaceShip::getLocalShip()->getVelocity().length();193 float vmax = SpaceShip::getLocalShip()->getMaxSpeed();194 speedoBar_->setValue(v/vmax);195 196 190 radar_->update(); 197 191 nav_->update(); 198 199 setFPS();200 192 } 201 193 202 194 void HUD::resize() 203 195 { 204 this->speedoBar_->resize();205 this->energyBar_->resize();206 196 this->radar_->resize(); 207 }208 209 void HUD::setRenderTimeRatio(float ratio)210 {211 if(showRenderTime_){212 rTRText_->setCaption("Render time ratio: " + Ogre::StringConverter::toString(ratio));213 }214 else{215 rTRText_->setCaption("");216 return;217 }218 }219 220 void HUD::setFPS(){221 if(showFPS_){222 float fps = GraphicsEngine::getSingleton().getAverageFPS();223 fpsText_->setCaption("FPS: " + Ogre::StringConverter::toString(fps));224 }225 else{226 fpsText_->setCaption("");227 return;228 }229 197 } 230 198 … … 257 225 } 258 226 259 /*static*/ HUD& HUD::getSingleton(){ 260 static HUD theInstance; 261 return theInstance; 227 /*static*/ HUD& HUD::getSingleton() 228 { 229 assert(instance_s); 230 return *instance_s; 231 } 232 233 /*static*/ void HUD::toggleVisibility(const std::string& name) 234 { 235 if (HUD::getSingleton().hudElements_.find(name) != HUD::getSingleton().hudElements_.end()) 236 { 237 HUD::getSingleton().hudElements_[name]->setVisibility(!HUD::getSingleton().hudElements_[name]->isVisible()); 238 } 262 239 } 263 240 … … 273 250 HUD::getSingleton().nav_->releaseFocus(); 274 251 } 275 276 /*static*/ void HUD::toggleFPS(){277 HUD::getSingleton().showFPS_ = !HUD::getSingleton().showFPS_;278 }279 280 /*static*/ void HUD::toggleRenderTime(){281 HUD::getSingleton().showRenderTime_ = !HUD::getSingleton().showRenderTime_;282 }283 252 }
Note: See TracChangeset
for help on using the changeset viewer.