/// <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); }
/// <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); }