public static EnvironmentFillInfo getCrateriaEnvironmentFillInfo()
        {
            EnvironmentFillInfo efi = new EnvironmentFillInfo();
            efi.EMPTY = 3;
            efi.EMPTY_BOTTOMLEFT = 13;
            efi.EMPTY_BOTTOMRIGHT = 14;
            efi.EMPTY_TOPLEFT = 8;
            efi.EMPTY_TOPRIGHT = 9;
            efi.FILL = 6;
            efi.FILL_BOTTOM = 1;
            efi.FILL_BOTTOMLEFT = 2;
            efi.FILL_BOTTOMRIGHT = 0;
            efi.FILL_LEFT = 7;
            efi.FILL_RIGHT = 5;
            efi.FILL_TOP = 11;
            efi.FILL_TOPLEFT = 12;
            efi.FILL_TOPRIGHT = 10;
            efi.OTHER = 4;

            return efi;
        }
 public static void fill(Point p, Dictionary<Point, bool> tilesToFix, int[,] tiles, EnvironmentFillInfo efi)
 {
     if (tilesToFix.ContainsKey(p) && tilesToFix[p] == true)
     {
         return;
     }
     if (p.X < 0 || p.Y < 0 || p.X >= Area.WIDTH_IN_TILES || p.Y >= Area.HEIGHT_IN_TILES)
     {
         return;
     }
     tiles[p.X, p.Y] = efi.FILL;
     tilesToFix[p] = true;
     fill(new Point(p.X - 1, p.Y), tilesToFix, tiles, efi);
     fill(new Point(p.X + 1, p.Y), tilesToFix, tiles, efi);
     fill(new Point(p.X, p.Y - 1), tilesToFix, tiles, efi);
     fill(new Point(p.X, p.Y + 1), tilesToFix, tiles, efi);
 }