示例#1
0
        public void TraverseCellsWithinSquare <TCookie>(int distFromCenter, int centerX, int centerZ, Board.CellTraverseWithCookieCallback <TCookie> callback, TCookie cookie)
        {
            int num  = centerX - distFromCenter;
            int num2 = centerX + distFromCenter;
            int num3 = centerZ - distFromCenter;
            int num4 = centerZ + distFromCenter;

            for (int i = num; i <= num2; i++)
            {
                for (int j = num3; j <= num4; j++)
                {
                    BoardCell cellAt = this.GetCellAt(i, j);
                    if (cellAt != null)
                    {
                        callback(cellAt, cookie);
                    }
                }
            }
        }
示例#2
0
        public void TraverseCircle <TCookie>(int radius, int centerX, int centerZ, Board.CellTraverseWithCookieCallback <TCookie> callback, TCookie cookie)
        {
            if (radius == 0)
            {
                callback(this.GetCellAt(centerX, centerZ), cookie);
                return;
            }
            if (radius == 1)
            {
                callback(this.GetCellAt(centerX - 1, centerZ - 1), cookie);
                callback(this.GetCellAt(centerX, centerZ - 1), cookie);
                callback(this.GetCellAt(centerX + 1, centerZ - 1), cookie);
                callback(this.GetCellAt(centerX - 1, centerZ), cookie);
                callback(this.GetCellAt(centerX, centerZ), cookie);
                callback(this.GetCellAt(centerX + 1, centerZ), cookie);
                callback(this.GetCellAt(centerX - 1, centerZ + 1), cookie);
                callback(this.GetCellAt(centerX, centerZ + 1), cookie);
                callback(this.GetCellAt(centerX + 1, centerZ + 1), cookie);
                return;
            }
            int i    = radius;
            int num  = 0;
            int num2 = 1 - i;

            while (i >= num)
            {
                if (i > num)
                {
                    for (int j = i; j >= -i; j--)
                    {
                        callback(this.GetCellAt(j + centerX, num + centerZ), cookie);
                    }
                }
                if (num > 0 && num < i)
                {
                    for (int k = i; k >= -i; k--)
                    {
                        callback(this.GetCellAt(k + centerX, -num + centerZ), cookie);
                    }
                }
                if (num2 < 0)
                {
                    num++;
                    num2 += 2 * num + 1;
                }
                else
                {
                    for (int l = num; l >= -num; l--)
                    {
                        callback(this.GetCellAt(l + centerX, i + centerZ), cookie);
                    }
                    for (int m = num; m >= -num; m--)
                    {
                        callback(this.GetCellAt(m + centerX, -i + centerZ), cookie);
                    }
                    num++;
                    i--;
                    num2 += 2 * (num - i + 1);
                }
            }
        }