public void HandReleaseDetected(long userId, int userIndex, bool isRightHand, bool isHandInteracting, Vector3 handScreenPos)
    {
        if (userIndex != playerIndex || !isHandInteracting)
        {
            return;
        }

        bool bHandValid = (leftHandInteraction && !isRightHand) || (rightHandInteraction && isRightHand);

        if (!bHandValid)
        {
            return;
        }

        //Debug.Log("HandReleaseDetected");

        m_framePressState = PointerEventData.FramePressState.Released;
        //m_isLeftHand = !isRightHand;
        m_handCursorPos = handScreenPos;

        if (!isRightHand)
        {
            m_leftHandGrip = false;
        }
        else
        {
            m_rightHandGrip = false;
        }
    }
    protected override MouseState GetMousePointerEventData(int id)
    {
        // Populate the left button...
        PointerEventData leftData;
        var created = GetPointerData(kMouseLeftId, out leftData, true);

        leftData.Reset();

        Vector2 handPos = new Vector2(m_screenNormalPos.x * Screen.width, m_screenNormalPos.y * Screen.height);

        if (created)
        {
            leftData.position = handPos;
        }

        leftData.delta    = handPos - leftData.position;
        leftData.position = handPos;
        //leftData.scrollDelta = 0f;
        leftData.button = PointerEventData.InputButton.Left;

        eventSystem.RaycastAll(leftData, m_RaycastResultCache);
        var raycast = FindFirstRaycast(m_RaycastResultCache);

        leftData.pointerCurrentRaycast = raycast;
        m_RaycastResultCache.Clear();

        m_MouseState.SetButtonState(PointerEventData.InputButton.Left, m_framePressState, leftData);
        m_framePressState = PointerEventData.FramePressState.NotChanged;

        return(m_MouseState);
    }
Esempio n. 3
0
            public void SetButtonState(PointerEventData.InputButton button, PointerEventData.FramePressState stateForMouseButton, PointerEventData data)
            {
                var toModify = GetButtonState(button);

                toModify.eventData.buttonState = stateForMouseButton;
                toModify.eventData.buttonData  = data;
            }
Esempio n. 4
0
        public CursorInput Poll()
        {
            Ray ray;

            if (!_controllerList || _controllerList.ControllerIndices.Count == 0 || _rig == null)
            {
                ray = new Ray(Vector3.zero, Vector3.down);
            }
            else
            {
                ray = new Ray();
            }

            PointerEventData.FramePressState submitEvent = PointerEventData.FramePressState.NotChanged;
            var controllerIndices = _controllerList.ControllerIndices;

            if (SteamVR_Controller.Input(controllerIndices[0]).GetPressDown(EVRButtonId.k_EButton_SteamVR_Trigger))
            {
                submitEvent = PointerEventData.FramePressState.Pressed;
            }
            else if (SteamVR_Controller.Input(controllerIndices[0]).GetPressUp(EVRButtonId.k_EButton_SteamVR_Trigger))
            {
                submitEvent = PointerEventData.FramePressState.Released;
            }

            Vector2 screenPosition = _rig.GetMainCamera().WorldToScreenPoint(ray.origin);

            return(new CursorInput(
                       ray,
                       screenPosition,
                       submitEvent: submitEvent,
                       scrollDelta: Vector2.zero));
        }
Esempio n. 5
0
            public void SetButtonState(PointerEventData.InputButton button, PointerEventData.FramePressState stateForMouseButton, PointerEventData data)
            {
                ButtonState buttonState = GetButtonState(button);

                buttonState.eventData.buttonState = stateForMouseButton;
                buttonState.eventData.buttonData  = data;
            }
Esempio n. 6
0
 public CursorInput(Ray ray, Vector2 screenPosition, PointerEventData.FramePressState submitEvent, Vector2 scrollDelta)
 {
     Ray            = ray;
     SubmitEvent    = submitEvent;
     ScrollDelta    = scrollDelta;
     ScreenPosition = screenPosition;
 }
