Ejemplo n.º 1
0
        private void PropagateNeighbours(VectorPair propagatePair)
        {
            var possibleValuesAtNeighbour = outputGrid.GetPossibleValuesForPositon(propagatePair.CellToPropagatePosition);
            int startCount = possibleValuesAtNeighbour.Count();

            RemoverImpossibleNeighbours(propagatePair, possibleValuesAtNeighbour);

            int newPossiblePatternCount = possibleValuesAtNeighbour.Count;

            propagationHelper.AnalyzePropagatonResults(propagatePair, startCount, newPossiblePatternCount);
        }
Ejemplo n.º 2
0
 private void ProcessCells(VectorPair propagatePair)
 {
     if (outputGrid.CheckIfCellIsCollapsed(propagatePair.CellToPropagatePosition))
     {
         propagationHelper.EnqueueUncollapsedNeighbours(propagatePair);
     }
     else
     {
         PropagateNeighbours(propagatePair);
     }
 }
Ejemplo n.º 3
0
        private void RemoverImpossibleNeighbours(VectorPair propagatePair, HashSet <int> possibleValuesAtNeighbour)
        {
            HashSet <int> possibleIndices = new HashSet <int>();


            foreach (var patternIndexAtBase in outputGrid.GetPossibleValuesForPositon(propagatePair.BaseCellPosition))
            {
                var possibleNeighborusForBase = patternManager.GetPossibleNeighboursForPatternInDIrection(patternIndexAtBase, propagatePair.DiectionFromBase);

                possibleIndices.UnionWith(possibleNeighborusForBase);
            }

            possibleValuesAtNeighbour.IntersectWith(possibleIndices);
        }
Ejemplo n.º 4
0
 public List <VectorPair> CheckIfNeighboursAreCollapsed(VectorPair pairToCheck, OutputGrid outputgrid)
 {
     return(Create4DirectionNeighbours(pairToCheck.CellToPropagatePosition, pairToCheck.BaseCellPosition)
            .Where(x => outputgrid.CheckIfValidPosition(x.CellToPropagatePosition) && outputgrid.CheckIfCellIsCollapsed(x.CellToPropagatePosition) == false)
            .ToList());
 }