/* ================ sdPersistentRankInfo::ParseBadge ================ */ bool sdPersistentRankInfo::ParseBadge( idParser& src ) { if ( !src.ExpectTokenString( "{" ) ) { return false; } sdBadge& badge = badges.Alloc(); badge.category = ""; badge.title = ""; idToken token; while ( true ) { if ( src.ReadToken( &token ) == 0 ) { src.Warning( "Unexpected End of File" ); return false; } if ( token.Icmp( "task" ) == 0 ) { idDict taskInfo; if ( !taskInfo.Parse( src ) ) { return false; } sdBadge::sdTask& task = badge.tasks.Alloc(); task.Clear(); task.total = taskInfo.GetFloat( "total" ); task.text = taskInfo.GetString( "text" ); const idKeyValue* match = NULL; while ( ( match = taskInfo.MatchPrefix( "field", match ) ) != NULL ) { task.fields.Alloc() = match->GetValue(); } } else if ( token.Icmp( "category" ) == 0 ) { if ( src.ReadToken( &token ) == 0 ) { return false; } badge.category = token; } else if ( token.Icmp( "title" ) == 0 ) { if ( src.ReadToken( &token ) == 0 ) { return false; } badge.title = token; } else if ( token.Icmp( "level" ) == 0 ) { if ( src.ReadToken( &token ) == 0 ) { return false; } badge.level = token.GetIntValue(); } else if ( token.Icmp( "alwaysAvailable" ) == 0 ) { badge.alwaysAvailable = true; } else if ( token.Icmp( "}" ) == 0 ) { break; } else { src.Warning( "Unexpected Token: '%s'", token.c_str() ); return false; } } return true; }