/// <summary> /// Interpreta los movimientos /// </summary> private MovementModelCollection ParseMovements(VariationModel variation, MoveTextEntryList moveEntryList) { MovementModelCollection movements = new MovementModelCollection(); PieceBaseModel.PieceColor actualColor = PieceBaseModel.PieceColor.White; PieceBaseModelCollection previousPieces = new PieceBaseModelCollection(); // Inicializa el tablero variation.GameBoard.Reset(); // Cambia el color inicial if (variation.Setup.HasSetup && !variation.Setup.IsWhiteMove) { actualColor = PieceBaseModel.PieceColor.Black; } // Interpreta la lista de movimientos try { foreach (MoveTextEntry moveEntry in moveEntryList) { switch (moveEntry) { case RAVEntry rav: MovementFigureModel lastMovement = movements.SearchLastPieceMovement(); if (lastMovement != null) { lastMovement.Variation = CreateVariation(actualColor, previousPieces, rav); } break; case NAGEntry nag: System.Diagnostics.Debug.WriteLine(moveEntry.GetType().ToString()); break; case CommentEntry comment: movements.Add(new MovementRemarksModel(comment.Comment)); break; case MovePairEntry movement: // Añade el movimiento de blancas movements.Add(ParseMovement(variation.GameBoard, actualColor, (moveEntry as MovePairEntry).White)); actualColor = GetNextColor(actualColor); // Clona la lista de piezas hasta el movimiento anterior previousPieces = variation.GameBoard.Pieces.Clone(); // Añade el movimiento de negras movements.Add(ParseMovement(variation.GameBoard, actualColor, (moveEntry as MovePairEntry).Black)); actualColor = GetNextColor(actualColor); break; case HalfMoveEntry movement: // Clona la lista de piezas hasta el movimiento anterior previousPieces = variation.GameBoard.Pieces.Clone(); // Añade el movimiento actual movements.Add(ParseMovement(variation.GameBoard, actualColor, (moveEntry as HalfMoveEntry).Move)); actualColor = GetNextColor(actualColor); break; case GameEndEntry movement: movements.Add(new MovementGameEndModel(ConvertResult(movement.Result))); break; default: System.Diagnostics.Debug.WriteLine(moveEntry.GetType().ToString()); break; } } } catch (Exception exception) { variation.ParseError = exception.Message; } // Devuelve la colección de movimientos return(movements); }