public void Init(TilePropagator propagator)
        {
            var oddPathTiles = PathSpec.Exits.Where(x => x.Value.Count() % 2 == 1).Select(x => x.Key).ToList();

            oddPathTilesSet = propagator.CreateTileSet(oddPathTiles);
            oddPathTracker  = oddPathTiles.Count > 0 ? propagator.CreateSelectedTracker(oddPathTilesSet) : null;
            pathView        = (EdgedPathView)PathSpec.MakeView(propagator);
            this.propagator = propagator;
            this.topology   = propagator.Topology;
        }
 public FollowPathHeuristic(
     IRandomPicker randomPicker,
     Func <double> randomDouble,
     TilePropagator propagator,
     TileModelMapping tileModelMapping,
     IPickHeuristic fallbackHeuristic,
     EdgedPathView edgedPathView)
 {
     this.randomPicker      = randomPicker;
     this.randomDouble      = randomDouble;
     this.propagator        = propagator;
     this.tileModelMapping  = tileModelMapping;
     this.fallbackHeuristic = fallbackHeuristic;
     this.edgedPathView     = edgedPathView;
 }
 public void Init(WavePropagator wavePropagator)
 {
     filteredIndexPicker.Init(wavePropagator);
     // TODO: It's a pity this isn't shared with the path constraint
     edgedPathView = (EdgedPathView)edgedPathSpec.MakeView(propagator);
 }