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); }
private void ProcessCell(VectorPair propagatePair) { if (outputGrid.CheckIfCellIsCollapsed(propagatePair.CellToPropagatePosition)) { propagationHelper.EnqueueUncollapseNeighbours(propagatePair); } else { PropagateNeighbour(propagatePair); } }
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); }
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()); }