Esempio n. 7
0
    /// <summary>
    /// UI专用
    /// </summary>
    /// <param name="buttonId"></param>
    /// <returns></returns>
    public static PointerEventData.FramePressState GetStateForMouseButton(int buttonId)
    {
        var pressed  = Instance.InputData.GetMouseButtonDown(buttonId);
        var released = Instance.InputData.GetMouseButtonUp(buttonId);

        PointerEventData.FramePressState outState = PointerEventData.FramePressState.NotChanged;

        if (pressed && released)
        {
            outState = PointerEventData.FramePressState.PressedAndReleased;
        }
        else if (pressed)
        {
            outState = PointerEventData.FramePressState.Pressed;
        }
        else if (released)
        {
            outState = PointerEventData.FramePressState.Released;
        }

        if (Instance.m_LogLevel <= Common.LogLevel.DEBUG)
        {
            Common.AppLog.AddFormat(Common.LogLevel.DEBUG, "GCInput.GetStateForMouseButton", $"outState={outState.ToString()} curFrameOriginType={Instance.m_curFrameOriginType.ToString()}");
        }
        return(outState);
    }
Esempio n. 8
0
 public static void Postfix(ref PointerEventData.FramePressState __result)
 {
     if (IsMouseInWindow)
     {
         __result = PointerEventData.FramePressState.NotChanged;
     }
 }
 public void SetButtonState(
     int button,
     PointerEventData.FramePressState stateForMouseButton,
     PlayerPointerEventData data)
 {
     RewiredPointerInputModule.ButtonState buttonState = this.GetButtonState(button);
     buttonState.eventData.buttonState = stateForMouseButton;
     buttonState.eventData.buttonData  = data;
 }
        protected PointerEventData.FramePressState StateForPointer(PointerData pointerData)
        {
            PointerEventData.FramePressState ret = pointerData.nextPressState;

            // Reset state
            pointerData.nextPressState = PointerEventData.FramePressState.NotChanged;

            return(ret);
        }
    public void HandReleaseDetected(long userId, int userIndex, bool isRightHand, bool isHandInteracting, Vector3 handScreenPos)
    {
        if (!isHandInteracting)
        {
            return;
        }

        m_framePressState = PointerEventData.FramePressState.Released;
        m_isLeftHandDrag  = !isRightHand;
        m_screenNormalPos = handScreenPos;
    }
Esempio n. 12
0
    public void HandGripDetected(long userId, int userIndex, bool isRightHand, bool isHandInteracting, Vector3 handScreenPos)
    {
        if (userIndex != playerIndex || !isHandInteracting)
        {
            return;
        }

        //Debug.Log("HandGripDetected");

        m_framePressState = PointerEventData.FramePressState.Pressed;
        //m_isLeftHandDrag = !isRightHand;
        m_screenNormalPos = handScreenPos;
    }
Esempio n. 13
0
            private void SimulateButtonState(PointerEventData.FramePressState state, PointerEventData.InputButton button)
            {
                // Use the existing EventSystems input module input as the
                // input for our custom input module.
                m_InputOverride = EventSystem.current.currentInputModule.input;
                MouseState mousePointerEventData = GetMousePointerEventData();
                // Retrieve button state data for intended button
                MouseButtonEventData buttonState = mousePointerEventData.GetButtonState(button).eventData;

                // Set the mouse button state to required state
                buttonState.buttonState = state;
                ProcessMousePress(buttonState);
            }
