Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
 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);
     }));
 }