Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Oct 10, 2018, 3:36:53 PM (6 years ago)
Author:
merholzl
Message:

added space race improvements

Location:
code/branches/mergeFS18
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • code/branches/mergeFS18

  • code/branches/mergeFS18/src/modules/gametypes/SpaceRace.cc

    r11721 r12029  
    6969#include "SpaceRaceBot.h"
    7070#include "items/Engine.h"
    71 #include <vector>
     71#include <vector>
     72#include <iostream>
     73#include <string>
    7274
    7375
     
    8385        this->cantMove_ = false;
    8486        this->bTimeIsUp_ = false;
    85 
    8687        this->numberOfBots_ = 5; // quick fix: don't allow default-bots to enter the race
     88        this->bLost =false;
    8789        //we fixed the number of bots in order to have the same starting position all the time !
    8890    }
     
    101103        startpos[4] =-40;
    102104        startpos[5] =100;
    103        
     105         
    104106        startpos[6] =100;
    105107        startpos[7] =-40;
     
    117119
    118120        this->spawnPlayersIfRequested();
     121        this->countdown_mode=true;
    119122        this->cantMove_ = true;
    120123        //players are unable to move while countdown is running
     
    122125        {
    123126            engine->setActive(false);
     127            engine->addSpeedMultiply(1.7);
    124128        }
    125129
     
    138142        }
    139143
    140         std::string message("Use headphones to hear the countdown!");
    141         this->getGametypeInfo()->sendAnnounceMessage(message);
    142         ChatManager::message(message);
    143 
    144         //after 11 seconds , countdownFinished function is called to activate bots` engines
    145         Timer* countdownTimer = new Timer();
    146         countdownTimer->setTimer(11, false, createExecutor(createFunctor(&SpaceRace::countdownFinished, this)));
    147     }
    148 
    149 
    150 
     144        std::string message("Use headphones to hear the countdown! Press W for forward acceleration, press W+space for boost!");
     145
     146        this->getGametypeInfo()->sendAnnounceMessage(message);
     147        ChatManager::message(message);
     148       
     149
     150
     151       
     152    }
     153
     154    // Counter in the beginning of the game
     155    void SpaceRace::tick(float dt) {
     156        SUPER(SpaceRace, tick, dt);
     157       
     158        //countdown_mode is set true,when spawnIfRequested is called
     159        if (countdown_mode) {
     160            //10 seconds will be counted
     161            this->time_passed -= dt;
     162
     163            //orxout() << "time: " <<(int) time_passed << "s" << endl;
     164
     165            std::string message=std::to_string((int)time_passed);
     166            this->getGametypeInfo()->sendAnnounceMessage(message);
     167            if (time_passed <= 1) {
     168
     169                this->countdownFinished();
     170                this->countdown_mode = false;
     171            }
     172        }
     173
     174    }
     175       
     176    void SpaceRace::startmessage(int second){
     177
     178        std::string message=std::to_string(second);
     179        this->getGametypeInfo()->sendAnnounceMessage(message);
     180        ChatManager::message(message);
     181       
     182       
     183
     184    }
    151185
    152186    void SpaceRace::end()
    153187    {
     188       
    154189        this->clock_.capture();
    155190        int s = this->clock_.getSeconds();
    156191        int ms = static_cast<int>(this->clock_.getMilliseconds() - 1000*s);
    157192        std::string message;
    158 
    159193        if (this->bTimeIsUp_)
    160194        {
    161             message = multi_cast<std::string>(s) + "." + multi_cast<std::string>(ms) + " seconds !!\n"
    162                         + "You lose!";
    163         }
     195            message =  "TIME IS UP! YOU LOOSE!";
     196        }
     197       else if(this->bLost){
     198            message = "YOU LOOSE!";
     199
     200       }       
     201       
    164202        else
    165203        {
     
    167205                        + "." + multi_cast<std::string>(ms) + " seconds.";
    168206        }
     207       
    169208        if (!this->hasEnded())
    170209        {
     210
    171211            this->getGametypeInfo()->sendAnnounceMessage(message);
    172212            ChatManager::message(message);
     
    183223        int ms = this->clock_.getMilliseconds() % 1000;
    184224
    185        
    186    
    187         const std::string& message = player->getName() + " reached the checkpoint " + multi_cast<std::string>(checkpoint->getCheckpointIndex() + 1)
     225
     226        std::string message(player->getName() + " reached the checkpoint " + multi_cast<std::string>(checkpoint->getCheckpointIndex() + 1)
     227        + " after " + multi_cast<std::string>(s) + "." + multi_cast<std::string>(ms) + " seconds.");
     228
     229        this->getGametypeInfo()->sendAnnounceMessage(message);
     230        ChatManager::message(message);
     231      /*  const std::string& message = player->getName() + " reached the checkpoint " + multi_cast<std::string>(checkpoint->getCheckpointIndex() + 1)
    188232        + "after " + multi_cast<std::string>(s) + "." + multi_cast<std::string>(ms) + " seconds.";
    189233        this->getGametypeInfo()->sendAnnounceMessage(message);
    190         ChatManager::message(message);
     234        ChatManager::message(message);*/
     235       
    191236
    192237    }
     
    195240    {
    196241
    197         std::string message("RACE STARTED ");
    198         this->getGametypeInfo()->sendAnnounceMessage(message);
    199         ChatManager::message(message);
     242        std::string message("RACE STARTED");
     243        this->getGametypeInfo()->sendAnnounceMessage(message);
     244        ChatManager::message(message);
     245       
    200246
    201247
    202248        for (Engine* engine : ObjectList<Engine>())
    203249            engine->setActive(true);
     250
     251        std::string message2("Press W for forward acceleration, press W+space for boost!");
     252        this->getGametypeInfo()->sendAnnounceMessage(message2);
     253        ChatManager::message(message2);
    204254    }
    205255
  • code/branches/mergeFS18/src/modules/gametypes/SpaceRace.h

    r11720 r12029  
    4242#include "SpaceRaceManager.h"
    4343
     44
    4445namespace orxonox
    4546{
     
    5455
    5556        public:
    56             SpaceRace(Context* context);
     57            SpaceRace(Context* context);//, SpaceRace* parentRace);
    5758            virtual ~SpaceRace() {}
    5859
     
    6061            virtual void end() override;
    6162            virtual void countdownFinished();
     63           
    6264            virtual void addBots(unsigned int amount) override; //<! overwrite function in order to bypass the addbots command.
     65            virtual void tick(float dt) override;
     66            virtual void startmessage(int second);
    6367
    6468
     
    7983            inline Clock& getClock()
    8084                { return this->clock_; }
     85            //inline void setParentRace(SpaceRace* parentRace) { this->parentRace = parentRace; }
    8186
    8287            virtual bool allowPawnHit(Pawn* victim, Pawn* originator) override;
    8388            virtual bool allowPawnDamage(Pawn* victim, Pawn* originator) override;
    8489            virtual bool allowPawnDeath(Pawn* victim, Pawn* originator) override;
     90            bool countdown_mode = false;
     91            float time_passed = 11.0f;
     92           
     93            bool bLost=false;
    8594
    8695        private:
    8796            bool cantMove_;                                            ///< Helper variable, used to stall the engines before the race starts.
    8897            std::map<PlayerInfo*, RaceCheckPoint*> checkpointReached_; ///< The number of the last check point reached by each player.
    89             bool bTimeIsUp_;                                           ///< True if one of the check points is reached too late.
     98            bool bTimeIsUp_;    ///< True if one of the check points is reached too late.
    9099
    91100            Clock clock_; ///< The clock starts running at the beginning of the game. It is used to give the time at each check point, the give the time at the end of the game, and to stop the game if a check point is reached too late.
  • code/branches/mergeFS18/src/modules/gametypes/SpaceRaceController.cc

    r11720 r12029  
    2020 *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
    2121 *
    22  *  Created on: Oct 8, 2012
     22 *  Created on: Oct 8, 2012findCheck
    2323 *      Author: purgham
    2424 */
     
    3030#include "collisionshapes/CollisionShape.h"
    3131#include "BulletCollision/CollisionShapes/btCollisionShape.h"
     32#include "SpaceRace.h"
    3233
    3334
     
    3839    const int ADJUSTDISTANCE = 500;
    3940    const int MINDISTANCE = 5;
     41
    4042    /*
    4143     * Idea: Find static Point (checkpoints the spaceship has to reach)
     
    4547    {
    4648        RegisterObject(SpaceRaceController);
     49        //this->parentRace = nullptr;
     50
    4751        std::vector<RaceCheckPoint*> checkpoints;
    4852
     
    6367
    6468        int i;
    65         for (i = -2; findCheckpoint(i) != nullptr; i--)
     69        for (i = -2; findCheckpoint(i) != nullptr; i--)     // WIESO?
    6670        {
    6771            continue;
     
    103107        return returnVec;
    104108    }
    105 
     109    void SpaceRaceController::endtheGame() const {
     110        SpaceRace* gametype = orxonox_cast<SpaceRace*>(this->getGametype());
     111        assert(gametype)
     112;        if (!gametype)
     113        return;
     114        gametype->bLost=true;
     115        gametype->end();
     116
     117    }
    106118    /*
    107119     * called from 'findStaticCheckpoints'
     
    122134            for (int checkpointIndex : currentCheckpoint->getNextCheckpoints())
    123135            {
     136                if (findCheckpoint(checkpointIndex) == nullptr){
     137                    orxout(internal_warning) << "Problematic Point: " << checkpointIndex << endl;
     138                }
    124139                if (currentCheckpoint == findCheckpoint(checkpointIndex))
    125140                {
    126                     //orxout() << currentCheckpoint->getCheckpointIndex()<<endl;
     141                    orxout() << currentCheckpoint->getCheckpointIndex()<<endl;
    127142                    continue;
    128143                }
    129                 if (findCheckpoint(checkpointIndex) == nullptr)
    130                     orxout(internal_warning) << "Problematic Point: " << checkpointIndex << endl;
     144             
    131145                else
    132146                    numberOfWays += rekSimulationCheckpointsReached(findCheckpoint(checkpointIndex), zaehler);
     147
    133148            }
    134149            zaehler[currentCheckpoint] += numberOfWays;
     
    162177        {
    163178            RaceCheckPoint* nextRaceCheckPoint = findCheckpoint(checkpointIndex);
     179
    164180            float distance = recCalculateDistance(nextRaceCheckPoint, this->getControllableEntity()->getPosition());
    165181
     
    168184                minDistance = distance;
    169185                minNextRaceCheckPoint = nextRaceCheckPoint;
    170             }
    171 
    172         }
    173 
     186
     187            }
     188            //There is a bug. If the user passes through the 19th checkpoint with the opponents, the game will end immediately
     189            if(nextRaceCheckPoint->isLast())
     190                endtheGame();
     191
     192        }
     193        if(minNextRaceCheckPoint == nullptr) { orxout()<<"nullptr found @192 SpaceRaceController" << endl;}
    174194        return minNextRaceCheckPoint;
    175195    }
     
    208228
    209229        {
     230            if(nextRaceCheckpoint_ == nullptr) orxout()<<"nullptr found @218 SpaceRaceController" << endl;
     231
    210232            return nextRaceCheckpoint_;
    211233        }
     
    213235
    214236        {
     237            if(nextRaceCheckpoint_ == nullptr) orxout()<<"nullptr found @223 SpaceRaceController" << endl;
     238
    215239            return nextRaceCheckpoint_;
    216240        }
     
    221245    }
    222246
     247
     248
     249
     250   
     251
    223252    RaceCheckPoint* SpaceRaceController::findCheckpoint(int index) const
    224253    {
    225         for (RaceCheckPoint* checkpoint : this->checkpoints_)
    226             if (checkpoint->getCheckpointIndex() == index)
    227                 return checkpoint;
    228         return nullptr;
    229     }
     254        RaceCheckPoint* res = nullptr;
     255        for (RaceCheckPoint* checkpoint : this->checkpoints_){
     256            //conclusion: index=20 is not
     257            if (checkpoint->getCheckpointIndex() == index){
     258                //if(checkpoint == nullptr) orxout()<<"returned nullptr @line 234 SpaceRaceController"<<endl;
     259                //orxout()<< "index of the checkpoint "<< index <<endl;
     260                res = checkpoint;
     261                return res;
     262            }
     263        }
     264    /* if(index>2 )   
     265        this->endtheGame();*/
     266
     267        return res;
     268    }
     269   
     270
    230271
    231272    /*RaceCheckPoint* SpaceRaceController::addVirtualCheckPoint( RaceCheckPoint* previousCheckpoint, int indexFollowingCheckPoint , const Vector3& virtualCheckPointPosition )
     
    282323    void SpaceRaceController::tick(float dt)
    283324    {
     325       
     326
    284327        if (this->getControllableEntity() == nullptr || this->getControllableEntity()->getPlayer() == nullptr )
    285328        {
     
    312355        {
    313356            nextRaceCheckpoint_ = adjustNextPoint();
     357            if(nextRaceCheckpoint_ == nullptr) orxout()<<"nullptr found @327 SpaceRaceController" << endl;
     358
    314359            lastPositionSpaceship = this->getControllableEntity()->getPosition();
    315360        }
     
    325370        }
    326371        //orxout(user_status) << "dt= " << dt << ";  distance= " << (lastPositionSpaceship-this->getControllableEntity()->getPosition()).length() <<std::endl;
    327         lastPositionSpaceship = this->getControllableEntity()->getPosition();
    328        
     372        /*lastPositionSpaceship = this->getControllableEntity()->getPosition();
     373       
     374        SpaceRace obj=new SpaceRace();
     375        obj.setParentRace(parentRace);
     376        this->parentRace=obj.parentRace;*/
     377       
    329378        this->boostControl();
     379
     380        /*if(nextRaceCheckpoint_ == nullptr){
     381            this->parentRace->bLost=true;
     382            this->parentRace->end();
     383        }*/
     384        // if(nextRaceCheckpoint_ == nullptr ){
     385        //    // if( nextRaceCheckpoint_->getCheckpointIndex()==19)
     386        //     orxout()<<"nullptr @351 Line"<<endl;
     387        // }
     388
     389       
    330390        this->moveToPosition(nextRaceCheckpoint_->getPosition());
     391
    331392        this->boostControl();
    332393    }
    333394
     395
     396    /*void SpaceRaceController::setParentRace(parentRace){
     397        this->parentRace=parentRace;
     398    }*/
    334399    // True if a coordinate of 'pointToPoint' is smaller then the corresponding coordinate of 'groesse'
    335400    bool SpaceRaceController::vergleicheQuader(const Vector3& pointToPoint, const Vector3& groesse)
  • code/branches/mergeFS18/src/modules/gametypes/SpaceRaceController.h

    r11099 r12029  
    4747    {
    4848        public:
    49             SpaceRaceController(Context* context);
     49            SpaceRaceController(Context* context);//, SpaceRace* parentRace);
    5050            virtual ~SpaceRaceController();
    5151            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
    5252            virtual void tick(float dt) override;
     53           
    5354
    5455        private:
     
    5758            RaceCheckPoint* nextPointFind(RaceCheckPoint*);
    5859            RaceCheckPoint* adjustNextPoint();
     60            void endtheGame() const;
     61
    5962            std::vector<RaceCheckPoint*> findStaticCheckpoints(RaceCheckPoint*, const std::vector<RaceCheckPoint*>&);
    6063            std::vector<RaceCheckPoint*> staticCheckpoints();
     
    7477            Vector3 lastPositionSpaceship;
    7578            int virtualCheckPointIndex;
     79            //SpaceRace* parentRace;
    7680    };
    7781
  • code/branches/mergeFS18/src/modules/gametypes/SpaceRaceManager.cc

    r11071 r12029  
    113113    RaceCheckPoint* SpaceRaceManager::findCheckpoint(int index) const
    114114    {
    115         for (RaceCheckPoint* checkpoint : this->checkpoints_)
     115        /*for (RaceCheckPoint* checkpoint : this->checkpoints_)
    116116        if (checkpoint->getCheckpointIndex() == index)
    117117        return checkpoint;
     118        return nullptr;*/
     119        for (RaceCheckPoint* checkpoint : this->checkpoints_){
     120            if (checkpoint->getCheckpointIndex() == index)
     121                return checkpoint;
     122        }
     123        orxout()<<"returned checkpoint @line 123 SpaceRaceManager"<<endl;
    118124        return nullptr;
    119125    }
Note: See TracChangeset for help on using the changeset viewer.