Esempio n. 14
0
        /// <summary>
        /// overwritten from the base version so we can use our custom
        /// </summary>
        /// <returns></returns>
        override protected MouseState GetGazePointerData()
        {
            MouseState state = base.GetGazePointerData();

            var raycast = state.GetButtonState(PointerEventData.InputButton.Left).eventData.buttonData.pointerCurrentRaycast;

            //get custom press state
            PointerEventData.FramePressState pressState = GetGazeButtonState(raycast.gameObject);
            //set it
            state.SetButtonState(PointerEventData.InputButton.Left, pressState, state.GetButtonState(PointerEventData.InputButton.Left).eventData.buttonData);

            return(state);
        }
    private IEnumerator EmulateMouseClick(bool isRightHand, Vector3 handScreenPos)
    {
        m_framePressState = PointerEventData.FramePressState.Pressed;
        //m_isLeftHand = !isRightHand;
        m_screenNormalPos = handScreenPos;

        yield return(new WaitForSeconds(0.2f));

        m_framePressState = PointerEventData.FramePressState.Released;
        //m_isLeftHand = !isRightHand;
        m_screenNormalPos = handScreenPos;

        yield return(null);
    }
Esempio n. 16
0
 private PointerEventData.FramePressState SwitchStateForMouseButton(int id)
 {
     PointerEventData.FramePressState buttonState = StateForMouseButton(id);
     if (Switch.Phase[id] == 1)
     {
         buttonState      = PointerEventData.FramePressState.Released;
         Switch.Phase[id] = 2;
     }
     else if (Switch.Phase[id] == 2)
     {
         buttonState      = PointerEventData.FramePressState.Pressed;
         Switch.Phase[id] = 0;
     }
     return(buttonState);
 }
Esempio n. 17
0
    public override void Process()
    {
        foreach (KeyValuePair <Pointer, MouseButtonEventData> pe in pointerEvents)
        {
            Pointer pointer = pe.Key;
            MouseButtonEventData buttonEventData  = pe.Value;
            PointerEventData     pointerEventData = buttonEventData.buttonData;

            // Update position pointer

            Vector2 pointOnScreenPosition = Camera.main.WorldToScreenPoint(pointer.Position);
            pointerEventData.delta    = pointOnScreenPosition - pointerEventData.position;
            pointerEventData.position = pointOnScreenPosition;

            // Update UI Raycast data

            raycastResults.Clear();
            eventSystem.RaycastAll(pointerEventData, raycastResults);
            pointerEventData.pointerCurrentRaycast = FindFirstRaycast(raycastResults);

            // Update press state

            PointerEventData.FramePressState framePressState = PointerEventData.FramePressState.NotChanged;

            if (pointer.Press && !lastPressState[pointer])
            {
                framePressState = PointerEventData.FramePressState.Pressed;
            }
            else if (!pointer.Press && lastPressState[pointer])
            {
                framePressState = PointerEventData.FramePressState.Released;
            }

            lastPressState[pointer]     = pointer.Press;
            buttonEventData.buttonState = framePressState;

            // Call processes of parent class

            ProcessMove(pointerEventData);
            ProcessDrag(pointerEventData);
            ProcessMousePress(buttonEventData);

            // Zero the Delta after use, for correct Drag, because the number
            // of UI event calls is equal to the number of controllers Pointer.
            pointerEventData.delta = Vector2.zero;
        }
        base.Process();
    }
    private void CheckGrippedCursorPosition()
    {
        if (intManager)
        {
            bool bIsLeftHand = intManager.IsLeftHandPrimary();

            // check for gripped hand
            bool bHandGrip = bIsLeftHand ? m_leftHandGrip : m_rightHandGrip;

            // check for cursor pos change
            Vector2 cursorNormalPos = bIsLeftHand ? intManager.GetLeftHandScreenPos() : intManager.GetRightHandScreenPos();

            if (bHandGrip && cursorNormalPos != (Vector2)m_screenNormalPos)
            {
                // emulate new press
                m_framePressState = PointerEventData.FramePressState.Pressed;
                m_screenNormalPos = cursorNormalPos;
            }
        }
    }
