namespace pkNX.Randomization { /// Cyclical Shuffled Randomizer /// /// The shuffled list is iterated over, and reshuffled when exhausted. /// The list does not repeat values until the list is exhausted. /// public class GenericRandomizer { public GenericRandomizer(int[] randomValues) { RandomValues = randomValues; } private readonly int[] RandomValues; private int ctr; public int Count => RandomValues.Length; public void Reset() { ctr = 0; Util.Shuffle(RandomValues); } public int Next() { if (ctr == 0) Util.Shuffle(RandomValues); int value = RandomValues[ctr++]; ctr %= RandomValues.Length; return value; } } }