Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
May 23, 2009, 9:57:52 PM (15 years ago)
Author:
landauf
Message:

merged gametypes branch back to trunk

Location:
code/trunk
Files:
6 edited
6 copied

Legend:

Unmodified
Added
Removed
  • code/trunk

  • code/trunk/src/orxonox/objects/gametypes/CMakeLists.txt

    r2826 r3033  
    33  Deathmatch.cc
    44  TeamDeathmatch.cc
     5  TeamBaseMatch.cc
    56  Pong.cc
     7  UnderAttack.cc
     8  Asteroids.cc
    69)
  • code/trunk/src/orxonox/objects/gametypes/Gametype.cc

    r2896 r3033  
    6060        this->numberOfBots_ = 0;
    6161
     62        this->timeLimit_ = 0;
     63        this->time_ = 0;
     64        this->timerIsActive_ = false;
     65
    6266        this->initialStartCountdown_ = 3;
    6367
     
    8892        SUPER(Gametype, tick, dt);
    8993
     94        //count timer
     95        if (timerIsActive_)
     96        {
     97            if (this->timeLimit_ == 0)
     98                this->time_ += dt;
     99            else
     100                this->time_ -= dt;
     101        }
     102
    90103        if (this->gtinfo_.bStartCountdownRunning_ && !this->gtinfo_.bStarted_)
    91104            this->gtinfo_.startCountdown_ -= dt;
     
    93106        if (!this->gtinfo_.bStarted_)
    94107            this->checkStart();
    95         else
     108        else if (!this->gtinfo_.bEnded_)
    96109            this->spawnDeadPlayersIfRequested();
    97110
     
    111124    {
    112125        this->gtinfo_.bEnded_ = true;
     126
     127        for (std::map<PlayerInfo*, Player>::iterator it = this->players_.begin(); it != this->players_.end(); ++it)
     128        {
     129            if (it->first->getControllableEntity())
     130            {
     131                ControllableEntity* oldentity = it->first->getControllableEntity();
     132       
     133                ControllableEntity* entity = this->defaultControllableEntity_.fabricate(oldentity->getCreator());
     134                if (oldentity->getCamera())
     135                {
     136                    entity->setPosition(oldentity->getCamera()->getWorldPosition());
     137                    entity->setOrientation(oldentity->getCamera()->getWorldOrientation());
     138                }
     139                else
     140                {
     141                    entity->setPosition(oldentity->getWorldPosition());
     142                    entity->setOrientation(oldentity->getWorldOrientation());
     143                }
     144
     145                it->first->stopControl(oldentity, true);
     146                it->first->startControl(entity);
     147            }
     148            else
     149                this->spawnPlayerAsDefaultPawn(it->first);
     150        }
    113151    }
    114152
     
    267305                if (!it->first->isReadyToSpawn() || !this->gtinfo_.bStarted_)
    268306                {
    269                     SpawnPoint* spawn = this->getBestSpawnPoint(it->first);
    270                     if (spawn)
    271                     {
    272                         // force spawn at spawnpoint with default pawn
    273                         ControllableEntity* entity = this->defaultControllableEntity_.fabricate(spawn);
    274                         spawn->spawn(entity);
    275                         it->first->startControl(entity);
    276                         it->second.state_ = PlayerState::Dead;
    277                     }
    278                     else
    279                     {
    280                         COUT(1) << "Error: No SpawnPoints in current Gametype" << std::endl;
    281                         abort();
    282                     }
     307                    this->spawnPlayerAsDefaultPawn(it->first);
     308                    it->second.state_ = PlayerState::Dead;
    283309                }
    284310            }
     
    358384    }
    359385
     386    void Gametype::spawnPlayerAsDefaultPawn(PlayerInfo* player)
     387    {
     388        SpawnPoint* spawn = this->getBestSpawnPoint(player);
     389        if (spawn)
     390        {
     391            // force spawn at spawnpoint with default pawn
     392            ControllableEntity* entity = this->defaultControllableEntity_.fabricate(spawn);
     393            spawn->spawn(entity);
     394            player->startControl(entity);
     395        }
     396        else
     397        {
     398            COUT(1) << "Error: No SpawnPoints in current Gametype" << std::endl;
     399            abort();
     400        }
     401    }
     402
    360403    void Gametype::addBots(unsigned int amount)
    361404    {
     
    376419        }
    377420    }
     421
     422    void Gametype::addTime(float t)
     423    {
     424        if (this->timeLimit_ == 0)
     425          this->time_ -= t;
     426        else
     427          this->time_ += t;
     428    }
     429
     430    void Gametype::removeTime(float t)
     431    {
     432        if (this->timeLimit_ == 0)
     433          this->time_ += t;
     434        else
     435          this->time_ -= t;
     436    }
     437
     438    void Gametype::resetTimer()
     439    {
     440        this->resetTimer(timeLimit_);
     441    }
     442
     443    void Gametype::resetTimer(float t)
     444    {
     445        this->timeLimit_ = t;
     446        this->time_ = t;
     447    }
    378448}
  • code/trunk/src/orxonox/objects/gametypes/Gametype.h

    r2890 r3033  
    128128                { return this->players_.size(); }
    129129
     130            virtual void addTime(float t);
     131            virtual void removeTime(float t);
     132
     133            inline  void startTimer()
     134            {
     135                this->time_ = this->timeLimit_;
     136                this->timerIsActive_ = true;
     137            }
     138
     139            inline void stopTimer()
     140              { this->timerIsActive_ = false; }
     141
     142            inline float getTime()
     143              { return this->time_; }
     144
     145            inline bool getTimerIsActive()
     146              { return timerIsActive_; }
     147
     148            inline void setTimeLimit(float t)
     149              { this->timeLimit_ = t; }
     150
     151            virtual void resetTimer();
     152            virtual void resetTimer(float t);
     153
    130154        protected:
    131155            virtual SpawnPoint* getBestSpawnPoint(PlayerInfo* player) const;
     
    134158            virtual void checkStart();
    135159            virtual void spawnPlayer(PlayerInfo* player);
     160            virtual void spawnPlayerAsDefaultPawn(PlayerInfo* player);
    136161            virtual void spawnPlayersIfRequested();
    137162            virtual void spawnDeadPlayersIfRequested();
     
    141166            bool bAutoStart_;
    142167            bool bForceSpawn_;
     168
     169            float time_;
     170            float timeLimit_;
     171            bool timerIsActive_;
    143172
    144173            float initialStartCountdown_;
  • code/trunk/src/orxonox/objects/gametypes/TeamBaseMatch.cc

    r3032 r3033  
    125125    void TeamBaseMatch::showPoints()
    126126    {
    127 
    128         COUT(0) << "Points standing:" << std::endl << "Team 1: "<< pointsTeam1_ << std::endl << "Team 2: " << pointsTeam2_ << std::endl;
    129         if(pointsTeam1_ >=1700) COUT(0) << "Team 1 is near victory!" << std::endl;
    130         if(pointsTeam2_ >=1700) COUT(0) << "Team 2 is near victory!" << std::endl;
     127        COUT(0) << "Points standing:" << std::endl << "Team 1: "<< pointsTeam1_ << std::endl << "Team 2: " << pointsTeam2_ << std::endl;
     128        if(pointsTeam1_ >=1700) COUT(0) << "Team 1 is near victory!" << std::endl;
     129        if(pointsTeam2_ >=1700) COUT(0) << "Team 2 is near victory!" << std::endl;
    131130    }
    132131
     
    135134    void TeamBaseMatch::winPoints()
    136135    {
    137         int amountControlled = 0;
    138         int amountControlled2 = 0;
     136        int amountControlled = 0;
     137        int amountControlled2 = 0;
    139138
    140139        for (std::set<TeamBaseMatchBase*>::const_iterator it = this->bases_.begin(); it != this->bases_.end(); ++it)
    141140        {
    142             if((*it)->getState() == BaseState::controlTeam1)
    143             {
    144                 amountControlled++;
    145             }
    146             if((*it)->getState() == BaseState::controlTeam2)
    147             {
    148                 amountControlled2++;
    149             }
     141            if((*it)->getState() == BaseState::controlTeam1)
     142            {
     143                amountControlled++;
     144            }
     145            if((*it)->getState() == BaseState::controlTeam2)
     146            {
     147                amountControlled2++;
     148            }
    150149        }
    151150
  • code/trunk/src/orxonox/objects/gametypes/TeamDeathmatch.cc

    r3028 r3033  
    127127            {
    128128                TeamSpawnPoint* tsp = dynamic_cast<TeamSpawnPoint*>(*it);
    129                 if (tsp && tsp->getTeamNumber() != desiredTeamNr)
     129                if (tsp && (int)tsp->getTeamNumber() != desiredTeamNr)
    130130                {
    131131                    teamSpawnPoints.erase(it++);
     
    189189        return false;
    190190    }
     191
     192    int TeamDeathmatch::getTeam(PlayerInfo* player)
     193    {
     194        std::map<PlayerInfo*, int>::const_iterator it_player = this->teamnumbers_.find(player);
     195        if (it_player != this->teamnumbers_.end())
     196            return it_player->second;
     197        else
     198            return -1;
     199    }
    191200}
  • code/trunk/src/orxonox/objects/gametypes/TeamDeathmatch.h

    r3028 r3033  
    5555            virtual void playerStartsControllingPawn(PlayerInfo* player, Pawn* pawn);
    5656
     57            inline const ColourValue& getTeamColour(int teamnr) const
     58                { return this->teamcolours_[teamnr]; }
     59
    5760        protected:
    5861            virtual SpawnPoint* getBestSpawnPoint(PlayerInfo* player) const;
    5962            bool pawnsAreInTheSameTeam(Pawn* pawn1, Pawn* pawn2);
     63            int getTeam(PlayerInfo* player);
    6064
    6165            std::map<PlayerInfo*, int> teamnumbers_;
Note: See TracChangeset for help on using the changeset viewer.