/* ============ sdStatsTracker::GetTopLifeStats ============ */ void sdStatsTracker::GetTopLifeStats( idList< const lifeStatsData_t* >& improved, idList< const lifeStatsData_t* >& unchanged, idList< const lifeStatsData_t* >& worse ) const { improved.SetNum( 0, false ); unchanged.SetNum( 0, false ); worse.SetNum( 0, false ); for( int i = 0; i < lifeStatsData.Num(); i++ ) { const lifeStatsData_t& data = lifeStatsData[ i ]; switch ( data.newValue.GetType() ) { case sdNetStatKeyValue::SVT_FLOAT: case sdNetStatKeyValue::SVT_FLOAT_MAX: if ( data.newValue.GetFloat() > data.oldValue.GetFloat() ) { improved.Append( &data ); } else if( idMath::Fabs( data.newValue.GetFloat() - data.oldValue.GetFloat() ) < STATS_EPSILON ) { unchanged.Append( &data ); } else { worse.Append( &data ); } break; case sdNetStatKeyValue::SVT_INT: case sdNetStatKeyValue::SVT_INT_MAX: if ( data.newValue.GetInt() > data.oldValue.GetInt() ) { improved.Append( &data ); } else if( data.newValue.GetInt() == data.oldValue.GetInt() ) { unchanged.Append( &data ); } else { worse.Append( &data ); } break; default: assert( false ); break; } } sdQuickSort( improved.Begin(), improved.End(), sdSortPercentageImprovement() ); }