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