コード例 #1
0
        public static BasicMap CropToContent(this BasicMap m)
        {
            int minX = m.Width;
            int maxX = 0;
            int minY = m.Height;
            int maxY = 0;

            for (int x = 0; x < m.Width; x++)
            {
                for (int y = 0; y < m.Height; y++)
                {
                    if (m.GetTerrain <BasicTerrain>(new Coord(x, y)) != null)
                    {
                        if (minX > x)
                        {
                            minX = x;
                        }
                        if (minY > y)
                        {
                            minY = y;
                        }
                        if (maxX < x)
                        {
                            maxX = x;
                        }
                        if (maxY < y)
                        {
                            maxY = y;
                        }
                    }
                }
            }

            int   dx     = Math.Abs(maxX - minX + 1);
            int   dy     = Math.Abs(maxY - minY + 1);
            Coord offset = new Coord(-minX, -minY);

            BasicMap map = new BasicMap(dx, dy, EnumUtils.EnumLength <MapLayer>(), Distance.EUCLIDEAN);

            map.ForXForY((point) =>
            {
                if (m.Contains(point - offset))
                {
                    BasicTerrain terrain = m.GetTerrain <BasicTerrain>(point - offset);
                    if (terrain != null)
                    {
                        map.SetTerrain(_factory.Copy(terrain, point));
                    }
                }
            });

            return(map);
        }
コード例 #2
0
        public void ForXForYTest()
        {
            BasicMap map     = new BasicMap(25, 25, 1, Distance.EUCLIDEAN);
            int      counter = 0;

            map.ForXForY((point) =>
            {
                map.SetTerrain(_factory.Generic(point, counter));
                counter++;
            });
            counter = 0;
            for (int i = 0; i < map.Width; i++)
            {
                for (int j = 0; j < map.Height; j++)
                {
                    BasicTerrain t = map.GetTerrain <BasicTerrain>(new Coord(i, j));
                    Assert.AreEqual(counter, t.Glyph);
                    counter++;
                }
            }
        }