/// <summary> /// Starts the right. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="grid">The grid.</param> /// <param name="startx">The startx.</param> /// <param name="starty">The starty.</param> /// <param name="test">The test.</param> /// <param name="set">The set.</param> /// <param name="testup">if set to <c>true</c> [testup].</param> private static void StartRight <T>(ref MatrixO <T> grid, int startx, int starty, T test, T set, bool testup) { if (starty < 0 || starty >= grid.Height) { return; } for (var x = startx; x < grid.Width; x++) { var v1 = grid.Matrix[starty][x]; var v2 = test; if ((grid.CompareF == null && v1.Equals(v2)) || (grid.CompareF != null && grid.CompareF(v1, v2))) { grid.Matrix[starty][x] = set; //test direction if (testup && starty > 0 && grid.Matrix[starty - 1][x].Equals(test)) { StartRight(ref grid, startx, starty - 1, test, set, testup); } else if (testup == false && starty < (grid.Height - 1) && grid.Matrix[starty + 1][x].Equals(test)) { StartRight(ref grid, startx, starty + 1, test, set, testup); } } else { return; } } }
/// <summary> /// Floods the fill. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="grid">The grid.</param> /// <param name="startX">The start x.</param> /// <param name="startY">The start y.</param> /// <param name="test">The test.</param> /// <param name="set">The set.</param> /// <param name="compareF">The compare f.</param> public static void FloodFill <T>(ref T[][] grid, int startX, int startY, T test, T set, CompareDel <T> compareF = null) { var g = new MatrixO <T> { Matrix = grid, Height = grid.Length, Width = grid[0].Length, CompareF = compareF }; StartRight(ref g, startX, startY, test, set, true); StartRight(ref g, startX, startY + 1, test, set, false); grid = g.Matrix; }