Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Dec 16, 2012, 6:07:37 PM (11 years ago)
Author:
jo
Message:

Merging the Racingbot branch into the presentationHS12 branch.

Location:
code/branches/presentationHS12
Files:
1 edited
1 copied

Legend:

Unmodified
Added
Removed
  • code/branches/presentationHS12

  • code/branches/presentationHS12/src/modules/gametypes/SpaceRaceController.cc

    r9513 r9523  
    4242#include "BulletCollision/CollisionShapes/btCollisionShape.h"
    4343
     44
    4445namespace orxonox
    4546{
     
    5758;        std::vector<RaceCheckPoint*> checkpoints;
    5859
    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)
    6162        {
    6263            checkpoints = it->getAllCheckpoints();
    63             nextRaceCheckpoint_=it->findCheckpoint(0);
     64            nextRaceCheckpoint_ = it->findCheckpoint(0);
    6465        }
    6566
    6667        OrxAssert(!checkpoints.empty(), "No Checkpoints in Level");
    67         checkpoints_=checkpoints;
     68        checkpoints_ = checkpoints;
    6869        /*orxout()<<"es gibt: "<<checkpoints_.size()<<"checkpoints"<<endl;
    6970        for(std::vector<RaceCheckPoint*>::iterator it=checkpoints_.begin(); it!=checkpoints_.end(); it++)
     
    8687        }//ausgabe*/
    8788
    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)
    8990        {
    9091            std::set<int> nextCheckPoints = ((*it)->getNextCheckpoints());
     
    9596                    RaceCheckPoint* point2 = findCheckpoint((*numb));
    9697
    97                     if(point2 != NULL)
    98                     placeVirtualCheckpoints((*it), point2);
     98                    //if(point2 != NULL)
     99                    //placeVirtualCheckpoints((*it), point2);
    99100                }
    100101            }
     
    124125
    125126        int i;
    126         for (i=-2; findCheckpoint(i)!= NULL; i--)
     127        for (i = -2; findCheckpoint(i) != NULL; i--)
    127128        {
    128129            continue;
     
    140141        XMLPortParam(ArtificialController, "accuracy", setAccuracy, getAccuracy, xmlelement, mode).defaultValues(100.0f);
    141142        XMLPortObject(ArtificialController, WorldEntity, "waypoints", addWaypoint, getWaypoint, xmlelement, mode);
    142 
    143143    }
    144144
     
    149149    std::vector<RaceCheckPoint*> SpaceRaceController::findStaticCheckpoints(std::vector<RaceCheckPoint*> allCheckpoints)
    150150    {
    151         std::map<RaceCheckPoint*, int> * zaehler = new std::map<RaceCheckPoint*, int>(); // counts how many times the checkpoit 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)
    152152        for (unsigned int i = 0; i < allCheckpoints.size(); i++)
    153153        {
     
    158158        std::vector<RaceCheckPoint*> returnVec;
    159159        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++)
    161161        {
    162162            if (iter->second == maxWays)
     
    188188            for (std::set<int>::iterator it = currentCheckpoint->getVirtualNextCheckpoints().begin(); it!= currentCheckpoint->getVirtualNextCheckpoints().end(); ++it)
    189189            {
    190                 if(currentCheckpoint==findCheckpoint(*it))
     190                if(currentCheckpoint == findCheckpoint(*it))
    191191                {
    192192                    //orxout() << currentCheckpoint->getCheckpointIndex()<<endl;
    193193                    continue;
    194194                }
    195                 if(findCheckpoint(*it)==NULL){orxout()<<"Problematic Point: "<<(*it)<<endl;}
     195                if(findCheckpoint(*it) == NULL)
     196                    {orxout()<<"Problematic Point: "<<(*it)<<endl;}
    196197                numberOfWays += rekSimulationCheckpointsReached(findCheckpoint(*it), zaehler);
    197198            }
     
    219220    RaceCheckPoint* SpaceRaceController::nextPointFind(RaceCheckPoint* raceCheckpoint)
    220221    {
    221         int distances[] =
    222         {   -1, -1, -1};
     222        int distances[] = {-1, -1, -1};
    223223        int temp_i = 0;
    224224        for (std::set<int>::iterator it =raceCheckpoint->getVirtualNextCheckpoints().begin(); it!= raceCheckpoint->getVirtualNextCheckpoints().end(); ++it)
     
    266266        {
    267267            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)
    269269            {
    270270                int dist_currentCheckPoint_currentPosition = static_cast<int> ((currentPosition- currentCheckPoint->getPosition()).length());
    271271
    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()));
    273273                // minimum of distanz from 'currentPosition' to the next static Checkpoint
    274274            }
     
    306306    }
    307307
    308     RaceCheckPoint* SpaceRaceController::addVirtualCheckPoint( RaceCheckPoint* previousCheckpoint, int indexFollowingCheckPoint , Vector3 virtualCheckPointPosition )
     308    /*RaceCheckPoint* SpaceRaceController::addVirtualCheckPoint( RaceCheckPoint* previousCheckpoint, int indexFollowingCheckPoint , Vector3 virtualCheckPointPosition )
    309309    {
    310310        orxout()<<"add VCP at"<<virtualCheckPointPosition.x<<", "<<virtualCheckPointPosition.y<<", "<<virtualCheckPointPosition.z<<endl;
     
    343343         temp=previousCheckpoint->getNextCheckpointsAsVector3();
    344344         orxout()<<"id: "<< previousCheckpoint->getCheckpointIndex() <<":       "<<temp.x<<", "<<temp.y<<", "<<temp.z<<";       ";
    345          orxout()<<endl;*/
     345         orxout()<<endl;*//*
    346346        return newTempRaceCheckPoint;
    347     }
     347    }*/
    348348
    349349    SpaceRaceController::~SpaceRaceController()
     
    358358    {
    359359        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        }
    361364        //FOR virtual Checkpoints
    362365        if(nextRaceCheckpoint_->getCheckpointIndex() < 0)
     
    374377        {//Checkpoint erreicht
    375378
    376             currentRaceCheckpoint_=nextRaceCheckpoint_;
     379            currentRaceCheckpoint_ = nextRaceCheckpoint_;
    377380            OrxAssert(nextRaceCheckpoint_, "next race checkpoint undefined");
    378381            nextRaceCheckpoint_ = nextPointFind(nextRaceCheckpoint_);
    379             lastPositionSpaceship=this->getControllableEntity()->getPosition();
     382            lastPositionSpaceship = this->getControllableEntity()->getPosition();
    380383            //orxout()<< "CP "<< currentRaceCheckpoint_->getCheckpointIndex()<<" chanched to: "<< nextRaceCheckpoint_->getCheckpointIndex()<<endl;
    381384        }
     
    383386        {
    384387            nextRaceCheckpoint_ = adjustNextPoint();
    385             lastPositionSpaceship=this->getControllableEntity()->getPosition();
     388            lastPositionSpaceship = this->getControllableEntity()->getPosition();
    386389        }
    387390
    388391        // Abmessung fuer MINDISTANCE gut;
    389392
    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));
    393396            this->spin();
    394397            //orxout(user_status) << "Mindistance reached" << std::endl;
     
    396399        }
    397400        //orxout(user_status) << "dt= " << dt << ";  distance= " << (lastPositionSpaceship-this->getControllableEntity()->getPosition()).length() <<std::endl;
    398         lastPositionSpaceship=this->getControllableEntity()->getPosition();
     401        lastPositionSpaceship = this->getControllableEntity()->getPosition();
    399402        this->moveToPosition(nextRaceCheckpoint_->getPosition());
    400403    }
     
    403406    bool SpaceRaceController::vergleicheQuader(Vector3 pointToPoint, Vector3 groesse)
    404407    {
    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;
    411415
    412416    }
     
    415419    {
    416420
    417         Vector3 cP1ToCP2=(racepoint2->getPosition()-racepoint1->getPosition()) / (racepoint2->getPosition()-racepoint1->getPosition()).length(); //unit Vector
    418         Vector3 centerCP1=racepoint1->getPosition();
     421        Vector3 cP1ToCP2 = (racepoint2->getPosition() - racepoint1->getPosition()) / (racepoint2->getPosition() - racepoint1->getPosition()).length(); //unit Vector
     422        Vector3 centerCP1 = racepoint1->getPosition();
    419423        btVector3 positionObject;
    420424        btScalar radiusObject;
    421425
    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++)
    425429            {
    426430                btCollisionShape* currentShape = (*it)->getAttachedCollisionShape(everyShape)->getCollisionShape();
     
    441445    }
    442446
    443     void SpaceRaceController::computeVirtualCheckpoint(RaceCheckPoint* racepoint1, RaceCheckPoint* racepoint2,std::vector<StaticEntity*> allObjects)
     447    /*void SpaceRaceController::computeVirtualCheckpoint(RaceCheckPoint* racepoint1, RaceCheckPoint* racepoint2, std::vector<StaticEntity*> allObjects)
    444448    {
    445449        Vector3 cP1ToCP2=(racepoint2->getPosition()-racepoint1->getPosition()) / (racepoint2->getPosition()-racepoint1->getPosition()).length(); //unit Vector
     
    448452        btScalar radiusObject;
    449453
    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++)
    453457            {
    454458                btCollisionShape* currentShape = (*it)->getAttachedCollisionShape(everyShape)->getCollisionShape();
     
    458462                currentShape->getBoundingSphere(positionObject,radiusObject);
    459463                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{
    466469                        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)
    483495    {
    484496        Vector3 point1 = racepoint1->getPosition();
     
    489501        {
    490502
    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
    493507
    494508            problematicObjects.insert(problematicObjects.end(), *it);
     
    589603        //        }
    590604
    591     }
     605    }*/
    592606}
Note: See TracChangeset for help on using the changeset viewer.