コード例 #1
0
ファイル: ChessBoardControl.xaml.cs プロジェクト: uri65/Queem
        private void InnerAnimateMove(Move move, Queem.Core.Figure figureDied)
        {
            var uniformGrid = mainGrid.FindChild <UniformGrid>();
            var moveGrid    = uniformGrid.Children.OfType <ContentPresenter>()
                              .Where((child) =>
                                     (child.DataContext as SquareItem).Square == move.From)
                              .First();


            int zIndex = Panel.GetZIndex(moveGrid);

            // set zIndex over 9000
            Panel.SetZIndex(moveGrid, 9001);

            this.viewModel.AnimateMove(move,
                                       moveGrid.ActualWidth,
                                       (sourceItem) =>
            {
                if (figureDied != Queem.Core.Figure.Nobody)
                {
                    sourceItem.UpdateChessFigure(figureDied,
                                                 this.viewModel.CurrentPlayerColor.GetOpposite());
                }

                Panel.SetZIndex(moveGrid, zIndex);
                this.animationsDone += 1;

                if (this.animationsDone == this.desiredAnimationsCount)
                {
                    this.OnMoveAnimationFinished();
                }
            });
        }
コード例 #2
0
ファイル: ChessBoardControl.xaml.cs プロジェクト: uri65/Queem
        public void AnimateCancelMove(DeltaChange dc, Move move)
        {
            this.OnMoveAnimationPreview();
            this.SetupAnimationCount(move);

            var figureDiedItems = dc.Filter((ch) =>
                                            (ch.Action == MoveAction.Deletion) &&
                                            (ch.FigureColor != this.viewModel.CurrentPlayerColor) &&
                                            (ch.Square == move.To));

            Queem.Core.Figure figureDied = Queem.Core.Figure.Nobody;
            if (figureDiedItems.Count() > 0)
            {
                figureDied = figureDiedItems.First().FigureType;
            }

            while (dc.HasItems())
            {
                var change = dc.PopLast();

                switch (change.Action)
                {
                case MoveAction.Move:
                    this.InnerAnimateMove(new Move(change.AdditionalSquare, change.Square), figureDied);
                    break;

                case MoveAction.Creation:
                    break;

                case MoveAction.Deletion:
                    if (move.To != change.Square)
                    {
                        this.viewModel.UpdateFigure(change.Square,
                                                    change.FigureType, change.FigureColor);
                    }
                    break;
                }
            }
        }
コード例 #3
0
ファイル: ChessBoardControl.xaml.cs プロジェクト: uri65/Queem
 public void PromotePawn(Queem.Core.Color color, Square square, Queem.Core.Figure figure)
 {
     this.viewModel.PromotePawn(color, square, figure);
 }