示例#1
0
        /// <summary>
        /// Update the Environment each frame.
        /// </summary>
        /// <param name="elapsedTime">Time since last Update() call.</param>
        public override void Update(float elapsedTime)
        {
            MouseState mouse        = Mouse.GetState();
            Vector2    mousePos     = new Vector2(mouse.X, mouse.Y);
            bool       mousePressed = (mouse.LeftButton == ButtonState.Pressed);

            List <Widget> collidingButtons = Buttons.FindAll(b => b.Visible && b.Collides(mousePos));
            Widget        button           = null;

            if (collidingButtons.Count > 0)
            {
                button = collidingButtons.OrderBy(b => b.Zindex).First();
            }

            // We switched to a new button.
            if (m_activeButton != button)
            {
                // Unset current button.
                if (m_activeButton != null)
                {
                    m_activeButton.DispatchOnMouseOut();
                    if (m_mouseWasPressed)
                    {
                        m_activeButton.DispatchOnMouseUp(false);
                    }
                }

                // Activate new one.
                m_activeButton = button;
                if (m_activeButton != null)
                {
                    m_activeButton.DispatchOnMouseOver();

                    if (mousePressed && !m_mouseWasPressed)
                    {
                        m_activeButton.DispatchOnMouseDown();
                    }
                }
            }
            else if (m_activeButton != null)
            {
                // Button is the same.  Update it.
                if (m_mouseWasPressed && !mousePressed)
                {
                    m_activeButton.DispatchOnMouseUp(true);
                }
                else if (!m_mouseWasPressed && mousePressed)
                {
                    m_activeButton.DispatchOnMouseDown();
                }
            }

            m_mouseWasPressed = mousePressed;
            base.Update(elapsedTime);
        }
示例#2
0
文件: Menu.cs 项目: jwmcglynn/TeamQ
        /// <summary>
        /// Update the Environment each frame.
        /// </summary>
        /// <param name="elapsedTime">Time since last Update() call.</param>
        public override void Update(float elapsedTime)
        {
            MouseState mouse = Mouse.GetState();
            Vector2 mousePos = new Vector2(mouse.X, mouse.Y);
            bool mousePressed = (mouse.LeftButton == ButtonState.Pressed);

            List<Widget> collidingButtons = Buttons.FindAll(b => b.Visible && b.Collides(mousePos));
            Widget button = null;
            if (collidingButtons.Count > 0) button = collidingButtons.OrderByDescending(b => b.Zindex).First();

            // We switched to a new button.
            if (m_activeButton != button) {
                // Unset current button.
                if (m_activeButton != null) {
                    m_activeButton.DispatchOnMouseOut();
                    if (m_mouseWasPressed) m_activeButton.DispatchOnMouseUp(false);
                }

                // Activate new one.
                m_activeButton = button;
                if (m_activeButton != null) {
                    m_activeButton.DispatchOnMouseOver();

                    if (mousePressed && !m_mouseWasPressed) {
                        m_activeButton.DispatchOnMouseDown();
                    }
                }
            } else if (m_activeButton != null) {
                // Button is the same.  Update it.
                if (m_mouseWasPressed && !mousePressed) {
                    m_activeButton.DispatchOnMouseUp(true);
                } else if (!m_mouseWasPressed && mousePressed) {
                    m_activeButton.DispatchOnMouseDown();
                }
            }

            m_mouseWasPressed = mousePressed;
            base.Update(elapsedTime);
        }