- Timestamp:
- Dec 16, 2012, 6:07:37 PM (11 years ago)
- Location:
- code/branches/presentationHS12
- Files:
-
- 1 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
code/branches/presentationHS12
- Property svn:mergeinfo changed
/code/branches/Racingbot (added) merged: 9388,9399,9412,9432,9436,9441,9451,9459,9470,9487,9490,9507-9508,9512-9513
- Property svn:mergeinfo changed
-
code/branches/presentationHS12/src/modules/gametypes/SpaceRaceController.cc
r9513 r9523 42 42 #include "BulletCollision/CollisionShapes/btCollisionShape.h" 43 43 44 44 45 namespace orxonox 45 46 { … … 57 58 ; std::vector<RaceCheckPoint*> checkpoints; 58 59 59 virtualCheckPointIndex =-2;60 for (ObjectList<SpaceRaceManager>::iterator it = ObjectList<SpaceRaceManager>::begin(); it != ObjectList<SpaceRaceManager>::end(); ++it)60 virtualCheckPointIndex = -2; 61 for (ObjectList<SpaceRaceManager>::iterator it = ObjectList<SpaceRaceManager>::begin(); it != ObjectList<SpaceRaceManager>::end(); ++it) 61 62 { 62 63 checkpoints = it->getAllCheckpoints(); 63 nextRaceCheckpoint_ =it->findCheckpoint(0);64 nextRaceCheckpoint_ = it->findCheckpoint(0); 64 65 } 65 66 66 67 OrxAssert(!checkpoints.empty(), "No Checkpoints in Level"); 67 checkpoints_ =checkpoints;68 checkpoints_ = checkpoints; 68 69 /*orxout()<<"es gibt: "<<checkpoints_.size()<<"checkpoints"<<endl; 69 70 for(std::vector<RaceCheckPoint*>::iterator it=checkpoints_.begin(); it!=checkpoints_.end(); it++) … … 86 87 }//ausgabe*/ 87 88 88 for ( std::vector<RaceCheckPoint*>::iterator it = checkpoints.begin(); it!=checkpoints.end(); ++it)89 for (std::vector<RaceCheckPoint*>::iterator it = checkpoints.begin(); it != checkpoints.end(); ++it) 89 90 { 90 91 std::set<int> nextCheckPoints = ((*it)->getNextCheckpoints()); … … 95 96 RaceCheckPoint* point2 = findCheckpoint((*numb)); 96 97 97 if(point2 != NULL)98 placeVirtualCheckpoints((*it), point2);98 //if(point2 != NULL) 99 //placeVirtualCheckpoints((*it), point2); 99 100 } 100 101 } … … 124 125 125 126 int i; 126 for (i =-2; findCheckpoint(i)!= NULL; i--)127 for (i = -2; findCheckpoint(i) != NULL; i--) 127 128 { 128 129 continue; … … 140 141 XMLPortParam(ArtificialController, "accuracy", setAccuracy, getAccuracy, xmlelement, mode).defaultValues(100.0f); 141 142 XMLPortObject(ArtificialController, WorldEntity, "waypoints", addWaypoint, getWaypoint, xmlelement, mode); 142 143 143 } 144 144 … … 149 149 std::vector<RaceCheckPoint*> SpaceRaceController::findStaticCheckpoints(std::vector<RaceCheckPoint*> allCheckpoints) 150 150 { 151 std::map<RaceCheckPoint*, int> * zaehler = new std::map<RaceCheckPoint*, int>(); // counts how many times the checkpoi t was reached (for simulation)151 std::map<RaceCheckPoint*, int> * zaehler = new std::map<RaceCheckPoint*, int>(); // counts how many times the checkpoint was reached (for simulation) 152 152 for (unsigned int i = 0; i < allCheckpoints.size(); i++) 153 153 { … … 158 158 std::vector<RaceCheckPoint*> returnVec; 159 159 returnVec.clear(); 160 for (std::map<RaceCheckPoint*, int>::iterator iter = zaehler->begin(); iter != zaehler->end(); iter++)160 for (std::map<RaceCheckPoint*, int>::iterator iter = zaehler->begin(); iter != zaehler->end(); iter++) 161 161 { 162 162 if (iter->second == maxWays) … … 188 188 for (std::set<int>::iterator it = currentCheckpoint->getVirtualNextCheckpoints().begin(); it!= currentCheckpoint->getVirtualNextCheckpoints().end(); ++it) 189 189 { 190 if(currentCheckpoint ==findCheckpoint(*it))190 if(currentCheckpoint == findCheckpoint(*it)) 191 191 { 192 192 //orxout() << currentCheckpoint->getCheckpointIndex()<<endl; 193 193 continue; 194 194 } 195 if(findCheckpoint(*it)==NULL){orxout()<<"Problematic Point: "<<(*it)<<endl;} 195 if(findCheckpoint(*it) == NULL) 196 {orxout()<<"Problematic Point: "<<(*it)<<endl;} 196 197 numberOfWays += rekSimulationCheckpointsReached(findCheckpoint(*it), zaehler); 197 198 } … … 219 220 RaceCheckPoint* SpaceRaceController::nextPointFind(RaceCheckPoint* raceCheckpoint) 220 221 { 221 int distances[] = 222 { -1, -1, -1}; 222 int distances[] = {-1, -1, -1}; 223 223 int temp_i = 0; 224 224 for (std::set<int>::iterator it =raceCheckpoint->getVirtualNextCheckpoints().begin(); it!= raceCheckpoint->getVirtualNextCheckpoints().end(); ++it) … … 266 266 { 267 267 int minimum = std::numeric_limits<int>::max(); 268 for (std::set<int>::iterator it = currentCheckPoint->getVirtualNextCheckpoints().begin(); it != currentCheckPoint->getVirtualNextCheckpoints().end(); ++it)268 for (std::set<int>::iterator it = currentCheckPoint->getVirtualNextCheckpoints().begin(); it != currentCheckPoint->getVirtualNextCheckpoints().end(); ++it) 269 269 { 270 270 int dist_currentCheckPoint_currentPosition = static_cast<int> ((currentPosition- currentCheckPoint->getPosition()).length()); 271 271 272 minimum = std::min(minimum, dist_currentCheckPoint_currentPosition + recCalculateDistance(findCheckpoint(*it), currentCheckPoint->getPosition()));272 minimum = std::min(minimum, dist_currentCheckPoint_currentPosition + recCalculateDistance(findCheckpoint(*it), currentCheckPoint->getPosition())); 273 273 // minimum of distanz from 'currentPosition' to the next static Checkpoint 274 274 } … … 306 306 } 307 307 308 RaceCheckPoint* SpaceRaceController::addVirtualCheckPoint( RaceCheckPoint* previousCheckpoint, int indexFollowingCheckPoint , Vector3 virtualCheckPointPosition )308 /*RaceCheckPoint* SpaceRaceController::addVirtualCheckPoint( RaceCheckPoint* previousCheckpoint, int indexFollowingCheckPoint , Vector3 virtualCheckPointPosition ) 309 309 { 310 310 orxout()<<"add VCP at"<<virtualCheckPointPosition.x<<", "<<virtualCheckPointPosition.y<<", "<<virtualCheckPointPosition.z<<endl; … … 343 343 temp=previousCheckpoint->getNextCheckpointsAsVector3(); 344 344 orxout()<<"id: "<< previousCheckpoint->getCheckpointIndex() <<": "<<temp.x<<", "<<temp.y<<", "<<temp.z<<"; "; 345 orxout()<<endl;*/ 345 orxout()<<endl;*//* 346 346 return newTempRaceCheckPoint; 347 } 347 }*/ 348 348 349 349 SpaceRaceController::~SpaceRaceController() … … 358 358 { 359 359 if (this->getControllableEntity() == NULL || this->getControllableEntity()->getPlayer() == NULL ) 360 { orxout()<<this->getControllableEntity()<< " in tick"<<endl; return;} 360 { 361 //orxout()<< this->getControllableEntity() << " in tick"<<endl; 362 return; 363 } 361 364 //FOR virtual Checkpoints 362 365 if(nextRaceCheckpoint_->getCheckpointIndex() < 0) … … 374 377 {//Checkpoint erreicht 375 378 376 currentRaceCheckpoint_ =nextRaceCheckpoint_;379 currentRaceCheckpoint_ = nextRaceCheckpoint_; 377 380 OrxAssert(nextRaceCheckpoint_, "next race checkpoint undefined"); 378 381 nextRaceCheckpoint_ = nextPointFind(nextRaceCheckpoint_); 379 lastPositionSpaceship =this->getControllableEntity()->getPosition();382 lastPositionSpaceship = this->getControllableEntity()->getPosition(); 380 383 //orxout()<< "CP "<< currentRaceCheckpoint_->getCheckpointIndex()<<" chanched to: "<< nextRaceCheckpoint_->getCheckpointIndex()<<endl; 381 384 } … … 383 386 { 384 387 nextRaceCheckpoint_ = adjustNextPoint(); 385 lastPositionSpaceship =this->getControllableEntity()->getPosition();388 lastPositionSpaceship = this->getControllableEntity()->getPosition(); 386 389 } 387 390 388 391 // Abmessung fuer MINDISTANCE gut; 389 392 390 else if((lastPositionSpaceship -this->getControllableEntity()->getPosition()).length()/dt< MINDISTANCE )391 { 392 this->moveToPosition(Vector3(rnd()*100, rnd()*100,rnd()*100));393 else if((lastPositionSpaceship - this->getControllableEntity()->getPosition()).length()/dt < MINDISTANCE ) 394 { 395 this->moveToPosition(Vector3(rnd()*100, rnd()*100, rnd()*100)); 393 396 this->spin(); 394 397 //orxout(user_status) << "Mindistance reached" << std::endl; … … 396 399 } 397 400 //orxout(user_status) << "dt= " << dt << "; distance= " << (lastPositionSpaceship-this->getControllableEntity()->getPosition()).length() <<std::endl; 398 lastPositionSpaceship =this->getControllableEntity()->getPosition();401 lastPositionSpaceship = this->getControllableEntity()->getPosition(); 399 402 this->moveToPosition(nextRaceCheckpoint_->getPosition()); 400 403 } … … 403 406 bool SpaceRaceController::vergleicheQuader(Vector3 pointToPoint, Vector3 groesse) 404 407 { 405 if(abs(pointToPoint.x)<groesse.x) 406 return true; 407 if(abs(pointToPoint.y)<groesse.y) 408 return true; 409 if(abs(pointToPoint.z)<groesse.z) 410 return true; 408 if(abs(pointToPoint.x) < groesse.x) 409 return true; 410 if(abs(pointToPoint.y) < groesse.y) 411 return true; 412 if(abs(pointToPoint.z) < groesse.z) 413 return true; 414 return false; 411 415 412 416 } … … 415 419 { 416 420 417 Vector3 cP1ToCP2 =(racepoint2->getPosition()-racepoint1->getPosition()) / (racepoint2->getPosition()-racepoint1->getPosition()).length(); //unit Vector418 Vector3 centerCP1 =racepoint1->getPosition();421 Vector3 cP1ToCP2 = (racepoint2->getPosition() - racepoint1->getPosition()) / (racepoint2->getPosition() - racepoint1->getPosition()).length(); //unit Vector 422 Vector3 centerCP1 = racepoint1->getPosition(); 419 423 btVector3 positionObject; 420 424 btScalar radiusObject; 421 425 422 for (std::vector<StaticEntity*>::iterator it = allObjects.begin(); it !=allObjects.end(); ++it)423 { 424 for (int everyShape=0; (*it)->getAttachedCollisionShape(everyShape) !=0; everyShape++)426 for (std::vector<StaticEntity*>::iterator it = allObjects.begin(); it != allObjects.end(); ++it) 427 { 428 for (int everyShape=0; (*it)->getAttachedCollisionShape(everyShape) != 0; everyShape++) 425 429 { 426 430 btCollisionShape* currentShape = (*it)->getAttachedCollisionShape(everyShape)->getCollisionShape(); … … 441 445 } 442 446 443 void SpaceRaceController::computeVirtualCheckpoint(RaceCheckPoint* racepoint1, RaceCheckPoint* racepoint2,std::vector<StaticEntity*> allObjects)447 /*void SpaceRaceController::computeVirtualCheckpoint(RaceCheckPoint* racepoint1, RaceCheckPoint* racepoint2, std::vector<StaticEntity*> allObjects) 444 448 { 445 449 Vector3 cP1ToCP2=(racepoint2->getPosition()-racepoint1->getPosition()) / (racepoint2->getPosition()-racepoint1->getPosition()).length(); //unit Vector … … 448 452 btScalar radiusObject; 449 453 450 for (std::vector<StaticEntity*>::iterator it = allObjects.begin(); it !=allObjects.end(); ++it)451 { 452 for (int everyShape=0; (*it)->getAttachedCollisionShape(everyShape) !=0; everyShape++)454 for (std::vector<StaticEntity*>::iterator it = allObjects.begin(); it != allObjects.end(); ++it) 455 { 456 for (int everyShape=0; (*it)->getAttachedCollisionShape(everyShape) != 0; everyShape++) 453 457 { 454 458 btCollisionShape* currentShape = (*it)->getAttachedCollisionShape(everyShape)->getCollisionShape(); … … 458 462 currentShape->getBoundingSphere(positionObject,radiusObject); 459 463 Vector3 positionObjectNonBT(positionObject.x(), positionObject.y(), positionObject.z()); 460 if((powf((cP1ToCP2.dotProduct(centerCP1-positionObjectNonBT)),2)-(centerCP1-positionObjectNonBT).dotProduct(centerCP1-positionObjectNonBT)+powf(radiusObject, 2))>0) 461 { 462 Vector3 zufall; 463 Vector3 objectmiddle=positionObjectNonBT; 464 do 465 { 464 Vector3 norm_r_CP = cP1ToCP2.crossProduct(centerCP1-positionObjectNonBT); 465 466 if(norm_r_CP.length() == 0){ 467 Vector3 zufall; 468 do{ 466 469 zufall=Vector3(rnd(),rnd(),rnd());//random 467 }while((zufall.crossProduct(objectmiddle-racepoint1->getPosition())).length()==0); 468 469 Vector3 normalvec=zufall.crossProduct(objectmiddle-racepoint1->getPosition()); 470 // a'/b'=a/b => a' =b'*a/b 471 float laengeNormalvec=(objectmiddle-racepoint1->getPosition()).length()/sqrt((objectmiddle-racepoint1->getPosition()).squaredLength()-radiusObject*radiusObject)*radiusObject; 472 RaceCheckPoint* newVirtualCheckpoint=addVirtualCheckPoint(racepoint1,racepoint2->getCheckpointIndex(), objectmiddle+normalvec/normalvec.length()*laengeNormalvec); 473 //placeVirtualCheckpoints(newVirtualCheckpoint, racepoint2); 474 return; 475 } 476 477 } 478 } 479 480 } 481 482 void SpaceRaceController::placeVirtualCheckpoints(RaceCheckPoint* racepoint1, RaceCheckPoint* racepoint2) 470 }while((zufall.crossProduct(cP1ToCP2)).length() == 0); 471 norm_r_CP=zufall.crossProduct(cP1ToCP2); 472 } 473 Vector3 VecToVCP = norm_r_CP.crossProduct(cP1ToCP2); 474 float distanzToCP1 = sqrt(powf(radiusObject,4)/(powf((centerCP1-positionObjectNonBT).length(), 2)-powf(radiusObject,2))+powf(radiusObject,2)); 475 float distanzToCP2 = sqrt(powf(radiusObject,4)/(powf((racepoint2->getPosition()-positionObjectNonBT).length(), 2)-powf(radiusObject,2))+powf(radiusObject,2)); 476 float distanz = std::max(distanzToCP1,distanzToCP2); 477 //float distanz = 0.0f; //TEMPORARY 478 Vector3 newCheckpointPositionPos = positionObjectNonBT+(distanz*VecToVCP)/VecToVCP.length(); 479 Vector3 newCheckpointPositionNeg = positionObjectNonBT-(distanz*VecToVCP)/VecToVCP.length(); 480 if((newCheckpointPositionPos - centerCP1).length() + (newCheckpointPositionPos - (centerCP1+cP1ToCP2)).length() < (newCheckpointPositionNeg - centerCP1).length() + (newCheckpointPositionNeg - (centerCP1+cP1ToCP2)).length() ) 481 { 482 RaceCheckPoint* newVirtualCheckpoint = addVirtualCheckPoint(racepoint1,racepoint2->getCheckpointIndex(), newCheckpointPositionPos); 483 } 484 else 485 { 486 RaceCheckPoint* newVirtualCheckpoint = addVirtualCheckPoint(racepoint1,racepoint2->getCheckpointIndex(), newCheckpointPositionNeg); 487 } 488 return; 489 } 490 } 491 492 }*/ 493 494 /*void SpaceRaceController::placeVirtualCheckpoints(RaceCheckPoint* racepoint1, RaceCheckPoint* racepoint2) 483 495 { 484 496 Vector3 point1 = racepoint1->getPosition(); … … 489 501 { 490 502 491 if (dynamic_cast<RaceCheckPoint*>(*it)!=NULL) 492 { continue;} // does not work jet 503 if (dynamic_cast<RaceCheckPoint*>(*it) != NULL) 504 { 505 continue; 506 } // does not work jet 493 507 494 508 problematicObjects.insert(problematicObjects.end(), *it); … … 589 603 // } 590 604 591 } 605 }*/ 592 606 }
Note: See TracChangeset
for help on using the changeset viewer.