Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
May 20, 2008, 11:51:33 PM (17 years ago)
Author:
FelixSchulthess
Message:

added full functionality for RadarObjects and two space tomatoes

File:
1 edited

Legend:

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

    r1335 r1339  
    5454
    5555    void RadarOverlayElement::init(Real leftRel, Real topRel, Real dimRel, Ogre::OverlayContainer* container){
    56                 om = &Ogre::OverlayManager::getSingleton();       
     56        // some initial data
     57                om = &Ogre::OverlayManager::getSingleton();
    5758        dimRel_ = dimRel;
    5859        leftRel_ = leftRel;
    5960        topRel_ = topRel;
    6061        container_ = container;
     62        firstRadarObject_ = NULL;
     63        lastRadarObject_ = NULL;
    6164
     65        // these have to fit the data in the level
    6266        shipPos_ = Vector3(0.0, 0.0, 0.0);
    6367        initialDir_ = Vector3(1.0, 0.0, 0.0);
     
    6973        setMaterialName("Orxonox/Radar");
    7074        resize();
    71        
     75
    7276        container_->addChild(this);
    7377    }
     
    8993                currentOrth_ = SpaceShip::instance_s->getOrientation()*initialOrth_;
    9094
    91                 if(tomato_ == NULL) return;             
    92                
    93                 tomato_->radius_ = acos((currentDir_.dotProduct(tomato_->pos_ - shipPos_))/
    94                         ((tomato_->pos_ - shipPos_).length()*currentDir_.length()));
    95         tomato_->phi_ = acos((currentOrth_.dotProduct(tomato_->pos_ - shipPos_))/
    96                 ((tomato_->pos_ - shipPos_).length()*currentOrth_.length()));
    97         if((currentDir_.crossProduct(currentOrth_)).dotProduct(tomato_->pos_ - shipPos_) > 0)
    98                 tomato_->right_ = true;
    99         else tomato_->right_=false;
     95        RadarObject* ro = firstRadarObject_;
     96        // iterate through all RadarObjects
     97                while(ro != NULL){
     98            ro->radius_ = calcRadius(ro);
     99            ro->phi_ = calcPhi(ro);
     100            ro->right_ = calcRight(ro);
     101            if (ro->right_){
     102                ro->panel_->setPosition(sin(ro->phi_)*ro->radius_/
     103                    3.5*dim_/2+dim_/2+left_-2,-cos(ro->phi_)*ro->radius_/3.5*dim_/2+dim_/2+top_-2);
     104            }
     105            else {
     106                ro->panel_->setPosition(-sin(ro->phi_)*ro->radius_/
     107                    3.5*dim_/2+dim_/2+left_-2,-cos(ro->phi_)*ro->radius_/3.5*dim_/2+dim_/2+top_-2);
     108            }
     109            ro = ro->next;
     110                }
     111    }
    100112
    101         if (tomato_->right_){
    102             tomato_->panel_->setPosition(sin(tomato_->phi_)*tomato_->radius_/
    103                 3.5*dim_/2+dim_/2+left_-2,-cos(tomato_->phi_)*tomato_->radius_/3.5*dim_/2+dim_/2+top_-2);
     113    void RadarOverlayElement::addObject(Vector3 pos){
     114        if(firstRadarObject_ == NULL){
     115            firstRadarObject_ = new RadarObject(container_);
     116            firstRadarObject_->pos_ = pos;
     117            lastRadarObject_ = firstRadarObject_;
    104118        }
    105         else {
    106             tomato_->panel_->setPosition(-sin(tomato_->phi_)*tomato_->radius_/
    107                 3.5*dim_/2+dim_/2+left_-2,-cos(tomato_->phi_)*tomato_->radius_/3.5*dim_/2+dim_/2+top_-2);
     119        else{
     120            lastRadarObject_->next = new RadarObject(container_);
     121            lastRadarObject_->next->pos_ = pos;
     122            lastRadarObject_ = lastRadarObject_->next;
    108123        }
    109     }
    110    
    111     void RadarOverlayElement::addObject(Vector3 pos){
    112                 tomato_ = new RadarObject(container_);
    113                 tomato_->pos_ = pos;
    114124        }
    115        
     125
     126        void RadarOverlayElement::listObjects(){
     127            int i = 0;
     128            RadarObject* ro = firstRadarObject_;
     129            COUT(3) << "List of RadarObjects:\n";
     130            // iterate through all Radar Objects
     131            while(ro != NULL) {
     132                COUT(3) << i++ << ": " << ro->pos_ << std::endl;
     133                ro = ro->next;
     134            }
     135        }
     136
     137        float RadarOverlayElement::calcRadius(RadarObject* obj){
     138            return(acos((currentDir_.dotProduct(obj->pos_ - shipPos_))/
     139                        ((obj->pos_ - shipPos_).length()*currentDir_.length())));
     140        }
     141
     142        float RadarOverlayElement::calcPhi(RadarObject* obj){
     143            return(acos((currentOrth_.dotProduct(firstRadarObject_->pos_ - shipPos_))/
     144                ((firstRadarObject_->pos_ - shipPos_).length()*currentOrth_.length())));
     145        }
     146
     147        bool RadarOverlayElement::calcRight(RadarObject* obj){
     148            if((currentDir_.crossProduct(currentOrth_)).dotProduct(obj->pos_ - shipPos_) > 0)
     149                return true;
     150        else return false;
     151        }
     152
    116153        //// RadarObject ////
    117        
     154
    118155        int RadarObject::count = 0;
    119        
     156
    120157        RadarObject::RadarObject(Ogre::OverlayContainer* container){
    121158                container_ = container;
     
    123160                init();
    124161        }
    125        
     162
    126163        RadarObject::RadarObject(Ogre::OverlayContainer* container, Vector3 pos){
    127164                container_ = container;
     
    129166                init();
    130167        }
    131        
     168
    132169        RadarObject::~RadarObject(){}
    133        
     170
    134171        void RadarObject::init(){
     172            next = NULL;
    135173                om = &Ogre::OverlayManager::getSingleton();
    136174                panel_ = static_cast<PanelOverlayElement*>(om->createOverlayElement("Panel",
     
    146184/* my local clipboard...
    147185COUT(3) << "WWWWWWWWWWWWWWWWWWWWWWWWWWWW\n";
    148 COUT(3) << tomato_->radius_ << "  " << tomato_->phi_ << std::endl;
     186COUT(3) << firstRadarObject_->radius_ << "  " << firstRadarObject_->phi_ << std::endl;
    149187COUT(3) << "WWWWWWWWWWWWWWWWWWWWWWWWWWWW\n";
    150188*/
Note: See TracChangeset for help on using the changeset viewer.