/// <summary> /// Carga en la lista una variación de movimientos /// </summary> private void LoadVariationMovements(VariationModel variation, int movementIndex, int movementLineIndex, int variationIndex) { MovementFigureDoubleViewModel lastMovement = null; MovementFigureVariationDoubleViewModel lastRecursiveMovement = null; foreach (MovementBaseModel movement in variation.Movements) { switch (movement) { case MovementFigureModel move: // Añade a la lista un movimiento real o un movimiento recursivo if (variationIndex == 0) { // Añade el movimiento a la lista de movimientos de piezas (sin comentarios) FigureMovements.Add(move); // Crea el movimiento para la lista lastMovement = CreateRealMovement(lastMovement, move, movementIndex, movementLineIndex); lastRecursiveMovement = null; } else if (PgnGameViewModel.ShowVariations) { lastRecursiveMovement = CreateRecursiveMovement(lastRecursiveMovement, move, movementIndex, movementLineIndex, variationIndex); lastMovement = null; } // Incrementa los índices de movimientos movementIndex++; if (move.Color == Bau.Libraries.LibChessGame.Board.Pieces.PieceBaseModel.PieceColor.Black) { movementLineIndex++; } break; case MovementRemarksModel move: Movements.Add(new MovementRemarkViewModel(move)); lastMovement = null; lastRecursiveMovement = null; break; case MovementGameEndModel move: Movements.Add(new MovementGameEndViewModel(move)); lastMovement = null; lastRecursiveMovement = null; break; } } }
/// <summary> /// Crea un movimiento de una variación /// </summary> private MovementFigureVariationDoubleViewModel CreateRecursiveMovement(MovementFigureVariationDoubleViewModel lastMovement, MovementFigureModel move, int movementIndex, int movementLineIndex, int variationIndex) { // Si es necesario, crea un nuevo movimiento if (lastMovement == null) { lastMovement = new MovementFigureVariationDoubleViewModel(movementIndex, movementLineIndex, variationIndex); Movements.Add(lastMovement); } // Asigna el movimiento de blancas / negras if (move.Color == Bau.Libraries.LibChessGame.Board.Pieces.PieceBaseModel.PieceColor.White) { // Asigna el movimiento de blancas lastMovement.WhiteMovement = new MovementFigureViewModel(PgnGameViewModel, move, movementIndex, variationIndex); // Carga la variación if (MustShowVariations(move)) { LoadVariationMovements(move.Variation, movementIndex, movementLineIndex, variationIndex + 1); lastMovement = null; } } else // Asigna el movimiento de negras { // Asigna el movimiento de negras lastMovement.BlackMovement = new MovementFigureViewModel(PgnGameViewModel, move, movementIndex, variationIndex); // Carga la variación if (MustShowVariations(move)) { LoadVariationMovements(move.Variation, movementIndex, movementLineIndex, variationIndex + 1); } lastMovement = null; } // Devuelve el último movimiento añadido a la lista return(lastMovement); }