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

            RemoveImpossibleNeighbours(propagatePair, possibleValuesAtNeighbour);

            int newPossiblePatternCount = possibleValuesAtNeighbour.Count;

            propagationHelper.AnalyzePropagationResults(propagatePair, startCount, newPossiblePatternCount);
        }
Ejemplo n.º 2
0
 private void ProcessCell(VectorPair propagatePair)
 {
     if (outputGrid.CheckIfCellIsCollapsed(propagatePair.CellToPropagatePosition))
     {
         propagationHelper.EnqueueUncollapseNeighbours(propagatePair);
     }
     else
     {
         PropagateNeighbour(propagatePair);
     }
 }
Ejemplo n.º 3
0
        private void RemoveImpossibleNeighbours(VectorPair propagatePair, HashSet <int> possibleValuesAtNeighbour)
        {
            HashSet <int> possibleIndices = new HashSet <int>();

            foreach (var patternIndexAtBase in outputGrid.GetPossibleValueForPossition(propagatePair.BaseCellPosition))
            {
                var possibleNeighboursForBase = patternManager.GetPossibleNeighboursForPatternInDirection(patternIndexAtBase, propagatePair.DirectionFromBase);
                possibleIndices.UnionWith(possibleNeighboursForBase);
            }

            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());
 }