Пример #1
0
        //private async static Task LoadImageAsync(string _path)
        //      {
        //	TmxImageLoaded =  await CanvasBitmap.LoadAsync(Graphics, _path);
        //	//return TmxImageLoaded;
        //}
        public static TmxImage LoadTmxImage(this TmxImage image, XElement xImage, string tmxDir = "")
        {
            var xSource = xImage.Attribute("source");

            if (xSource != null)
            {
                // Append directory if present
                image.Source  = Path.Combine(tmxDir, (string)xSource);
                image.Texture = Raylib.LoadTexture(image.Source);
            }
            else
            {
                image.Format = (string)xImage.Attribute("format");
                var xData         = xImage.Element("data");
                var decodedStream = new TmxBase64Data(xData);
                image.Data = decodedStream.Data;
                throw new NotSupportedException("Stream Data loading is not yet supported");
            }

            image.Trans  = TiledMapLoader.ParseColor(xImage.Attribute("trans"));
            image.Width  = (int?)xImage.Attribute("width") ?? 0;
            image.Height = (int?)xImage.Attribute("height") ?? 0;

            return(image);
        }
Пример #2
0
        public static TmxObjectGroup LoadTmxObjectGroup(this TmxObjectGroup group, TmxMap map, XElement xObjectGroup)
        {
            group.Map     = map;
            group.Name    = (string)xObjectGroup.Attribute("name") ?? string.Empty;
            group.Color   = TiledMapLoader.ParseColor(xObjectGroup.Attribute("color"));
            group.Opacity = (float?)xObjectGroup.Attribute("opacity") ?? 1.0f;
            group.Visible = (bool?)xObjectGroup.Attribute("visible") ?? true;
            group.OffsetX = (float?)xObjectGroup.Attribute("offsetx") ?? 0.0f;
            group.OffsetY = (float?)xObjectGroup.Attribute("offsety") ?? 0.0f;

            var drawOrderDict = new Dictionary <string, DrawOrderType> {
                { "unknown", DrawOrderType.UnknownOrder },
                { "topdown", DrawOrderType.IndexOrder },
                { "index", DrawOrderType.TopDown }
            };

            var drawOrderValue = (string)xObjectGroup.Attribute("draworder");

            if (drawOrderValue != null)
            {
                group.DrawOrder = drawOrderDict[drawOrderValue];
            }

            group.Objects = new TmxList <TmxObject>();
            foreach (var e in xObjectGroup.Elements("object"))
            {
                group.Objects.Add(new TmxObject().LoadTmxObject(map, e));
            }

            group.Properties = ParsePropertyDict(xObjectGroup.Element("properties"));

            return(group);
        }
Пример #3
0
        public TiledMap(string _mapFilePath)
        {
            MapPath     = _mapFilePath;
            Map         = new TmxMap();
            Map         = TiledMapLoader.LoadTmxMap(Map, _mapFilePath);
            RenderLayer = Global.TILEMAP_LAYER;


            Global.WorldWidth  = Map.WorldWidth;
            Global.WorldHeight = Map.WorldHeight;
        }
Пример #4
0
        public static TmxLayer LoadTmxLayer(this TmxLayer layer, TmxMap map, XElement xLayer, int width, int height)
        {
            layer.Map     = map;
            layer.Name    = (string)xLayer.Attribute("name");
            layer.Opacity = (float?)xLayer.Attribute("opacity") ?? 1.0f;
            layer.Visible = (bool?)xLayer.Attribute("visible") ?? true;
            layer.OffsetX = (float?)xLayer.Attribute("offsetx") ?? 0.0f;
            layer.OffsetY = (float?)xLayer.Attribute("offsety") ?? 0.0f;
            // TODO: does the width/height passed in ever differ from the TMX layer XML?
            layer.Width  = (int)xLayer.Attribute("width");
            layer.Height = (int)xLayer.Attribute("height");

            var xData    = xLayer.Element("data");
            var encoding = (string)xData.Attribute("encoding");

            layer.Tiles = new TmxLayerTile[width * height];
            if (encoding == "base64")
            {
                var decodedStream = new TmxBase64Data(xData);
                var stream        = decodedStream.Data;

                var index = 0;
                using (var br = new BinaryReader(stream))
                {
                    for (var j = 0; j < height; j++)
                    {
                        for (var i = 0; i < width; i++)
                        {
                            var gid = br.ReadUInt32();
                            layer.Tiles[index++] = gid != 0 ? new TmxLayerTile(map, gid, i, j) : null;
                        }
                    }
                }
            }
            else if (encoding == "csv")
            {
                var csvData = xData.Value;
                int k       = 0;
                foreach (var s in csvData.Split(','))
                {
                    var gid = uint.Parse(s.Trim());
                    var x   = k % width;
                    var y   = k / width;

                    layer.Tiles[k++] = gid != 0 ? new TmxLayerTile(map, gid, x, y) : null;
                }
            }
            else if (encoding == null)
            {
                int k = 0;
                foreach (var e in xData.Elements("tile"))
                {
                    var gid = (uint?)e.Attribute("gid") ?? 0;

                    var x = k % width;
                    var y = k / width;

                    layer.Tiles[k++] = gid != 0 ? new TmxLayerTile(map, gid, x, y) : null;
                }
            }
            else
            {
                throw new Exception("TmxLayer: Unknown encoding.");
            }

            layer.Properties = TiledMapLoader.ParsePropertyDict(xLayer.Element("properties"));

            return(layer);
        }