Changeset 9523 for code/branches/presentationHS12/src
- Timestamp:
- Dec 16, 2012, 6:07:37 PM (12 years ago)
- Location:
- code/branches/presentationHS12
- Files:
-
- 8 edited
- 4 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/CMakeLists.txt
r9016 r9523 5 5 OldSpaceRace.cc 6 6 OldRaceCheckPoint.cc 7 SpaceRaceBot.cc 8 SpaceRaceController.cc 7 9 ) 8 10 -
code/branches/presentationHS12/src/modules/gametypes/GametypesPrereqs.h
r9016 r9523 67 67 class SpaceRace; 68 68 class OldSpaceRace; 69 class SpaceRaceManager; 70 class SpaceRaceBot; 71 class SpaceRaceController; 69 72 } 70 73 -
code/branches/presentationHS12/src/modules/gametypes/RaceCheckPoint.cc
r9348 r9523 43 43 CreateFactory(RaceCheckPoint); 44 44 45 RaceCheckPoint::RaceCheckPoint(BaseObject* creator): DistanceMultiTrigger(creator), RadarViewable(creator, static_cast<WorldEntity*>(this)) 45 RaceCheckPoint::RaceCheckPoint(BaseObject* creator) : DistanceMultiTrigger(creator), 46 RadarViewable(creator, static_cast<WorldEntity*> (this)) 46 47 { 47 48 RegisterObject(RaceCheckPoint); 48 49 49 this->setDistance(100); 50 50 this->setBeaconMode("off"); … … 60 60 this->bIsLast_ = false; 61 61 this->timeLimit_ = 0; 62 this->player_ = NULL; 63 } 64 65 66 RaceCheckPoint::~RaceCheckPoint() 67 { 68 } 62 //this->players_ = vector<PlayerInfo*>(); 63 64 myPosition_= this->getPosition(); //eingefuegt 65 //orxout(user_status) << "test" << std::endl; 66 } 67 68 RaceCheckPoint::~RaceCheckPoint() 69 { 70 71 } 69 72 70 73 void RaceCheckPoint::XMLPort(Element& xmlelement, XMLPort::Mode mode) … … 86 89 ControllableEntity* entity = orxonox_cast<ControllableEntity*>(originator); 87 90 if (entity) 88 this->player _ = entity->getPlayer();91 this->players_.push_back(entity->getPlayer()); 89 92 } 90 93 } … … 95 98 if (this->timeLimit_ != 0) 96 99 { 97 std::string message = 98 100 std::string message = "You have " + multi_cast<std::string>(this->timeLimit_) 101 + " seconds to reach the check point " + multi_cast<std::string>(this->checkpointIndex_ + 1); 99 102 this->getGametype()->getGametypeInfo()->sendAnnounceMessage(message); 100 103 ChatManager::message(message); … … 102 105 } 103 106 107 //Must not be called before setNextCheckpointsAsVector3 at least once has been called 108 void RaceCheckPoint::setNextVirtualCheckpointsAsVector3(const Vector3& checkpoints){ 109 /*std::set<int> lastcheckpoints=this->nextCheckpoints_; 110 nextCheckpoints_.clear(); 111 std::set<int>::iterator it = lastcheckpoints.begin(); 112 if(checkpoints.x<-1){ 113 virtualToRealCheckPoints_.insert(std::pair<int,int>(checkpoints.x,(*it))); 114 it++; 115 } 116 if(checkpoints.x!=-1) 117 this->nextCheckpoints_.insert(static_cast<int>(checkpoints.x + 0.5)); // the red number has the type double and for the cast (to int) is added 0.5 so that the cast works correctly 118 119 if(checkpoints.y<-1){ 120 virtualToRealCheckPoints_.insert(std::pair<int,int>(checkpoints.y,(*it))); 121 it++; 122 } 123 if(checkpoints.y!=-1) 124 this->nextCheckpoints_.insert(static_cast<int>(checkpoints.y + 0.5)); 125 126 if(checkpoints.z<-1){ 127 virtualToRealCheckPoints_.insert(std::pair<int,int>(checkpoints.z,(*it))); 128 it++; 129 } 130 if(checkpoints.z!=-1) 131 this->nextCheckpoints_.insert(static_cast<int>(checkpoints.z + 0.5));*/ 132 nextCheckpointsVirtual_.clear(); 133 if(checkpoints.x!=-1) 134 nextCheckpointsVirtual_.insert(checkpoints.x); 135 if(checkpoints.y!=-1) 136 nextCheckpointsVirtual_.insert(checkpoints.y); 137 if(checkpoints.z!=-1) 138 nextCheckpointsVirtual_.insert(checkpoints.z); 139 } 140 104 141 void RaceCheckPoint::setNextCheckpointsAsVector3(const Vector3& checkpoints) 105 142 { … … 107 144 108 145 if (checkpoints.x > -1) 109 this->nextCheckpoints_.insert(static_cast<int>(checkpoints.x + 0.5));146 this->nextCheckpoints_.insert(static_cast<int>(checkpoints.x + 0.5)); // the red number has the type double and for the cast (to int) is added 0.5 so that the cast works correctly 110 147 if (checkpoints.y > -1) 111 148 this->nextCheckpoints_.insert(static_cast<int>(checkpoints.y + 0.5)); 112 149 if (checkpoints.z > -1) 113 this->nextCheckpoints_.insert(static_cast<int>(checkpoints.z + 0.5)); 114 } 115 116 Vector3 RaceCheckPoint::getNextCheckpointsAsVector3() const 150 this->nextCheckpoints_.insert(static_cast<int>(checkpoints.z + 0.5)); 151 152 this->nextCheckpointsVirtual_=nextCheckpoints_; 153 } 154 155 PlayerInfo* RaceCheckPoint::getPlayer(unsigned int clientID) const 156 { 157 if (players_.size() > 0) 158 { 159 for (int i = 0; i < players_.size(); i++) 160 { 161 if (this->players_[i]->getClientID() == clientID) 162 { 163 return players_[i]; 164 } 165 } 166 } 167 return NULL; 168 } 169 170 bool RaceCheckPoint::playerWasHere(PlayerInfo* player) const 171 { 172 if (players_.size() > 0) 173 { 174 for (int i = 0; i < players_.size(); i++) 175 { 176 if (this->players_[i] == player) 177 { 178 return true; 179 } 180 } 181 } 182 return false; 183 } 184 185 Vector3 RaceCheckPoint::getNextCheckpointsAsVector3() 186 { 187 Vector3 checkpoints(-1,-1,-1); int count=0; 188 for (std::set<int>::iterator it= nextCheckpoints_.begin();it!=nextCheckpoints_.end(); it++ ){ 189 switch (count) 190 { 191 case 0: checkpoints.x = static_cast<Ogre::Real>(*it); break; 192 case 1: checkpoints.y = static_cast<Ogre::Real>(*it); break; 193 case 2: checkpoints.z = static_cast<Ogre::Real>(*it); break; 194 } 195 ++count; 196 } 197 return checkpoints; 198 //= getVirtualNextCheckpointsAsVector3(); 199 int j[3]; 200 j[0]=changeVirtualToRealCheckPoint(checkpoints.x); 201 j[1]=changeVirtualToRealCheckPoint(checkpoints.y); 202 j[2]=changeVirtualToRealCheckPoint(checkpoints.z); 203 204 205 return Vector3(j[0],j[1],j[2]); 206 207 208 } 209 210 int RaceCheckPoint::changeVirtualToRealCheckPoint(int checkpointID) { 211 int temp=checkpointID; 212 while(temp<-1){ 213 temp = this->virtualToRealCheckPoints_[temp]; 214 } 215 return temp; 216 } 217 218 219 Vector3 RaceCheckPoint::getVirtualNextCheckpointsAsVector3() const 117 220 { 118 221 Vector3 checkpoints = Vector3(-1, -1, -1); 119 222 120 223 size_t count = 0; 121 for (std::set<int>::iterator it = this->nextCheckpoints _.begin(); it != this->nextCheckpoints_.end(); ++it)224 for (std::set<int>::iterator it = this->nextCheckpointsVirtual_.begin(); it != this->nextCheckpointsVirtual_.end(); ++it) 122 225 { 123 226 switch (count) -
code/branches/presentationHS12/src/modules/gametypes/RaceCheckPoint.h
r9263 r9523 37 37 { 38 38 /** 39 @brief 40 The RaceCheckPoint class enables the creation of a check point to use in a SpaceRace level. 41 Don't forget to control the indexes of your check points and to set one last check point 42 */ 43 class _GametypesExport RaceCheckPoint : public DistanceMultiTrigger, public RadarViewable 39 @brief 40 The RaceCheckPoint class enables the creation of a check point to use in a SpaceRace level. 41 Don't forget to control the indexes of your check points and to set one last check point 42 */ 43 class _GametypesExport RaceCheckPoint: public DistanceMultiTrigger, 44 public RadarViewable 44 45 { 45 46 public: … … 50 51 51 52 inline void setCheckpointIndex(int checkpointIndex) 52 { this->checkpointIndex_ = checkpointIndex; } 53 { 54 this->checkpointIndex_ = checkpointIndex; 55 } 53 56 inline int getCheckpointIndex() const 54 { return this->checkpointIndex_; } 57 { 58 return this->checkpointIndex_; 59 } 55 60 56 61 void setNextCheckpointsAsVector3(const Vector3& checkpoints); 57 Vector3 getNextCheckpointsAsVector3() const; 58 const std::set<int>& getNextCheckpoints() const 59 { return this->nextCheckpoints_; } 62 Vector3 getNextCheckpointsAsVector3(); 63 Vector3 getVirtualNextCheckpointsAsVector3() const; 64 void setNextVirtualCheckpointsAsVector3(const Vector3& checkpoints); 65 int changeVirtualToRealCheckPoint(int); 60 66 67 const std::set<int>& getVirtualNextCheckpoints() const 68 { 69 return this->nextCheckpointsVirtual_; 70 } 71 72 const std::set<int>& getNextCheckpoints() 73 { 74 return nextCheckpoints_; 75 std::set<int> temp; 76 std::set<int> temp2=getVirtualNextCheckpoints(); 77 for (std::set<int>::iterator it = temp2.begin(); it!=temp2.end(); ++it){ 78 temp.insert(changeVirtualToRealCheckPoint((*it))); 79 } 80 return temp; 81 } 61 82 inline void setLast(bool isLast) 62 { this->bIsLast_ = isLast; } 83 { 84 this->bIsLast_ = isLast; 85 } 63 86 inline bool isLast() const 64 { return this->bIsLast_; } 87 { 88 return this->bIsLast_; 89 } 65 90 66 91 virtual void setTimelimit(float timeLimit); 67 92 inline float getTimeLimit() const 68 { return this->timeLimit_; } 93 { 94 return this->timeLimit_; 95 } 69 96 70 inline PlayerInfo* getPlayer() const 71 { return this->player_; } 97 PlayerInfo* getPlayer(unsigned int clientID) const; 98 99 bool playerWasHere(PlayerInfo* ) const; 100 72 101 inline void resetPlayer() 73 { this->player_ = NULL; } 102 { 103 this->players_.clear(); 104 } 74 105 75 106 protected: 107 76 108 virtual void fire(bool bIsTriggered, BaseObject* originator); 77 109 78 110 inline const WorldEntity* getWorldEntity() const 79 { return this; } 111 { 112 return this; 113 } 80 114 81 115 private: 82 int checkpointIndex_; ///< The index of this check point. The race starts with the check point with the index 0 116 117 int checkpointIndex_; ///< The index of this check point. The race starts with the check point with the index 0 83 118 std::set<int> nextCheckpoints_; ///< the indexes of the next check points 84 bool bIsLast_; ///< True if this check point is the last of the level. There can be only one last check point for each level and there must be a last check point in the level. 85 float timeLimit_; ///< The time limit (from the start of the level) to reach this check point. If the check point is reached after this time, the game ends and the player looses. 86 PlayerInfo* player_; ///< The player that reached the checkpoint 119 bool bIsLast_; ///< True if this check point is the last of the level. There can be only one last check point for each level and there must be a last check point in the level. 120 float timeLimit_; ///< The time limit (from the start of the level) to reach this check point. If the check point is reached after this time, the game ends and the player looses. 121 std::vector<PlayerInfo*> players_; ///< The player that reached the checkpoint 122 Vector3 myPosition_; 123 std::set<int> nextCheckpointsVirtual_; 124 std::map<int,int> virtualToRealCheckPoints_; // if virtualChepoint was inserted the original can be reconstructed 87 125 }; 88 126 } -
code/branches/presentationHS12/src/modules/gametypes/SpaceRace.cc
r9348 r9523 35 35 #include "util/Convert.h" 36 36 #include "util/Math.h" 37 37 #include "SpaceRaceBot.h" 38 38 #include "items/Engine.h" 39 39 … … 46 46 RegisterObject(SpaceRace); 47 47 48 this->botclass_ = Class(SpaceRaceBot);//ClassByString("") 48 49 this->cantMove_ = false; 49 50 this->bTimeIsUp_ = false; -
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 } -
code/branches/presentationHS12/src/modules/gametypes/SpaceRaceController.h
r9513 r9523 32 32 #include "gametypes/Gametype.h" 33 33 #include "gametypes/RaceCheckPoint.h" 34 #include "util/Math.h" 34 35 35 36 namespace orxonox … … 57 58 // same as SpaceRaceManager, but needed to add virtuell Checkpoints ( Checkpoints which don't exist but needed to avoid collisions with big Objects) 58 59 RaceCheckPoint* findCheckpoint(int index) const; 59 RaceCheckPoint 60 * addVirtualCheckPoint(RaceCheckPoint*, int , Vector3); 61 void placeVirtualCheckpoints(RaceCheckPoint*, RaceCheckPoint*); 60 //RaceCheckPoint * addVirtualCheckPoint(RaceCheckPoint*, int , Vector3); 61 //void placeVirtualCheckpoints(RaceCheckPoint*, RaceCheckPoint*); 62 62 bool vergleicheQuader(Vector3, Vector3); 63 63 bool directLinePossible(RaceCheckPoint*, RaceCheckPoint*, std::vector<StaticEntity*>); 64 void computeVirtualCheckpoint(RaceCheckPoint*, RaceCheckPoint*, std::vector<StaticEntity*>);64 //void computeVirtualCheckpoint(RaceCheckPoint*, RaceCheckPoint*, std::vector<StaticEntity*>); 65 65 66 66 public: -
code/branches/presentationHS12/src/modules/gametypes/SpaceRaceManager.cc
r9348 r9523 38 38 #include "util/Math.h" 39 39 40 41 42 40 namespace orxonox 43 41 { 44 42 CreateFactory(SpaceRaceManager); 45 43 46 SpaceRaceManager::SpaceRaceManager(BaseObject* creator) : BaseObject(creator) 44 SpaceRaceManager::SpaceRaceManager(BaseObject* creator) : 45 BaseObject(creator) 47 46 { 48 47 RegisterObject(SpaceRaceManager); 49 48 this->race_ = orxonox_cast<SpaceRace*>(this->getGametype().get()); 49 assert(race_); 50 //amountOfPlayers=(race_->getPlayers()).size(); 50 51 this->firstcheckpointvisible_ = false; 51 52 } … … 54 55 { 55 56 for (size_t i = 0; i < this->checkpoints_.size(); ++i) 56 57 this->checkpoints_[i]->destroy(); 57 58 } 58 59 … … 61 62 SUPER(SpaceRaceManager, XMLPort, xmlelement, mode); 62 63 63 XMLPortObject(SpaceRaceManager, RaceCheckPoint, "checkpoints", addCheckpoint, getCheckpoint, 64 XMLPortObject(SpaceRaceManager, RaceCheckPoint, "checkpoints", addCheckpoint, getCheckpoint, xmlelement, mode); 64 65 } 65 66 … … 67 68 { 68 69 SUPER(SpaceRaceManager,tick,dt); 70 71 this->players_ = this->race_->getPlayers(); 69 72 70 73 if (this->checkpoints_[0] != NULL && !this->firstcheckpointvisible_) … … 74 77 } 75 78 76 for ( size_t i = 0; i < this->checkpoints_.size(); ++i)79 for ( std::map< PlayerInfo*, Player>::iterator it = players_.begin(); it != players_.end(); ++it) 77 80 { 78 if (this->checkpoints_[i]->getPlayer() != NULL) 79 this->checkpointReached(this->checkpoints_[i], this->checkpoints_[i]->getPlayer()); 81 82 for (size_t i = 0; i < this->checkpoints_.size(); ++i) 83 { 84 if (this->checkpoints_[i]->playerWasHere(it->first)){ 85 this->checkpointReached(this->checkpoints_[i], it->first /*this->checkpoints_[i]->getPlayer()*/); 86 } 87 } 80 88 } 89 81 90 } 82 91 … … 89 98 { 90 99 if (index < this->checkpoints_.size()) 91 100 return this->checkpoints_[index]; 92 101 else 93 return 0; 102 return 0; 103 } 104 105 std::vector<RaceCheckPoint*> SpaceRaceManager::getAllCheckpoints() 106 { 107 return checkpoints_; 94 108 } 95 109 96 110 /** 97 98 */111 @brief Returns the checkpoint with the given checkpoint-index (@see RaceCheckPoint::getCheckpointIndex). 112 */ 99 113 RaceCheckPoint* SpaceRaceManager::findCheckpoint(int index) const 100 114 { 101 115 for (size_t i = 0; i < this->checkpoints_.size(); ++i) 102 103 116 if (this->checkpoints_[i]->getCheckpointIndex() == index) 117 return this->checkpoints_[i]; 104 118 return 0; 105 119 } … … 107 121 bool SpaceRaceManager::reachedValidCheckpoint(RaceCheckPoint* oldCheckpoint, RaceCheckPoint* newCheckpoint, PlayerInfo* player) const 108 122 { 109 if (oldCheckpoint )123 if (oldCheckpoint != NULL) 110 124 { 111 125 // the player already visited an old checkpoint; see which checkpoints are possible now 112 126 const std::set<int>& possibleCheckpoints = oldCheckpoint->getNextCheckpoints(); 113 127 for (std::set<int>::const_iterator it = possibleCheckpoints.begin(); it != possibleCheckpoints.end(); ++it) 114 115 128 if (this->findCheckpoint(*it) == newCheckpoint) 129 return true; 116 130 return false; 117 131 } … … 128 142 assert(gametype); 129 143 if (!gametype) 130 144 return; 131 145 132 RaceCheckPoint* oldCheckpoint = gametype->getCheckpointReached(player); 146 RaceCheckPoint* oldCheckpoint = gametype->getCheckpointReached(player); // returns the last from player reached checkpoint 133 147 134 148 if (this->reachedValidCheckpoint(oldCheckpoint, newCheckpoint, player)) … … 152 166 // adjust the radarvisibility 153 167 gametype->newCheckpointReached(newCheckpoint, player); 154 this->updateRadarVisibility(oldCheckpoint, newCheckpoint); 168 if(player->isHumanPlayer()) 169 this->updateRadarVisibility(oldCheckpoint, newCheckpoint); 155 170 } 156 171 } 157 172 158 newCheckpoint->resetPlayer();173 // newCheckpoint->resetPlayer(); loescht playerpointer TODO: check if problems occur 159 174 } 160 175 … … 165 180 const std::set<int>& oldVisible = oldCheckpoint->getNextCheckpoints(); 166 181 for (std::set<int>::const_iterator it = oldVisible.begin(); it != oldVisible.end(); ++it) 167 182 this->findCheckpoint(*it)->setRadarVisibility(false); 168 183 } 169 184 … … 174 189 const std::set<int>& newVisible = newCheckpoint->getNextCheckpoints(); 175 190 for (std::set<int>::const_iterator it = newVisible.begin(); it != newVisible.end(); ++it) 176 191 this->findCheckpoint(*it)->setRadarVisibility(true); 177 192 } 178 193 } -
code/branches/presentationHS12/src/modules/gametypes/SpaceRaceManager.h
r9348 r9523 67 67 void checkpointReached(RaceCheckPoint* newCheckpoint, PlayerInfo* player); 68 68 69 std::vector<RaceCheckPoint*> getAllCheckpoints(); 70 69 71 void tick(float dt); 70 72 … … 76 78 std::vector<RaceCheckPoint*> checkpoints_; 77 79 bool firstcheckpointvisible_; ///< true if the first check point is visible. 80 SpaceRace* race_; // needed to get the players 81 //int amountOfPlayers; 82 std::map<PlayerInfo*, Player> players_; 78 83 }; 79 84 }
Note: See TracChangeset
for help on using the changeset viewer.