public static int NextWhileSkipping(this Random randomGen, int[] crescentNumbers, float bonusChance = 0) { int sum = crescentNumbers.Sum(); float[] chances = crescentNumbers.Select(number => (float)number / sum).ToArray(); for (int i = 0; i < crescentNumbers.Length; i++) { if (!randomGen.CheckSuccess(chances[i] + bonusChance)) { return(i); } } return(0); }
public static int NextPureDistributed( this Random randomGen, int[] numbers, float skipChancePerIndex, bool decrementalSkip = false, float decrementRate = 0.5f ) { for (int i = 0; i < numbers.Length; i++) { if (!randomGen.CheckSuccess(skipChancePerIndex)) { return(i); } if (decrementalSkip) { skipChancePerIndex *= decrementRate; } } return(0); }