internal void StoreLayers(Map map, TiledMap tiledMap)
 {
     foreach (Layer layer in map.Layers)
     {
         TiledLayer tiledLayer1 = new TiledLayer();
         tiledLayer1.Name   = layer.Id;
         tiledLayer1.Width  = layer.LayerWidth;
         tiledLayer1.Height = layer.LayerHeight;
         int num1 = !layer.Visible ? 1 : 0;
         tiledLayer1.Hidden = num1 != 0;
         tiledLayer1.Data   = new TiledLayerData()
         {
             EncodingType = "csv"
         };
         List <TiledProperty> tiledPropertyList = new List <TiledProperty>();
         tiledLayer1.Properties = tiledPropertyList;
         TiledLayer tiledLayer2 = tiledLayer1;
         List <int> intList     = new List <int>();
         for (int index1 = 0; index1 < layer.LayerHeight; ++index1)
         {
             for (int index2 = 0; index2 < layer.LayerWidth; ++index2)
             {
                 Tile tile = layer.Tiles[index2, index1];
                 if (tile is AnimatedTile animatedTile)
                 {
                     foreach (TiledTileSet tileSet in tiledMap.TileSets.Where(t => t.SheetName == animatedTile.TileSheet.Id))
                     {
                         TiledTile tiledTile1 = tileSet.Tiles.FirstOrDefault(tiledTile => tiledTile.TileId == tile.TileIndex);
                         if (tiledTile1 == null)
                         {
                             tileSet.Tiles.Add(new TiledTile()
                             {
                                 TileId    = tile.TileIndex,
                                 Animation = ((IEnumerable <StaticTile>)animatedTile.TileFrames).Select(frame => new TiledAnimationFrame()
                                 {
                                     TileId   = frame.TileIndex,
                                     Duration = (int)animatedTile.FrameInterval
                                 }).ToList()
                             });
                         }
                         else if (tiledTile1.Animation == null)
                         {
                             tiledTile1.Animation = ((IEnumerable <StaticTile>)animatedTile.TileFrames).Select(frame => new TiledAnimationFrame()
                             {
                                 TileId   = frame.TileIndex,
                                 Duration = (int)animatedTile.FrameInterval
                             }).ToList();
                         }
                     }
                 }
                 int num2 = 0;
                 if (tile != null)
                 {
                     int          tileIndex    = tile.TileIndex;
                     TiledTileSet tiledTileSet = tiledMap.TileSets.FirstOrDefault(tileSet => tileSet.SheetName == tile.TileSheet.Id);
                     int          num3         = tiledTileSet != null ? tiledTileSet.FirstGid : 1;
                     num2 = tileIndex + num3;
                 }
                 intList.Add(num2);
             }
         }
         tiledLayer2.Data.Data = string.Join(",", intList);
         if (layer.Description.Length > 0)
         {
             tiledLayer2.Properties.Add(new TiledProperty("@Description", layer.Description));
         }
         tiledMap.Layers.Add(tiledLayer2);
     }
 }
        internal void StoreTileSets(Map map, TiledMap tiledMap)
        {
            int num = 1;

            foreach (TileSheet tileSheet in map.TileSheets)
            {
                TiledTileSet tiledTileSet1 = new TiledTileSet();
                tiledTileSet1.FirstGid = num;
                string id = tileSheet.Id;
                tiledTileSet1.SheetName = id;
                int tileWidth = tileSheet.TileWidth;
                tiledTileSet1.TileWidth = tileWidth;
                int tileHeight = tileSheet.TileHeight;
                tiledTileSet1.TileHeight = tileHeight;
                int spacingWidth = tileSheet.SpacingWidth;
                tiledTileSet1.Spacing = spacingWidth;
                int marginWidth = tileSheet.MarginWidth;
                tiledTileSet1.Margin = marginWidth;
                int tileCount = tileSheet.TileCount;
                tiledTileSet1.TileCount = tileCount;
                int sheetWidth = tileSheet.SheetWidth;
                tiledTileSet1.Columns = sheetWidth;
                tiledTileSet1.Image   = new TiledTileSetImage()
                {
                    Source = tileSheet.ImageSource,
                    Width  = tileSheet.SheetWidth * tileSheet.TileWidth,
                    Height = tileSheet.SheetHeight * tileSheet.TileHeight
                };
                List <TiledTile> tiledTileList = new List <TiledTile>();
                tiledTileSet1.Tiles = tiledTileList;
                TiledTileSet tiledTileSet2 = tiledTileSet1;
                foreach (KeyValuePair <string, PropertyValue> property in tileSheet.Properties)
                {
                    if (property.Key.StartsWith("@Tile@") || property.Key.StartsWith("@TileIndex@"))
                    {
                        string[] strArray = property.Key.Split(new char[1]
                        {
                            '@'
                        }, StringSplitOptions.RemoveEmptyEntries);
                        int       tileIndex = int.Parse(strArray[1]);
                        string    name      = strArray[2];
                        TiledTile tiledTile1;
                        if ((tiledTile1 = tiledTileSet2.Tiles.FirstOrDefault(tiledTile => tiledTile.TileId == tileIndex)) != null)
                        {
                            tiledTile1.Properties.Add(new TiledProperty(name, tileSheet.Properties[property.Key]));
                        }
                        else
                        {
                            tiledTileSet2.Tiles.Add(new TiledTile()
                            {
                                TileId     = tileIndex,
                                Properties = new List <TiledProperty>()
                                {
                                    new TiledProperty(name, tileSheet.Properties[property.Key])
                                }
                            });
                        }
                    }
                }
                tiledMap.TileSets.Add(tiledTileSet2);
                num += tileSheet.TileCount;
            }
        }