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(); } }); }
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; } } }
public void PromotePawn(Queem.Core.Color color, Square square, Queem.Core.Figure figure) { this.viewModel.PromotePawn(color, square, figure); }