public T LuckyDraw(IRandomGenerator randomGenerator, ILuckier luckier, Func <float, float, float> luckinessAdjustmentFunc) { if (randomGenerator == null) { throw new ArgumentNullException("randomGenerator"); } if (luckier == null) { throw new ArgumentNullException("luckier"); } if (luckier.Luckyness <= 0) { throw new ArgumentOutOfRangeException("luckier", luckier.Luckyness, "Luckyness must greater than zero."); } if (undelyingList.Count <= 0) { return(default(T)); } float randomValue = 0, enumeratedValue = 0; var item = undelyingList[0]; foreach (var rpitem in undelyingList) { randomValue += CountWeight(luckier.Luckyness, rpitem.rare); } randomValue *= randomGenerator.Random(); foreach (var rpitem in undelyingList) { enumeratedValue += CountWeight(luckier.Luckyness, rpitem.rare); if (enumeratedValue > randomValue) { break; } item = rpitem; } luckier.Luckyness = luckinessAdjustmentFunc(luckier.Luckyness, item.rare); return(item.item); }
public T LuckyDraw(IRandomGenerator randomGenerator, ILuckier luckier) { return(LuckyDraw(randomGenerator, luckier, LuckinessAdjustment)); }
public T LuckyDraw(ILuckier luckier) { return(LuckyDraw(RandomGenerator.DefaultInstance, luckier, LuckinessAdjustment)); }