public override void Update()
 {
     if (Enabled)
     {
         MouseState M = Mouse.GetState();
         if (Engaged)
         {
             pAtlasCoordinates.X = 2;
             Camera  MyCam = new Camera("");
             Vector2 FullyAdjustedMouseCoords = new Vector2();
             if (UsePseudoMouse)
             {
                 FullyAdjustedMouseCoords = PseudoMouse;
             }
             else
             {
                 FullyAdjustedMouseCoords = Shell.CoordNormalize(VNFUtils.ConvertPoint(M.Position));
             }
             if (!CameraImmune)
             {
                 if (CustomCamera != null)
                 {
                     MyCam = CustomCamera;
                 }
                 else if (Shell.AutoCamera != null)
                 {
                     MyCam = Shell.AutoCamera;
                 }
                 FullyAdjustedMouseCoords = MyCam.TranslateCoordsToEquivalent(FullyAdjustedMouseCoords);
             }
             Vector2 MouseDerived = CalculatePerpendicularIntersection(EndpointA, EndpointB, FullyAdjustedMouseCoords);
             float   GreatestX    = EndpointB.X >= EndpointA.X ? EndpointB.X : EndpointA.X;
             float   LeastX       = EndpointB.X >= EndpointA.X ? EndpointA.X : EndpointB.X;
             float   GreatestY    = EndpointB.Y >= EndpointA.Y ? EndpointB.Y : EndpointA.Y;
             float   LeastY       = EndpointB.Y >= EndpointA.Y ? EndpointA.Y : EndpointB.Y;
             if (MouseDerived.X > GreatestX)
             {
                 MouseDerived.X = GreatestX;
             }
             if (MouseDerived.X < LeastX)
             {
                 MouseDerived.X = LeastX;
             }
             if (MouseDerived.Y > GreatestY)
             {
                 MouseDerived.Y = GreatestY;
             }
             if (MouseDerived.Y < LeastY)
             {
                 MouseDerived.Y = LeastY;
             }
             pDrawCoords = MouseDerived;
             if (M.LeftButton != ButtonState.Pressed)
             {
                 Engaged = false;
             }
         }
         else
         {
             if (MouseInBounds())
             {
                 pAtlasCoordinates.X = 1;
             }
             else
             {
                 pAtlasCoordinates.X = 0;
             }
         }
     }
     else
     {
         pAtlasCoordinates.X = 0;
         Enabled             = false;
     }
     base.Update();
 }
            public void UpdateFunctionality(WorldEntity BehaviourOwner)
            {
                IScrollBar SB = (IScrollBar)BehaviourOwner;

                if (!SB.HideBar)
                {
                    MouseState M = Mouse.GetState();
                    if (SB.Enabled)
                    {
                        Vector2 COffsetV    = new Vector2();
                        Vector2 CZoomFactor = new Vector2(1, 1);
                        if (!((WorldEntity)SB).CameraImmune)
                        {
                            if (((WorldEntity)SB).CustomCamera != null)
                            {
                                COffsetV    = ((WorldEntity)SB).CustomCamera.OffsetVector;
                                CZoomFactor = ((WorldEntity)SB).CustomCamera.ZoomFactor;
                            }
                            else if (Shell.AutoCamera != null)
                            {
                                COffsetV    = Shell.AutoCamera.OffsetVector;
                                CZoomFactor = Shell.AutoCamera.ZoomFactor;
                            }
                        }
                        Vector2 FullyAdjustedMouseCoords = new Vector2();
                        if (BehaviourOwner.UsePseudoMouse)
                        {
                            FullyAdjustedMouseCoords = BehaviourOwner.PseudoMouse - COffsetV;
                        }
                        else
                        {
                            FullyAdjustedMouseCoords = ((Shell.CoordNormalize(VNFUtils.ConvertPoint(M.Position) / CZoomFactor) - COffsetV));
                        }
                        int MY = (int)FullyAdjustedMouseCoords.Y;
                        if (M.ScrollWheelValue != LastMouseScroll && SB.DetectScrollRectangle.Contains(FullyAdjustedMouseCoords) && !SB.Engaged)
                        {
                            if (((WorldEntity)SB).DrawCoords.Y >= SB.MinHeight && ((WorldEntity)SB).DrawCoords.Y <= SB.MaxHeight)
                            {
                                ((WorldEntity)SB).QuickMoveTo(new Vector2(((WorldEntity)SB).DrawCoords.X, ((WorldEntity)SB).DrawCoords.Y + -(int)(((float)(M.ScrollWheelValue - LastMouseScroll) * (float)(SB.ScrollFrameHeight)) / (2 * (float)SB.TotalScrollHeight))));
                            }
                            if (((WorldEntity)SB).DrawCoords.Y < SB.MinHeight)
                            {
                                ((WorldEntity)SB).QuickMoveTo(new Vector2(((WorldEntity)SB).DrawCoords.X, SB.MinHeight));
                            }
                            else if (((WorldEntity)SB).DrawCoords.Y > SB.MaxHeight)
                            {
                                ((WorldEntity)SB).QuickMoveTo(new Vector2(((WorldEntity)SB).DrawCoords.X, SB.MaxHeight));
                            }
                        }
                        LastMouseScroll = M.ScrollWheelValue;
                        if (SB.Engaged)
                        {
                            ((WorldEntity)SB).SetAtlasFrame(new Point(2, ((WorldEntity)SB).AtlasCoordinates.Y));
                            if (MY < SB.MinHeight)
                            {
                                ((WorldEntity)SB).QuickMoveTo(new Vector2(((WorldEntity)SB).DrawCoords.X, SB.MinHeight));
                            }
                            else if (MY > SB.MaxHeight)
                            {
                                ((WorldEntity)SB).QuickMoveTo(new Vector2(((WorldEntity)SB).DrawCoords.X, SB.MaxHeight));
                            }
                            else if (MY >= SB.MinHeight && MY <= SB.MaxHeight)
                            {
                                ((WorldEntity)SB).QuickMoveTo(new Vector2(((WorldEntity)SB).DrawCoords.X, MY));
                            }
                            if (M.LeftButton != ButtonState.Pressed)
                            {
                                SB.Engaged = false;
                            }
                        }
                        else
                        {
                            if (((WorldEntity)SB).MouseInBounds())
                            {
                                ((WorldEntity)SB).SetAtlasFrame(new Point(1, ((WorldEntity)SB).AtlasCoordinates.Y));
                            }
                            else
                            {
                                ((WorldEntity)SB).SetAtlasFrame(new Point(0, ((WorldEntity)SB).AtlasCoordinates.Y));
                            }
                        }
                    }
                    else
                    {
                        ((WorldEntity)SB).SetAtlasFrame(new Point(0, ((WorldEntity)SB).AtlasCoordinates.Y));
                        SB.Engaged      = false;
                        LastMouseScroll = M.ScrollWheelValue;
                    }
                }
            }