private void RemoveRedundantCards(List <CardWrapper> lstCards, Parameters parameters, int nDustAmount, int nTotalAmount) { if (lstCards.Count > 0 && parameters.Rarities.Count > 0) { int nDifference = nTotalAmount - nDustAmount; if (nDifference > 0) { bool blnDone = false; int nCurrentAmount = 0; for (int i = 0; i < parameters.Rarities.Count && !blnDone; i++) { List <CardWrapper> lstChunk = lstCards.FindAll(c => c.DbCard.Rarity == parameters.Rarities[i]); for (int j = 0; j < lstChunk.Count && !blnDone; j++) { CardWrapper cardWrapper = lstChunk[j]; nCurrentAmount += cardWrapper.GetDustValue(); int nCurrentDifference = nDifference - nCurrentAmount; blnDone = nCurrentDifference == 0; if (!blnDone) { if (nCurrentDifference < 0) { blnDone = true; } else { lstCards.Remove(cardWrapper); } } else { lstCards.Remove(cardWrapper); } } } } else { } } else { } }
private void GetCardsForDustAmount(Parameters parameters, List <CardWrapper> lstCards) { int nDustAmount = 0; try { nDustAmount = Convert.ToInt32(parameters.QueryString); } catch { //Invalid value nDustAmount = Int32.MaxValue; } int nTotalAmount = 0; bool blnDone = false; for (int i = 0; i < parameters.Rarities.Count && !blnDone; i++) { List <CardWrapper> lstChunk = GetCardsForRarity(parameters.Rarities[i], parameters); lstChunk = FilterForClasses(lstChunk, parameters.Classes); lstChunk = FilterForSets(lstChunk, parameters.Sets); lstChunk = new List <CardWrapper>(lstChunk.OrderBy(c => c.GetDustValue())); for (int j = 0; j < lstChunk.Count && !blnDone; j++) { CardWrapper cardWrapper = lstChunk[j]; nTotalAmount += cardWrapper.GetDustValue(); lstCards.Add(cardWrapper); blnDone = nTotalAmount >= nDustAmount; } } //Post processing //Remove low rarity cards if the total amount is over the targeted amount if (nTotalAmount > nDustAmount) { RemoveRedundantCards(lstCards, parameters, nDustAmount, nTotalAmount); } else { } }