Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
May 23, 2008, 6:40:19 PM (16 years ago)
Author:
FelixSchulthess
Message:

moved navigation marker to new class: Navigation

File:
1 edited

Legend:

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

    r1392 r1393  
    2222*      Yuning Chai
    2323*   Co-authors:
    24 *      ...
     24*      Felix Schulthess
    2525*
    2626*/
     
    3737#include "core/ConsoleCommand.h"
    3838#include "objects/SpaceShip.h"
     39#include "HUD.h"
    3940#include "RadarOverlayElement.h"
    4041
     
    5758        topRel_ = topRel;
    5859        container_ = container;
    59         firstRadarObject_ = NULL;
    60         lastRadarObject_ = NULL;
    61         focus_ = NULL;
    62 
    63         // create nav marker ...
    64         navMarker_ = static_cast<PanelOverlayElement*>(om->createOverlayElement("Panel", "NavMarker"));
    65         navMarker_->setMetricsMode(GMM_PIXELS);
    66         navMarker_->setMaterialName("Orxonox/NavMarker");
    67         navMarker_->setDimensions(16,16);
    68         navMarker_->setPosition(0,386);
    69         navMarker_->hide();
    70         container_->addChild(navMarker_);
    7160
    7261        // these have to fit the data in the level
     
    9887    void RadarOverlayElement::update() {
    9988        shipPos_ = SpaceShip::instance_s->getPosition();
    100         currentDir_ = SpaceShip::instance_s->getOrientation()*initialDir_;              // according to beni....
     89        currentDir_ = SpaceShip::instance_s->getOrientation()*initialDir_;
    10190                currentOrth_ = SpaceShip::instance_s->getOrientation()*initialOrth_;
    10291        plane = Plane(currentDir_, shipPos_);
    103 
    104         RadarObject* ro = firstRadarObject_;
     92        RadarObject* ro = HUD::getSingleton().getFirstRadarObject();
    10593        // iterate through all RadarObjects
    10694                while(ro != NULL){
     
    125113                    3.5*dim_/2+dim_/2+left_-2,-cos(ro->phi_)*ro->radius_/3.5*dim_/2+dim_/2+top_-2);
    126114            }
     115            listObjects();
    127116            ro = ro->next;
    128117                }
    129                 updateNavMarker();
    130118    }
    131 
    132     void RadarOverlayElement::updateNavMarker(){
    133         if(focus_ == NULL) return;
    134         // from the angle we find out where to draw the marker
    135         // and which of the four arrows to take
    136         float r1 = atan((float)(windowW_)/(float)(windowH_));
    137         float phi = focus_->phi_;
    138         if(focus_->right_){
    139             if(phi<r1){
    140                 navMarker_->setPosition(tan(phi)*windowH_/2+windowW_/2, 0);
    141                 navMarker_->setUV(0.5, 0.0, 1.0, 0.5);
    142             }
    143             else if(phi>3.14-r1){
    144                 navMarker_->setPosition(-tan(phi)*windowH_/2+windowW_/2, windowH_-16);
    145                 navMarker_->setUV(0.0, 0.5, 0.5, 1.0);
    146             }
    147             else {
    148                 navMarker_->setPosition(windowW_-16, -tan((3.14-2*phi)/2)*windowW_/2+windowH_/2);
    149                 navMarker_->setUV(0.5, 0.5, 1.0, 1.0);
    150             }
    151         }
    152         else{
    153             if(phi<r1) {
    154                 navMarker_->setPosition(-tan(phi)*windowH_/2+windowW_/2, 0);
    155                 navMarker_->setUV(0.5, 0.0, 1.0, 0.5);
    156             }
    157             else if(phi>3.14-r1) {
    158                 navMarker_->setPosition(tan(phi)*windowH_/2+windowW_/2, windowH_-16);
    159                 navMarker_->setUV(0.0, 0.5, 0.5, 1.0);
    160             }
    161             else {
    162                 navMarker_->setPosition(0, -tan((3.14-2*phi)/2)*windowW_/2+windowH_/2);
    163                 navMarker_->setUV(0.0, 0.0, 0.5, 0.5);
    164             }
    165         }
    166     }
    167 
    168     void RadarOverlayElement::addObject(Vector3 pos){
    169         if(firstRadarObject_ == NULL){
    170             firstRadarObject_ = new RadarObject(container_, pos);
    171             lastRadarObject_ = firstRadarObject_;
    172         }
    173         else{
    174             lastRadarObject_->next = new RadarObject(container_, pos);
    175             lastRadarObject_ = lastRadarObject_->next;
    176         }
    177         }
    178119
    179120        void RadarOverlayElement::listObjects(){
    180121            int i = 0;
    181             RadarObject* ro = firstRadarObject_;
     122            RadarObject* ro = HUD::getSingleton().getFirstRadarObject();
    182123            COUT(3) << "List of RadarObjects:\n";
    183124            // iterate through all Radar Objects
     
    186127                ro = ro->next;
    187128            }
    188         }
    189 
    190         float RadarOverlayElement::getDist2Focus(){
    191             if(focus_ == NULL) return(0.0);
    192             return((focus_->pos_-shipPos_).length());
    193129        }
    194130
     
    211147        else return false;
    212148        }
    213 
    214         void RadarOverlayElement::cycleFocus(){
    215             if(focus_ == NULL){
    216             focus_ = firstRadarObject_;
    217             }
    218         else{
    219             focus_->panel_->setMaterialName("Orxonox/RedDot");
    220             focus_ = focus_->next;
    221         }
    222 
    223         if(focus_ == NULL){
    224             navMarker_->hide();
    225         }
    226         else{
    227             navMarker_->show();
    228             focus_->panel_->setMaterialName("Orxonox/WhiteDot");
    229         }
    230         }
    231149}
    232 
    233 /* my local clipboard...
    234 COUT(3) << "WWWWWWWWWWWWWWWWWWWWWWWWWWWW\n";
    235 COUT(3) << firstRadarObject_->radius_ << "  " << firstRadarObject_->phi_ << std::endl;
    236 COUT(3) << "WWWWWWWWWWWWWWWWWWWWWWWWWWWW\n";
    237 */
Note: See TracChangeset for help on using the changeset viewer.