protected override void InitializePiecesCollection() { void InitializeSide(Int32 yPieceCoordinate, Int32 firstPieceId, EPieceColor sideColor, Boolean mirrorOverX) { Int32 xPieceCoordinate; for (xPieceCoordinate = 0; xPieceCoordinate < 8; xPieceCoordinate++) { _pieces.Add(firstPieceId, CPiece.Create(firstPieceId++, EPieceType.Pawn, sideColor, new CTile(xPieceCoordinate, yPieceCoordinate))); } if (mirrorOverX) { --yPieceCoordinate; } else { ++yPieceCoordinate; } xPieceCoordinate = 0; _pieces.Add(firstPieceId, CPiece.Create(firstPieceId++, EPieceType.Rook, sideColor, new CTile(xPieceCoordinate++, yPieceCoordinate))); _pieces.Add(firstPieceId, CPiece.Create(firstPieceId++, EPieceType.Knight, sideColor, new CTile(xPieceCoordinate++, yPieceCoordinate))); _pieces.Add(firstPieceId, CPiece.Create(firstPieceId++, EPieceType.Bishop, sideColor, new CTile(xPieceCoordinate++, yPieceCoordinate))); _pieces.Add(firstPieceId, CPiece.Create(firstPieceId++, EPieceType.Queen, sideColor, new CTile(xPieceCoordinate++, yPieceCoordinate))); _pieces.Add(firstPieceId, CPiece.Create(firstPieceId++, EPieceType.King, sideColor, new CTile(xPieceCoordinate++, yPieceCoordinate))); _pieces.Add(firstPieceId, CPiece.Create(firstPieceId++, EPieceType.Bishop, sideColor, new CTile(xPieceCoordinate++, yPieceCoordinate))); _pieces.Add(firstPieceId, CPiece.Create(firstPieceId++, EPieceType.Knight, sideColor, new CTile(xPieceCoordinate++, yPieceCoordinate))); _pieces.Add(firstPieceId, CPiece.Create(firstPieceId, EPieceType.Rook, sideColor, new CTile(xPieceCoordinate, yPieceCoordinate))); } InitializeSide(6, 1, EPieceColor.White, false); InitializeSide(1, 17, EPieceColor.Black, true); }
public void HandleCollision(Int32 invaderId, Int32 capturedId, Boolean isCollisionStopsMoving) { if (!_pieces.ContainsKey(invaderId)) { throw new InvalidOperationException($"Invader piece {invaderId} already captured"); } if (!_pieces.ContainsKey(capturedId)) { throw new InvalidOperationException($"Captured piece {capturedId} already captured"); } CPiece invaderPiece = _pieces[invaderId]; CPiece capturedPiece = _pieces[capturedId]; _attachedBoard.BoardCanvas.Children.Remove(capturedPiece); if (isCollisionStopsMoving) { invaderPiece.StopAnimation(); invaderPiece.AnimatePiece(capturedPiece.Margin); } else if (capturedPiece.CurrentAnimation != null) { capturedPiece.StopAnimation(); if (capturedPiece.AttachedTile != null) { _attachedTiles.Remove(capturedPiece.AttachedTile); } } if (capturedPiece.AttachedTimeoutIndicator != null) { _attachedBoard.BoardCanvas.Children.Remove(capturedPiece.AttachedTimeoutIndicator); } _pieces.Remove(capturedId); }
public void MovePiece(Int32 pieceId, CPoint newPosition) { CPiece piece = _pieces[pieceId]; _boardStates.ResetToDefault(new CTile(piece.Margin)); piece.IsActive = false; piece.AnimatePiece(new Thickness(newPosition.X, newPosition.Y, 0, 0)); }
private void RemoveAttachedTile(CPiece piece) { if (piece.AttachedTile != null) { _attachedTiles.Remove(piece.AttachedTile); piece.AttachedTile = null; } }
private CPieceProjection PutNewProjectionOnBoard(CPiece piece) { CPieceProjection projection = new CPieceProjection(piece); _attachedBoard.BoardCanvas.Children.Add(projection); Panel.SetZIndex(projection, (Int32)EZIndex.PieceProjection); return(projection); }
private EventHandler GetTimeoutIndicatorAnimationCompletedEventHandler(CPiece piece) { return((obj, args) => { piece.IsActive = true; _attachedBoard.BoardCanvas.Children.Remove(piece.AttachedTimeoutIndicator); piece.AttachedTimeoutIndicator = null; }); }
private void MouseDownPieceEventHandler(Object pieceObject, MouseEventArgs args) { CPiece piece = (CPiece)pieceObject; if (piece.IsActive) { using CPieceProjection projection = PutNewProjectionOnBoard(piece); DragDrop.DoDragDrop(projection.Parent, projection, DragDropEffects.Move); } }
private EventHandler GetMovementAnimationCompletedEventHandler(CBoardOccupancy states, CPiece piece) { return((obj, args) => { states[new CTile(piece.Margin)] = piece.Color; RemoveAttachedTile(piece); Rectangle timeoutIndicator = PutNewTimeoutIndicatorOnBoard(piece.Margin); piece.AttachedTimeoutIndicator = timeoutIndicator; DoubleAnimation timeoutIndicatorAnimation = GetNewTimeoutIndicatorAnimation(); timeoutIndicatorAnimation.Completed += GetTimeoutIndicatorAnimationCompletedEventHandler(piece); timeoutIndicator.BeginAnimation(Rectangle.HeightProperty, timeoutIndicatorAnimation); }); }