Autotile

Hello guys,

I wonder if you can help me, am working on game editor for strategy game and issue that I have is how to create autotile for a map. Ya know, 2d array with pieces that if one piece is marked to be grass neighboring pieces around it will adjust so it doesnt seem like square piece > like this

code so far that I have has pieces, each of them divided to 4 parts that a,b,c and d that marks if piece will be full, half or small corner piece

public static function wrapPieces(array:Array):void
        {
            //  Tile is constructed from 4 parts
            //  ___
            // |a|b|
            // |-|-|
            // |c|d|
            // |___|
            
            var i : Number;
            var j : Number;
            var k : Number;
            var text:String="";
            
            // Loop thru all pieces 
            for (i = 0; i < array.length  ; i ++ )
            {
                for (j = 0; j < array*.length ; j++)
                {
                    // find the one that is full 
                    if (array*[j].a == 1 && array*[j].b == 1
                        && array*[j].c == 1 && array*[j].d == 1)
                        {
                            // get neighbors of this piece
                            var neighbors:Array = findNeighborsIn2dArray(i, j, array);
                            for (k = 0; k < neighbors.length  ; k++)
                            {
                                text += neighbors[k].xPos + ":" + neighbors[k].yPos + "|";
                                // found non wrapped field within neighbors
                                if (neighbors[k].a == 0 && neighbors[k].b == 0 
                                    && neighbors[k].c == 0 && neighbors[k].d == 0)
                                    {
                                        // check which side it is on and use wrapper
                                        if (neighbors[k].xPos == array*[j].xPos - 1 
                                            && neighbors[k].yPos == array*[j].yPos -1 )
                                            {
                                                neighbors[k].d = 1;
                                            }
                                        if (neighbors[k].xPos == array*[j].xPos - 1
                                            && neighbors[k].yPos == array*[j].yPos  )
                                            {
                                                neighbors[k].b = 1;
                                                neighbors[k].d = 1;
                                            }
                                        if (neighbors[k].xPos == array*[j].xPos - 1
                                            && neighbors[k].yPos == array*[j].yPos + 1 )
                                            {
                                                neighbors[k].b = 1;
                                            }
                                        
                                        if (neighbors[k].xPos == array*[j].xPos 
                                            && neighbors[k].yPos == array*[j].yPos + 1)
                                            {
                                                neighbors[k].a = 1;
                                                neighbors[k].b = 1;
                                            }
                                            
                                        if (neighbors[k].xPos == array*[j].xPos + 1
                                            && neighbors[k].yPos == array*[j].yPos + 1)
                                            {
                                                neighbors[k].a = 1;
                                            }
                                        if (neighbors[k].xPos == array*[j].xPos + 1
                                            && neighbors[k].yPos == array*[j].yPos)
                                            {
                                                neighbors[k].a = 1;
                                                neighbors[k].c = 1;
                                            }
                                        if (neighbors[k].xPos == array*[j].xPos + 1
                                            && neighbors[k].yPos == array*[j].yPos -1)
                                            {
                                                neighbors[k].c = 1;
                                            }
                                        if (neighbors[k].xPos == array*[j].xPos
                                            && neighbors[k].yPos == array*[j].yPos -1)
                                            {
                                                neighbors[k].c = 1;
                                                neighbors[k].d = 1;
                                            }
                                    }
                                    else
                                    {
                                        // rest of the code :crying:
                                    }
                                
                            }
                        }
                }
            }
        }

Is there any easier way of doing that or I have to code each part neighbor of tiles? Any sugestions?

Thanks