/// <summary> /// 盤面の駒が移動したときに呼ばれます。 /// </summary> private void OnBoardPieceChanged(object sender, BoardChangedEventArgs e) { var move = e.Move; if ((object)move == null || !move.Validate()) { return; } // 一応 EndMove(); // 指し手が進んだときのエフェクトを追加します。 if (EffectManager != null) { EffectManager.Moved(move, e.IsUndo); } }
/// <summary> /// 盤面の駒が移動したときに呼ばれます。 /// </summary> private void OnBoardPieceChanged(object sender, BoardChangedEventArgs e) { var move = e.Move; if ((object)move == null || !move.Validate()) { return; } // 短縮形 var np = move.DstSquare; var op = move.SrcSquare; // 一応 EndMove(); // リドゥ・アンドゥ両方に対応します。 if (np != null) { RemovePieceObject(np); } if (op != null) { RemovePieceObject(op); } // 駒打ち if (move.DropPieceType != PieceType.None) { SyncCapturedPieceCount( move.DropPieceType, move.BWType); } // 駒を取った場合 if (move.TookPiece != null) { SyncCapturedPieceCount( move.TookPiece.PieceType, move.BWType); // 取った駒を元の位置に戻します。 if (e.IsUndo) { AddPieceObject(new PieceObject(this, Board[np], np)); } } // リドゥ時は新しい場所に、アンドゥ時は昔の場所に駒をおきます。 // アンドゥで駒打ちの場合、追加される駒はありません。 var square = (e.IsUndo ? move.SrcSquare : move.DstSquare); if (square != null) { AddPieceObject(new PieceObject(this, Board[square], square)); } // 指し手が進んだときのエフェクトを追加します。 if (EffectManager != null) { EffectManager.Moved(move, e.IsUndo); } }