Changeset 8147 in orxonox.OLD for trunk/src/lib/network/network_game_manager.cc
- Timestamp:
- Jun 5, 2006, 12:09:15 PM (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/lib/network/network_game_manager.cc
r8068 r8147 59 59 60 60 MessageManager::getInstance()->registerMessageHandler( MSGID_DELETESYNCHRONIZEABLE, delSynchronizeableHandler, NULL ); 61 MessageManager::getInstance()->registerMessageHandler( MSGID_PREFEREDTEAM, preferedTeamHandler, NULL ); 61 62 62 63 this->gameState = 0; … … 86 87 87 88 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 ); 90 91 91 92 BaseObject * bo = Factory::fabricate( playableClassId ); … … 159 160 if ( dynamic_cast<Synchronizeable*>(*it)->getUniqueID() == uniqueId ) 160 161 { 162 if ( (*it)->isA(CL_PLAYABLE) ) 163 { 164 getInstance()->playablesToDelete.push_back( dynamic_cast<Playable*>(*it) ); 165 return true; 166 } 167 161 168 delete dynamic_cast<Synchronizeable*>(*it); 162 169 return true; … … 180 187 181 188 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 */ 198 bool 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 214 void 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 */ 229 void 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 */ 247 void 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.