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)); }