private static void FillCell(BitmapSpan contraints, VectorInt2 p, IBitmap output) { if (p.X < 0 || p.Y < 0) { return; } if (p.X > contraints.Size.X || p.Y > contraints.Size.Y) { return; } if (contraints[p]) { return; } if (output[p]) { return; } output[p] = true; FillCell(contraints, p + VectorInt2.Up, output); FillCell(contraints, p + VectorInt2.Down, output); FillCell(contraints, p + VectorInt2.Left, output); FillCell(contraints, p + VectorInt2.Right, output); }
public static Bitmap Fill(BitmapSpan contraints, VectorInt2 p) { var result = new Bitmap(contraints.Size); Fill(contraints, p, result); return(result); }
public static bool DynamicCheck(StaticMaps staticMaps, IStateMaps node, BitmapSpan both) { // Box Rule foreach (var crate in node.CrateMap.TruePositions()) { if (staticMaps.GoalMap[crate]) { continue; } if (both[crate + VectorInt2.Left] && both[crate + VectorInt2.Left + VectorInt2.Down] && both[crate + VectorInt2.Down] ) { return(true); } if (both[crate + VectorInt2.Left] && both[crate + VectorInt2.Left + VectorInt2.Up] && both[crate + VectorInt2.Up] ) { return(true); } if (both[crate + VectorInt2.Right] && both[crate + VectorInt2.Right + VectorInt2.Down] && both[crate + VectorInt2.Down] ) { return(true); } if (both[crate + VectorInt2.Right] && both[crate + VectorInt2.Right + VectorInt2.Up] && both[crate + VectorInt2.Up] ) { return(true); } } return(false); }
public static void Fill(BitmapSpan contraints, VectorInt2 p, IBitmap output) { FillCell(contraints, p, output); }