Esempio n. 1
0
    public Hex GetHexAt(int q, int r)
    {
        if (Hexes == null)
        {
            Debug.LogError("Hex Array is Null");
            return(null);
        }

        if (horizWrapping)
        {
            q = q % Columns;
            if (q < 0)
            {
                q += Columns;
            }
            if (q > Columns)
            {
                q -= Columns;
            }
        }
        if (vertWrapping)
        {
            r = r % Rows;
            if (r < 0)
            {
                r += Rows;
            }
            if (r > Rows)
            {
                r -= Rows;
            }
        }
        if (q >= Hexes.GetLength(0) || q < 0)
        {
            return(null);
        }
        if (r >= Hexes.GetLength(1) || r < 0)
        {
            return(null);
        }

        return(Hexes[q, r]);
    }
Esempio n. 2
0
        public string Draw(int width, int height)
        {
            //var b = new Bitmap(width, height);

            var hexWidth  = Math.Floor((double)(width / (Columns * 1.75)));
            var hexHeight = Math.Floor((double)(height / (Rows + 1))) * 2;

            hexWidth = hexHeight = Math.Min(hexWidth, hexHeight);

            var svgDoc = new SvgDocument
            {
                Width   = width,
                Height  = height,
                ViewBox = new SvgViewBox(0, 0, width, height),
            };

            var group = new SvgGroup();

            svgDoc.Children.Add(group);

            for (var r = 0; r < Hexes.GetLength(0); r++)
            {
                for (var q = 0; q < Hexes.GetLength(1); q++)
                {
                    int offsetRow = !(r % 2 == 0) ? 1 : 0;

                    var originX = (q * hexWidth * 1.5) + (hexWidth / 2) + (offsetRow * hexWidth * 0.75);
                    var originY = (r * hexHeight / 2) + (hexHeight / 2);

                    var ax = originX - (hexWidth / 4);
                    var ay = originY - (hexHeight / 2);

                    var bx = originX + (hexWidth / 4);
                    var by = originY - (hexHeight / 2);

                    var cx = originX + (hexWidth / 2);
                    var cy = originY;

                    var dx = originX + (hexWidth / 4);
                    var dy = originY + (hexHeight / 2);

                    var ex = originX - (hexWidth / 4);
                    var ey = originY + (hexHeight / 2);

                    var fx = originX - (hexWidth / 2);
                    var fy = originY;

                    var p = new SvgPolygon();

                    p.Points = new SvgPointCollection();


                    p.Points.Add(new SvgUnit((float)ax));
                    p.Points.Add(new SvgUnit((float)ay));

                    p.Points.Add(new SvgUnit((float)bx));
                    p.Points.Add(new SvgUnit((float)by));

                    p.Points.Add(new SvgUnit((float)cx));
                    p.Points.Add(new SvgUnit((float)cy));

                    p.Points.Add(new SvgUnit((float)dx));
                    p.Points.Add(new SvgUnit((float)dy));

                    p.Points.Add(new SvgUnit((float)ex));
                    p.Points.Add(new SvgUnit((float)ey));

                    p.Points.Add(new SvgUnit((float)fx));
                    p.Points.Add(new SvgUnit((float)fy));

                    p.Stroke = new SvgColourServer(Color.Black);
                    p.Fill   = new SvgColourServer(r % 2 == 0 ? Color.White : Color.AliceBlue);

                    group.Children.Add(p);

                    //DrawLine(b, ax, ay, bx, by);
                    //DrawLine(b, bx, by, cx, cy);
                    //DrawLine(b, cx, cy, dx, dy);
                    //DrawLine(b, dx, dy, ex, ey);
                    //DrawLine(b, ex, ey, fx, fy);
                    //DrawLine(b, fx, fy, ax, ay);

                    //DrawText(b, ax, ay, q, r);
                }
            }

            //b.Save(@"c:\temp\output.jpg");
            //svgDoc.Write(@"c:\temp\output.svg");


            using (var stream = new MemoryStream())
            {
                svgDoc.Write(stream);
                return(Encoding.UTF8.GetString(stream.GetBuffer()));
            }
        }