Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Oct 22, 2012, 5:05:14 PM (12 years ago)
Author:
purgham
Message:

Made SpaceRace-Mode usable for more then 1 Spaceship

File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/branches/Racingbot/src/modules/gametypes/SpaceRaceManager.cc

    r9399 r9412  
    3838#include "util/Math.h"
    3939
    40 
    41 
    4240namespace orxonox
    4341{
    4442    CreateFactory(SpaceRaceManager);
    4543
    46     SpaceRaceManager::SpaceRaceManager(BaseObject* creator) : BaseObject(creator)
     44    SpaceRaceManager::SpaceRaceManager(BaseObject* creator) :
     45        BaseObject(creator)
    4746    {
    48         RegisterObject(SpaceRaceManager);
    49 
     47        RegisterObject(SpaceRaceManager)
     48;        this->race_ = orxonox_cast<SpaceRace*>(this->getGametype().get());
     49        assert(race_);
     50        //amountOfPlayers=(race_->getPlayers()).size();
    5051        this->firstcheckpointvisible_ = false;
     52        this->players_ = this->race_->getPlayers();
    5153    }
    5254
     
    5456    {
    5557        for (size_t i = 0; i < this->checkpoints_.size(); ++i)
    56             this->checkpoints_[i]->destroy();
     58        this->checkpoints_[i]->destroy();
    5759    }
    5860
     
    6163        SUPER(SpaceRaceManager, XMLPort, xmlelement, mode);
    6264
    63         XMLPortObject(SpaceRaceManager, RaceCheckPoint, "checkpoints", addCheckpoint, getCheckpoint,  xmlelement, mode);
     65        XMLPortObject(SpaceRaceManager, RaceCheckPoint, "checkpoints", addCheckpoint, getCheckpoint, xmlelement, mode);
    6466    }
    6567
     
    7476        }
    7577
    76         for (size_t i = 0; i < this->checkpoints_.size(); ++i)
     78        for ( std::map< PlayerInfo*, Player>::iterator it = players_.begin(); it != players_.end(); ++it)
    7779        {
    78             if (this->checkpoints_[i]->getPlayer() != NULL)
    79                 this->checkpointReached(this->checkpoints_[i], this->checkpoints_[i]->getPlayer());
     80            for (size_t i = 0; i < this->checkpoints_.size(); ++i)
     81            {
     82                if (this->checkpoints_[i]->playerWasHere(it->first))
     83                this->checkpointReached(this->checkpoints_[i], it->first /*this->checkpoints_[i]->getPlayer()*/);
     84            }
    8085        }
     86
    8187    }
    8288
     
    8995    {
    9096        if (index < this->checkpoints_.size())
    91             return this->checkpoints_[index];
     97        return this->checkpoints_[index];
    9298        else
    93             return 0;
     99        return 0;
    94100    }
    95101
    96     std::vector<RaceCheckPoint*> SpaceRaceManager::getAllCheckpoints(){
     102    std::vector<RaceCheckPoint*> SpaceRaceManager::getAllCheckpoints()
     103    {
    97104        return checkpoints_;
    98105    }
    99106
    100107    /**
    101         @brief Returns the checkpoint with the given checkpoint-index (@see RaceCheckPoint::getCheckpointIndex).
    102     */
     108     @brief Returns the checkpoint with the given checkpoint-index (@see RaceCheckPoint::getCheckpointIndex).
     109     */
    103110    RaceCheckPoint* SpaceRaceManager::findCheckpoint(int index) const
    104111    {
    105112        for (size_t i = 0; i < this->checkpoints_.size(); ++i)
    106             if (this->checkpoints_[i]->getCheckpointIndex() == index)
    107                 return this->checkpoints_[i];
     113        if (this->checkpoints_[i]->getCheckpointIndex() == index)
     114        return this->checkpoints_[i];
    108115        return 0;
    109116    }
     
    111118    bool SpaceRaceManager::reachedValidCheckpoint(RaceCheckPoint* oldCheckpoint, RaceCheckPoint* newCheckpoint, PlayerInfo* player) const
    112119    {
    113         if (oldCheckpoint)
     120        if (oldCheckpoint != NULL)
    114121        {
    115122            // the player already visited an old checkpoint; see which checkpoints are possible now
    116123            const std::set<int>& possibleCheckpoints = oldCheckpoint->getNextCheckpoints();
    117124            for (std::set<int>::const_iterator it = possibleCheckpoints.begin(); it != possibleCheckpoints.end(); ++it)
    118                 if (this->findCheckpoint(*it) == newCheckpoint)
    119                     return true;
     125            if (this->findCheckpoint(*it) == newCheckpoint)
     126            return true;
    120127            return false;
    121128        }
     
    132139        assert(gametype);
    133140        if (!gametype)
    134             return;
     141        return;
    135142
    136         RaceCheckPoint* oldCheckpoint = gametype->getCheckpointReached(player);
     143        RaceCheckPoint* oldCheckpoint = gametype->getCheckpointReached(player); // returns the last from player reached checkpoint
    137144
    138145        if (this->reachedValidCheckpoint(oldCheckpoint, newCheckpoint, player))
     
    160167        }
    161168
    162         newCheckpoint->resetPlayer();
     169        // newCheckpoint->resetPlayer(); loescht playerpointer TODO: check if problems occur
    163170    }
    164171
     
    169176            const std::set<int>& oldVisible = oldCheckpoint->getNextCheckpoints();
    170177            for (std::set<int>::const_iterator it = oldVisible.begin(); it != oldVisible.end(); ++it)
    171                 this->findCheckpoint(*it)->setRadarVisibility(false);
     178            this->findCheckpoint(*it)->setRadarVisibility(false);
    172179        }
    173180
     
    178185            const std::set<int>& newVisible = newCheckpoint->getNextCheckpoints();
    179186            for (std::set<int>::const_iterator it = newVisible.begin(); it != newVisible.end(); ++it)
    180                 this->findCheckpoint(*it)->setRadarVisibility(true);
     187            this->findCheckpoint(*it)->setRadarVisibility(true);
    181188        }
    182189    }
Note: See TracChangeset for help on using the changeset viewer.