Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Jun 5, 2006, 12:09:15 PM (19 years ago)
Author:
bensch
Message:

orxonox/trunk: merged the network branche back here
merged with command:
svn merge -r8070:HEAD https://svn.orxonox.net/orxonox/branches/network .
no conflicts

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/lib/network/network_game_manager.cc

    r8068 r8147  
    5959 
    6060  MessageManager::getInstance()->registerMessageHandler( MSGID_DELETESYNCHRONIZEABLE, delSynchronizeableHandler, NULL );
     61  MessageManager::getInstance()->registerMessageHandler( MSGID_PREFEREDTEAM, preferedTeamHandler, NULL );
    6162 
    6263  this->gameState = 0;
     
    8687 
    8788  int team = rules.getTeamForNewUser();
    88   ClassID playableClassId = rules.getPlayableClassId( team );
    89   std::string playableModel = rules.getPlayableModelFileName( team, playableClassId );
     89  ClassID playableClassId = rules.getPlayableClassId( userId, team );
     90  std::string playableModel = rules.getPlayableModelFileName( userId, team, playableClassId );
    9091 
    9192  BaseObject * bo = Factory::fabricate( playableClassId );
     
    159160    if ( dynamic_cast<Synchronizeable*>(*it)->getUniqueID() == uniqueId )
    160161    {
     162      if ( (*it)->isA(CL_PLAYABLE) )
     163      {
     164        getInstance()->playablesToDelete.push_back( dynamic_cast<Playable*>(*it) );
     165        return true;
     166      }
     167       
    161168      delete dynamic_cast<Synchronizeable*>(*it);
    162169      return true;
     
    180187
    181188
    182 
    183 
    184 
     189/**
     190 * handler for MSGID_PREFEREDTEAM message
     191 * @param messageId
     192 * @param data
     193 * @param dataLength
     194 * @param someData
     195 * @param userId
     196 * @return
     197 */
     198bool NetworkGameManager::preferedTeamHandler( MessageId messageId, byte * data, int dataLength, void * someData, int userId )
     199{
     200  assert( NetworkGameManager::getInstance()->isServer() );
     201 
     202  int teamId = 0;
     203  int len = Converter::byteArrayToInt( data, &teamId );
     204 
     205  if ( len != dataLength )
     206  {
     207    PRINTF(2)("Recieved DeleteSynchronizeable message with incorrect size (%d) from client %d!\n", dataLength, userId);
     208    return true;
     209  }
     210 
     211  NetworkGameManager::getInstance()->setPreferedTeam( userId, teamId );
     212}
     213
     214void NetworkGameManager::setPreferedTeam( int userId, int teamId )
     215{
     216  if ( !PlayerStats::getStats( userId ) )
     217    return;
     218 
     219  PlayerStats & stats = *(PlayerStats::getStats( userId ));
     220 
     221  stats.setPreferedTeamId( teamId );
     222 
     223}
     224
     225/**
     226 * set prefered team for this host
     227 * @param teamId
     228 */
     229void NetworkGameManager::prefereTeam( int teamId )
     230{
     231  if ( isServer() )
     232    setPreferedTeam( getHostID(), teamId );
     233  else
     234  {
     235    byte buf[INTSIZE];
     236   
     237    assert( Converter::intToByteArray( teamId, buf, INTSIZE) == INTSIZE );
     238   
     239    MessageManager::getInstance()->sendMessage( MSGID_PREFEREDTEAM, buf, INTSIZE, RT_USER, 0, MP_HIGHBANDWIDTH );
     240  }
     241}
     242
     243/**
     244 * this function will be called periodically by networkManager
     245 * @param ds time elapsed since last call of tick
     246 */
     247void NetworkGameManager::tick( float ds )
     248{
     249  //delete playables if they are not assigned to local player anymore
     250  for ( std::list<Playable*>::iterator it = playablesToDelete.begin(); it != playablesToDelete.end();  )
     251  {
     252    if ( State::getPlayer()->getPlayable() != *it )
     253    {
     254      PRINTF(0)("Delete unused playable: %s owner: %d\n", (*it)->getClassName(), (*it)->getOwner() );
     255      std::list<Playable*>::iterator delit = it;
     256      it++;
     257      delete *delit;
     258      playablesToDelete.erase( delit );
     259      continue;
     260    }
     261    it++;
     262  }
     263}
     264
     265
     266
     267
Note: See TracChangeset for help on using the changeset viewer.