Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 1450


Ignore:
Timestamp:
May 28, 2008, 2:08:03 PM (16 years ago)
Author:
FelixSchulthess
Message:

making radar objects from scene nodes now. radar object supporting multiple colors

Location:
code/branches/network/src/orxonox/hud
Files:
6 edited

Legend:

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

    r1446 r1450  
    5353    HUD::HUD(){
    5454        om = &Ogre::OverlayManager::getSingleton();
     55        sm = GraphicsEngine::getSingleton().getSceneManager();
    5556        firstRadarObject = NULL;
    5657        lastRadarObject = NULL;
     
    117118
    118119        radar->init(0.5, 0.9, 0.2, container);
    119         addRadarObject(Vector3(2000.0, 0.0, 0.0));
    120         addRadarObject(Vector3(0.0, 2000.0, 0.0));
    121         addRadarObject(Vector3(0.0, 0.0, 2000.0));
     120        SceneNode* node;
     121        node = sm->getRootSceneNode()->createChildSceneNode("tomato1", Vector3(2000.0, 0.0, 0.0));
     122        addRadarObject(node);
     123        node = sm->getRootSceneNode()->createChildSceneNode("tomato2", Vector3(0.0, 2000.0, 0.0));
     124        addRadarObject(node);
     125        node = sm->getRootSceneNode()->createChildSceneNode("tomato3", Vector3(0.0, 0.0, 2000.0));
     126        addRadarObject(node);
    122127    }
    123128
     
    151156    }
    152157
    153     void HUD::addRadarObject(Vector3 pos){
     158    void HUD::addRadarObject(SceneNode* node, int colour){
    154159        // check if this is the first RadarObject to create
    155160        if(firstRadarObject == NULL){
    156             firstRadarObject = new RadarObject(container, pos);
     161            firstRadarObject = new RadarObject(container, node, colour);
    157162            lastRadarObject = firstRadarObject;
    158163        }
    159164        else{ // if not, append to list
    160             lastRadarObject->next = new RadarObject(container, pos);
     165            lastRadarObject->next = new RadarObject(container, node, colour);
    161166            lastRadarObject = lastRadarObject->next;
    162167        }
  • code/branches/network/src/orxonox/hud/HUD.h

    r1422 r1450  
    3434#include <OgrePrerequisites.h>
    3535#include <OgreTextAreaOverlayElement.h>
     36#include <OgreSceneNode.h>
    3637#include "core/Tickable.h"
    3738#include "util/Math.h"
     
    4647        ~HUD();
    4748        Ogre::OverlayManager* om;
     49        Ogre::SceneManager* sm;
    4850        Ogre::Overlay* orxonoxHUD;
    4951        Ogre::OverlayContainer* container;
     
    5961      public:
    6062        virtual void tick(float);
    61         void addRadarObject(Vector3 pos);
     63        void addRadarObject(Ogre::SceneNode* node, int colour = 0);
    6264        RadarObject* getFirstRadarObject();
    6365        void setRenderTimeRatio(float ratio);
  • code/branches/network/src/orxonox/hud/Navigation.cc

    r1444 r1450  
    9696
    9797        if(navCam_ == NULL) navCam_ = SpaceShip::getLocalShip()->getCamera()->cam_;
    98         Vector3 pos = focus_->pos_;
     98        Vector3 pos = focus_->getPosition();
    9999        // transform to screen coordinates
    100100        pos = navCam_->getProjectionMatrix()*navCam_->getViewMatrix()*pos;
     
    107107        // is object in view?
    108108        float radius = RadarOverlayElement::calcRadius(navCamPos_, currentDir_, currentOrth_, focus_);
    109         bool isRight = (currentDir_.crossProduct(currentOrth_)).dotProduct(focus_->pos_ - navCamPos_)>0;
    110         bool isAbove = currentOrth_.dotProduct(focus_->pos_ - navCamPos_)>0;
     109        bool isRight = (currentDir_.crossProduct(currentOrth_)).dotProduct(focus_->getPosition() - navCamPos_)>0;
     110        bool isAbove = currentOrth_.dotProduct(focus_->getPosition() - navCamPos_)>0;
    111111        bool outOfView = (xPosRel<0 || xPosRel>1 || yPosRel<0 || yPosRel>1);
    112112        // if object is behind us, it is out of view anyway:
     
    206206        }
    207207        else{
    208             focus_->panel_->setMaterialName("Orxonox/RedDot");
     208            focus_->resetColour();
    209209            if(focus_ != NULL) focus_ = focus_->next;
    210210        }
     
    217217            navMarker_->show();
    218218            navText_->show();
    219             focus_->panel_->setMaterialName("Orxonox/WhiteDot");
     219            focus_->setColour(RadarObject::WHITE);
    220220        }
    221221    }
     
    223223    float Navigation::getDist2Focus(){
    224224        if(focus_ == NULL) return(0.0);
    225         return((focus_->pos_-SpaceShip::getLocalShip()->getPosition()).length());
     225        return((focus_->getPosition()-SpaceShip::getLocalShip()->getPosition()).length());
    226226    }
    227227}
  • code/branches/network/src/orxonox/hud/RadarObject.cc

    r1410 r1450  
    2626*/
    2727
    28 #include "OrxonoxStableHeaders.h"
    29 #include "RadarObject.h"
    30 
    3128#include <OgreOverlayManager.h>
    3229#include <OgreStringConverter.h>
     30#include "OrxonoxStableHeaders.h"
     31#include "GraphicsEngine.h"
     32#include "RadarObject.h"
    3333
    3434namespace orxonox
     
    3838    int RadarObject::count = 0;         // initialize static variable
    3939
    40     RadarObject::RadarObject(OverlayContainer* container){
     40    RadarObject::RadarObject(OverlayContainer* container, SceneNode* node, int colour){
    4141        container_ = container;
    42         pos_ = Vector3(0.0, 0.0, 0.0);
    43         init();
    44     }
    45 
    46     RadarObject::RadarObject(OverlayContainer* container, Vector3 pos){
    47         container_ = container;
    48         pos_ = pos;
    49         init();
    50     }
    51 
    52     RadarObject::~RadarObject(){}
    53 
    54     void RadarObject::init(){
     42        node_ = node;
     43        colour_ = colour;
    5544        next = NULL;
    5645        om = &OverlayManager::getSingleton();
    5746        panel_ = static_cast<PanelOverlayElement*>(om->createOverlayElement("Panel",
    58           "Object"+StringConverter::toString(count)));
    59         panel_->setMaterialName("Orxonox/RedDot");
     47            "Object"+StringConverter::toString(count)));
     48        setColour(colour_);
    6049        panel_->setDimensions(3,3);
    6150        panel_->setMetricsMode(Ogre::GMM_PIXELS);
     
    6554        container_->addChild(panel_);
    6655    }
     56
     57    RadarObject::~RadarObject(){
     58        // todo: clean up stuff
     59    }
     60
     61    void RadarObject::setColour(int colour){
     62        switch(colour){
     63        case RED: panel_->setMaterialName("Orxonox/RedDot"); break;
     64        case YELLOW: panel_->setMaterialName("Orxonox/YellowDot"); break;
     65        case GREEN: panel_->setMaterialName("Orxonox/GreenDot"); break;
     66        case BLUE: panel_->setMaterialName("Orxonox/BlueDot"); break;
     67        case WHITE: panel_->setMaterialName("Orxonox/WhiteDot"); break;
     68        default: panel_->setMaterialName("Orxonox/RedDot"); break;
     69        }
     70    }
     71
     72    void RadarObject::resetColour(){
     73        setColour(colour_);
     74    }
     75
     76    Vector3 RadarObject::getPosition(){
     77        return node_->getPosition();
     78    }
    6779}
     80
  • code/branches/network/src/orxonox/hud/RadarObject.h

    r1411 r1450  
    2929#define _RadarObject_H__
    3030
     31#include <OgrePrerequisites.h>
     32#include <OgreSceneNode.h>
     33#include <OgrePanelOverlayElement.h>
    3134#include "OrxonoxPrereqs.h"
    32 
    33 #include <OgrePrerequisites.h>
    34 #include <OgrePanelOverlayElement.h>
    3535#include "util/Math.h"
    3636
     
    4141      private:
    4242        Ogre::OverlayManager* om;                               // our one and only overlay manager
    43         void init();
     43        Ogre::SceneNode* node_;                                 // node of object
     44        int colour_;
    4445
    4546      public:
    46         RadarObject(Ogre::OverlayContainer* container);
    47         RadarObject(Ogre::OverlayContainer* container, Vector3 pos);
     47        RadarObject(Ogre::OverlayContainer* container, Ogre::SceneNode* node, int colour = 0);
    4848        ~RadarObject();
     49        void setColour(int colour);
     50        void resetColour();
     51        Vector3 getPosition();
    4952
    5053        bool right_;
    5154        int index_;                             // index number of object
    52         Vector3 pos_;                                                   // position in space
    5355        Ogre::OverlayContainer* container_;
    5456        Ogre::PanelOverlayElement* panel_;              // the panel used to show the dot
     
    5658
    5759        static int count;
     60        static const int RED = 0;
     61        static const int YELLOW = 1;
     62        static const int GREEN = 2;
     63        static const int BLUE = 3;
     64        static const int WHITE = 99;            // used if object got nav focus
    5865  };
    5966}
  • code/branches/network/src/orxonox/hud/RadarOverlayElement.cc

    r1410 r1450  
    8989
    9090            // set size to fit distance...
    91             float d = (ro->pos_-shipPos_).length();
     91            float d = (ro->getPosition()-shipPos_).length();
    9292            if(d<4000) ro->panel_->setDimensions(4,4);
    9393            else if(d<8000) ro->panel_->setDimensions(3,3);
     
    113113        // iterate through all Radar Objects
    114114        while(ro != NULL) {
    115             COUT(3) << i++ << ": " << ro->pos_ << std::endl;
     115            COUT(3) << i++ << ": " << ro->getPosition() << std::endl;
    116116            ro = ro->next;
    117117        }
     
    119119
    120120    float RadarOverlayElement::calcRadius(Vector3 pos, Vector3 dir, Vector3 orth, RadarObject* obj){
    121         return(acos((dir.dotProduct(obj->pos_ - pos))/
    122         ((obj->pos_ - pos).length()*dir.length())));
     121        return(acos((dir.dotProduct(obj->getPosition() - pos))/
     122        ((obj->getPosition() - pos).length()*dir.length())));
    123123    }
    124124
    125125    float RadarOverlayElement::calcPhi(Vector3 pos, Vector3 dir, Vector3 orth, RadarObject* obj){
    126126        // project difference vector on our plane...
    127         Vector3 proj = Plane(dir, pos).projectVector(obj->pos_ - pos);
     127        Vector3 proj = Plane(dir, pos).projectVector(obj->getPosition() - pos);
    128128        // ...and find out the angle
    129129        return(acos((orth.dotProduct(proj))/
     
    132132
    133133    bool RadarOverlayElement::calcRight(Vector3 pos, Vector3 dir, Vector3 orth, RadarObject* obj){
    134         if((dir.crossProduct(orth)).dotProduct(obj->pos_ - pos) > 0)
     134        if((dir.crossProduct(orth)).dotProduct(obj->getPosition() - pos) > 0)
    135135            return true;
    136136        else return false;
Note: See TracChangeset for help on using the changeset viewer.