Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 1328


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

edited bar, removed smartbar and replaced functionality with a boolean autoColor to indicate whether the bar should change color automatically

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

Legend:

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

    r1314 r1328  
    2222*      Yuning Chai
    2323*   Co-authors:
    24 *      ...
     24*      Felix Schulthess
    2525*
    2626*/
     
    3636  using namespace Ogre;
    3737
    38 
    39     BarOverlayElement::BarOverlayElement(const String& name):Ogre::PanelOverlayElement(name){}
     38    BarOverlayElement::BarOverlayElement(const String& name):Ogre::PanelOverlayElement(name){
     39        name_ = name;
     40    }
    4041
    4142    BarOverlayElement::~BarOverlayElement(){}
    4243
    43     void BarOverlayElement::initialise(){
    44         PanelOverlayElement::initialise();
    45 /*      setDimensions(100,100);
    46         setPosition(10,10);
    47         setMaterialName("Orxonox/Green");
    48         setMetricsMode(Ogre::GMM_PIXELS);
    49 */  }
     44    void BarOverlayElement::init(Real leftRel, Real topRel, Real widthRel, Real heightRel, Ogre::OverlayContainer* container){
     45        // init some values...
     46        container_ = container;
     47        om = &Ogre::OverlayManager::getSingleton();
     48        value_ = 0;
     49        color_ = 2;
     50        autoColor_ = true;
     51        dir_ = BarOverlayElement::RIGHT;
    5052
    51 
    52     void BarOverlayElement::initBarOverlayElement(Real leftRel, Real topRel, Real widthRel, Real heightRel, int dir,  int colour){
     53        // get window data...
    5354        windowW_ = GraphicsEngine::getSingleton().getWindowWidth();
    5455        windowH_ = GraphicsEngine::getSingleton().getWindowHeight();
    55 
    56         dir_ = dir;
    5756        leftRel_ = leftRel;
    5857        topRel_ = topRel;
     
    6059        heightRel_ = heightRel;
    6160
     61        // cálculate absolute coordinates...
    6262        left_ = leftRel_ * windowW_;
    6363        top_ = topRel_ * windowH_;
     
    6565        height_ = heightRel_ * windowH_;
    6666
    67         setMetricsMode(Ogre::GMM_PIXELS);
     67        // create background...
     68        bar_ = static_cast<PanelOverlayElement*>(om->createOverlayElement("Panel", name_+"Bar"));
     69        bar_->show();
     70        container_->addChild(bar_);
     71        bar_->setPosition(left_, top_);
     72        bar_->setDimensions(width_, height_);
     73        bar_->setMetricsMode(Ogre::GMM_PIXELS);
     74        bar_->setMaterialName("Orxonox/Green");
     75
    6876        setPosition(left_,top_);
    6977        setDimensions(width_,height_);
    70         setColour(colour);
     78        setMetricsMode(Ogre::GMM_PIXELS);
     79        setMaterialName("Orxonox/BarBackground");
     80        setValue(value_);
    7181    }
    7282
    7383
    74    void BarOverlayElement::reset(int percentage){
     84   void BarOverlayElement::setValue(float value){
     85        value_ = value;
     86        // set color, if nescessary
     87        if(autoColor_){
     88            if (value_>0.5) {setColor(BarOverlayElement::GREEN);}
     89            else if (value_>0.25) {setColor(BarOverlayElement::YELLOW);}
     90            else setColor(BarOverlayElement::RED);
     91        }
     92        // set value
    7593        switch(dir_){
    76         case 1:
    77             setPosition(left_,top_);
    78             setDimensions(width_,height_*percentage/100);
     94        case BarOverlayElement::DOWN:
     95            bar_->setPosition(left_,top_);
     96            bar_->setDimensions(width_,height_*value_);
    7997            break;
    80         case 2:
    81             setPosition(left_+width_-width_*percentage/100,top_);
    82             setDimensions(width_*percentage/100,height_);
     98        case BarOverlayElement::LEFT:
     99            bar_->setPosition(left_+width_-width_*value_,top_);
     100            bar_->setDimensions(width_*value_,height_);
    83101            break;
    84         case 3:
    85             setPosition(left_,top_+height_-height_*percentage/100);
    86             setDimensions(width_,height_*percentage/100);
     102        case BarOverlayElement::UP:
     103            bar_->setPosition(left_,top_+height_-height_*value_);
     104            bar_->setDimensions(width_,height_*value_);
    87105            break;
    88106        default:
    89             setPosition(left_,top_);
    90             setDimensions(width_*percentage/100,height_);
     107            bar_->setPosition(left_,top_);
     108            bar_->setDimensions(width_*value_,height_);
     109            break;
    91110        }
    92111    }
    93112
     113    void BarOverlayElement::setDir(int dir){
     114    }
    94115
    95     void BarOverlayElement::setColour(int colour){
    96         switch(colour){
     116    void BarOverlayElement::setColor(int color){
     117        color_ = color;
     118        switch(color){
    97119        case 0:
    98             setMaterialName("Orxonox/Red");
     120            bar_->setMaterialName("Orxonox/Red");
    99121            break;
    100122        case 1:
    101             setMaterialName("Orxonox/Yellow");
     123            bar_->setMaterialName("Orxonox/Yellow");
    102124            break;
    103125        case 2:
    104             setMaterialName("Orxonox/Green");
     126            bar_->setMaterialName("Orxonox/Green");
    105127        }
    106128    }
    107129
    108 
    109     SmartBarOverlayElement::SmartBarOverlayElement(const String& name):BarOverlayElement(name){}
    110 
    111     SmartBarOverlayElement::~SmartBarOverlayElement(void){}
    112 
    113 
    114     void SmartBarOverlayElement::initialise(){
    115       PanelOverlayElement::initialise();
    116 /*      setDimensions(100,100);
    117       setPosition(10,10);
    118       setMaterialName("Orxonox/Green");
    119       setMetricsMode(Ogre::GMM_PIXELS);
    120 */  }
    121 
    122     void SmartBarOverlayElement::initSmartBarOverlayElement(Real left, Real top, Real width, Real height, int dir)
    123     {
    124       BarOverlayElement::initBarOverlayElement(left, top, width, height, dir, BarOverlayElement::GREEN);
     130    float BarOverlayElement::getValue(){
     131        return(value_);
    125132    }
    126133
    127 
    128     void SmartBarOverlayElement::reset(int percentage){
    129       if (percentage>50) {setColour(BarOverlayElement::GREEN);}
    130       else if (percentage>25) {setColour(BarOverlayElement::YELLOW);}
    131       else setColour(BarOverlayElement::RED);
    132       BarOverlayElement::reset(percentage);
     134    int BarOverlayElement::getBarColor(){
     135        return(color_);
    133136    }
    134 
    135137}
    136138
  • code/branches/hud3/src/orxonox/hud/BarOverlayElement.h

    r1314 r1328  
    2222*      Yuning Chai
    2323*   Co-authors:
    24 *      ...
     24*      Felix Schulthess
    2525*
    2626*/
     
    4343  class _OrxonoxExport BarOverlayElement : public Ogre::PanelOverlayElement
    4444  {
    45   private:
     45    private:
    4646
    47     int percentage_;
    48     int dir_;
     47    bool autoColor_;                    // whether bar changes color automatically
     48    float value_;                       // progress of bar
     49    int dir_;                           // direction of progress
     50    int color_;
    4951    int left_;
    5052    int top_;
    5153    int width_;
    5254    int height_;
     55    int windowW_, windowH_;
    5356    Ogre::Real leftRel_;
    5457    Ogre::Real topRel_;
    5558    Ogre::Real widthRel_;
    5659    Ogre::Real heightRel_;
    57     int windowW_, windowH_;
    58 
    59     static Ogre::String& typeName_s;
    60 
    61   public:
    62 
    63     static const int LEFT = 0;
    64     static const int UP = 1;
    65     static const int RIGHT = 2;
    66     static const int DOWN = 3;
    67 
    68     static const int RED = 0;
    69     static const int YELLOW = 1;
    70     static const int GREEN = 2;
    71 
    72     BarOverlayElement(const Ogre::String& name);
    73     virtual ~BarOverlayElement();
    74     virtual void initialise();
    75 
    76     void initBarOverlayElement(Real leftRel, Real topRel, Real widthRel, Real heightRel,
    77           int dir,  int colour);
    78 
    79     void reset(int percentage);
    80     void setColour(int colour);
    81 
    82   };
    83 
    84 
    85   class _OrxonoxExport SmartBarOverlayElement : public BarOverlayElement
    86   {
    87     private:
     60    Ogre::PanelOverlayElement* bar_;    // the actual bar
     61    Ogre::OverlayManager* om;           // our overlay manager
     62    Ogre::OverlayContainer* container_; // our parent container to attach to
     63    Ogre::String name_;
    8864
    8965    public:
     66        // directions
     67        static const int RIGHT = 0;
     68        static const int UP = 1;
     69        static const int LEFT = 2;
     70        static const int DOWN = 3;
     71        // predefined colors
     72        static const int RED = 0;
     73        static const int YELLOW = 1;
     74        static const int GREEN = 2;
    9075
    91       SmartBarOverlayElement(const Ogre::String& name);
    92       virtual ~SmartBarOverlayElement(void);
    93       virtual void initialise();
     76        BarOverlayElement(const Ogre::String& name);
     77        virtual ~BarOverlayElement();
    9478
    95       void initSmartBarOverlayElement(Ogre::Real left, Ogre::Real top, Ogre::Real width, Ogre::Real height, int dir);
    96       void reset(int percentage);
     79        void init(Real leftRel, Real topRel, Real widthRel, Real heightRel, Ogre::OverlayContainer* container);
     80        void setDir(int dir);
     81        void setValue(float value);
     82        void setColor(int color);
    9783
    98   };
     84        float getValue();
     85        int getBarColor();
     86    };
    9987}
    100 
    10188#endif
    10289
  • code/branches/hud3/src/orxonox/hud/HUD.cc

    r1315 r1328  
    2222*      Yuning Chai
    2323*   Co-authors:
    24 *      ...
     24*      Felix Schulthess
    2525*
    2626*/
     
    3939#include "RadarOverlayElement.h"
    4040#include "OverlayElementFactories.h"
    41 // ugly hack
    42 #include "Orxonox.h"
    43 
    4441
    4542namespace orxonox
     
    5350    om->addOverlayElementFactory(barOverlayElementFactory);
    5451
    55     SmartBarOverlayElementFactory *smartBarOverlayElementFactory = new SmartBarOverlayElementFactory();
    56     om->addOverlayElementFactory(smartBarOverlayElementFactory);
    57 
    5852    RadarOverlayElementFactory *radarOverlayElementFactory = new RadarOverlayElementFactory();
    5953    om->addOverlayElementFactory(radarOverlayElementFactory);
     
    6357    container = static_cast<Ogre::OverlayContainer*>(om->createOverlayElement("Panel", "Orxonox/HUD/container"));
    6458
    65     energyCounter = static_cast<SmartBarOverlayElement*>(om->createOverlayElement("SmartBar", "energyCounter"));
     59    energyCounter = static_cast<BarOverlayElement*>(om->createOverlayElement("Bar", "energyCounter"));
    6660    energyCounter->show();
    6761
    68     speedo = static_cast<SmartBarOverlayElement*>(om->createOverlayElement("SmartBar", "speedo"));
     62    speedo = static_cast<BarOverlayElement*>(om->createOverlayElement("Bar", "speedo"));
    6963    speedo->show();
    7064
     
    7266    radar->show();
    7367
    74 
    75 /*    TextAreaOverlayElement* test = static_cast<TextAreaOverlayElement*>(overlayManager.createOverlayElement("TextArea", "test"));
    76 
    77     int dirX, dirY, dirZ;      //flying direction
    78     int ortX, ortY, ortZ;      //orthogonal direction
    79     int dX, dY, dZ;            //distance between main ship and the object
    80     int vecX, vecY, vecZ;      //vector product dir X ort
    81     double alpha;              //defines the radius in the radar
    82     double beta;               //defines the angle in the radar
    83     bool right;                //checks whether the object is on the right side (since cos is not bijective)
    84 
    85     dirX = 1;
    86     dirY = 0;
    87     dirZ = 0;
    88 
    89     ortX = 0;
    90     ortY = 0;
    91     ortZ = 1;
    92 
    93     dX = -2;
    94     dY = 2;
    95     dZ = 0;
    96 
    97     alpha = acos((dirX*dX+dirY*dY+dirZ*dZ)/(sqrt(pow(dX,2)+pow(dY,2)+pow(dZ,2))*sqrt(pow(dirX,2)+pow(dirY,2)+pow(dirZ,2))));
    98     beta = acos((ortX*dX+ortY*dY+ortZ*dZ)/(sqrt(pow(dX,2)+pow(dY,2)+pow(dZ,2))*sqrt(pow(ortX,2)+pow(ortY,2)+pow(ortZ,2))));
    99     vecX = dirY*ortZ - dirZ*ortY;
    100     vecY = dirZ*ortX - dirX*ortZ;
    101     vecZ = dirX*ortY - dirY*ortX;
    102 
    103     if((vecX*dX+vecY*dY+vecZ*dZ)>0){right=true;}
    104     else right=false;
    105 
    106     test->setCaption("hell");
    107     test->setPosition(10,10);
    108     test->setDimensions(20,20);
    109     test->show();
    110     test->setMetricsMode(Ogre::GMM_PIXELS);
    111     container->addChild(test);
    112 
    113     COUT(0)<<alpha<<" "<<beta<<" "<<right<<std::endl;
    114 */
    115 
    11668    container->addChild(energyCounter);
    11769    container->addChild(speedo);
    11870    container->addChild(radar);
    11971    container->show();
    120 
    12172    orxonoxHUD->add2D(container);
    12273    orxonoxHUD->show();
    123 
    124 
    125 
    126     // important: don't use SceneManager to create the node! but register the creator scene manager.
    127 /*    ogreNode_ = new Ogre::SceneNode(Orxonox::getSingleton()->getSceneManager(), "hudNoedely");
    128 
    129     ogreNode_->setPosition(80,-60,-200);
    130     ogreNode_->setScale(0.4,0.4,0.4);
    131     // ugly hack, but I haven't figured out yet how we could change this, since we really need the
    132     // scene manager..
    133     ogreNode_->attachObject(Orxonox::getSingleton()->getSceneManager()->createEntity("head", "ogrehead.mesh"));
    134 //    orxonoxOverlay->add3D(ogreNode_);
    135 */
    136 
    13774    container->setLeft(0.0);
    13875    container->setTop(0.0);
     
    14178    container->setMetricsMode(Ogre::GMM_RELATIVE);
    14279
    143     energyCounter->initSmartBarOverlayElement(0.01, 0.01, 0.2, 0.02, BarOverlayElement::LEFT);
    144     energyCounter->reset(100);
     80    energyCounter->init(0.01, 0.01, 0.2, 0.02, container);
     81    energyCounter->setValue(1);
    14582
    146     speedo->initSmartBarOverlayElement(0.01, 0.04, 0.2, 0.02, BarOverlayElement::LEFT);
    147     speedo->reset(80);
     83    speedo->init(0.01, 0.04, 0.2, 0.02, container);
    14884
    149     radar->initRadarOverlayElement(0.5, 0.9, 0.2, container);
    150 
    151 
     85    radar->init(0.5, 0.9, 0.2, container);
    15286  }
    15387
     
    15690      float v = SpaceShip::instance_s->getVelocity().length();
    15791      float vmax = SpaceShip::instance_s->getMaxSpeed();
    158       speedo->reset(100*v/vmax);
     92      speedo->setValue(v/vmax);
    15993      radar->update();
    160     /*if (this->ogreNode_)
    161     {
    162       this->ogreNode_->roll(Ogre::Degree(dt*200),Ogre::Node::TS_LOCAL);
    163       this->ogreNode_->yaw(Ogre::Degree(dt*200),Ogre::Node::TS_LOCAL);
    164       this->ogreNode_->pitch(Ogre::Degree(dt*200),Ogre::Node::TS_LOCAL);
    165     }*/
    16694  }
    16795
    168   HUD::~HUD(void){}
    169 
     96  HUD::~HUD(void){
     97  }
    17098}
    17199
  • code/branches/hud3/src/orxonox/hud/HUD.h

    r1314 r1328  
    2222*      Yuning Chai
    2323*   Co-authors:
    24 *      ...
     24*      Felix Schulthess
    2525*
    2626*/
     
    5050            Ogre::Overlay* orxonoxHUD;
    5151            Ogre::OverlayContainer* container;
    52             SmartBarOverlayElement* energyCounter;
    53             SmartBarOverlayElement* speedo;
     52            BarOverlayElement* energyCounter;
     53            BarOverlayElement* speedo;
    5454            RadarOverlayElement* radar;
    5555
  • code/branches/hud3/src/orxonox/hud/OverlayElementFactories.h

    r1302 r1328  
    2222*      Yuning Chai
    2323*   Co-authors:
    24 *      ...
     24*      Felix Schulthess
    2525*
    2626*/
     
    2828#ifndef _FACTORIES_H__
    2929#define _FACTORIES_H__
    30 
    3130
    3231#include <OgreOverlayElement.h>
     
    3635#include "BarOverlayElement.h"
    3736
     37namespace orxonox{
     38    class _OrxonoxExport BarOverlayElementFactory : public Ogre::OverlayElementFactory{
     39        public:
     40        Ogre::OverlayElement* createOverlayElement(const Ogre::String& instanceName){
     41            return new BarOverlayElement(instanceName);
     42        }
     43        const Ogre::String& getTypeName(void) const{
     44            static Ogre::String name = "Bar";
     45            return name;
     46        }
     47    };
    3848
    39 namespace orxonox{
    40 
    41   class _OrxonoxExport BarOverlayElementFactory : public Ogre::OverlayElementFactory{
    42     public:
    43     Ogre::OverlayElement* createOverlayElement(const Ogre::String& instanceName){
    44       return new BarOverlayElement(instanceName);
    45     }
    46     const Ogre::String& getTypeName(void) const{
    47       static Ogre::String name = "Bar";
    48       return name;
    49     }
    50   };
    51 
    52 
    53   class _OrxonoxExport SmartBarOverlayElementFactory : public Ogre::OverlayElementFactory{
    54     public:
    55     Ogre::OverlayElement* createOverlayElement(const Ogre::String& instanceName){
    56       return new SmartBarOverlayElement(instanceName);
    57     }
    58     const Ogre::String& getTypeName(void) const{
    59       static Ogre::String name = "SmartBar";
    60       return name;
    61     }
    62   };
    63 
    64   class _OrxonoxExport RadarOverlayElementFactory : public Ogre::OverlayElementFactory{
    65     public:
    66       Ogre::OverlayElement* createOverlayElement(const Ogre::String& instanceName){
    67         return new RadarOverlayElement(instanceName);
    68       }
    69       const Ogre::String& getTypeName(void) const{
    70         static Ogre::String name = "Radar";
    71         return name;
    72       }
    73   };
     49    class _OrxonoxExport RadarOverlayElementFactory : public Ogre::OverlayElementFactory{
     50        public:
     51        Ogre::OverlayElement* createOverlayElement(const Ogre::String& instanceName){
     52            return new RadarOverlayElement(instanceName);
     53        }
     54        const Ogre::String& getTypeName(void) const{
     55            static Ogre::String name = "Radar";
     56            return name;
     57        }
     58    };
    7459}
    7560
    76 
    77 
    78 
    7961#endif
  • code/branches/hud3/src/orxonox/hud/RadarOverlayElement.cc

    r1314 r1328  
    5757    }
    5858
    59     void RadarOverlayElement::initRadarOverlayElement(Real leftRel, Real topRel, Real dimRel, Ogre::OverlayContainer* container){
     59    void RadarOverlayElement::init(Real leftRel, Real topRel, Real dimRel, Ogre::OverlayContainer* container){
    6060        count_ = 0;
    6161        dimRel_ = dimRel;
     
    7979        point->show();
    8080        container->addChild(point);
    81         point->setMaterialName("Orxonox/RedPoint");
     81        point->setMaterialName("Orxonox/RedDot");
    8282        point->setDimensions(5,5);
    8383        point->setMetricsMode(Ogre::GMM_PIXELS);
     
    9595        setDimensions(dim_,dim_);
    9696    }
    97 
    98 //    void RadarOverlayElement::setMainShipPosition(int dirX, int dirY, int dirZ, int ortX, int ortY, int ortZ){
    99 //        dirX_=dirX;
    100 //        dirY_=dirY;
    101 //        dirZ_=dirZ;
    102 //        ortX_=ortX;
    103 //        ortY_=ortY;
    104 //        ortZ_=ortZ;
    105 //    }
    10697
    10798    void RadarOverlayElement::update() {
  • code/branches/hud3/src/orxonox/hud/RadarOverlayElement.h

    r1314 r1328  
    7272    virtual void initialise();
    7373    void update();
    74     void initRadarOverlayElement(Real leftRel, Real topRel, Real dimRel, Ogre::OverlayContainer* container);
     74    void init(Real leftRel, Real topRel, Real dimRel, Ogre::OverlayContainer* container);
    7575    void setMainShipPosition(int dirX, int dirY, int dirZ, int ortX, int ortY, int ortZ);
    7676    int newShip(int X, int Y, int Z);
Note: See TracChangeset for help on using the changeset viewer.