コード例 #1
0
        public XElement Store(Map map)
        {
            TiledMap tiledMap1 = new TiledMap();

            tiledMap1.Version     = "1.0";
            tiledMap1.Orientation = "orthogonal";
            int layerWidth = map.GetLayer("Back").LayerWidth;

            tiledMap1.Width = layerWidth;
            int layerHeight = map.GetLayer("Back").LayerHeight;

            tiledMap1.Height = layerHeight;
            int tileWidth = 16; // map.GetLayer("Back").TileWidth;

            tiledMap1.TileWidth = tileWidth;
            int tileHeight = 16; //map.GetLayer("Back").TileHeight;

            tiledMap1.TileHeight = tileHeight;
            List <TiledProperty> tiledPropertyList = new List <TiledProperty>();

            tiledMap1.Properties = tiledPropertyList;
            List <TiledTileSet> tiledTileSetList = new List <TiledTileSet>();

            tiledMap1.TileSets = tiledTileSetList;
            List <TiledLayer> tiledLayerList = new List <TiledLayer>();

            tiledMap1.Layers = tiledLayerList;
            List <TiledObjectGroup> tiledObjectGroupList = new List <TiledObjectGroup>();

            tiledMap1.ObjectGroups = tiledObjectGroupList;
            TiledMap tiledMap2 = tiledMap1;

            if (map.Description.Length > 0)
            {
                map.Properties["@Description"] = map.Description;
            }
            foreach (KeyValuePair <string, PropertyValue> property in map.Properties)
            {
                tiledMap2.Properties.Add(new TiledProperty(property.Key, property.Value));
            }
            StoreTileSets(map, tiledMap2);
            StoreLayers(map, tiledMap2);
            StoreImageLayers(map, tiledMap2);
            StoreObjects(map, tiledMap2);
            return(tiledMap2.ToXml());
        }
コード例 #2
0
 internal void StoreObjects(Map map, TiledMap tiledMap)
 {
     foreach (Layer layer in map.Layers)
     {
         TiledObjectGroup tiledObjectGroup = new TiledObjectGroup()
         {
             Name    = layer.Id,
             Objects = new List <TiledObject>()
         };
         for (int index1 = 0; index1 < layer.LayerHeight; ++index1)
         {
             for (int index2 = 0; index2 < layer.LayerWidth; ++index2)
             {
                 Tile tile = layer.Tiles[index2, index1];
                 if ((tile != null ? tile.Properties : null) != null && tile.Properties.Any <KeyValuePair <string, PropertyValue> >())
                 {
                     TiledObject tiledObject = new TiledObject()
                     {
                         ObjectId   = tiledMap.NextObjectId,
                         Name       = "TileData",
                         XPos       = index2 * 16,
                         YPos       = index1 * 16,
                         Width      = 16,
                         Height     = 16,
                         Properties = new List <TiledProperty>()
                     };
                     foreach (KeyValuePair <string, PropertyValue> property in tile.Properties)
                     {
                         tiledObject.Properties.Add(new TiledProperty(property.Key, property.Value));
                     }
                     tiledObjectGroup.Objects.Add(tiledObject);
                     ++tiledMap.NextObjectId;
                 }
             }
         }
         tiledMap.ObjectGroups.Add(tiledObjectGroup);
     }
 }
コード例 #3
0
 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);
     }
 }
コード例 #4
0
        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;
            }
        }
コード例 #5
0
 public Map Load(Stream stream)
 {
     TiledMap = new TiledMap(XElement.Load(stream));
     return(Load(TiledMap));
 }
コード例 #6
0
 public Map Load(XmlReader xmlReader)
 {
     TiledMap = new TiledMap(XElement.Load(xmlReader));
     return(Load(TiledMap));
 }
コード例 #7
0
 public void StoreImageLayers(Map map, TiledMap tiled)
 {
 }