public int GetRandomIndex(Func <double> randomDouble) { var topology = propagator.Topology; var t = edgedPathView.PathSelectedTracker; // Find cells that could potentially be paths, and are next to // already selected path. In tileSpace var highPriority = new List <int>(); var mediumPrioiry = new List <int>(); var lowPriority = new List <int>(); foreach (var i in topology.GetIndices()) { var qs = t.GetQuadstate(i); if (qs.IsYes()) { highPriority.Add(i); continue; } if (qs.IsNo()) { lowPriority.Add(i); continue; } // Determine if any neighbours exit onto this tile var found = false; for (var d = 0; d < topology.DirectionsCount; d++) { if (topology.TryMove(i, (Direction)d, out var i2, out var inverseDirection, out var _)) { if (edgedPathView.TrackerByExit.TryGetValue(inverseDirection, out var tracker)) { var s2 = tracker.GetQuadstate(i2); if (s2.IsYes()) { mediumPrioiry.Add(i); found = true; break; } } } } if (!found) { lowPriority.Add(i); } } var index = filteredIndexPicker.GetRandomIndex(randomDouble, highPriority); if (index != -1) { return(index); } index = filteredIndexPicker.GetRandomIndex(randomDouble, mediumPrioiry); if (index != -1) { return(index); } index = filteredIndexPicker.GetRandomIndex(randomDouble, lowPriority); return(index); }
public int GetRandomIndex(Func <double> randomDouble) { return(filteredIndexPicker.GetRandomIndex(randomDouble, dirtyIndices)); }