/// <summary> /// 前回動かした駒の位置を設定します。 /// </summary> private void UpdatePrevMovedCell() { if (this.prevMovedCell != null) { Container.RemoveBanEffect(this.prevMovedCell); this.prevMovedCell = null; } if (!HasEffectFlag(EffectFlag.PrevCell)) { return; } var board = (Container != null ? Container.Board : null); if (board != null && board.LastMove != null) { var position = board.LastMove.DstSquare; var cell = EffectTable.PrevMovedCell.LoadEffect(); if (cell != null) { cell.DataContext = CreateCellContext(position); Container.AddBanEffect(cell); this.prevMovedCell = cell; } } }
/// <summary> /// 駒を動かせる位置を光らせます。 /// </summary> private void UpdateMovableCell(Square square, BoardPiece piece) { if (this.movableCell != null) { Container.RemoveBanEffect(this.movableCell); this.movableCell = null; } if (!HasEffectFlag(EffectFlag.MovableCell)) { return; } var board = Container.Board; if (board == null || piece == null) { return; } // 移動可能もしくは駒打ち可能な全マスを取得します。 var isMove = (square != null); var moveSquares = from sq in Board.AllSquares() let move = new BoardMove() { DstSquare = square, SrcSquare = sq, MovePiece = (isMove ? piece.Piece : null), DropPieceType = (isMove ? PieceType.None : piece.PieceType), BWType = piece.BWType, } let move2 = (Board.IsPromoteForce(move) ? move.Apply(_ => _.IsPromote = true) : move) where board.CanMove(move2) select move2.DstSquare; // 移動可能なマスにエフェクトをかけます。 var movableCell = EffectTable.MovableCell.LoadEffect(); if (movableCell != null) { movableCell.DataContext = CreateCellContext(moveSquares, square); Container.AddBanEffect(movableCell); this.movableCell = movableCell; } }
/// <summary> /// 手番の表示を行います。 /// </summary> private void UpdateTeban(BWType teban) { if (this.tebanCell != null) { Container.RemoveBanEffect(this.tebanCell); this.tebanCell = null; } if (!HasEffectFlag(EffectFlag.Teban)) { return; } // 手番なしの時はオブジェクトを消去して帰ります。 if (teban == BWType.None) { return; } // 移動可能なマスにエフェクトをかけます。 var tebanCell = EffectTable.Teban.LoadEffect(); if (tebanCell != null) { if (Container.ViewSide != BWType.Black) { teban = teban.Flip(); } tebanCell.DataContext = CreateCellContext((Square)null) .Apply(_ => _.BWType = teban); Container.AddBanEffect(tebanCell); this.tebanCell = tebanCell; } }