/// <summary> /// Clona los datos /// </summary> public override MovementBaseModel Clone() { MovementFigureModel target = new MovementFigureModel(new MovementTurnModel(Turn.Number, Turn.Type), Content); // Clona los datos internos CloneInner(target); // Clona las propiedades target.Color = Color; target.Type = Type; target.OriginPiece = OriginPiece; target.From = new CellModel(From); target.To = new CellModel(To); target.PromotedPiece = PromotedPiece; target.Captured = Captured?.Clone(); if (CapturedEnPassant != null) { target.CapturedEnPassant = new CellModel(CapturedEnPassant); } target.IsCheck = IsCheck; target.IsDoubleCheck = IsDoubleCheck; target.IsCheck = IsCheckMate; target.IsDrawOffered = IsDrawOffered; // Devuelve el objeto return(target); }
/// <summary> /// Clona los movimientos hasta una variación /// </summary> internal MovementModelCollection CloneTo(MovementVariationModel variation, MovementVariationModel targetVariation, MovementFigureModel targetMovement) { MovementModelCollection movements = new MovementModelCollection(); bool variationFound = false; // Clona los datos foreach (MovementBaseModel movement in this) { if (!variationFound) { // Busca la variación entre las variaciones del movimiento foreach (MovementVariationModel variationChild in movement.Variations) { if (variationChild.Id == targetVariation.Id) { // Añade los movimientos de la variación foreach (MovementBaseModel movementBase in variationChild.Movements) { movements.Add(movementBase.Clone()); } // Indica que se ha encontrado la variación y no se debe seguir clonando variationFound = true; } } // Si no se ha encontrado la variación, se sigue clonando, si se ha encontrado, se sustituye el // movimiento por el destino y se deja de clonar if (!variationFound) { movements.Add(movement.Clone()); } } } // Devuelve la colección clonada return(movements); }
/// <summary> /// Clona hasta una variación /// </summary> public MovementVariationModel CloneTo(MovementBaseModel parent, MovementVariationModel target, MovementFigureModel movement) { MovementVariationModel variation = new MovementVariationModel(parent); // Clona los movimientos variation.Movements.AddRange(Movements.CloneTo(variation, target, movement)); // Devuelve la variación clonada return(variation); }