Example #1
0
        public static Map ResizeMap(Map map, MapPoint newsize)
        {
            Map newMap = new Map();
            newMap.Name = map.Name;
            newMap.TextureName = map.TextureName;
            newMap.Texture = map.Texture;
            newMap.TileSize = map.TileSize;
            foreach (var animation in map.AnimatedTiles)
                newMap.AnimatedTiles.Add(animation.Key, animation.Value);

            newMap.MapSize = newsize;
            newMap.UnderLayer = new int[newsize.IntX * newsize.IntY];
            newMap.BaseLayer = new int[newsize.IntX * newsize.IntY];
            newMap.MiddleLayer = new int[newsize.IntX * newsize.IntY];
            newMap.TopLayer = new int[newsize.IntX * newsize.IntY];
            newMap.CollisionLayer = new int[newsize.IntX * newsize.IntY];
            newMap.OpaqueLayer = new int[newsize.IntX * newsize.IntY];

            for (int i = 0; i < (newMap.MapSize.X * newMap.MapSize.Y); i++)
            {
                newMap.UnderLayer[i] = -1;
                newMap.BaseLayer[i] = -1;
                newMap.MiddleLayer[i] = -1;
                newMap.TopLayer[i] = -1;
                newMap.CollisionLayer[i] = -1;
                newMap.OpaqueLayer[i] = -1;
            }

            for (int y = 0; y < newsize.Y; y++)
            {
                for (int x = 0; x < newsize.X; x++)
                {
                    // If it's outside the Y range always fill with -1
                    if (y >= map.MapSize.Y)
                    {
                        newMap.SetLayerValue(new MapPoint(x, y), MapLayers.UnderLayer, -1);
                        continue;
                    }

                    // If it's outside the X range but not the Y range, fill with 0
                    if (x >= map.MapSize.X)
                    {
                        newMap.SetLayerValue(new MapPoint(x, y), MapLayers.UnderLayer, -1);
                        continue;
                    }

                    //Fill the new location with the value of the old location
                    newMap.SetLayerValue(new MapPoint(x, y), MapLayers.UnderLayer, map.GetLayerValue(new MapPoint(x, y), MapLayers.UnderLayer));
                    newMap.SetLayerValue(new MapPoint(x, y), MapLayers.BaseLayer, map.GetLayerValue(new MapPoint(x, y), MapLayers.BaseLayer));
                    newMap.SetLayerValue(new MapPoint(x, y), MapLayers.MiddleLayer, map.GetLayerValue(new MapPoint(x, y), MapLayers.MiddleLayer));
                    newMap.SetLayerValue(new MapPoint(x, y), MapLayers.TopLayer, map.GetLayerValue(new MapPoint(x, y), MapLayers.TopLayer));
                    newMap.SetLayerValue(new MapPoint(x, y), MapLayers.CollisionLayer, map.GetLayerValue(new MapPoint(x, y), MapLayers.CollisionLayer));
                    newMap.SetLayerValue(new MapPoint(x, y), MapLayers.OpaqueLayer, map.GetLayerValue(new MapPoint(x, y), MapLayers.OpaqueLayer));
                }
            }

            return newMap;
        }