gradCoord4D function

double gradCoord4D(
  1. int seed,
  2. int x,
  3. int y,
  4. int z,
  5. int w,
  6. double xd,
  7. double yd,
  8. double zd,
  9. double wd,
)

Implementation

@pragma('vm:prefer-inline')
double gradCoord4D(
  int seed,
  int x,
  int y,
  int z,
  int w,
  double xd,
  double yd,
  double zd,
  double wd,
) {
  IntX hash = Int32(seed);
  hash ^= _xPrime * x;
  hash ^= _yPrime * y;
  hash ^= _zPrime * z;
  hash ^= _wPrime * w;

  hash = hash * hash * hash * 60493;
  hash = (hash >> 13) ^ hash;

  hash &= 31;
  var a = yd;
  var b = zd;
  var c = wd;
  switch (hash.toInt() >> 3) {
    case 1:
      a = wd;
      b = xd;
      c = yd;
      break; // W,X,Y
    case 2:
      a = zd;
      b = wd;
      c = xd;
      break; // Z,W,X
    case 3:
      a = yd;
      b = zd;
      c = wd;
      break; // Y,Z,W
  }
  return ((hash & 4).toInt() == 0 ? -a : a) +
      ((hash & 2).toInt() == 0 ? -b : b) +
      ((hash & 1).toInt() == 0 ? -c : c);
}