Ejemplo n.º 1
0
        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);
        }