Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Nov 9, 2008, 7:11:53 PM (15 years ago)
Author:
landauf
Message:

Split up LevelManager into LevelManager and PlayerManager where LevelManager handles all levels and is only active on the server, while PlayerManager handles client connections and passes new players to the LevelManager (if running on a server). If running on a client, PlayerManager just maps PlayerInfos with clientIDs.

Also added a small hack in Level.cc to show the ChatOverlay on clients.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/branches/objecthierarchy/src/orxonox/LevelManager.cc

    r2086 r2168  
    2828
    2929#include "OrxonoxStableHeaders.h"
    30 
    3130#include "LevelManager.h"
    3231
    33 #include "core/CoreIncludes.h"
    34 
     32#include "PlayerManager.h"
    3533#include "objects/infos/Level.h"
    3634#include "objects/infos/HumanPlayer.h"
     
    4240    LevelManager::LevelManager()
    4341    {
    44         RegisterRootObject(LevelManager);
    45 
    4642        assert(singletonRef_s == 0);
    4743        singletonRef_s = this;
    48 
    49         this->getConnectedClients();
    5044    }
    5145
     
    9589        {
    9690            this->levels_s.front()->setActive(true);
    97             for (std::map<unsigned int, PlayerInfo*>::iterator it = this->clients_.begin(); it != this->clients_.end(); ++it)
     91            for (std::map<unsigned int, PlayerInfo*>::const_iterator it = PlayerManager::getInstance().getClients().begin(); it != PlayerManager::getInstance().getClients().end(); ++it)
    9892                this->levels_s.front()->playerEntered(it->second);
    9993        }
    10094    }
    101 
    102 
    103     void LevelManager::clientConnected(unsigned int clientID)
    104     {
    105         COUT(3) << "client connected" << std::endl;
    106 
    107         // create new HumanPlayer instance
    108         HumanPlayer* player = new HumanPlayer(0);
    109         player->setClientID(clientID);
    110 
    111         // add to clients-map
    112         assert(!this->clients_[clientID]);
    113         this->clients_[clientID] = player;
    114 
    115         if (this->getActiveLevel())
    116             this->getActiveLevel()->playerEntered(player);
    117     }
    118 
    119     void LevelManager::clientDisconnected(unsigned int clientID)
    120     {
    121         COUT(3) << "client disconnected" << std::endl;
    122 
    123         // remove from clients-map
    124         PlayerInfo* player = this->clients_[clientID];
    125         this->clients_.erase(clientID);
    126 
    127         if (this->getActiveLevel())
    128             this->getActiveLevel()->playerLeft(player);
    129 
    130         // delete PlayerInfo instance
    131         if (player)
    132             delete player;
    133     }
    134 
    135 
    136     PlayerInfo* LevelManager::getClient(unsigned int clientID) const
    137     {
    138         std::map<unsigned int, PlayerInfo*>::const_iterator it = this->clients_.find(clientID);
    139         if (it != this->clients_.end())
    140             return it->second;
    141         else
    142             return 0;
    143     }
    14495}
Note: See TracChangeset for help on using the changeset viewer.