Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Jun 15, 2008, 1:09:07 AM (16 years ago)
Author:
rgrieder
Message:
  • adjusted Radar to fit in XML loading scheme
  • OverlayGroup should be more or less what I imagine for now (only supports scale method to scale the entire HUD)
  • singletonized HUDNavigation (and HUDRadar of course): These are temporary hacks!
File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/branches/hud/src/orxonox/overlays/hud/HUDNavigation.cc

    r1601 r1604  
    3535//#include "GraphicsEngine.h"
    3636// TODO: remove the SpaceShip and CameraHandler dependencies
     37#include "core/Debug.h"
     38#include "core/CoreIncludes.h"
     39#include "core/ConsoleCommand.h"
    3740#include "objects/SpaceShip.h"
    3841#include "objects/Projectile.h"
     
    4043#include "overlays/OverlayGroup.h"
    4144#include "RadarObject.h"
    42 #include "RadarOverlayElement.h"
    43 #include "core/Debug.h"
    44 #include "core/CoreIncludes.h"
     45#include "HUDRadar.h"
    4546
    4647namespace orxonox
    4748{
    4849    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;
    4955
    5056    using namespace Ogre;
     
    5864    {
    5965        RegisterObject(HUDNavigation);
     66       
     67        assert(instance_s == 0); // singleton class
     68        HUDNavigation::instance_s = this;
    6069    }
    6170
     
    7382                OverlayManager::getSingleton().destroyOverlayElement(this->aimMarker_);
    7483        }
     84
     85        HUDNavigation::instance_s = 0;
    7586    }
    7687
     
    8394            // create container
    8495            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);
    9096
    9197            // create nav text
    9298            navText_ = static_cast<TextAreaOverlayElement*>(Ogre::OverlayManager::getSingleton().createOverlayElement("TextArea", getName() + "_navText"));
    93             navText_->setMetricsMode(Ogre::GMM_RELATIVE);
    94             navText_->setPosition(0.0f, 0.0f);
    9599            navText_->setCharHeight(0.05f);
    96100            navText_->setFontName("Monofur");
     
    98102            // create nav marker
    99103            navMarker_ = static_cast<PanelOverlayElement*>(OverlayManager::getSingleton().createOverlayElement("Panel", getName() + "_navMarker"));
    100             navMarker_->setMetricsMode(GMM_RELATIVE);
    101104            navMarker_->setMaterialName("Orxonox/NavArrows");
    102             this->navMarkerSize_ = 0.05;
    103             this->wasOutOfView_ = true; // just a to 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..
    104107
    105108            // create aim marker
    106109            aimMarker_ = static_cast<PanelOverlayElement*>(OverlayManager::getSingleton().createOverlayElement("Panel", getName() + "_aimMarker"));
    107             aimMarker_->setMetricsMode(GMM_RELATIVE);
    108110            aimMarker_->setMaterialName("Orxonox/NavCrosshair");
    109             this->aimMarkerSize_ = 0.04;
     111            aimMarkerSize_ = 0.04; // default
    110112           
    111113            container_->addChild(navMarker_);
     
    114116            container_->show();
    115117
    116             this->overlay_->add2D(container_);
    117             this->overlay_->hide();
     118            overlay_->add2D(container_);
     119            overlay_->hide();
    118120        }
    119121
     
    182184            return;
    183185
    184         updateMarker();
    185     }
    186 
    187     void HUDNavigation::updateMarker()
    188     {
    189186        // set text
    190187        int dist = (int) getDist2Focus()/100.0f;
     
    298295            float distance = (unsigned int) -1;
    299296            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)
    303300            {
    304301                float newdist = (*it)->getPosition().squaredDistance(shipPos);
     
    310307            }
    311308
    312             if (it_ != OverlayGroup::getHUD().getRadarObjects().end())
     309            if (it_ != HUDRadar::getInstance().getRadarObjects().end())
    313310            {
    314311                focus_ = *it_;
    315312
    316313                // 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())
    323320        {
    324321            focus_->resetMaterial();
    325322            ++it_;
    326             if (it_ != OverlayGroup::getHUD().getRadarObjects().end())
     323            if (it_ != HUDRadar::getInstance().getRadarObjects().end())
    327324                focus_ = *it_;
    328325            else
     
    363360    }
    364361
     362    /**
     363    @brief Overridden method of OrxonoxOverlay. Usually the entire overlay
     364           scales with scale(). Here we obviously have to adjust this.
     365    */
    365366    void HUDNavigation::sizeChanged()
    366367    {
    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;
    369371        if (this->navMarker_)
    370372            navMarker_->setDimensions(navMarkerSize_ * xScale, navMarkerSize_ * yScale);
     
    374376            navText_->setCharHeight(navText_->getCharHeight() * yScale);
    375377    }
     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    }
    376400}
Note: See TracChangeset for help on using the changeset viewer.