public void TraverseCellsWithinSquare <TCookie>(int distFromCenter, int centerX, int centerZ, Board.CellTraverseWithCookieCallback <TCookie> callback, TCookie cookie) { int num = centerX - distFromCenter; int num2 = centerX + distFromCenter; int num3 = centerZ - distFromCenter; int num4 = centerZ + distFromCenter; for (int i = num; i <= num2; i++) { for (int j = num3; j <= num4; j++) { BoardCell cellAt = this.GetCellAt(i, j); if (cellAt != null) { callback(cellAt, cookie); } } } }
public void TraverseCircle <TCookie>(int radius, int centerX, int centerZ, Board.CellTraverseWithCookieCallback <TCookie> callback, TCookie cookie) { if (radius == 0) { callback(this.GetCellAt(centerX, centerZ), cookie); return; } if (radius == 1) { callback(this.GetCellAt(centerX - 1, centerZ - 1), cookie); callback(this.GetCellAt(centerX, centerZ - 1), cookie); callback(this.GetCellAt(centerX + 1, centerZ - 1), cookie); callback(this.GetCellAt(centerX - 1, centerZ), cookie); callback(this.GetCellAt(centerX, centerZ), cookie); callback(this.GetCellAt(centerX + 1, centerZ), cookie); callback(this.GetCellAt(centerX - 1, centerZ + 1), cookie); callback(this.GetCellAt(centerX, centerZ + 1), cookie); callback(this.GetCellAt(centerX + 1, centerZ + 1), cookie); return; } int i = radius; int num = 0; int num2 = 1 - i; while (i >= num) { if (i > num) { for (int j = i; j >= -i; j--) { callback(this.GetCellAt(j + centerX, num + centerZ), cookie); } } if (num > 0 && num < i) { for (int k = i; k >= -i; k--) { callback(this.GetCellAt(k + centerX, -num + centerZ), cookie); } } if (num2 < 0) { num++; num2 += 2 * num + 1; } else { for (int l = num; l >= -num; l--) { callback(this.GetCellAt(l + centerX, i + centerZ), cookie); } for (int m = num; m >= -num; m--) { callback(this.GetCellAt(m + centerX, -i + centerZ), cookie); } num++; i--; num2 += 2 * (num - i + 1); } } }