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:
2 edited

Legend:

Unmodified
Added
Removed
  • code/trunk

  • 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}
Note: See TracChangeset for help on using the changeset viewer.