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);
            }
Exemplo n.º 2
0
 public int GetRandomIndex(Func <double> randomDouble)
 {
     return(filteredIndexPicker.GetRandomIndex(randomDouble, dirtyIndices));
 }