public override bool Handle(IEvent evt) { SliderButton.Handle(evt); float distanceToCenterOfButtonX = ((BottomRight.X - TopLeft.X) / 2 + TopLeft.X); float distanceToCenterOfButtonY = ((BottomRight.Y - TopLeft.Y) / 2 + TopLeft.Y); MouseButtonEvent mouseButtonEvent = evt as MouseButtonEvent; if (mouseButtonEvent != null) { if (mouseButtonEvent.LeftButtonState == Microsoft.Xna.Framework.Input.ButtonState.Pressed && SliderButton.ButtonState == ButtonState.Pressed) { isDragging = true; } if (mouseButtonEvent.LeftButtonState == Microsoft.Xna.Framework.Input.ButtonState.Released) { isDragging = false; } } MouseMoveEvent mouseMoveEvent = evt as MouseMoveEvent; if (mouseMoveEvent != null) { if (isDragging == true || SliderButton.ButtonState == ButtonState.Pressed) { if (isHorizontal) { int beta = ((int)Math.Round(MathHelper.Clamp(MathUtils.InverseLerp(TopLeft.X, BottomRight.X, mouseMoveEvent.CurrentPosition.X) * divisions, 0, divisions))); float posX = MathHelper.Lerp(TopLeft.X, BottomRight.X, (float)beta / divisions); SliderButton.HorizontalValue = new FixedValue(posX - (BottomRight.X - TopLeft.X) / 2 - TopLeft.X); } if (isVertical) { int beta = ((int)Math.Round(MathHelper.Clamp(MathUtils.InverseLerp(TopLeft.Y, BottomRight.Y, mouseMoveEvent.CurrentPosition.Y) * divisions, 0, divisions))); float posY = MathHelper.Lerp(TopLeft.Y, BottomRight.Y, (float)beta / divisions); SliderButton.HorizontalValue = new FixedValue(posY - (BottomRight.Y - TopLeft.Y) / 2 - TopLeft.Y); } } } GamePadButtonDownEvent gamePadButtonDownEvent = evt as GamePadButtonDownEvent; if (gamePadButtonDownEvent != null && this.isSelected) { float oneUnitOfWidth = (BottomRight.X - TopLeft.X) / divisions; float oneUnitOfHeight = (BottomRight.Y - TopLeft.Y) / divisions; // This is likely bad news if (gamePadButtonDownEvent._pressedButton == Buttons.B) { this.isSelected = false; Root.MouseMode = true; } if (gamePadButtonDownEvent._pressedButton == Buttons.DPadLeft || gamePadButtonDownEvent._pressedButton == Buttons.LeftThumbstickLeft) { if (!isHorizontal) { this.isSelected = false; ((ISelectableWidget)Root.FindWidgetByID(leftID)).isSelected = true; } if (isHorizontal) { SliderButton.HorizontalValue = new FixedValue( MathHelper.Clamp(SliderButton.Horizontal + distanceToCenterOfButtonX - oneUnitOfWidth, (float)TopLeft.X, (float)BottomRight.X) - distanceToCenterOfButtonX ); } } if (gamePadButtonDownEvent._pressedButton == Buttons.DPadRight || gamePadButtonDownEvent._pressedButton == Buttons.LeftThumbstickRight) { if (!isHorizontal) { this.isSelected = false; ((ISelectableWidget)Root.FindWidgetByID(rightID)).isSelected = true; } if (isHorizontal) { SliderButton.HorizontalValue = new FixedValue( MathHelper.Clamp(SliderButton.Horizontal + distanceToCenterOfButtonX + oneUnitOfWidth, (float)TopLeft.X, (float)BottomRight.X) - distanceToCenterOfButtonX ); } } if (gamePadButtonDownEvent._pressedButton == Buttons.DPadUp || gamePadButtonDownEvent._pressedButton == Buttons.LeftThumbstickUp) { if (!isVertical) { this.isSelected = false; ((ISelectableWidget)Root.FindWidgetByID(aboveID)).isSelected = true; } if (isVertical) { SliderButton.HorizontalValue = new FixedValue( MathHelper.Clamp(SliderButton.Vertical + distanceToCenterOfButtonY - oneUnitOfHeight, (float)BottomRight.Y, (float)TopLeft.Y) - distanceToCenterOfButtonY ); } } if (gamePadButtonDownEvent._pressedButton == Buttons.DPadDown || gamePadButtonDownEvent._pressedButton == Buttons.LeftThumbstickDown) { if (!isVertical) { this.isSelected = false; ((ISelectableWidget)Root.FindWidgetByID(belowID)).isSelected = true; } if (isVertical) { SliderButton.HorizontalValue = new FixedValue( MathHelper.Clamp(SliderButton.Vertical + distanceToCenterOfButtonY + oneUnitOfHeight, (float)BottomRight.Y, (float)TopLeft.Y) - distanceToCenterOfButtonY ); } } } horizontalValue = ((int)Math.Round(MathHelper.Clamp(MathUtils.InverseLerp(TopLeft.X, BottomRight.X, (SliderButton.Horizontal + distanceToCenterOfButtonX)) * divisions, 0, divisions))); verticalValue = ((int)Math.Round(MathHelper.Clamp(MathUtils.InverseLerp(TopLeft.Y, BottomRight.Y, (SliderButton.Vertical + distanceToCenterOfButtonY)) * divisions, 0, divisions))); //Console.WriteLine("Horizontal Value = " + horizontalValue); //Console.WriteLine("Vertical Value = " + verticalValue); if (isHorizontal) { CVars.Get <float>(cvar) = (float)horizontalValue / divisions; } if (isVertical) { CVars.Get <float>(cvar) = (float)verticalValue / divisions; } return(false); }