public static void InputKeyProcPost(BaseCameraControl_Ver2 __instance, ref bool __result) { if (_disabled) { return; } if (OnProcessCameraControls(__instance)) { __result = true; } }
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); }