Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
May 20, 2008, 11:51:33 PM (17 years ago)
Author:
FelixSchulthess
Message:

added full functionality for RadarObjects and two space tomatoes

Location:
code/branches/hud3/src/orxonox/hud
Files:
3 edited

Legend:

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

    r1335 r1339  
    4646    HUD::HUD(int zoom){
    4747        om = &Ogre::OverlayManager::getSingleton();
    48                
     48
    4949                // create Factories
    5050        BarOverlayElementFactory *barOverlayElementFactory = new BarOverlayElementFactory();
     
    5555        orxonoxHUD = om->create("Orxonox/HUD");
    5656        container = static_cast<Ogre::OverlayContainer*>(om->createOverlayElement("Panel", "Orxonox/HUD/container"));
    57         // create energy bar   
     57        // create energy bar
    5858        energyBar = static_cast<BarOverlayElement*>(om->createOverlayElement("Bar", "energyBar"));
    5959        energyBar->show();
     
    6767                // set up screen-wide container
    6868        container->show();
    69        
     69
    7070        orxonoxHUD->add2D(container);
    7171        orxonoxHUD->show();
     
    7979        speedoBar->init(0.01, 0.90, 0.4, 0.04, container);
    8080        radar->init(0.5, 0.9, 0.2, container);
    81         radar->addObject(Vector3(1337.0, 0.0, 0.0));
     81        radar->addObject(Vector3(1500.0, 0.0, 0.0));
     82        radar->addObject(Vector3(0.0, 4000.0, 0.0));
    8283    }
    8384
  • code/branches/hud3/src/orxonox/hud/RadarOverlayElement.cc

    r1335 r1339  
    5454
    5555    void RadarOverlayElement::init(Real leftRel, Real topRel, Real dimRel, Ogre::OverlayContainer* container){
    56                 om = &Ogre::OverlayManager::getSingleton();       
     56        // some initial data
     57                om = &Ogre::OverlayManager::getSingleton();
    5758        dimRel_ = dimRel;
    5859        leftRel_ = leftRel;
    5960        topRel_ = topRel;
    6061        container_ = container;
     62        firstRadarObject_ = NULL;
     63        lastRadarObject_ = NULL;
    6164
     65        // these have to fit the data in the level
    6266        shipPos_ = Vector3(0.0, 0.0, 0.0);
    6367        initialDir_ = Vector3(1.0, 0.0, 0.0);
     
    6973        setMaterialName("Orxonox/Radar");
    7074        resize();
    71        
     75
    7276        container_->addChild(this);
    7377    }
     
    8993                currentOrth_ = SpaceShip::instance_s->getOrientation()*initialOrth_;
    9094
    91                 if(tomato_ == NULL) return;             
    92                
    93                 tomato_->radius_ = acos((currentDir_.dotProduct(tomato_->pos_ - shipPos_))/
    94                         ((tomato_->pos_ - shipPos_).length()*currentDir_.length()));
    95         tomato_->phi_ = acos((currentOrth_.dotProduct(tomato_->pos_ - shipPos_))/
    96                 ((tomato_->pos_ - shipPos_).length()*currentOrth_.length()));
    97         if((currentDir_.crossProduct(currentOrth_)).dotProduct(tomato_->pos_ - shipPos_) > 0)
    98                 tomato_->right_ = true;
    99         else tomato_->right_=false;
     95        RadarObject* ro = firstRadarObject_;
     96        // iterate through all RadarObjects
     97                while(ro != NULL){
     98            ro->radius_ = calcRadius(ro);
     99            ro->phi_ = calcPhi(ro);
     100            ro->right_ = calcRight(ro);
     101            if (ro->right_){
     102                ro->panel_->setPosition(sin(ro->phi_)*ro->radius_/
     103                    3.5*dim_/2+dim_/2+left_-2,-cos(ro->phi_)*ro->radius_/3.5*dim_/2+dim_/2+top_-2);
     104            }
     105            else {
     106                ro->panel_->setPosition(-sin(ro->phi_)*ro->radius_/
     107                    3.5*dim_/2+dim_/2+left_-2,-cos(ro->phi_)*ro->radius_/3.5*dim_/2+dim_/2+top_-2);
     108            }
     109            ro = ro->next;
     110                }
     111    }
    100112
    101         if (tomato_->right_){
    102             tomato_->panel_->setPosition(sin(tomato_->phi_)*tomato_->radius_/
    103                 3.5*dim_/2+dim_/2+left_-2,-cos(tomato_->phi_)*tomato_->radius_/3.5*dim_/2+dim_/2+top_-2);
     113    void RadarOverlayElement::addObject(Vector3 pos){
     114        if(firstRadarObject_ == NULL){
     115            firstRadarObject_ = new RadarObject(container_);
     116            firstRadarObject_->pos_ = pos;
     117            lastRadarObject_ = firstRadarObject_;
    104118        }
    105         else {
    106             tomato_->panel_->setPosition(-sin(tomato_->phi_)*tomato_->radius_/
    107                 3.5*dim_/2+dim_/2+left_-2,-cos(tomato_->phi_)*tomato_->radius_/3.5*dim_/2+dim_/2+top_-2);
     119        else{
     120            lastRadarObject_->next = new RadarObject(container_);
     121            lastRadarObject_->next->pos_ = pos;
     122            lastRadarObject_ = lastRadarObject_->next;
    108123        }
    109     }
    110    
    111     void RadarOverlayElement::addObject(Vector3 pos){
    112                 tomato_ = new RadarObject(container_);
    113                 tomato_->pos_ = pos;
    114124        }
    115        
     125
     126        void RadarOverlayElement::listObjects(){
     127            int i = 0;
     128            RadarObject* ro = firstRadarObject_;
     129            COUT(3) << "List of RadarObjects:\n";
     130            // iterate through all Radar Objects
     131            while(ro != NULL) {
     132                COUT(3) << i++ << ": " << ro->pos_ << std::endl;
     133                ro = ro->next;
     134            }
     135        }
     136
     137        float RadarOverlayElement::calcRadius(RadarObject* obj){
     138            return(acos((currentDir_.dotProduct(obj->pos_ - shipPos_))/
     139                        ((obj->pos_ - shipPos_).length()*currentDir_.length())));
     140        }
     141
     142        float RadarOverlayElement::calcPhi(RadarObject* obj){
     143            return(acos((currentOrth_.dotProduct(firstRadarObject_->pos_ - shipPos_))/
     144                ((firstRadarObject_->pos_ - shipPos_).length()*currentOrth_.length())));
     145        }
     146
     147        bool RadarOverlayElement::calcRight(RadarObject* obj){
     148            if((currentDir_.crossProduct(currentOrth_)).dotProduct(obj->pos_ - shipPos_) > 0)
     149                return true;
     150        else return false;
     151        }
     152
    116153        //// RadarObject ////
    117        
     154
    118155        int RadarObject::count = 0;
    119        
     156
    120157        RadarObject::RadarObject(Ogre::OverlayContainer* container){
    121158                container_ = container;
     
    123160                init();
    124161        }
    125        
     162
    126163        RadarObject::RadarObject(Ogre::OverlayContainer* container, Vector3 pos){
    127164                container_ = container;
     
    129166                init();
    130167        }
    131        
     168
    132169        RadarObject::~RadarObject(){}
    133        
     170
    134171        void RadarObject::init(){
     172            next = NULL;
    135173                om = &Ogre::OverlayManager::getSingleton();
    136174                panel_ = static_cast<PanelOverlayElement*>(om->createOverlayElement("Panel",
     
    146184/* my local clipboard...
    147185COUT(3) << "WWWWWWWWWWWWWWWWWWWWWWWWWWWW\n";
    148 COUT(3) << tomato_->radius_ << "  " << tomato_->phi_ << std::endl;
     186COUT(3) << firstRadarObject_->radius_ << "  " << firstRadarObject_->phi_ << std::endl;
    149187COUT(3) << "WWWWWWWWWWWWWWWWWWWWWWWWWWWW\n";
    150188*/
  • code/branches/hud3/src/orxonox/hud/RadarOverlayElement.h

    r1335 r1339  
    4646                Ogre::OverlayManager* om;                               // our one and only overlay manager
    4747                void init();
    48                
     48
    4949        public:
    5050                RadarObject(Ogre::OverlayContainer* container);
    5151                RadarObject(Ogre::OverlayContainer* container, Vector3 pos);
    5252                ~RadarObject();
    53                
     53
     54            bool right_;
    5455                Vector3 pos_;                                                   // position in space
    5556                        Ogre::Real radius_, phi_;                               // position on radar
    56                         bool right_;
    5757                        Ogre::OverlayContainer* container_;
    5858                        Ogre::PanelOverlayElement* panel_;              // the panel used to show the dot
    59                        
     59                        RadarObject* next;                      // next pointer of linked list
     60
    6061                static int count;
    6162        };
     
    6768            Ogre::OverlayContainer* container_;
    6869            Vector3 initialDir_;                        // direction of nose
    69             Vector3 currentDir_;                                       
     70            Vector3 currentDir_;
    7071            Vector3 initialOrth_;                   // direction of normal
    7172            Vector3 currentOrth_;
    7273            Vector3 shipPos_;                       // position of ship
    73            
    74                         RadarObject* tomato_;           
    75            
     74
     75                        RadarObject* firstRadarObject_;         // start of linked list
     76                        RadarObject* lastRadarObject_;          // end of linked list
     77
    7678            Ogre::Real leftRel_, topRel_, dimRel_;  // relative position/dimension
    7779            int left_, top_, dim_;                  // absolute position/dimension
     
    8284            ~RadarOverlayElement();
    8385            void init(Real leftRel, Real topRel, Real dimRel, Ogre::OverlayContainer* container);
    84                         void resize();           
     86                        void resize();
    8587            void update();
    8688            void addObject(Vector3 pos);
     89            void listObjects();
     90            float calcRadius(RadarObject* obj);
     91            float calcPhi(RadarObject* obj);
     92            bool calcRight(RadarObject* obj);
    8793        };
    8894}
Note: See TracChangeset for help on using the changeset viewer.