Пример #1
0
        public PackedHexagonalGrid(int width, int height, int padding, float spacing)
        {
            Width = width;
            Height = height;
            Padding = padding;
            Spacing = spacing;

            var grid = new FancyHexagonalGrid(spacing);
            var vertices = CreateVertices(grid, width, height, padding);

            VerticesX = vertices.Select(v => v.X).ToArray();
            VerticesY = vertices.Select(v => v.Y).ToArray();
        }
Пример #2
0
        // Create a width x height array of vertices in row-major order
        // Each row is padded with VectorSize extra elements on both sides
        private static Vector2[] CreateVertices(FancyHexagonalGrid grid, int width, int height, int padding)
        {
            int doublePadding = 2 * padding;
            int stride = width + doublePadding;

            var vertices = new Vector2[stride * height];

            // Initialize the array with NaNs.
            for (int i = 0; i < vertices.Length; i++)
                vertices[i] = new Vector2(AllOnes);

            // Loop invariant: index = padding + row * stride + col
            //
            // Before loop: index = padding, row = 0, col = 0. Invariant holds.
            int index = padding;
            for (int row = 0; row < height; row++)
            {
                for (int col = 0; col < width; col++)
                {
                    vertices[index] = grid.GetVertex(col, row);
                    index++;

                    // after col++:
                    // col' = col + 1
                    // index' = index + 1 = padding + row * stride + col + 1
                    //                    = padding + row * stride + col'
                    // Invariant holds.
                }

                // col = width
                // index = padding + row * stride + width

                index += doublePadding;

                // after row++ and col = 0
                // index' = index + doublePadding
                //        = padding + row * stride + width + doublePadding
                //        = padding + row * stride + stride                 (stride = width + doublePadding)
                //        = padding + row' * stride + col                   (col = 0, row' = row + 1)
                // Invariant holds.
            }

            return vertices;
        }