Esempio n. 19
0
        /// <summary>
        /// Given a mouse button return the current state for the frame.
        /// </summary>
        /// <remarks>
        /// Copied from Unity UI's PointerInputModule.
        /// </remarks>
        protected new PointerEventData.FramePressState StateForMouseButton(int buttonId)
        {
            bool pressed  = _inputWrapper.GetMouseButtonDown(buttonId);
            bool released = _inputWrapper.GetMouseButtonUp(buttonId);

            PointerEventData.FramePressState state = PointerEventData.FramePressState.NotChanged;

            if (pressed && released)
            {
                state = PointerEventData.FramePressState.PressedAndReleased;
            }
            else if (pressed)
            {
                state = PointerEventData.FramePressState.Pressed;
            }
            else if (released)
            {
                state = PointerEventData.FramePressState.Released;
            }

            return(state);
        }
    public void HandGripDetected(long userId, int userIndex, bool isRightHand, bool isHandInteracting, Vector3 handScreenPos)
    {
        if (userIndex != playerIndex || !isHandInteracting)
        {
            return;
        }

        //Debug.Log("HandGripDetected");

        m_framePressState = PointerEventData.FramePressState.Pressed;
        //m_isLeftHand = !isRightHand;
        m_handCursorPos = handScreenPos;

        if (!isRightHand)
        {
            m_leftHandGrip = true;
        }
        else
        {
            m_rightHandGrip = true;
        }
    }
Esempio n. 21
0
    protected PointerEventData.FramePressState UpdateTouchpadButton()
    {
        if (controller == null)
        {
            return(m_touchpadButtonState);
        }

        if (controller.GetPressDown(Valve.VR.EVRButtonId.k_EButton_SteamVR_Touchpad))
        {
            m_touchpadButtonState = PointerEventData.FramePressState.Pressed;
        }
        else if (controller.GetPressUp(Valve.VR.EVRButtonId.k_EButton_SteamVR_Touchpad))
        {
            m_touchpadButtonState = PointerEventData.FramePressState.Released;
        }
        else
        {
            m_touchpadButtonState = PointerEventData.FramePressState.NotChanged;
        }

        return(m_touchpadButtonState);
    }
