Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Jun 8, 2008, 5:46:52 AM (16 years ago)
Author:
landauf
Message:
  • several small changes in most of the HUD classes (code cleanup): removed obsolete variables, privatized all member variables, removed resizing functioncalls from tick, destroying overlayelements, added some const qualifiers.
  • moved calculation functions for RadarObject-position to Math.h and changed the phi/right/radius format to Vector2. the functions are used too by SpaceShipAI.
  • cycleNavigationFocus takes the nearest object if focus was NULL
  • BarOverlayElement works in both directions (left to right and right to left)
  • fixed bug causing SpaceShipAI to not stop shooting when losing target - this also speeds up orxonox a lot, because there are less projectiles

####################################

!! UPDATE YOUR MEDIA REPOSITORY !!

####################################
…or the BarOverlayElement will look strange

File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/trunk/src/orxonox/hud/HUD.cc

    r1562 r1564  
    4040#include "core/ConsoleCommand.h"
    4141#include "objects/SpaceShip.h"
     42#include "objects/WorldEntity.h"
    4243#include "GraphicsEngine.h"
    4344#include "BarOverlayElement.h"
     
    5051{
    5152    SetConsoleCommandShortcut(HUD, cycleNavigationFocus).setAccessLevel(AccessLevel::User);
     53    SetConsoleCommandShortcut(HUD, releaseNavigationFocus).setAccessLevel(AccessLevel::User);
    5254    SetConsoleCommandShortcut(HUD, toggleFPS).setAccessLevel(AccessLevel::User);
    5355    SetConsoleCommandShortcut(HUD, toggleRenderTime).setAccessLevel(AccessLevel::User);
     
    5557    using namespace Ogre;
    5658
    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;
    6263
    6364        // 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"));
    7172
    7273        // 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");
    8182
    8283        // 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");
    9192
    9293        // 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();
    9596        // 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();
    9899        // 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();
    101102
    102103        // create Navigation
    103         nav = new Navigation(container);
     104        nav_ = new Navigation(container_);
    104105
    105106        // 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_;
    137153    }
    138154
    139155    void HUD::tick(float dt)
    140156    {
    141         energyBar->resize();
    142 
    143157        if(!SpaceShip::getLocalShip())
    144158          return;
     159
    145160        float v = SpaceShip::getLocalShip()->getVelocity().length();
    146161        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();
    154166
    155167        setFPS();
    156168    }
    157169
     170    void HUD::resize()
     171    {
     172        this->speedoBar_->resize();
     173        this->energyBar_->resize();
     174        this->radar_->resize();
     175    }
     176
    158177    void HUD::setRenderTimeRatio(float ratio)
    159178    {
    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));
    162181        }
    163182        else{
    164             rTRText->setCaption("");
     183            rTRText_->setCaption("");
    165184            return;
    166185        }
     
    168187
    169188    void HUD::setFPS(){
    170         if(showFPS){
     189        if(showFPS_){
    171190            float fps = GraphicsEngine::getSingleton().getAverageFPS();
    172             fpsText->setCaption("FPS: " + Ogre::StringConverter::toString(fps));
     191            fpsText_->setCaption("FPS: " + Ogre::StringConverter::toString(fps));
    173192        }
    174193        else{
    175             fpsText->setCaption("");
     194            fpsText_->setCaption("");
    176195            return;
    177196        }
    178197    }
    179198
    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);
    183202//        // check if this is the first RadarObject to create
    184203//        if(firstRadarObject == NULL){
    185 //            firstRadarObject = new RadarObject(container, node, colour);
     204//            firstRadarObject = new RadarObject(container_, object, colour);
    186205//            lastRadarObject = firstRadarObject;
    187206//        }
    188207//        else{ // if not, append to list
    189 //            lastRadarObject->next = new RadarObject(container, node, colour);
     208//            lastRadarObject->next = new RadarObject(container_, object, colour);
    190209//            lastRadarObject = lastRadarObject->next;
    191210//        }
    192211    }
    193212
    194     void HUD::removeRadarObject(Ogre::SceneNode* node){
    195         for(std::set<RadarObject*>::iterator it=roSet.begin(); it!=roSet.end(); ++it){
    196             if ((*it)->getNode() == 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)
    197216            {
    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
    204220                delete (*it);
    205                 roSet.erase(it);
     221                roSet_.erase(it);
    206222                return;
    207223            }
     
    215231
    216232    /*static*/ void HUD::setEnergy(float value){
    217         HUD::getSingleton().energyBar->setValue(value);
     233        HUD::getSingleton().energyBar_->setValue(value);
    218234    }
    219235
    220236    /*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);
    222242    }
    223243
    224244    /*static*/ void HUD::toggleFPS(){
    225         HUD::getSingleton().showFPS = !HUD::getSingleton().showFPS;
     245        HUD::getSingleton().showFPS_ = !HUD::getSingleton().showFPS_;
    226246    }
    227247
    228248    /*static*/ void HUD::toggleRenderTime(){
    229         HUD::getSingleton().showRenderTime = !HUD::getSingleton().showRenderTime;
     249        HUD::getSingleton().showRenderTime_ = !HUD::getSingleton().showRenderTime_;
    230250    }
    231251}
    232 
    233 
    234 
    235 
    236 
    237 
Note: See TracChangeset for help on using the changeset viewer.