Exemple #1
0
        protected HexMapMesh(GraphicsDevice gd, List <Hexagon> hexes, IGeometryBuilder builder, Texture2D texture)
        {
            Interlocked.Increment(ref meshCounter);
            Texture       = texture;
            Hexes         = hexes;
            PatchID       = meshCounter;
            Vertices      = new List <VertexPositionNormalTexture>();
            Indices       = new List <uint>();
            TriangleCount = hexes.Count * 6;
            HexSize       = hexes[0].Geometry.HexWidth;
            foreach (var hexagon in hexes)
            {
                hexagon.PatchID = PatchID;
            }

            builder.BuildGeometry(hexes, Vertices, Indices);

            BoundingBox = hexes[0].Geometry.BoundingBox;
            foreach (var hexagon in hexes.Skip(1))
            {
                BoundingBox = BoundingBox.CreateMerged(BoundingBox, hexagon.Geometry.BoundingBox);
            }

            VertexBuffer = new VertexBuffer(gd, typeof(VertexPositionNormalTexture), Vertices.Count, BufferUsage.WriteOnly);
            var vpcs = Vertices.ToArray();

            builder.GenerateNormals(vpcs, Indices);
            VertexBuffer.SetData(vpcs);
            IndexBuffer = new IndexBuffer(gd, IndexElementSize.ThirtyTwoBits, Indices.Count, BufferUsage.WriteOnly);
            IndexBuffer.SetData(Indices.ToArray());
            Grid = new HexGrid(gd, Hexes, Color.Gray);
        }