Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

moved navigation marker to new class: Navigation

Location:
code/trunk/src/orxonox
Files:
2 added
7 edited

Legend:

Unmodified
Added
Removed
  • code/trunk/src/orxonox/CMakeLists.txt

    r1362 r1393  
    99  hud/RadarOverlayElement.cc
    1010  hud/RadarObject.cc
     11  hud/Navigation.cc
    1112  particle/ParticleInterface.cc
    1213  tolua/tolua_bind.cc
  • code/trunk/src/orxonox/hud/HUD.cc

    r1392 r1393  
    4343namespace orxonox
    4444{
    45     ConsoleCommandShortcut(HUD, cycleRadarFocus, AccessLevel::User);
     45    ConsoleCommandShortcut(HUD, cycleNavigationFocus, AccessLevel::User);
    4646
    4747    using namespace Ogre;
     
    4949    HUD::HUD(){
    5050        om = &Ogre::OverlayManager::getSingleton();
     51        firstRadarObject = NULL;
     52        lastRadarObject = NULL;
    5153
    5254                // create Factories
     
    8688        radar->show();
    8789
     90        // create Navigation
     91        nav = new Navigation(container);
     92
    8893                // set up screen-wide container
    8994        container->show();
     
    98103        container->addChild(test);
    99104        container->addChild(fpsText);
     105
    100106        energyBar->init(0.01, 0.94, 0.4, container);
    101107        energyBar->setValue(1);
     108
    102109        speedoBar->init(0.01, 0.90, 0.4, container);
     110
    103111        radar->init(0.5, 0.9, 0.2, container);
    104         radar->addObject(Vector3(2000.0, 1000.0, 1000.0));
    105         radar->addObject(Vector3(0.0, 4000.0, 0.0));
    106         radar->addObject(Vector3(0.0, 0.0, 6800.0));
     112        addRadarObject(Vector3(2000.0, 1000.0, 1000.0));
     113        addRadarObject(Vector3(0.0, 4000.0, 0.0));
     114        addRadarObject(Vector3(0.0, 0.0, 6800.0));
    107115    }
    108116
     
    113121    void HUD::tick(float dt)
    114122    {
    115         int d = (float)(radar->getDist2Focus()/10);
     123        int d = (float)(nav->getDist2Focus()/10);
    116124        if(d) test->setCaption("Distance: " + Ogre::StringConverter::toString(d));
    117125        else test->setCaption("");
     
    126134        radar->resize();
    127135        radar->update();
     136
     137        nav->update();
     138    }
     139
     140    void HUD::addRadarObject(Vector3 pos){
     141        // check if this is the first RadarObject to create
     142        if(firstRadarObject == NULL){
     143            firstRadarObject = new RadarObject(container, pos);
     144            lastRadarObject = firstRadarObject;
     145        }
     146        else{ // if not, append to list
     147            lastRadarObject->next = new RadarObject(container, pos);
     148            lastRadarObject = lastRadarObject->next;
     149        }
     150    }
     151
     152    RadarObject* HUD::getFirstRadarObject(){
     153        return firstRadarObject;
    128154    }
    129155
     
    141167    }
    142168
    143     /*static*/void HUD::cycleRadarFocus(){
    144         HUD::getSingleton().radar->cycleFocus();
     169    /*static*/void HUD::cycleNavigationFocus(){
     170        HUD::getSingleton().nav->cycleFocus();
    145171    }
    146172}
  • code/trunk/src/orxonox/hud/HUD.h

    r1392 r1393  
    3636#include "BarOverlayElement.h"
    3737#include "RadarOverlayElement.h"
     38#include "Navigation.h"
     39#include "RadarObject.h"
    3840
    3941
     
    5456            BarOverlayElement* speedoBar;
    5557            RadarOverlayElement* radar;
     58            RadarObject* firstRadarObject;
     59            RadarObject* lastRadarObject;
     60            Navigation* nav;
    5661
    5762        public:
    5863            virtual void tick(float);
     64            void addRadarObject(Vector3 pos);
     65            RadarObject* getFirstRadarObject();
    5966
    6067            static HUD* instance_s;
     
    6269            static void setFPS(float fps);
    6370            static void setEnergy(float value);
    64             static void cycleRadarFocus();
     71            static void cycleNavigationFocus();
    6572    };
    6673}
  • code/trunk/src/orxonox/hud/RadarObject.cc

    r1392 r1393  
    6767        }
    6868}
    69 
    70 /* my local clipboard...
    71 COUT(3) << "WWWWWWWWWWWWWWWWWWWWWWWWWWWW\n";
    72 COUT(3) << firstRadarObject_->radius_ << "  " << firstRadarObject_->phi_ << std::endl;
    73 COUT(3) << "WWWWWWWWWWWWWWWWWWWWWWWWWWWW\n";
    74 */
  • code/trunk/src/orxonox/hud/RadarObject.h

    r1392 r1393  
    2828#ifndef _RADAR2_H__
    2929#define _RADAR2_H__
    30 
    3130#include <OgrePrerequisites.h>
    3231#include "../OrxonoxPrereqs.h"
  • 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 */
  • code/trunk/src/orxonox/hud/RadarOverlayElement.h

    r1392 r1393  
    5858                        void resize();
    5959            void update();
    60             void updateNavMarker();
    61             void addObject(Vector3 pos);
    6260            void listObjects();
    63             void cycleFocus();
    64             float getDist2Focus();
    6561            float calcRadius(RadarObject* obj);
    6662            float calcPhi(RadarObject* obj);
    6763            bool calcRight(RadarObject* obj);
    68 
    69             Ogre::PanelOverlayElement* navMarker_;  // marker to help navigating
    70                         RadarObject* firstRadarObject_;         // start of linked list
    71                         RadarObject* lastRadarObject_;          // end of linked list
    72                         RadarObject* focus_;                    // object that is focussed
    7364        };
    7465}
Note: See TracChangeset for help on using the changeset viewer.