#include "ZGo.h"



//---- ZGoRANDOMARRAY2D ------------------------------------------------------//

ZGoRANDOMARRAY2D::ZGoRANDOMARRAY2D(ZGo *zgo)
{
  this->zgo = zgo;
}

float ZGoRANDOMARRAY2D::get(int x, int y)
{
  int seed = (((x-37) * 172) + ((y+69) * 913)) ^
             (((x+123) * 19) + ((y-27) * 101));

  int wrap = (((x-3)^(y+2))&31)+31;
  int result = x*y + (x+3)*(x-29)*(x+178) - (y+2)*(y-20)*(y+191);

  for(int i=0; i<wrap; i++)
  {
    int noise = seed;
    noise >>= 3;
    noise ^= seed;
    int carry = noise & 1;
    noise >>= 1;
    seed >>= 1;
    seed |= (carry << 30);
    noise &= 0xFF;
    result = ((result << 1) + noise) ^ (result >> 29);
  }

  return (result & 0xFFFF) / 65536.0f;
}



//---- end of file -----------------------------------------------------------//