Esempio n. 22
0
        protected override MouseState GetMousePointerEventData(int id = 0)
        {
            if (KickStarter.settingsManager == null || KickStarter.settingsManager.inputMethod != InputMethod.KeyboardOrController)
            {
                return(base.GetMousePointerEventData(id));
            }

            PointerEventData leftData;
            var created = GetPointerData(kMouseLeftId, out leftData, true);

            leftData.Reset();

            Vector2 pos = KickStarter.playerInput.GetMousePosition();

            if (created)
            {
                leftData.position = pos;
            }

            leftData.delta       = pos - leftData.position;
            leftData.position    = pos;
            leftData.scrollDelta = Input.mouseScrollDelta;
            leftData.button      = PointerEventData.InputButton.Left;
            eventSystem.RaycastAll(leftData, m_RaycastResultCache);
            RaycastResult raycast = FindFirstRaycast(m_RaycastResultCache);

            leftData.pointerCurrentRaycast = raycast;
            m_RaycastResultCache.Clear();

            if (raycast.isValid && KickStarter.menuManager.autoSelectValidRaycasts && !CanDirectlyControlMenus())
            {
                KickStarter.playerMenus.EventSystem.SetSelectedGameObject(raycast.gameObject);
            }

            PointerEventData rightData;

            GetPointerData(kMouseRightId, out rightData, true);
            CopyFromTo(leftData, rightData);
            rightData.button = PointerEventData.InputButton.Right;

            PointerEventData middleData;

            GetPointerData(kMouseMiddleId, out middleData, true);
            CopyFromTo(leftData, middleData);
            middleData.button = PointerEventData.InputButton.Middle;

            PointerEventData.FramePressState leftClickState = PointerEventData.FramePressState.NotChanged;
            if (KickStarter.playerInput.InputGetButtonDown("InteractionA"))
            {
                leftClickState = PointerEventData.FramePressState.Pressed;
            }
            else if (KickStarter.playerInput.InputGetButtonUp("InteractionA"))
            {
                leftClickState = PointerEventData.FramePressState.Released;
            }

            PointerEventData.FramePressState rightClickState = PointerEventData.FramePressState.NotChanged;
            if (KickStarter.playerInput.InputGetButtonDown("InteractionB"))
            {
                rightClickState = PointerEventData.FramePressState.Pressed;
            }
            else if (KickStarter.playerInput.InputGetButtonUp("InteractionB"))
            {
                rightClickState = PointerEventData.FramePressState.Released;
            }

            m_MouseState.SetButtonState(PointerEventData.InputButton.Left, leftClickState, leftData);
            m_MouseState.SetButtonState(PointerEventData.InputButton.Right, rightClickState, rightData);
            m_MouseState.SetButtonState(PointerEventData.InputButton.Middle, StateForMouseButton(2), middleData);

            return(m_MouseState);
        }
    private void HandleButton(ButtonType buttonType, PointerEventData.FramePressState buttonState, CustomEventData eventData, bool allowDragging)
    {
        GameObject currentOverGo = activeGameObject;

        // PointerDown notification
        if (buttonState == PointerEventData.FramePressState.Pressed || buttonState == PointerEventData.FramePressState.PressedAndReleased)
        {
            eventData.eligibleForClick    = true;
            eventData.delta               = Vector2.zero;
            eventData.dragging            = false;
            eventData.useDragThreshold    = true;
            eventData.pressPosition       = eventData.position;
            eventData.pointerPressRaycast = eventData.pointerCurrentRaycast;

            DeselectIfSelectionChanged(currentOverGo, eventData);

            // search for the control that will receive the press
            // if we can't find a press handler set the press
            // handler to be what would receive a click.
            var newPressed = ExecuteEvents.ExecuteHierarchy(currentOverGo, eventData, ExecuteEvents.pointerDownHandler);

            // didnt find a press handler... search for a click handler
            if (newPressed == null)
            {
                newPressed = ExecuteEvents.GetEventHandler <IPointerClickHandler>(currentOverGo);
            }

            // Debug.Log("Pressed: " + newPressed);

            float time = Time.unscaledTime;

            if (newPressed == eventData.lastPress)
            {
                var diffTime = time - eventData.clickTime;
                if (diffTime < 0.3f)
                {
                    ++eventData.clickCount;
                }
                else
                {
                    eventData.clickCount = 1;
                }

                eventData.clickTime = time;
            }
            else
            {
                eventData.clickCount = 1;
            }

            eventData.pointerPress    = newPressed;
            eventData.rawPointerPress = currentOverGo;

            eventData.clickTime = time;

            // Save the drag handler as well
            eventData.pointerDrag = ExecuteEvents.GetEventHandler <IDragHandler>(currentOverGo);

            if (eventData.pointerDrag != null)
            {
                ExecuteEvents.Execute(eventData.pointerDrag, eventData, ExecuteEvents.initializePotentialDrag);
            }
        }

        // PointerUp notification
        if (buttonState == PointerEventData.FramePressState.Released || buttonState == PointerEventData.FramePressState.PressedAndReleased)
        {
            // Debug.Log("Executing pressup on: " + pointer.pointerPress);
            ExecuteEvents.Execute(eventData.pointerPress, eventData, ExecuteEvents.pointerUpHandler);

            // Debug.Log("KeyCode: " + pointer.eventData.keyCode);

            // see if we mouse up on the same element that we clicked on...
            var pointerUpHandler = ExecuteEvents.GetEventHandler <IPointerClickHandler>(currentOverGo);

            // PointerClick and Drop events
            if (eventData.pointerPress == pointerUpHandler && eventData.eligibleForClick)
            {
                ExecuteEvents.Execute(eventData.pointerPress, eventData, ExecuteEvents.pointerClickHandler);
            }
            else if (eventData.pointerDrag != null && eventData.dragging)
            {
                ExecuteEvents.ExecuteHierarchy(currentOverGo, eventData, ExecuteEvents.dropHandler);
            }

            eventData.eligibleForClick = false;
            eventData.pointerPress     = null;
            eventData.rawPointerPress  = null;

            if (eventData.pointerDrag != null && eventData.dragging)
            {
                ExecuteEvents.Execute(eventData.pointerDrag, eventData, ExecuteEvents.endDragHandler);
            }

            eventData.dragging    = false;
            eventData.pointerDrag = null;

            // redo pointer enter / exit to refresh state
            // so that if we moused over somethign that ignored it before
            // due to having pressed on something else
            // it now gets it.
            if (currentOverGo != eventData.pointerEnter)
            {
                HandlePointerExitAndEnter(eventData, null);
                HandlePointerExitAndEnter(eventData, currentOverGo);
            }
        }
    }
