//FloodAndSetRooms //FloodAndSetNewRegionIndex public static bool WithinRegions(this IntVec3 A, IntVec3 B, Map map, int regionLookCount, TraverseParms traverseParams, RegionType traversableRegionTypes = RegionType.Set_Passable) { WaterRegion region = WaterGridsUtility.GetRegion(A, map, traversableRegionTypes); if (region is null) { return(false); } WaterRegion regB = WaterGridsUtility.GetRegion(B, map, traversableRegionTypes); if (regB is null) { return(false); } if (region == regB) { return(true); } WaterRegionEntryPredicate entryCondition = (WaterRegion from, WaterRegion r) => r.Allows(traverseParams, false); bool found = false; WaterRegionProcessor regionProcessor = delegate(WaterRegion r) { if (r == regB) { found = true; return(true); } return(false); }; WaterRegionTraverser.BreadthFirstTraverse(region, entryCondition, regionProcessor, regionLookCount, traversableRegionTypes); return(found); }
public static void MarkRegionsBFS(WaterRegion root, WaterRegionEntryPredicate entryCondition, int maxRegions, int inRadiusMark, RegionType traversableRegionTypes = RegionType.Set_Passable) { WaterRegionTraverser.BreadthFirstTraverse(root, entryCondition, delegate(WaterRegion r) { r.mark = inRadiusMark; return(false); }, maxRegions, traversableRegionTypes); }
public static void BreadthFirstTraverse(IntVec3 start, Map map, WaterRegionEntryPredicate entryCondition, WaterRegionProcessor regionProcessor, int maxRegions = 999999, RegionType traversableRegionTypes = RegionType.Set_Passable) { WaterRegion region = WaterGridsUtility.GetRegion(start, map, traversableRegionTypes); if (region is null) { return; } WaterRegionTraverser.BreadthFirstTraverse(region, entryCondition, regionProcessor, maxRegions, traversableRegionTypes); }