Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
May 21, 2008, 11:00:40 PM (16 years ago)
Author:
FelixSchulthess
Message:

added a navigation marker

File:
1 edited

Legend:

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

    r1346 r1350  
    3232    using namespace Ogre;
    3333
     34    RadarOverlayElement* RadarOverlayElement::instance_s = NULL;
     35
    3436    RadarOverlayElement::RadarOverlayElement(const String& name):Ogre::PanelOverlayElement(name){
     37        RadarOverlayElement::instance_s = this;
    3538    }
    3639
     
    4750        firstRadarObject_ = NULL;
    4851        lastRadarObject_ = NULL;
     52        focus_ = NULL;
     53
     54        // create nav marker ...
     55        navMarker_ = static_cast<PanelOverlayElement*>(om->createOverlayElement("Panel", "NavMarker"));
     56        navMarker_->setMetricsMode(Ogre::GMM_PIXELS);
     57        navMarker_->setMaterialName("Orxonox/NavMarker");
     58        navMarker_->setDimensions(16,16);
     59        navMarker_->setPosition(0,386);
     60        navMarker_->hide();
     61        container_->addChild(navMarker_);
    4962
    5063        // these have to fit the data in the level
     
    105118            ro = ro->next;
    106119                }
     120                updateNavMarker();
     121    }
     122
     123    void RadarOverlayElement::updateNavMarker(){
     124        if(focus_ == NULL) return;
     125        // from the angle we find out where to draw the marker
     126        // and which of the four arrows to take
     127        float r1 = 0.97;//atan(windowW_/windowH_); // doesn't work correctly yet
     128        float phi = focus_->phi_;
     129        if(focus_->right_){
     130            if(phi<r1){
     131                navMarker_->setPosition(tan(phi)*windowH_/2+windowW_/2, 0);
     132                navMarker_->setUV(0.5, 0.0, 1.0, 0.5);
     133            }
     134            else if(phi>3.14-r1){
     135                navMarker_->setPosition(-tan(phi)*windowH_/2+windowW_/2, windowH_-16);
     136                navMarker_->setUV(0.0, 0.5, 0.5, 1.0);
     137            }
     138            else {
     139                navMarker_->setPosition(windowW_-16, -tan((3.14-2*phi)/2)*windowW_/2+windowH_/2);
     140                navMarker_->setUV(0.5, 0.5, 1.0, 1.0);
     141            }
     142        }
     143        else{
     144            if(phi<r1) {
     145                navMarker_->setPosition(-tan(phi)*windowH_/2+windowW_/2, 0);
     146                navMarker_->setUV(0.5, 0.0, 1.0, 0.5);
     147            }
     148            else if(phi>3.14-r1) {
     149                navMarker_->setPosition(tan(phi)*windowH_/2+windowW_/2, windowH_-16);
     150                navMarker_->setUV(0.0, 0.5, 0.5, 1.0);
     151            }
     152            else {
     153                navMarker_->setPosition(0, -tan((3.14-2*phi)/2)*windowW_/2+windowH_/2);
     154                navMarker_->setUV(0.0, 0.0, 0.5, 0.5);
     155            }
     156        }
    107157    }
    108158
     
    147197        else return false;
    148198        }
     199
     200        /*static*/void RadarOverlayElement::cycleFocus(){
     201            if(RadarOverlayElement::instance_s == NULL) return;
     202            if(RadarOverlayElement::instance_s->focus_ == NULL)
     203            RadarOverlayElement::instance_s->focus_ = RadarOverlayElement::instance_s->firstRadarObject_;
     204        else
     205            RadarOverlayElement::instance_s->focus_ = RadarOverlayElement::instance_s->focus_->next;
     206        if(RadarOverlayElement::instance_s->focus_ == NULL)
     207            RadarOverlayElement::instance_s->navMarker_->hide();
     208        else
     209            RadarOverlayElement::instance_s->navMarker_->show();
     210        }
    149211}
    150212
Note: See TracChangeset for help on using the changeset viewer.