- Timestamp:
- Jun 15, 2008, 1:09:07 AM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/hud/src/orxonox/overlays/hud/HUDNavigation.cc
r1601 r1604 35 35 //#include "GraphicsEngine.h" 36 36 // TODO: remove the SpaceShip and CameraHandler dependencies 37 #include "core/Debug.h" 38 #include "core/CoreIncludes.h" 39 #include "core/ConsoleCommand.h" 37 40 #include "objects/SpaceShip.h" 38 41 #include "objects/Projectile.h" … … 40 43 #include "overlays/OverlayGroup.h" 41 44 #include "RadarObject.h" 42 #include "RadarOverlayElement.h" 43 #include "core/Debug.h" 44 #include "core/CoreIncludes.h" 45 #include "HUDRadar.h" 45 46 46 47 namespace orxonox 47 48 { 48 49 CreateFactory(HUDNavigation); 50 51 SetConsoleCommand(HUDNavigation, cycleNavigationFocus, true).setAccessLevel(AccessLevel::User); 52 SetConsoleCommand(HUDNavigation, releaseNavigationFocus, true).setAccessLevel(AccessLevel::User); 53 54 HUDNavigation* HUDNavigation::instance_s = 0; 49 55 50 56 using namespace Ogre; … … 58 64 { 59 65 RegisterObject(HUDNavigation); 66 67 assert(instance_s == 0); // singleton class 68 HUDNavigation::instance_s = this; 60 69 } 61 70 … … 73 82 OverlayManager::getSingleton().destroyOverlayElement(this->aimMarker_); 74 83 } 84 85 HUDNavigation::instance_s = 0; 75 86 } 76 87 … … 83 94 // create container 84 95 container_ = static_cast<OverlayContainer*>(Ogre::OverlayManager::getSingleton().createOverlayElement("Panel", getName() + "_navContainer")); 85 container_->setMetricsMode(Ogre::GMM_RELATIVE);86 container_->setLeft(0.0);87 container_->setTop(0.0);88 container_->setWidth(1.0);89 container_->setHeight(1.0);90 96 91 97 // create nav text 92 98 navText_ = static_cast<TextAreaOverlayElement*>(Ogre::OverlayManager::getSingleton().createOverlayElement("TextArea", getName() + "_navText")); 93 navText_->setMetricsMode(Ogre::GMM_RELATIVE);94 navText_->setPosition(0.0f, 0.0f);95 99 navText_->setCharHeight(0.05f); 96 100 navText_->setFontName("Monofur"); … … 98 102 // create nav marker 99 103 navMarker_ = static_cast<PanelOverlayElement*>(OverlayManager::getSingleton().createOverlayElement("Panel", getName() + "_navMarker")); 100 navMarker_->setMetricsMode(GMM_RELATIVE);101 104 navMarker_->setMaterialName("Orxonox/NavArrows"); 102 this->navMarkerSize_ = 0.05;103 this->wasOutOfView_ = true; // just ato ensure the material is changed right the first time..105 navMarkerSize_ = 0.05; //default 106 wasOutOfView_ = true; // just to ensure the material is changed right the first time.. 104 107 105 108 // create aim marker 106 109 aimMarker_ = static_cast<PanelOverlayElement*>(OverlayManager::getSingleton().createOverlayElement("Panel", getName() + "_aimMarker")); 107 aimMarker_->setMetricsMode(GMM_RELATIVE);108 110 aimMarker_->setMaterialName("Orxonox/NavCrosshair"); 109 this->aimMarkerSize_ = 0.04;111 aimMarkerSize_ = 0.04; // default 110 112 111 113 container_->addChild(navMarker_); … … 114 116 container_->show(); 115 117 116 this->overlay_->add2D(container_);117 this->overlay_->hide();118 overlay_->add2D(container_); 119 overlay_->hide(); 118 120 } 119 121 … … 182 184 return; 183 185 184 updateMarker();185 }186 187 void HUDNavigation::updateMarker()188 {189 186 // set text 190 187 int dist = (int) getDist2Focus()/100.0f; … … 298 295 float distance = (unsigned int) -1; 299 296 Vector3 shipPos = SpaceShip::getLocalShip()->getPosition(); 300 it_ = OverlayGroup::getHUD().getRadarObjects().begin();301 302 for (std::list<RadarObject*>::iterator it = OverlayGroup::getHUD().getRadarObjects().begin(); it != OverlayGroup::getHUD().getRadarObjects().end(); ++it)297 it_ = HUDRadar::getInstance().getRadarObjects().begin(); 298 299 for (std::list<RadarObject*>::iterator it = HUDRadar::getInstance().getRadarObjects().begin(); it != HUDRadar::getInstance().getRadarObjects().end(); ++it) 303 300 { 304 301 float newdist = (*it)->getPosition().squaredDistance(shipPos); … … 310 307 } 311 308 312 if (it_ != OverlayGroup::getHUD().getRadarObjects().end())309 if (it_ != HUDRadar::getInstance().getRadarObjects().end()) 313 310 { 314 311 focus_ = *it_; 315 312 316 313 // move the focused object to the begin of the list, so we will iterate through all other objects when cycling 317 OverlayGroup::getHUD().getRadarObjects().erase(it_);318 OverlayGroup::getHUD().getRadarObjects().insert(OverlayGroup::getHUD().getRadarObjects().begin(), focus_);319 it_ = OverlayGroup::getHUD().getRadarObjects().begin();320 } 321 } 322 else if (it_ != OverlayGroup::getHUD().getRadarObjects().end())314 HUDRadar::getInstance().getRadarObjects().erase(it_); 315 HUDRadar::getInstance().getRadarObjects().insert(HUDRadar::getInstance().getRadarObjects().begin(), focus_); 316 it_ = HUDRadar::getInstance().getRadarObjects().begin(); 317 } 318 } 319 else if (it_ != HUDRadar::getInstance().getRadarObjects().end()) 323 320 { 324 321 focus_->resetMaterial(); 325 322 ++it_; 326 if (it_ != OverlayGroup::getHUD().getRadarObjects().end())323 if (it_ != HUDRadar::getInstance().getRadarObjects().end()) 327 324 focus_ = *it_; 328 325 else … … 363 360 } 364 361 362 /** 363 @brief Overridden method of OrxonoxOverlay. Usually the entire overlay 364 scales with scale(). Here we obviously have to adjust this. 365 */ 365 366 void HUDNavigation::sizeChanged() 366 367 { 367 float xScale = this->getActualSize().x; 368 float yScale = this->getActualSize().y; 368 // use size to compensate for apspect ratio if enabled. 369 float xScale = this->getSize().x; 370 float yScale = this->getSize().y; 369 371 if (this->navMarker_) 370 372 navMarker_->setDimensions(navMarkerSize_ * xScale, navMarkerSize_ * yScale); … … 374 376 navText_->setCharHeight(navText_->getCharHeight() * yScale); 375 377 } 378 379 /*static*/ HUDNavigation& HUDNavigation::getInstance() 380 { 381 assert(instance_s); 382 return *instance_s; 383 } 384 385 /*static*/ void HUDNavigation::cycleNavigationFocus() 386 { 387 // avoid using getInstance because of the assert(). 388 // User might call this fuction even if HUDNavigation doesn't exist. 389 if (instance_s) 390 instance_s->cycleFocus(); 391 } 392 393 /*static*/ void HUDNavigation::releaseNavigationFocus() 394 { 395 // avoid using getInstance because of the assert(). 396 // User might call this fuction even if HUDNavigation doesn't exist. 397 if (instance_s) 398 instance_s->releaseFocus(); 399 } 376 400 }
Note: See TracChangeset
for help on using the changeset viewer.