Protogame.Button.HandleEvent C# (CSharp) Метод

HandleEvent() публичный Метод

public HandleEvent ( ISkinLayout skin, Rectangle layout, IGameContext context, Event @event ) : bool
skin ISkinLayout
layout Microsoft.Xna.Framework.Rectangle
context IGameContext
@event Event
Результат bool
        public bool HandleEvent(ISkinLayout skin, Rectangle layout, IGameContext context, Event @event)
        {
            var mouseEvent = @event as MouseEvent;
            var mousePressEvent = @event as MousePressEvent;
            var mouseReleaseEvent = @event as MouseReleaseEvent;
            var mouseMoveEvent = @event as MouseMoveEvent;
            var touchEvent = @event as TouchEvent;
            var touchPressEvent = @event as TouchPressEvent;
            var touchHeldEvent = @event as TouchHeldEvent;
            var touchReleaseEvent = @event as TouchReleaseEvent;

            if (mouseEvent == null && touchEvent == null)
            {
                return false;
            }

            var x = 0;
            var y = 0;

            if (mouseEvent != null)
            {
                x = mouseEvent.MouseState.X;
                y = mouseEvent.MouseState.Y;
            }

            if (touchPressEvent != null)
            {
                x = (int)touchPressEvent.X;
                y = (int)touchPressEvent.Y;
            }

            if (touchReleaseEvent != null)
            {
                x = (int)touchReleaseEvent.X;
                y = (int)touchReleaseEvent.Y;
            }

            if (touchHeldEvent != null)
            {
                x = (int)touchHeldEvent.X;
                y = (int)touchHeldEvent.Y;
            }

            if (layout.Contains(x, y))
            {
                if (mouseMoveEvent != null)
                {
                    State = ButtonUIState.Hover;
                }
                else if ((mousePressEvent != null && mousePressEvent.Button == MouseButton.Left) || touchPressEvent != null)
                {
                    if (Click != null && State != ButtonUIState.Clicked)
                    {
                        Click(this, new EventArgs());
                    }

                    State = ButtonUIState.Clicked;
                    this.Focus();

                    return true;
                }
            }
            else if (mouseMoveEvent != null)
            {
                State = ButtonUIState.None;
            }

            if (mouseReleaseEvent != null && mouseReleaseEvent.Button == MouseButton.Left)
            {
                if (touchHeldEvent == null || !layout.Contains(x, y))
                {
                    State = ButtonUIState.None;
                }
            }

            if (touchReleaseEvent != null && layout.Contains(x, y))
            {
                State = ButtonUIState.None;
            }

            return false;
        }
    }

Usage Example

Пример #1
0
 public bool HandleEvent(ISkinLayout skin, Rectangle layout, IGameContext context, Event @event)
 {
     return(_toggleButton.HandleEvent(skin, layout, context, @event));
 }