public bool Update(EditorWindow window, EventModifiers modifiers)
        {
            float curtime = (float)EditorApplication.timeSinceStartup;

            if (curtime > nextEventTime)
            {
                // Dispatch fake drag and drop events
                float frac = Mathf.Clamp01((curtime - startTime) / (endTime - startTime));

                frac = Easing.Quadratic.InOut(frac);

                Vector2 mousePosition = Vector2.Lerp(mouseStart, mouseEnd, frac);

                EventUtility.UpdateDragAndDrop(window, mousePosition);

                bool shouldContinue = frac < 1.0f;
                if (!shouldContinue)
                {
                    EventUtility.EndDragAndDrop(window, mousePosition);
                }

                nextEventTime = curtime + (1 / numEventsPerSecond);
                window.Repaint();
                return(shouldContinue);
            }
            return(true);
        }
Exemplo n.º 2
0
 public void UpdateDragAndDrop(Vector2 pos, EventModifiers modifiers = EventModifiers.None)
 {
     pos = EventUtility.ConvertEditorWindowCoordsToGuiViewCoords(pos);
     HandleMouseAutomationVisibility(pos, true);
     if (EventUtility.UpdateDragAndDrop(window, pos, modifiers))
     {
         window.RepaintImmediately();
     }
     window.RepaintImmediately();
 }
Exemplo n.º 3
0
        //TODO: this will lock up the Editor while 'moving the mouse'.
        //We need to decide if this is okay, or not.
        //This is responsible for showing the mouse moving between mouse events.
        private void HandleMouseAutomationVisibility(Vector2 desiredMousePosition, bool sendMouseDrag = false)
        {
            if (!isAutomationVisible)
            {
                return;
            }

            if (m_LastMousePosition != desiredMousePosition)
            {
                float startTime = (float)EditorApplication.timeSinceStartup;
                float endTime   = startTime + ((m_LastMousePosition - desiredMousePosition).magnitude / m_MouseMoveSpeed);

                var mouseStart = m_LastMousePosition;

                while (m_LastMousePosition != desiredMousePosition)
                {
                    float curtime = (float)EditorApplication.timeSinceStartup;
                    float frac    = Mathf.Clamp01((curtime - startTime) / (endTime - startTime));

                    frac = Easing.Quadratic.InOut(frac);
                    var mousePosition = Vector2.Lerp(mouseStart, desiredMousePosition, frac);

                    //We currently send mouse moves to the window when visualizing the interactions,
                    //But this might create different behaviour when visualizing or not.
                    //This is also true for the Repaint event from RepaintImmediately.
                    //TODO: Decide what to do about it.
                    EventUtility.UpdateMouseMove(window, mousePosition);

                    if (sendMouseDrag)
                    {
                        EventUtility.UpdateDragAndDrop(window, mousePosition);
                    }

                    m_LastMousePosition = mousePosition;

                    window.RepaintImmediately();

                    System.Threading.Thread.Sleep(16);
                }
            }

            HandleLastEventPauseVisibility();
        }