public void ForYTest()
        {
            int          width     = 33;
            int          height    = 80;
            BasicMap     map       = new BasicMap(width, height, 1, Distance.EUCLIDEAN);
            List <Coord> pointsSet = new List <Coord>();
            int          counter   = 0;

            map.ForY((y) =>
            {
                double x = 14.75 * Math.Sin(y / 30.0) + width / 2;
                Coord fy = new Coord((int)x, y);
                pointsSet.Add(fy);
                map.SetTerrain(_factory.Generic(fy, counter));
                counter++;
            });

            counter = 0;
            for (int y = 0; y < height; y++)
            {
                double       x       = 14.75 * Math.Sin(y / 30.0) + width / 2;
                BasicTerrain terrain = map.GetTerrain <BasicTerrain>(new Coord((int)x, y));
                Assert.NotNull(terrain);
                Assert.AreEqual(counter, terrain.Glyph);
                counter++;
            }
        }
        public void AddDoesntOverWriteTest()
        {
            BasicMap newMap = new BasicMap(8, 8, 1, Distance.MANHATTAN);

            for (int i = 0; i < 8; i++)
            {
                newMap.SetTerrain(_factory.Generic(new Coord(i, i), '#'));
            }

            newMap.Add(_map);

            for (int i = 0; i < _map.Width; i++)
            {
                for (int j = 0; j < _map.Height; j++)
                {
                    BasicTerrain t1 = _map.GetTerrain <BasicTerrain>(new Coord(i, j));
                    BasicTerrain t2 = newMap.GetTerrain <BasicTerrain>(new Coord(i, j));
                    if (i == j)
                    {
                        Assert.AreEqual('#', t2.Glyph);
                    }
                    else
                    {
                        Assert.AreEqual(t1.Glyph, t2.Glyph);
                    }
                }
            }
        }
        public void ForXTest()
        {
            int          width     = 33;
            int          height    = 80;
            BasicMap     map       = new BasicMap(width, height, 1, Distance.EUCLIDEAN);
            List <Coord> pointsSet = new List <Coord>();
            int          counter   = 0;

            map.ForX((x) =>
            {
                double y = 14.75 * Math.Sin(x / 30.0) + width / 2;
                Coord fx = new Coord(x, (int)y);
                pointsSet.Add(fx);
                map.SetTerrain(_factory.Generic(fx, counter));
                counter++;
            });

            counter = 0;
            for (int x = 0; x < width; x++)
            {
                double       y       = 14.75 * Math.Sin(x / 30.0) + width / 2;
                Coord        fx      = new Coord(x, (int)y);
                BasicTerrain terrain = map.GetTerrain <BasicTerrain>(fx);
                Assert.NotNull(terrain);
                Assert.AreEqual(counter, terrain.Glyph);
                counter++;
            }
        }
        public void IsClearOfObstructionsTest()
        {
            Assert.IsTrue(_map.IsClearOfObstructions(new Coord(0, 0), 8));

            _map.SetTerrain(_factory.Wall(new Coord(0, 0)));

            Assert.IsFalse(_map.IsClearOfObstructions(new Coord(0, 0), 8));

            Assert.IsTrue(_map.IsClearOfObstructions(new Coord(1, 1), 8));
        }
Пример #5
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);
        }
 public void Setup()
 {
     _map = new BasicMap(8, 8, 2, Distance.MANHATTAN);
     for (int i = 0; i < _map.Width; i++)
     {
         for (int j = 0; j < _map.Height; j++)
         {
             Coord c = new Coord(i, j);
             _map.SetTerrain(_factory.Generic(c, i + j));
         }
     }
 }
Пример #7
0
        private void TestMap()
        {
            BasicMap map    = new BasicMap(42, 42, 1, Distance.EUCLIDEAN);
            int      radius = 20;

            for (int i = 0; i < map.Width; i++)
            {
                for (int j = 0; j < map.Height; j++)
                {
                    BasicTerrain t = new BasicTerrain(Color.White, Color.Black, (i + j) % 256, new Coord(i, j), true, true);
                    map.SetTerrain(t);
                }
            }

            Coord origin = new Coord(21, 21);
            Area  room   = new Area("wiseau's room", new Coord(30, 30), new Coord(30, 10), new Coord(10, 10), new Coord(10, 30));

            foreach (Coord c in room.InnerPoints)
            {
                map.SetTerrain(_factory.MediumHardwoodFloor(c));
            }
            foreach (Coord c in room.OuterPoints)
            {
                map.SetTerrain(_factory.BathroomLinoleum(c));
                if (c.X == map.Width / 2 || c.Y == map.Height / 2)
                {
                    map.SetTerrain(_factory.ShagCarpet(c));
                }
                else
                {
                    map.SetTerrain(_factory.DarkHardwoodFloor(c));
                }
            }
            this.ReplaceTiles(map, new Coord(0, 0));

            BasicMap rotated = map.Rotate(origin, radius, 45);

            this.ReplaceTiles(rotated, new Coord(0, 0));
        }
