Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 1456


Ignore:
Timestamp:
May 28, 2008, 7:12:28 PM (16 years ago)
Author:
FelixSchulthess
Message:

using a std::set for the radar objects, which still has a the small problem, that the first radar object is selected twice when cycling through radar objects

Location:
code/branches/network/src/orxonox/hud
Files:
7 edited

Legend:

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

    r1454 r1456  
    3131
    3232#include <string>
     33#include <set>
    3334#include <OgreOverlay.h>
    3435#include <OgreOverlayContainer.h>
     
    5758        om = &Ogre::OverlayManager::getSingleton();
    5859        sm = GraphicsEngine::getSingleton().getSceneManager();
    59         firstRadarObject = NULL;
    60         lastRadarObject = NULL;
    6160        showFPS = true;
    6261        showRenderTime = true;
     
    178177
    179178    void HUD::addRadarObject(SceneNode* node, int colour){
    180         // check if this is the first RadarObject to create
    181         if(firstRadarObject == NULL){
    182             firstRadarObject = new RadarObject(container, node, colour);
    183             lastRadarObject = firstRadarObject;
    184         }
    185         else{ // if not, append to list
    186             lastRadarObject->next = new RadarObject(container, node, colour);
    187             lastRadarObject = lastRadarObject->next;
    188         }
    189     }
    190 
    191     RadarObject* HUD::getFirstRadarObject(){
    192         return firstRadarObject;
     179        RadarObject* obj = new RadarObject(container, node, colour);
     180        roSet.insert(obj);
     181//        // check if this is the first RadarObject to create
     182//        if(firstRadarObject == NULL){
     183//            firstRadarObject = new RadarObject(container, node, colour);
     184//            lastRadarObject = firstRadarObject;
     185//        }
     186//        else{ // if not, append to list
     187//            lastRadarObject->next = new RadarObject(container, node, colour);
     188//            lastRadarObject = lastRadarObject->next;
     189//        }
     190    }
     191
     192    void HUD::removeRadarObject(SceneNode* node){
     193        for(std::set<RadarObject*>::iterator it=roSet.begin(); it!=roSet.end(); it++){
     194            if((*it)->getNode() == node) {
     195                delete (*it);
     196                roSet.erase(it);
     197            }
     198        }
    193199    }
    194200
  • code/branches/network/src/orxonox/hud/HUD.h

    r1454 r1456  
    5656        BarOverlayElement* speedoBar;
    5757        RadarOverlayElement* radar;
    58         RadarObject* firstRadarObject;
    59         RadarObject* lastRadarObject;
    6058        Navigation* nav;
    6159
     
    6664        virtual void tick(float);
    6765        void addRadarObject(Ogre::SceneNode* node, int colour = 0);
    68         RadarObject* getFirstRadarObject();
     66        void removeRadarObject(Ogre::SceneNode* node);
    6967        void setRenderTimeRatio(float ratio);
    7068        void setFPS();
     69
     70        std::set<RadarObject*> roSet;
    7171
    7272        static HUD* instance_s;
  • code/branches/network/src/orxonox/hud/Navigation.cc

    r1454 r1456  
    4040#include "RadarOverlayElement.h"
    4141#include "HUD.h"
     42#include "core/Debug.h"
    4243
    4344namespace orxonox
     
    204205    void Navigation::cycleFocus(){
    205206        if(focus_ == NULL){
    206             focus_ = HUD::getSingleton().getFirstRadarObject();
     207            it_ = HUD::getSingleton().roSet.begin();
     208            focus_ = *it_;
    207209        }
    208210        else{
    209211            focus_->resetColour();
    210             if(focus_ != NULL) focus_ = focus_->next;
    211         }
    212 
     212            if(it_ != HUD::getSingleton().roSet.end()){
     213                focus_ = *it_;
     214                ++it_;
     215            }
     216            else focus_ = NULL;
     217        }
    213218        if(focus_ == NULL){
    214219            navMarker_->hide();
  • code/branches/network/src/orxonox/hud/Navigation.h

    r1454 r1456  
    5151        Vector3 currentDir_;
    5252        Vector3 currentOrth_;
     53        std::set<RadarObject*>::iterator it_;
    5354        int windowW_, windowH_;
    5455        void init();
  • code/branches/network/src/orxonox/hud/RadarObject.cc

    r1454 r1456  
    4343        node_ = node;
    4444        colour_ = colour;
    45         next = NULL;
    4645        om = &OverlayManager::getSingleton();
    4746        panel_ = static_cast<PanelOverlayElement*>(om->createOverlayElement("Panel",
     
    5756
    5857    RadarObject::~RadarObject(){
    59         // todo: clean up stuff
     58        delete panel_;
    6059    }
    6160
     
    7877        return node_->getPosition();
    7978    }
     79
     80    SceneNode* RadarObject::getNode(){
     81        return node_;
     82    }
    8083}
    8184
  • code/branches/network/src/orxonox/hud/RadarObject.h

    r1454 r1456  
    5151        void resetColour();
    5252        Vector3 getPosition();
     53        Ogre::SceneNode* getNode();
    5354
    5455        bool right_;
     
    5657        Ogre::OverlayContainer* container_;
    5758        Ogre::PanelOverlayElement* panel_;              // the panel used to show the dot
    58         RadarObject* next;                      // next pointer of linked list
    5959
    6060        static int count;
  • code/branches/network/src/orxonox/hud/RadarOverlayElement.cc

    r1454 r1456  
    8181        currentDir_ = SpaceShip::getLocalShip()->getDir();
    8282        currentOrth_ = SpaceShip::getLocalShip()->getOrth();
    83         RadarObject* ro = HUD::getSingleton().getFirstRadarObject();
    8483        // iterate through all RadarObjects
    85         while(ro != NULL){
     84        for(std::set<RadarObject*>::iterator it=HUD::getSingleton().roSet.begin(); it!=HUD::getSingleton().roSet.end(); it++){
    8685        // calc position on radar...
    87             float radius = calcRadius(shipPos_, currentDir_, currentOrth_, ro);
    88             float phi = calcPhi(shipPos_, currentDir_, currentOrth_, ro);
    89             bool right = calcRight(shipPos_, currentDir_, currentOrth_, ro);
     86            float radius = calcRadius(shipPos_, currentDir_, currentOrth_, (*it));
     87            float phi = calcPhi(shipPos_, currentDir_, currentOrth_, (*it));
     88            bool right = calcRight(shipPos_, currentDir_, currentOrth_, (*it));
    9089
    9190            // set size to fit distance...
    92             float d = (ro->getPosition()-shipPos_).length();
    93             if(d<4000) ro->panel_->setDimensions(4,4);
    94             else if(d<8000) ro->panel_->setDimensions(3,3);
    95             else if(d<16000) ro->panel_->setDimensions(2,2);
    96             else ro->panel_->setDimensions(1,1);
     91            float d = ((*it)->getPosition()-shipPos_).length();
     92            if(d<4000) (*it)->panel_->setDimensions(4,4);
     93            else if(d<8000) (*it)->panel_->setDimensions(3,3);
     94            else if(d<16000) (*it)->panel_->setDimensions(2,2);
     95            else (*it)->panel_->setDimensions(1,1);
    9796
    9897            if (right){
    99                 ro->panel_->setPosition(sin(phi)*radius/
     98                (*it)->panel_->setPosition(sin(phi)*radius/
    10099                    3.5*dim_/2+dim_/2+left_-2,-cos(phi)*radius/3.5*dim_/2+dim_/2+top_-2);
    101100            }
    102101            else {
    103                 ro->panel_->setPosition(-sin(phi)*radius/
     102                (*it)->panel_->setPosition(-sin(phi)*radius/
    104103                    3.5*dim_/2+dim_/2+left_-2,-cos(phi)*radius/3.5*dim_/2+dim_/2+top_-2);
    105104            }
    106             ro = ro->next;
    107105        }
    108106    }
     
    110108    void RadarOverlayElement::listObjects(){
    111109        int i = 0;
    112         RadarObject* ro = HUD::getSingleton().getFirstRadarObject();
    113110        COUT(3) << "List of RadarObjects:\n";
    114111        // iterate through all Radar Objects
    115         while(ro != NULL) {
    116             COUT(3) << i++ << ": " << ro->getPosition() << std::endl;
    117             ro = ro->next;
     112        for(std::set<RadarObject*>::iterator it=HUD::getSingleton().roSet.begin(); it!=HUD::getSingleton().roSet.end(); it++){
     113            COUT(3) << i++ << ": " << (*it)->getPosition() << std::endl;
    118114        }
    119115    }
Note: See TracChangeset for help on using the changeset viewer.