/// <summary> /// Calculates required piece count to finish for selected cue as series. /// </summary> /// <param name="cue"></param> /// <returns></returns> private byte RequiredPieceCountColorSeries(OkeyCue cue, List <SeriesPiece> series, List <OkeyPiece> notInPerPieces) { // create series list for each color ColorSeries colorSeries = new ColorSeries(); // select and fill pieces into series foreach (OkeyPiece piece in cue.Pieces) { foreach (SeriesPiece s in colorSeries.Series) { if (piece.PieceColor == s.Color) { s.Pieces.Add(piece); } } } int perCountInSeries = CalculatePerCountInSeries(colorSeries, series, notInPerPieces); return(Convert.ToByte(cue.Pieces.Count - (perCountInSeries * 3))); }
private int CalculatePerCountInSeries(ColorSeries colorSeries, List <SeriesPiece> series, List <OkeyPiece> notInPerPieces) { int totalPerCount = 0; foreach (SeriesPiece s in colorSeries.Series) { // sort pieces in series if (s.Pieces.Count >= 3) { s.Pieces = s.Pieces.OrderBy(o => o.PieceValue).ToList(); totalPerCount += CalculatePerCountInSerie(s.Pieces, series, notInPerPieces); } else { foreach (OkeyPiece p in s.Pieces) { notInPerPieces.Add(p); } } } return(totalPerCount); }