Пример #8
0
        public static BasicMap Rotate(this BasicMap m, Coord origin, int radius, int degrees)
        {
            BasicMap rotated = new BasicMap(m.Width, m.Height, 1, Distance.EUCLIDEAN);

            //only rotating the bottom right corner, and not even rotating it correctly
            if (degrees % 90 == 0)
            {
                //this rotates more than just the circle - bug, deal with it later
                rotated.Add(m.RotateDiscreet(degrees));
            }
            else
            {
                BasicMap map = m.RotateDiscreet(360);
                while (degrees > 45)
                {
                    degrees -= 90;
                    //rotates more than just this circle - bug - deal with it later
                    map = m.RotateDiscreet(90);
                }
                while (degrees <= -45)
                {
                    degrees += 90;
                    //rotates more than just the circle - bug, fix later
                    map = m.RotateDiscreet(270);
                }
                double radians = Calculate.DegreesToRadians(degrees);

                for (int x = -radius; x < radius; x++)
                {
                    for (int y = -radius; y < radius; y++)
                    {
                        if (radius > Math.Sqrt(x * x + y * y))
                        {
                            int          xPrime  = (int)(x * Math.Cos(radians) - y * Math.Sin(radians));
                            int          yPrime  = (int)(x * Math.Sin(radians) + y * Math.Cos(radians));
                            Coord        source  = new Coord(x, y) + origin;
                            Coord        target  = new Coord(xPrime, yPrime) + origin;
                            BasicTerrain terrain = map.GetTerrain <BasicTerrain>(source);
                            if (terrain != null && rotated.Contains(target))
                            {
                                rotated.SetTerrain(_factory.Copy(terrain, target));
                            }
                        }
                    }
                }
            }
            return(rotated);
        }
Пример #9
0
 public static void ReplaceTiles(this BasicMap m, BasicMap map, Coord origin)
 {
     for (int i = 0; i < map.Width; i++)
     {
         for (int j = 0; j < map.Height; j++)
         {
             Coord        target = new Coord(i + origin.X, j + origin.Y);
             BasicTerrain t      = map.GetTerrain <BasicTerrain>(new Coord(i, j));
             if (t != null && m.Contains(target))
             {
                 t = _factory.Copy(t, target);
                 m.SetTerrain(t);
             }
         }
     }
 }
        public void RotateTest()
        {
            BasicMap map    = new BasicMap(42, 42, 1, Distance.EUCLIDEAN);
            int      radius = 20;

            for (int i = 0; i < map.Width; i++)
            {
                for (int j = 0; j < map.Height; j++)
                {
                    BasicTerrain t = new BasicTerrain(Color.White, Color.Black, (i * j + j) % 256, new Coord(i, j), true, true);
                    map.SetTerrain(t);
                }
            }

            Coord        origin      = new Coord(21, 21);
            BasicMap     rotated     = map.Rotate(origin, radius, 45);
            List <Coord> nullTerrain = new List <Coord>();

            Assert.AreNotEqual(map, rotated, "map.Rotate() did not transform the map in any way.");
            for (int x = 0; x < map.Width; x++)
            {
                for (int y = 0; y < map.Height; y++)
                {
                    Coord here  = new Coord(x, y);
                    Coord delta = origin - here;
                    if (radius > Math.Sqrt(delta.X * delta.X + delta.Y * delta.Y))
                    {
                        if (rotated.GetTerrain <BasicTerrain>(x, y) == null)
                        {
                            nullTerrain.Add(new Coord(x, y));
                        }
                        else
                        {
                            //Assert.AreNotEqual(Math.Abs(x * y + y) % 256, rotated.GetTerrain<BasicTerrain>(x, y).Glyph);
                        }
                        Assert.AreEqual(Math.Abs(x * y + y) % 256, map.GetTerrain <BasicTerrain>(x, y).Glyph);
                    }
                    else
                    {
                        Assert.IsNull(rotated.GetTerrain <BasicTerrain>(x, y));
                        Assert.AreEqual(Math.Abs(x * y + y) % 256, map.GetTerrain <BasicTerrain>(x, y).Glyph);
                    }
                }
            }
        }
        public void CropToContentTest()
        {
            BasicMap map = new BasicMap(8, 8, 2, Distance.MANHATTAN);

            for (int i = 1; i < map.Width - 1; i++)
            {
                for (int j = 1; j < map.Height - 1; j++)
                {
                    Coord c = new Coord(i, j);
                    map.SetTerrain(_factory.Generic(c, i + j));
                }
            }

            map = map.CropToContent();
            Assert.AreEqual(_map.Width - 2, map.Width);
            Assert.AreEqual(_map.Height - 2, map.Height);
            Assert.AreEqual(2, map.GetTerrain <BasicTerrain>(0, 0).Glyph);
        }