Esempio n. 24
0
 /// <summary>
 /// 指定されたボタンの状態を設定する
 /// </summary>
 /// <param name="buttonId">マウスのボタンId。左:0、右:1、中:2</param>
 /// <param name="state">ボタンの入力状態</param>
 public void SetButtonState(int buttonId, PointerEventData.FramePressState state)
 {
     PointerInputModule.MouseButtonEventData mouseEventData;
     GetButtonEventData(buttonId, out mouseEventData);
     mouseEventData.buttonState = state;
 }
Esempio n. 25
0
 // Token: 0x06000245 RID: 581 RVA: 0x0001E8A0 File Offset: 0x0001CAA0
 public void SetButtonState(PointerEventData.InputButton button, PointerEventData.FramePressState stateForMouseButton, PointerEventData data)
 {
     CusPointerInputModule.ButtonState buttonState = this.GetButtonState(button, 0);
     buttonState.eventData.buttonState = stateForMouseButton;
     buttonState.eventData.buttonData  = data;
 }
Esempio n. 26
0
    protected PointerEventData.FramePressState UpdateTriggerState()
    {
        switch (m_triggerButtonState)
        {
        case PointerEventData.FramePressState.NotChanged:
            if (triggerPressed() && !triggerPressedDown)
            {
                m_triggerButtonState = PointerEventData.FramePressState.Pressed;
            }
            if (!triggerPressed() && triggerPressedDown)
            {
                if (helpState == false)
                {
                    m_triggerButtonState = PointerEventData.FramePressState.Pressed;
                    helpState            = true;
                }
                else
                {
                    m_triggerButtonState = PointerEventData.FramePressState.Released;
                }
            }
            break;

        case PointerEventData.FramePressState.Pressed:
            if (helpState)
            {
                helpState            = false;
                m_triggerButtonState = PointerEventData.FramePressState.Released;
            }
            else
            {
                triggerPressedDown = true;
                if (triggerPressed() && triggerPressedDown)
                {
                    m_triggerButtonState = PointerEventData.FramePressState.NotChanged;
                }
                else if (!triggerPressed() && triggerPressedDown)
                {
                    m_triggerButtonState = PointerEventData.FramePressState.Released;
                }
            }
            break;

        //case PointerEventData.FramePressState.PressedAndReleased:
        //break;

        case PointerEventData.FramePressState.Released:
            if (!triggerPressed())
            {
                m_triggerButtonState = PointerEventData.FramePressState.NotChanged;
            }
            else
            {
                m_triggerButtonState = PointerEventData.FramePressState.Pressed;
            }
            triggerPressedDown = false;
            break;
        }

        return(m_triggerButtonState);
    }
Esempio n. 27
0
 public NavigationInput(Vector2 movementDelta, PointerEventData.FramePressState submitEvent)
 {
     MovementDelta = movementDelta;
     SubmitEvent   = submitEvent;
 }