- Timestamp:
- May 20, 2008, 11:51:33 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/hud3/src/orxonox/hud/RadarOverlayElement.cc
r1335 r1339 54 54 55 55 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(); 57 58 dimRel_ = dimRel; 58 59 leftRel_ = leftRel; 59 60 topRel_ = topRel; 60 61 container_ = container; 62 firstRadarObject_ = NULL; 63 lastRadarObject_ = NULL; 61 64 65 // these have to fit the data in the level 62 66 shipPos_ = Vector3(0.0, 0.0, 0.0); 63 67 initialDir_ = Vector3(1.0, 0.0, 0.0); … … 69 73 setMaterialName("Orxonox/Radar"); 70 74 resize(); 71 75 72 76 container_->addChild(this); 73 77 } … … 89 93 currentOrth_ = SpaceShip::instance_s->getOrientation()*initialOrth_; 90 94 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 } 100 112 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_; 104 118 } 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; 108 123 } 109 }110 111 void RadarOverlayElement::addObject(Vector3 pos){112 tomato_ = new RadarObject(container_);113 tomato_->pos_ = pos;114 124 } 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 116 153 //// RadarObject //// 117 154 118 155 int RadarObject::count = 0; 119 156 120 157 RadarObject::RadarObject(Ogre::OverlayContainer* container){ 121 158 container_ = container; … … 123 160 init(); 124 161 } 125 162 126 163 RadarObject::RadarObject(Ogre::OverlayContainer* container, Vector3 pos){ 127 164 container_ = container; … … 129 166 init(); 130 167 } 131 168 132 169 RadarObject::~RadarObject(){} 133 170 134 171 void RadarObject::init(){ 172 next = NULL; 135 173 om = &Ogre::OverlayManager::getSingleton(); 136 174 panel_ = static_cast<PanelOverlayElement*>(om->createOverlayElement("Panel", … … 146 184 /* my local clipboard... 147 185 COUT(3) << "WWWWWWWWWWWWWWWWWWWWWWWWWWWW\n"; 148 COUT(3) << tomato_->radius_ << " " << tomato_->phi_ << std::endl;186 COUT(3) << firstRadarObject_->radius_ << " " << firstRadarObject_->phi_ << std::endl; 149 187 COUT(3) << "WWWWWWWWWWWWWWWWWWWWWWWWWWWW\n"; 150 188 */
Note: See TracChangeset
for help on using the changeset viewer.