/* ================ void idRestoreGame::RestoreObjects ================ */ void idRestoreGame::RestoreObjects( void ) { int i; ReadSoundCommands(); // read trace models idClipModel::RestoreTraceModels( this ); // restore all the objects for( i = 1; i < objects.Num(); i++ ) { CallRestore_r( objects[ i ]->GetType(), objects[ i ] ); } // regenerate render entities and render lights because are not saved for( i = 1; i < objects.Num(); i++ ) { if ( objects[ i ]->IsType( idEntity::Type ) ) { idEntity *ent = static_cast<idEntity *>( objects[ i ] ); ent->UpdateVisuals(); ent->Present(); } } #ifdef ID_DEBUG_MEMORY idStr gameState = file->GetName(); gameState.StripFileExtension(); WriteGameState_f( idCmdArgs( va( "test %s_restore", gameState.c_str() ), false ) ); //CompareGameState_f( idCmdArgs( va( "test %s_save", gameState.c_str() ) ) ); gameLocal.Error( "dumped game states" ); #endif }
/* ================ idRestoreGame::CallRestore_r ================ */ void idRestoreGame::CallRestore_r( const idTypeInfo *cls, idClass *obj ) { if( cls->super ) { CallRestore_r( cls->super, obj ); if( cls->super->Restore == cls->Restore ) { // don't call save on this inheritance level since the function was called in the super class return; } } ( obj->*cls->Restore )( this ); }
/* ================ idRestoreGame::ReadStaticObject ================ */ void idRestoreGame::ReadStaticObject( idClass &obj ) { CallRestore_r( obj.GetType(), &obj ); }