public void UpdateMouseControls(MouseControls mc)
        {
            if (ball == null)
            {
                goto Ball2Controls;
            }
            #region ball version 1
            #region Setting up the shot
            if (!ball.BallLaunched)
            {
                if (mc.LeftButtonState == UpDownState.Down && mc.LastLeftButtonState == UpDownState.Up && ball.SettingSpin)
                {
                    if (ball.IsInSpinRect(mc.X, mc.Y))
                    {
                        mStartX = mc.X;
                        mStartY = mc.Y;
                        deltaX  = 0;
                        deltaY  = 0;
                        ball.PlacingSpinRect = true;
                    }
                }
                if (mc.LeftButtonState == UpDownState.Down && mc.LastLeftButtonState == UpDownState.Down && ball.PlacingSpinRect)
                {
                    deltaX = mc.X - mStartX;
                    deltaY = mc.Y - mStartY;
                    ball.AdjustSpinMarker(mc.X, mc.Y);
                }
                if (mc.LeftButtonState == UpDownState.Up && mc.LastLeftButtonState == UpDownState.Down && ball.PlacingSpinRect)
                {
                    ball.PlacingSpinRect = false;
                }

                // launch / set flight path
                if (mc.LeftButtonState == UpDownState.Down && mc.LastLeftButtonState == UpDownState.Up)
                {
                    if (ball.IsInLaunchButtonRect(mc.X, mc.Y) && ball.ReadyForLaunch)
                    {
                        ball.LaunchBall();
                    }
                    else //if (mc.Y < ball.Y - ball.Height * 2) // uncomment if here to restrict aim to only north side of the ball
                    {
                        ball.SetFlightPath(mc.X, mc.Y);
                    }
                }
            }
            #endregion Setting up the shot
            // unpause
            if (mc.LeftButtonState == UpDownState.Down && mc.LastLeftButtonState == UpDownState.Up && ball.BallLaunched == true)
            {
                ball.Pause = false;
            }

            // Reset
            if (mc.RightButtonState == UpDownState.Down && mc.LastRightButtonState == UpDownState.Up)
            {
                ball.Reset();
            }

            #endregion ball version 1

Ball2Controls:
            if (ball2 == null)
            {
                goto EndControls;
            }
            #region ball2 only
            #region Setting up the shot
            if (!ball2.BallLaunched)
            {
                if (mc.LeftButtonState == UpDownState.Down && mc.LastLeftButtonState == UpDownState.Up && ball2.SettingSpin)
                {
                    if (ball2.IsInSpinRect(mc.X, mc.Y))
                    {
                        mStartX = mc.X;
                        mStartY = mc.Y;
                        deltaX  = 0;
                        deltaY  = 0;
                        ball2.PlacingSpinRect = true;
                    }
                }
                if (mc.LeftButtonState == UpDownState.Down && mc.LastLeftButtonState == UpDownState.Down && ball2.PlacingSpinRect)
                {
                    deltaX = mc.X - mStartX;
                    deltaY = mc.Y - mStartY;
                    ball2.AdjustSpinMarker(mc.X, mc.Y);
                }
                if (mc.LeftButtonState == UpDownState.Up && mc.LastLeftButtonState == UpDownState.Down && ball2.PlacingSpinRect)
                {
                    ball2.PlacingSpinRect = false;
                }

                // launch / set flight path
                if (mc.LeftButtonState == UpDownState.Down && mc.LastLeftButtonState == UpDownState.Up)
                {
                    if (ball2.IsInLaunchButtonRect(mc.X, mc.Y) && ball2.ReadyForLaunch)
                    {
                        ball2.LaunchBall();
                    }
                    else //if (mc.Y < ball2.Y - ball2.Height * 2) // uncomment if here to restrict aim to only north side of the ball2
                    {
                        ball2.SetFlightPath(mc.X, mc.Y);
                    }
                }
            }
            #endregion Setting up the shot
            // unpause
            if (mc.LeftButtonState == UpDownState.Down && mc.LastLeftButtonState == UpDownState.Up && ball2.BallLaunched == true)
            {
                ball2.Pause = false;
            }

            // Reset
            if (mc.RightButtonState == UpDownState.Down && mc.LastRightButtonState == UpDownState.Up)
            {
                ball2.Reset();
            }
            #endregion ball2

EndControls:
            return;
        }