private Autotiler.Tiles TileHandler(VirtualMap <char> mapData, int x, int y, Rectangle forceFill, char forceID, Autotiler.Behaviour behaviour) { char tile = this.GetTile(mapData, x, y, forceFill, forceID, behaviour); if (this.IsEmpty(tile)) { return(null); } Autotiler.TerrainType set = this.lookup[tile]; bool flag1 = true; int num = 0; for (int index1 = -1; index1 < 2; ++index1) { for (int index2 = -1; index2 < 2; ++index2) { bool flag2 = this.CheckTile(set, mapData, x + index2, y + index1, forceFill, behaviour); if (!flag2 && behaviour.EdgesIgnoreOutOfLevel && !this.CheckForSameLevel(x, y, x + index2, y + index1)) { flag2 = true; } this.adjacent[num++] = flag2 ? (byte)1 : (byte)0; if (!flag2) { flag1 = false; } } } if (flag1) { if ((behaviour.PaddingIgnoreOutOfLevel ? ((!this.CheckTile(set, mapData, x - 2, y, forceFill, behaviour) && this.CheckForSameLevel(x, y, x - 2, y)) || (!this.CheckTile(set, mapData, x + 2, y, forceFill, behaviour) && this.CheckForSameLevel(x, y, x + 2, y)) || (!this.CheckTile(set, mapData, x, y - 2, forceFill, behaviour) && this.CheckForSameLevel(x, y, x, y - 2)) || (!this.CheckTile(set, mapData, x, y + 2, forceFill, behaviour) && this.CheckForSameLevel(x, y, x, y + 2))) : (!this.CheckTile(set, mapData, x - 2, y, forceFill, behaviour) || !this.CheckTile(set, mapData, x + 2, y, forceFill, behaviour)) || (!this.CheckTile(set, mapData, x, y - 2, forceFill, behaviour)) || (!this.CheckTile(set, mapData, x, y + 2, forceFill, behaviour)))) { return(this.lookup[tile].Padded); } else { return(this.lookup[tile].Center); } } //return ? this.lookup[tile].Padded : this.lookup[tile].Center; for (int p = 0; p < set.Masked.Count; p++) { Autotiler.Masked masked = set.Masked[p]; bool flag2 = true; for (int index = 0; index < 9 & flag2; ++index) { if (masked.Mask[index] != (byte)2 && (int)masked.Mask[index] != (int)this.adjacent[index]) { flag2 = false; } } if (flag2) { return(masked.Tiles); } } return(null); }
private void ReadInto(Autotiler.TerrainType data, Tileset tileset, XmlElement xml) { foreach (object obj in (XmlNode)xml) { if (!(obj is XmlComment)) { XmlElement xml1 = obj as XmlElement; string str1 = xml1.Attr("mask"); Autotiler.Tiles tiles; if (str1 == "center") { tiles = data.Center; } else if (str1 == "padding") { tiles = data.Padded; } else { Autotiler.Masked masked = new Autotiler.Masked(); tiles = masked.Tiles; int index = 0; int num = 0; for (; index < str1.Length; ++index) { if (str1[index] == '0') { masked.Mask[num++] = (byte)0; } else if (str1[index] == '1') { masked.Mask[num++] = (byte)1; } else if (str1[index] == 'x' || str1[index] == 'X') { masked.Mask[num++] = (byte)2; } } data.Masked.Add(masked); } string str2 = xml1.Attr("tiles"); char[] chArray1 = new char[1] { ';' }; foreach (string str3 in str2.Split(chArray1)) { char[] chArray2 = new char[1] { ',' }; string[] strArray = str3.Split(chArray2); int index1 = int.Parse(strArray[0]); int index2 = int.Parse(strArray[1]); MTexture mtexture = tileset[index1, index2]; tiles.Textures.Add(mtexture); } if (xml1.HasAttr("sprites")) { string str3 = xml1.Attr("sprites"); char[] chArray2 = new char[1] { ',' }; foreach (string str4 in str3.Split(chArray2)) { tiles.OverlapSprites.Add(str4); } tiles.HasOverlays = true; } } } data.Masked.Sort((Comparison <Autotiler.Masked>)((a, b) => { int num1 = 0; int num2 = 0; for (int index = 0; index < 9; ++index) { if (a.Mask[index] == (byte)2) { ++num1; } if (b.Mask[index] == (byte)2) { ++num2; } } return(num1 - num2); })); }