static void RebuildIndex() {
if( Ranks.Count == 0 ) {
LowestRank = null;
HighestRank = null;
DefaultRank = null;
return;
}
// find highest/lowers ranks
HighestRank = Ranks.First();
LowestRank = Ranks.Last();
// assign indices
for( int i = 0; i < Ranks.Count; i++ ) {
Ranks[i].Index = i;
}
// assign nextRankUp/nextRankDown
if( Ranks.Count > 1 ) {
for( int i = 0; i < Ranks.Count - 1; i++ ) {
Ranks[i + 1].NextRankUp = Ranks[i];
Ranks[i].NextRankDown = Ranks[i + 1];
}
}
HighestRank.NextRankUp = null;
LowestRank.NextRankDown = null;
}