private bool CheckEveryNeighbour(OutputGrid outputGrid) { for (int row = 0; row < outputGrid.height; row++) { for (int col = 0; col < outputGrid.width; col++) { Vector2Int cellCoordinates = new Vector2Int(col, row); List <VectorPair> list = new List <VectorPair>() { new VectorPair(cellCoordinates, cellCoordinates + new Vector2Int(1, 0), Direction.Right, cellCoordinates), new VectorPair(cellCoordinates, cellCoordinates + new Vector2Int(-1, 0), Direction.Left, cellCoordinates), new VectorPair(cellCoordinates, cellCoordinates + new Vector2Int(0, 1), Direction.Up, cellCoordinates), new VectorPair(cellCoordinates, cellCoordinates + new Vector2Int(0, -1), Direction.Down, cellCoordinates) }; foreach (var item in list) { if (item.CellToPropagatePosition.x >= 0 && item.CellToPropagatePosition.x < 3 && item.CellToPropagatePosition.y >= 0 && item.CellToPropagatePosition.y < 3 && outputGrid.CheckCellExists(item.CellToPropagatePosition)) { var itemToCheck = outputGrid.GetPossibleValuesForPositon(item.CellToPropagatePosition).First(); var baseCell = outputGrid.GetPossibleValuesForPositon(cellCoordinates).First(); if (patternManager.GetPossibleNeighboursForPatternInDIrection(baseCell, item.DiectionFromBase).Contains(itemToCheck) == false) { Debug.Log(baseCell + " cant have a neighbour " + itemToCheck + " at direction " + item.DiectionFromBase.ToString()); return(false); } } } } } return(true); }