예제 #1
0
        private void Update()
        {
            _previousState = _currentState;
            _currentState  = GamePad.GetState(PlayerIndex.One, GamePadDeadZone.IndependentAxes);

            // Go to sleep if no controller is detected
            if (!_currentState.IsConnected)
            {
                _previousState = _currentState;
                enabled        = false;
                // Need to use invoke because coroutines don't run on disabled objects
                InvokeRepeating(nameof(TryWakeUp), 4f, 4f);
            }
            else
            {
                CursorEmulator.OnUpdate();

                // Simulate right click for cancelling out of menus
                // Ideal would be hooking Input.GetMouseKeyDown but it requires a detour
                if (GetButtonDown(state => state.Buttons.B))
                {
                    CursorEmulator.RightDown();
                    CursorEmulator.RightUp();
                }
            }
        }
예제 #2
0
            public static float CustomGetAxis(string axisName)
            {
                if (!CursorEmulator.EmulatingCursor())
                {
                    switch (axisName)
                    {
                    case "Mouse X":
                        var x = GamepadWhisperer.CurrentState.ThumbSticks.Right.X;
                        if (Mathf.Abs(x) > 0.01f)
                        {
                            return(x * Mathf.Abs(x));
                        }
                        break;

                    case "Mouse Y":
                        var y = GamepadWhisperer.CurrentState.ThumbSticks.Right.Y;
                        if (Mathf.Abs(y) > 0.01f)
                        {
                            return(y * Mathf.Abs(y));
                        }
                        break;

                    case "Mouse ScrollWheel":
                        var ltVal = GamepadWhisperer.CurrentState.Triggers.Left;
                        var rtVal = GamepadWhisperer.CurrentState.Triggers.Right;
                        if (ltVal > 0.01f || rtVal > 0.01f)
                        {
                            return((-ltVal + rtVal) * 0.01f);
                        }
                        break;
                    }
                }

                return(Input.GetAxis(axisName));
            }
예제 #3
0
        public static bool RightStickDown()
        {
            if (CursorEmulator.EmulatingCursor())
            {
                return(false);
            }

            return(Mathf.Approximately(_previousState.ThumbSticks.Right.X, 0f) && Mathf.Approximately(_previousState.ThumbSticks.Right.Y, 0f) &&
                   (!Mathf.Approximately(_currentState.ThumbSticks.Right.X, 0f) || !Mathf.Approximately(_currentState.ThumbSticks.Right.Y, 0f)));
        }
예제 #4
0
            public static bool isViewPlayerHook(ref bool __result)
            {
                if (_disabled)
                {
                    return(true);
                }
                if (GamepadWhisperer.GetButtonDown(state => state.Buttons.RightStick) && !CursorEmulator.EmulatingCursor())
                {
                    __result = true;
                    return(false);
                }

                return(true);
            }
예제 #5
0
            private static bool OnProcessCameraControls(BaseCameraControl_Ver2 cameraControl)
            {
                if (CursorEmulator.EmulatingCursor())
                {
                    return(false);
                }

                const float xRotSpeed = 1.3f;
                const float yRotSpeed = 0.8f;
                const float moveSpeed = 0.03f;
                // todo expose?
                const float speedMultiplier = 1f;

                var stick = GamepadWhisperer.CurrentState.ThumbSticks.Right;
                var axis  = stick.X * Mathf.Abs(stick.X);
                var axis2 = stick.Y * Mathf.Abs(stick.Y);

                if (Mathf.Abs(axis2) < 0.01f && Mathf.Abs(axis) < 0.01f)
                {
                    return(false);
                }

                var ltVal     = GamepadWhisperer.CurrentState.Triggers.Left;
                var rtVal     = GamepadWhisperer.CurrentState.Triggers.Right;
                var ltPressed = ltVal > 0.3;
                var rtPressed = rtVal > 0.3;

                var cameraData = (BaseCameraControl_Ver2.CameraData)_camDatField.GetValue(cameraControl);

                if (!ltPressed && !rtPressed)
                {
                    var y = axis * xRotSpeed * speedMultiplier;
                    var x = -1 * axis2 * yRotSpeed * speedMultiplier;
                    cameraData.Rot.y = (cameraData.Rot.y + y) % 360f;
                    cameraData.Rot.x = (cameraData.Rot.x + x) % 360f;
                }
                else if (!rtPressed)
                {
                    cameraData.Pos.y = cameraData.Pos.y + axis2 * moveSpeed * speedMultiplier;
                    cameraData.Dir.z = cameraData.Dir.z - axis * moveSpeed * speedMultiplier;
                    cameraData.Dir.z = Mathf.Min(0f, cameraData.Dir.z);
                }
                else if (!ltPressed)
                {
                    var zero      = new Vector3(axis * moveSpeed * speedMultiplier, 0, axis2 * moveSpeed * speedMultiplier);
                    var transBase = (Transform)_transBaseField.GetValue(cameraControl);
                    if (transBase != null)
                    {
                        cameraData.Pos = cameraData.Pos + transBase.InverseTransformDirection(cameraControl.transform.TransformDirection(zero));
                    }
                    else
                    {
                        cameraData.Pos = cameraData.Pos + cameraControl.transform.TransformDirection(zero);
                    }
                }
                else
                {
                    return(false);
                }

                _camDatField.SetValue(cameraControl, cameraData);

                return(true);
            }
예제 #6
0
            public static void BackLogButtonCancel(ref KeyInput.Data __result)
            {
                if (_disabled)
                {
                    return;
                }

                if (GamepadWhisperer.GetButtonDown(state => state.Buttons.B) || GamepadWhisperer.GetButtonDown(state => state.Buttons.RightStick) && !CursorEmulator.EmulatingCursor())
                {
                    __result.isKey = true;
                }
            }