Changeset 1564 for code/trunk/src/orxonox/hud/HUD.cc
- Timestamp:
- Jun 8, 2008, 5:46:52 AM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
code/trunk/src/orxonox/hud/HUD.cc
r1562 r1564 40 40 #include "core/ConsoleCommand.h" 41 41 #include "objects/SpaceShip.h" 42 #include "objects/WorldEntity.h" 42 43 #include "GraphicsEngine.h" 43 44 #include "BarOverlayElement.h" … … 50 51 { 51 52 SetConsoleCommandShortcut(HUD, cycleNavigationFocus).setAccessLevel(AccessLevel::User); 53 SetConsoleCommandShortcut(HUD, releaseNavigationFocus).setAccessLevel(AccessLevel::User); 52 54 SetConsoleCommandShortcut(HUD, toggleFPS).setAccessLevel(AccessLevel::User); 53 55 SetConsoleCommandShortcut(HUD, toggleRenderTime).setAccessLevel(AccessLevel::User); … … 55 57 using namespace Ogre; 56 58 57 HUD::HUD(){ 58 om = &Ogre::OverlayManager::getSingleton(); 59 sm = GraphicsEngine::getSingleton().getSceneManager(); 60 showFPS = true; 61 showRenderTime = true; 59 HUD::HUD() 60 { 61 showFPS_ = true; 62 showRenderTime_ = true; 62 63 63 64 // create Factories 64 BarOverlayElementFactory *barOverlayElementFactory= new BarOverlayElementFactory();65 om->addOverlayElementFactory(barOverlayElementFactory);66 RadarOverlayElementFactory *radarOverlayElementFactory= new RadarOverlayElementFactory();67 om->addOverlayElementFactory(radarOverlayElementFactory);68 69 orxonoxHUD = om->create("Orxonox/HUD");70 container = static_cast<Ogre::OverlayContainer*>(om->createOverlayElement("Panel", "Orxonox/HUD/container"));65 barOverlayElementFactory_ = new BarOverlayElementFactory(); 66 Ogre::OverlayManager::getSingleton().addOverlayElementFactory(barOverlayElementFactory_); 67 radarOverlayElementFactory_ = new RadarOverlayElementFactory(); 68 Ogre::OverlayManager::getSingleton().addOverlayElementFactory(radarOverlayElementFactory_); 69 70 orxonoxHUD_ = Ogre::OverlayManager::getSingleton().create("Orxonox/HUD"); 71 container_ = static_cast<Ogre::OverlayContainer*>(Ogre::OverlayManager::getSingleton().createOverlayElement("Panel", "Orxonox/HUD/container")); 71 72 72 73 // creating text to display fps 73 fpsText = static_cast<TextAreaOverlayElement*>(om->createOverlayElement("TextArea", "fpsText"));74 fpsText ->show();75 fpsText ->setMetricsMode(Ogre::GMM_PIXELS);76 fpsText ->setDimensions(0.001, 0.001);77 fpsText ->setPosition(10, 10);78 fpsText ->setFontName("Console");79 fpsText ->setCharHeight(20);80 fpsText ->setCaption("init");74 fpsText_ = static_cast<TextAreaOverlayElement*>(Ogre::OverlayManager::getSingleton().createOverlayElement("TextArea", "fpsText")); 75 fpsText_->show(); 76 fpsText_->setMetricsMode(Ogre::GMM_PIXELS); 77 fpsText_->setDimensions(0.001, 0.001); 78 fpsText_->setPosition(10, 10); 79 fpsText_->setFontName("Console"); 80 fpsText_->setCharHeight(20); 81 fpsText_->setCaption("init"); 81 82 82 83 // creating text to display render time ratio 83 rTRText = static_cast<TextAreaOverlayElement*>(om->createOverlayElement("TextArea", "rTRText"));84 rTRText ->show();85 rTRText ->setMetricsMode(Ogre::GMM_PIXELS);86 rTRText ->setDimensions(0.001, 0.001);87 rTRText ->setPosition(10, 30);88 rTRText ->setFontName("Console");89 rTRText ->setCharHeight(20);90 rTRText ->setCaption("init");84 rTRText_ = static_cast<TextAreaOverlayElement*>(Ogre::OverlayManager::getSingleton().createOverlayElement("TextArea", "rTRText")); 85 rTRText_->show(); 86 rTRText_->setMetricsMode(Ogre::GMM_PIXELS); 87 rTRText_->setDimensions(0.001, 0.001); 88 rTRText_->setPosition(10, 30); 89 rTRText_->setFontName("Console"); 90 rTRText_->setCharHeight(20); 91 rTRText_->setCaption("init"); 91 92 92 93 // create energy bar 93 energyBar = static_cast<BarOverlayElement*>(om->createOverlayElement("Bar", "energyBar"));94 energyBar ->show();94 energyBar_ = static_cast<BarOverlayElement*>(Ogre::OverlayManager::getSingleton().createOverlayElement("Bar", "energyBar")); 95 energyBar_->show(); 95 96 // create speedo bar 96 speedoBar = static_cast<BarOverlayElement*>(om->createOverlayElement("Bar", "speedoBar"));97 speedoBar ->show();97 speedoBar_ = static_cast<BarOverlayElement*>(Ogre::OverlayManager::getSingleton().createOverlayElement("Bar", "speedoBar")); 98 speedoBar_->show(); 98 99 // create radar 99 radar = static_cast<RadarOverlayElement*>(om->createOverlayElement("Radar", "radar"));100 radar ->show();100 radar_ = static_cast<RadarOverlayElement*>(Ogre::OverlayManager::getSingleton().createOverlayElement("Radar", "radar")); 101 radar_->show(); 101 102 102 103 // create Navigation 103 nav = new Navigation(container);104 nav_ = new Navigation(container_); 104 105 105 106 // set up screen-wide container 106 container->show(); 107 108 orxonoxHUD->add2D(container); 109 orxonoxHUD->show(); 110 container->setLeft(0.0); 111 container->setTop(0.0); 112 container->setWidth(1.0); 113 container->setHeight(1.0); 114 container->setMetricsMode(Ogre::GMM_RELATIVE); 115 container->addChild(fpsText); 116 container->addChild(rTRText); 117 118 energyBar->init(0.01, 0.94, 0.4, container); 119 energyBar->setValue(1); 120 121 speedoBar->init(0.01, 0.90, 0.4, container); 122 123 radar->init(0.5, 0.9, 0.2, container); 124 SceneNode* node; 125 node = sm->getRootSceneNode()->createChildSceneNode("tomato1", Vector3(2000.0, 0.0, 0.0)); 126 addRadarObject(node, ColourValue(0.5, 0, 0, 1)); 127 node = sm->getRootSceneNode()->createChildSceneNode("tomato2", Vector3(0.0, 2000.0, 0.0)); 128 addRadarObject(node, ColourValue(0.5, 0, 0, 1)); 129 node = sm->getRootSceneNode()->createChildSceneNode("tomato3", Vector3(0.0, 0.0, 2000.0)); 130 addRadarObject(node, ColourValue(0.5, 0, 0, 1)); 131 node = sm->getRootSceneNode()->createChildSceneNode("station", Vector3(10000.0,16000.0,0.0)); 132 addRadarObject(node); 133 } 134 135 HUD::~HUD(){ 136 //todo: clean up objects 107 container_->show(); 108 109 orxonoxHUD_->add2D(container_); 110 orxonoxHUD_->show(); 111 container_->setLeft(0.0); 112 container_->setTop(0.0); 113 container_->setWidth(1.0); 114 container_->setHeight(1.0); 115 container_->setMetricsMode(Ogre::GMM_RELATIVE); 116 container_->addChild(fpsText_); 117 container_->addChild(rTRText_); 118 119 energyBar_->init(0.01, 0.94, 0.4, container_); 120 energyBar_->setValue(1); 121 122 speedoBar_->init(0.01, 0.90, 0.4, container_); 123 124 radar_->init(0.5, 0.9, 0.2, container_); 125 126 WorldEntity* object; 127 object = new WorldEntity(); 128 object->setPosition(2000.0, 0.0, 0.0); 129 addRadarObject(object, ColourValue(0.5, 0, 0, 1)); 130 object = new WorldEntity(); 131 object->setPosition(0.0, 2000.0, 0.0); 132 addRadarObject(object, ColourValue(0.5, 0, 0, 1)); 133 object = new WorldEntity(); 134 object->setPosition(0.0, 0.0, 2000.0); 135 addRadarObject(object, ColourValue(0.5, 0, 0, 1)); 136 object = new WorldEntity(); 137 object->setPosition(10000.0,16000.0,0.0); 138 addRadarObject(object); 139 } 140 141 HUD::~HUD() 142 { 143 Ogre::OverlayManager::getSingleton().destroyOverlayElement(this->container_); 144 Ogre::OverlayManager::getSingleton().destroyOverlayElement(this->fpsText_); 145 Ogre::OverlayManager::getSingleton().destroyOverlayElement(this->rTRText_); 146 Ogre::OverlayManager::getSingleton().destroyOverlayElement(this->energyBar_); 147 Ogre::OverlayManager::getSingleton().destroyOverlayElement(this->speedoBar_); 148 Ogre::OverlayManager::getSingleton().destroyOverlayElement(this->radar_); 149 150 delete this->nav_; 151 delete this->barOverlayElementFactory_; 152 delete this->radarOverlayElementFactory_; 137 153 } 138 154 139 155 void HUD::tick(float dt) 140 156 { 141 energyBar->resize();142 143 157 if(!SpaceShip::getLocalShip()) 144 158 return; 159 145 160 float v = SpaceShip::getLocalShip()->getVelocity().length(); 146 161 float vmax = SpaceShip::getLocalShip()->getMaxSpeed(); 147 speedoBar->setValue(v/vmax); 148 speedoBar->resize(); 149 150 radar->resize(); 151 radar->update(); 152 153 nav->update(); 162 speedoBar_->setValue(v/vmax); 163 164 radar_->update(); 165 nav_->update(); 154 166 155 167 setFPS(); 156 168 } 157 169 170 void HUD::resize() 171 { 172 this->speedoBar_->resize(); 173 this->energyBar_->resize(); 174 this->radar_->resize(); 175 } 176 158 177 void HUD::setRenderTimeRatio(float ratio) 159 178 { 160 if(showRenderTime ){161 rTRText ->setCaption("Render time ratio: " + Ogre::StringConverter::toString(ratio));179 if(showRenderTime_){ 180 rTRText_->setCaption("Render time ratio: " + Ogre::StringConverter::toString(ratio)); 162 181 } 163 182 else{ 164 rTRText ->setCaption("");183 rTRText_->setCaption(""); 165 184 return; 166 185 } … … 168 187 169 188 void HUD::setFPS(){ 170 if(showFPS ){189 if(showFPS_){ 171 190 float fps = GraphicsEngine::getSingleton().getAverageFPS(); 172 fpsText ->setCaption("FPS: " + Ogre::StringConverter::toString(fps));191 fpsText_->setCaption("FPS: " + Ogre::StringConverter::toString(fps)); 173 192 } 174 193 else{ 175 fpsText ->setCaption("");194 fpsText_->setCaption(""); 176 195 return; 177 196 } 178 197 } 179 198 180 void HUD::addRadarObject( SceneNode* node, const ColourValue& colour){181 RadarObject* obj = new RadarObject(container , node, colour);182 roSet .insert(obj);199 void HUD::addRadarObject(WorldEntity* object, const ColourValue& colour){ 200 RadarObject* obj = new RadarObject(container_, object, colour); 201 roSet_.insert(roSet_.end(), obj); 183 202 // // check if this is the first RadarObject to create 184 203 // if(firstRadarObject == NULL){ 185 // firstRadarObject = new RadarObject(container , node, colour);204 // firstRadarObject = new RadarObject(container_, object, colour); 186 205 // lastRadarObject = firstRadarObject; 187 206 // } 188 207 // else{ // if not, append to list 189 // lastRadarObject->next = new RadarObject(container , node, colour);208 // lastRadarObject->next = new RadarObject(container_, object, colour); 190 209 // lastRadarObject = lastRadarObject->next; 191 210 // } 192 211 } 193 212 194 void HUD::removeRadarObject( Ogre::SceneNode* node){195 for(std:: set<RadarObject*>::iterator it=roSet.begin(); it!=roSet.end(); ++it){196 if ((*it)->get Node() == node)213 void HUD::removeRadarObject(WorldEntity* object){ 214 for(std::list<RadarObject*>::iterator it=roSet_.begin(); it!=roSet_.end(); ++it){ 215 if ((*it)->getObject() == object) 197 216 { 198 if (this->nav->focus_ == (*it)) 199 { 200 this->nav->cycleFocus(); 201 if (this->nav->focus_ == (*it)) 202 this->nav->focus_ = 0; 203 } 217 if (this->nav_->getFocus() == (*it)) 218 this->nav_->setFocus(0); 219 204 220 delete (*it); 205 roSet .erase(it);221 roSet_.erase(it); 206 222 return; 207 223 } … … 215 231 216 232 /*static*/ void HUD::setEnergy(float value){ 217 HUD::getSingleton().energyBar ->setValue(value);233 HUD::getSingleton().energyBar_->setValue(value); 218 234 } 219 235 220 236 /*static*/ void HUD::cycleNavigationFocus(){ 221 HUD::getSingleton().nav->cycleFocus(); 237 HUD::getSingleton().nav_->cycleFocus(); 238 } 239 240 /*static*/ void HUD::releaseNavigationFocus(){ 241 HUD::getSingleton().nav_->setFocus(0); 222 242 } 223 243 224 244 /*static*/ void HUD::toggleFPS(){ 225 HUD::getSingleton().showFPS = !HUD::getSingleton().showFPS;245 HUD::getSingleton().showFPS_ = !HUD::getSingleton().showFPS_; 226 246 } 227 247 228 248 /*static*/ void HUD::toggleRenderTime(){ 229 HUD::getSingleton().showRenderTime = !HUD::getSingleton().showRenderTime;249 HUD::getSingleton().showRenderTime_ = !HUD::getSingleton().showRenderTime_; 230 250 } 231 251 } 232 233 234 235 236 237
Note: See TracChangeset
for help on using the changeset viewer.