Пример #12
0
        public static BasicMap ReverseHorizontal(this BasicMap m)
        {
            BasicMap map = new BasicMap(m.Width, m.Height, 1, Distance.MANHATTAN);

            for (int i = 0; i < m.Width; i++)
            {
                for (int j = 0; j < m.Height; j++)
                {
                    Coord        source = new Coord(i, j);
                    Coord        target = new Coord(map.Width - i - 1, j);
                    BasicTerrain t      = m.GetTerrain <BasicTerrain>(source);
                    if (t != null)
                    {
                        t = _factory.Copy(t, target);
                        map.SetTerrain(t);
                    }
                }
            }
            return(map);
        }
Пример #13
0
 public static void Add(this BasicMap m, BasicMap map, Coord origin)
 {
     if (m.Width < map.Width + origin.X && m.Height < map.Height + origin.X)
     {
         throw new ArgumentOutOfRangeException(nameof(origin));
     }
     for (int i = 0; i < map.Width; i++)
     {
         for (int j = 0; j < map.Height; j++)
         {
             Coord        target = new Coord(i + origin.X, j + origin.Y);
             BasicTerrain t1     = (BasicTerrain)map.GetTerrain(new Coord(i, j));
             BasicTerrain t2     = (BasicTerrain)m.GetTerrain(new Coord(i, j));
             if (t1 != null && t2 == null && m.Contains(target))
             {
                 t1 = _factory.Copy(t1, target);
                 m.SetTerrain(t1);
             }
         }
     }
 }
        public void ReplaceTilesTest()
        {
            BasicMap newMap = new BasicMap(8, 8, 1, Distance.MANHATTAN);

            for (int i = 0; i < 8; i++)
            {
                newMap.SetTerrain(_factory.Generic(new Coord(i, i), i));
            }

            newMap.ReplaceTiles(_map, new Coord(0, 0));

            for (int i = 0; i < _map.Width; i++)
            {
                for (int j = 0; j < _map.Height; j++)
                {
                    BasicTerrain t1 = _map.GetTerrain <BasicTerrain>(new Coord(i, j));
                    BasicTerrain t2 = newMap.GetTerrain <BasicTerrain>(new Coord(i, j));
                    Assert.AreEqual(t1.Glyph, t2.Glyph);
                }
            }
        }
        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++;
                }
            }
        }
Пример #16
0
        public static BasicMap SwapXy(this BasicMap m)
        {
            BasicMap map = new BasicMap(m.Width, m.Height, 1, Distance.MANHATTAN);

            for (int i = 0; i < m.Width; i++)
            {
                for (int j = 0; j < m.Height; j++)
                {
                    Coord        original = new Coord(j, i);
                    Coord        target   = new Coord(i, j);
                    BasicTerrain t        = m.GetTerrain <BasicTerrain>(original);
                    if (t != null)
                    {
                        t = _factory.Copy(t, target);
                        map.SetTerrain(t);
                    }
                }
            }

            return(map);
        }
Пример #17
0
        public static BasicMap Subsection(this BasicMap m, Coord start, Coord stop)
        {
            int      xDiff = stop.X - start.X;
            int      yDiff = stop.Y - start.Y;
            BasicMap map   = new BasicMap(xDiff, yDiff, Enum.GetNames(typeof(MapLayer)).Length, Distance.MANHATTAN);

            for (int i = start.X; i < stop.X + 1; i++)
            {
                for (int j = start.Y; j < stop.Y + 1; j++)
                {
                    BasicTerrain t = m.GetTerrain <BasicTerrain>(new Coord(i, j));
                    if (t != null)
                    {
                        Coord c = new Coord(i - start.X, j - start.Y);
                        t = _factory.Copy(t, c);
                        if (map.Contains(c))
                        {
                            map.SetTerrain(t);
                        }
                    }
                }
            }
            return(map);
        }