Example #1
0
        private void square(Layer2DObject layer, int size, float ap, int depth, IRandom2 rand)
        {
            int squareSize     = (int)(size * JryMath.Pow(.5f, depth));
            int squareHalfSize = (int)(squareSize / 2);

            for (int iy = 0; iy < JryMath.Pow(2, depth); iy++)
            {
                for (int ix = 0; ix < JryMath.Pow(2, depth); ix++)
                {
                    var xCorL = ix * squareSize;
                    var xCorR = (ix + 1) * squareSize;
                    var yCorT = iy * squareSize;
                    var yCorB = (iy + 1) * squareSize;

                    var tl  = layer[xCorL, yCorT].Value;
                    var bl  = layer[xCorL, yCorB].Value;
                    var tr  = layer[xCorR, yCorT].Value;
                    var br  = layer[xCorR, yCorB].Value;
                    int xph = xCorL + squareHalfSize;
                    int yph = yCorT + squareHalfSize;
                    var c   = (tl + tr + br + bl) / 4 + rnd(rand, xph, yph) * ap;
                    var b   = (br + bl + c + getClipped(layer, xph, yph + squareSize)) / 4 + rnd(rand, xph, yph + squareSize) * ap;
                    var t   = (tr + tl + c + getClipped(layer, xph, yph - squareSize)) / 4 + rnd(rand, xph, yph - squareSize) * ap;
                    var r   = (tr + br + c + getClipped(layer, xph + squareSize, yph)) / 4 + rnd(rand, xph + squareSize, yph) * ap;
                    var l   = (tl + bl + c + getClipped(layer, xph - squareSize, yph)) / 4 + rnd(rand, xph - squareSize, yph) * ap;

                    layer[xph, yCorT] = t;
                    layer[xph, yCorB] = b;
                    layer[xCorL, yph] = l;
                    layer[xCorR, yph] = r;
                }
            }
        }
Example #2
0
        public SegmentDivider(IRandom2 random, int amplitude, float persistance)
        {
            _random = random;

            _amplitude   = amplitude;
            _persistance = persistance;
        }
Example #3
0
        private void diamond(ILayer layer, int size, float ap, int l, IRandom2 rand)
        {
            int squareSize     = (int)(size * JryMath.Pow(.5f, l));
            int squareHalfSize = (int)(squareSize / 2);

            for (int iy = 0; iy < JryMath.Pow(2, l); iy++)
            {
                for (int ix = 0; ix < JryMath.Pow(2, l); ix++)
                {
                    var xCorL = ix * squareSize;
                    var xCorR = (ix + 1) * squareSize;
                    var yCorT = iy * squareSize;
                    var yCorB = (iy + 1) * squareSize;

                    var tl  = layer[xCorL, yCorT].Value;
                    var bl  = layer[xCorL, yCorB].Value;
                    var tr  = layer[xCorR, yCorT].Value;
                    var br  = layer[xCorR, yCorB].Value;
                    int xph = xCorL + squareHalfSize;
                    int yph = yCorT + squareHalfSize;
                    var c   = (tl + tr + br + bl) / 4 + rnd(rand, xph, yph) * ap;
                    layer[xph, yph] = c;
                }
            }
        }
Example #4
0
        private void setupBaseDS(int sizePow2, Layer2DObject layer, IRandom2 rand)
        {
            int blockSize = sizePow2;
            int xstart    = 0;
            int ystart    = 0;
            int xend      = xstart + blockSize - 1;
            int yend      = ystart + blockSize - 1;

            var tl = rnd(rand, xstart, ystart);
            var tr = rnd(rand, xend, ystart);
            var bl = rnd(rand, xstart, yend);
            var br = rnd(rand, xend, yend);

            layer[xend, ystart]   = tr;
            layer[xstart, yend]   = bl;
            layer[xstart, ystart] = tl;
            layer[xend, yend]     = br;
        }
Example #5
0
        private void ds(Layer2DObject layer, int sizePow2, float ba, INoiseParameters np, IRandom2 rand)
        {
            int size = sizePow2 - 1;
            int log  = (int)JryMath.Log(size, 2);

            // HACK
            var x = np as DsNoiseParameters;

            for (int l = 0; l < log; l++)
            {
                if (l == 0 && x != null)
                {
                    hackeddiamond(layer, ba, x.HillProbability);
                }
                else
                {
                    diamond(layer, size, ba, l, rand);
                }


                square(layer, size, ba, l, rand);
                ba *= np.Amplitude;
                if (l >= np.ToDepth)
                {
                    ba *= np.Amplitude;
                }
            }
        }
Example #6
0
        private static float rnd(IRandom2 r, int x, int y)
        {
            var rr = r.NextD(x, y);

            return(rr - .5f);
        }
Example #7
0
 public DiamondSquare(IRandom2 rand)
 {
     _rand = rand;
 }