OpenSimplexNoise constructor

OpenSimplexNoise([
  1. int seed = 0
])

Implementation

factory OpenSimplexNoise([int seed = 0]) {
  List<int> perm = new List<int>.filled(256, 0);
  List<int> source = new List<int>.filled(256, 0);
  for (int i = 0; i < 256; i++) source[i] = i;

  // The following parsers may seem silly but these parses allow 64-bit integers to be initialized
  // when running in an environment which allows 64-bit integers, such as the console.
  // In a 64-bit environment this Open Simplex Noise gets the same results as any other.
  // However, in JS there are only 53-bit integers and the dart compiler complains
  // about this value being used, so the `int.parse` will return a valid 59-bit number which
  // will result in a functional Open Simplex Noise but with different results from others.
  final int seedMul = int.parse("6364136223846793005");
  final int seedAdd = int.parse("1442695040888963407");
  seed = (seed * seedMul + seedAdd).toSigned(64);
  seed = (seed * seedMul + seedAdd).toSigned(64);
  seed = (seed * seedMul + seedAdd).toSigned(64);

  for (int i = 255; i >= 0; i--) {
    seed = (seed * seedMul + seedAdd).toSigned(64);
    int r = ((seed + 31) % (i + 1));
    if (r < 0) r += (i + 1);
    perm[i] = source[r];
    source[r] = source[i];
  }

  return new OpenSimplexNoise.fromPerm(perm);
}