public TMXTileGroup(XMLElement element) { name = element.GetAttribute("name", null); width = element.GetIntAttribute("width", 0); height = element.GetIntAttribute("height", 0); objects = new List<TMXTile>(); XMLElement propsElement = element.GetChildrenByName("properties"); if (propsElement != null) { List<XMLElement> properties = propsElement.List("property"); if (properties != null) { props = new TMXProperty(); for (int p = 0; p < properties.Count; p++) { XMLElement propElement = properties[p]; string name_0 = propElement.GetAttribute("name", null); string value_ren = propElement.GetAttribute("value", null); props.SetProperty(name_0, value_ren); } } } List<XMLElement> objectNodes = element.List("object"); for (int i = 0; i < objectNodes.Count; i++) { XMLElement objElement = objectNodes[i]; TMXTile obj0 = new TMXTile(objElement); obj0.index = i; CollectionUtils.Add(objects, obj0); } }
public TMXTile(XMLElement element) { name = element.GetAttribute("name", ""); type = element.GetAttribute("type", ""); x = element.GetIntAttribute("x", 0); y = element.GetIntAttribute("y", 0); string w = element.GetAttribute("width", null); string h = element.GetAttribute("height", null); width = System.Int32.Parse((w == null || "".Equals(w)) ? "0" : w); height = System.Int32.Parse((h == null || "".Equals(h)) ? "0" : h); XMLElement imageElement = element .GetChildrenByName("image"); if (imageElement != null) { image = imageElement.GetAttribute("source", null); } XMLElement propsElement = element .GetChildrenByName("properties"); if (propsElement != null) { props = new TMXProperty(); List<XMLElement> property = propsElement.List("property"); for (int i = 0; i < property.Count; i++) { XMLElement propElement = property[i]; string name_0 = propElement.GetAttribute("name", null); string value_ren = propElement.GetAttribute("value", null); props.SetProperty(name_0, value_ren); } } }
private void Set(XMLElement Pack) { this.fileName = Pack.GetAttribute("file", null); this.name = Pack.GetAttribute("name", fileName); int r = Pack.GetIntAttribute("r", -1); int g = Pack.GetIntAttribute("g", -1); int b = Pack.GetIntAttribute("b", -1); int a = Pack.GetIntAttribute("a", -1); if (r != -1 && g != -1 && b != -1 && a != -1) { colorMask = new LColor(r, g, b, a); } if (fileName != null) { List<XMLElement> blocks = Pack.List("block"); foreach (XMLElement e in blocks) { PackEntry entry = new PackEntry(null); int id = e.GetIntAttribute("id", count); entry.id = id; entry.fileName = e.GetAttribute("name", null); entry.bounds.left = e.GetIntAttribute("left", 0); entry.bounds.top = e.GetIntAttribute("top", 0); entry.bounds.right = e.GetIntAttribute("right", 0); entry.bounds.bottom = e.GetIntAttribute("bottom", 0); if (entry.fileName != null) { temps.Put(entry.fileName, entry); } else { temps.Put(Convert.ToString(id), entry); } count++; } this.packing = false; this.packed = true; } this.useAlpha = true; }
public TMXTileSet(TMXTiledMap map, XMLElement element, bool loadImage) { this.map = map; this.name = element.GetAttribute("name", null); this.firstGID = element.GetIntAttribute("firstgid", 0); string source = element.GetAttribute("source", ""); if (!"".Equals(source)) { try { Stream ins0 = Resources.OpenStream(map.GetTilesLocation() + "/" + source); XMLDocument doc = XMLParser.Parse(ins0); XMLElement docElement = doc.GetRoot(); element = docElement; } catch (Exception e) { Loon.Utils.Debug.Log.Exception(e); throw new Exception(this.map.tilesLocation + "/" + source); } } string tileWidthString = element.GetAttribute("tilewidth", ""); string tileHeightString = element.GetAttribute("tileheight", ""); if (tileWidthString.Length == 0 || tileHeightString.Length == 0) { throw new Exception( "tileWidthString.length == 0 || tileHeightString.length == 0"); } tileWidth = Int32.Parse(tileWidthString); tileHeight = Int32.Parse(tileHeightString); string sv = element.GetAttribute("spacing", ""); if ((sv != null) && (!"".Equals(sv))) { tileSpacing = Int32.Parse(sv); } string mv = element.GetAttribute("margin", ""); if ((mv != null) && (!"".Equals(mv))) { tileMargin = Int32.Parse(mv); } List<XMLElement> list = element.List("image"); XMLElement imageNode = list[0]; string fileName = imageNode.GetAttribute("source", null); LColor trans = null; string t = imageNode.GetAttribute("trans", null); if ((t != null) && (t.Length > 0)) { trans = new LColor(((uint)Convert.ToInt32(t, 16))); } if (loadImage) { string path = map.GetTilesLocation() + "/" + fileName; LTexture image; if (trans != null) { image = TextureUtils.FilterColor(path, trans); } else { image = LTextures.LoadTexture(path); } SetTileSetImage(image); } List<XMLElement> elements = element.List("tile"); for (int i = 0; i < elements.Count; i++) { XMLElement tileElement = elements[i]; int id = tileElement.GetIntAttribute("id", 0); id += firstGID; TMXProperty tileProps = new TMXProperty(); XMLElement propsElement = tileElement .GetChildrenByName("properties"); List<XMLElement> properties = propsElement.List("property"); for (int p = 0; p < properties.Count; p++) { XMLElement propElement = properties[p]; string name_1 = propElement.GetAttribute("name", null); string value_ren = propElement.GetAttribute("value", null); tileProps.SetProperty(name_1, value_ren); } CollectionUtils.Put(props, id, tileProps); } }
/// <summary> /// 根据TMX地图描述创建一个新层 /// </summary> /// /// <param name="map"></param> /// <param name="element"></param> /// <exception cref="System.Exception"></exception> public TMXLayer(TMXTiledMap map, XMLElement element) { this.tmx = map; this.name = element.GetAttribute("name", ""); this.width = element.GetIntAttribute("width", 0); this.height = element.GetIntAttribute("height", 0); this.data = new int[width, height, 3]; this.MaxLightSize(width, height); // 获得当前图层属性 XMLElement propsElement = element.GetChildrenByName("properties"); if (propsElement != null) { props = new TMXProperty(); List<XMLElement> properties = propsElement.List("property"); for (int i = 0; i < properties.Count; i++) { XMLElement propElement = properties[i]; string name_0 = propElement.GetAttribute("name", null); string value_ren = propElement.GetAttribute("value", null); props.SetProperty(name_0, value_ren); } } XMLElement dataNode = element.GetChildrenByName("data"); string encoding = dataNode.GetAttribute("encoding", null); string compression = dataNode.GetAttribute("compression", null); // 进行base64的压缩解码 if ("base64".Equals(encoding) && "gzip".Equals(compression)) { try { byte[] sdec = Base64Coder.DecodeBase64(dataNode.GetContents().Trim().ToCharArray()); ByteArrayInputStream mask0 = new ByteArrayInputStream(sdec); GZipInputStream dis = new GZipInputStream(mask0); for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { int tileId = 0; tileId |= dis.ReadByte(); tileId |= dis.ReadByte() << 8; tileId |= dis.ReadByte() << 16; tileId |= dis.ReadByte() << 24; if (tileId == 0) { data[x,y,0] = -1; data[x,y,1] = 0; data[x,y,2] = 0; } else { TMXTileSet set = map.FindTileSet(tileId); if (set != null) { data[x,y,0] = set.index; data[x,y,1] = tileId - set.firstGID; } data[x,y,2] = tileId; } } } } catch (Exception e) { Loon.Utils.Debugging.Log.Exception(e); throw new Exception("Unable to decode base64 !"); } } else { throw new Exception("Unsupport tiled map type " + encoding + "," + compression + " only gzip base64 Support !"); } }