public static bool Prefix(CameraRig __instance, ref Vector3 ___m_TargetPosition) { if (!settings.toggleCameraPitch && !settings.toggleCameraElevation && !Main.resetExtraCameraAngles && !settings.toggleFreeCamera) { return(true); } var dt = Mathf.Min(Time.unscaledDeltaTime, 0.1f); if (__instance.m_ScrollRoutine != null && (double)Time.time > (double)__instance.m_ScrollRoutineEndsOn) { __instance.StopCoroutine(__instance.m_ScrollRoutine); __instance.m_ScrollRoutine = (Coroutine)null; } if (__instance.m_ScrollRoutine == null) { var scrollOffset = __instance.m_ScrollOffset; if ((bool)(SimpleBlueprint)BlueprintRoot.Instance && !Game.Instance.IsControllerGamepad && (bool)(SettingsEntity <bool>)SettingsRoot.Controls.ScreenEdgeScrolling && (Cursor.visible || (bool)(SettingsEntity <bool>)SettingsRoot.Controls.CameraScrollOutOfScreenEnabled) && Game.Instance.CurrentMode != GameModeType.FullScreenUi) { scrollOffset += __instance.GetCameraScrollShiftByMouse(); } var scrollVector2 = scrollOffset + __instance.CameraDragToMove() + __instance.m_ScrollBy2D; __instance.m_ScrollBy2D.Set(0.0f, 0.0f); __instance.TickCameraDrag(); Game.Instance.CameraController?.Follower?.Release(); var currentlyLoadedArea = Game.Instance.CurrentlyLoadedArea; var num = currentlyLoadedArea != null ? currentlyLoadedArea.CameraScrollMultiplier : 1f; var scaledScrollVector = scrollVector2 * (__instance.m_ScrollSpeed * dt * num * CameraRig.ConsoleScrollMod); var scrollMagnatude = (float)Math.Sqrt(Vector2.Dot(scaledScrollVector, scaledScrollVector)); //var scaledScrollVector3 = scrollVector3 * (__instance.m_ScrollSpeed * dt * num * CameraRig.ConsoleScrollMod); var worldPoint1 = __instance.Camera.ViewportToWorldPoint(new Vector3(0.5f, 0.5f, 1f)); var worldPoint2 = __instance.Camera.ViewportToWorldPoint(new Vector3(1f, 0.5f, 1f)); var worldPoint3 = __instance.Camera.ViewportToWorldPoint(new Vector3(0.5f, 1f, 1f)); //Mod.Debug($"worldPoint xyZ: {worldPoint1.normalized} XyZ: {worldPoint2.normalized} zYZ: {worldPoint3.normalized} "); var pitch = __instance.transform.eulerAngles.x - 42.75; var pitchRadians = Math.PI * pitch / 180f; worldPoint2.y = worldPoint1.y; worldPoint3.y = worldPoint1.y; var vector3 = worldPoint2 - worldPoint1; __instance.Right = vector3.normalized; vector3 = worldPoint3 - worldPoint1; __instance.Up = vector3.normalized; if (pitch >= 0) { __instance.Up = -__instance.Up; } var targetPosition = __instance.m_TargetPosition; var yAxis = new Vector3(0, 2, 0); var dPos = scaledScrollVector.x * __instance.Right + scaledScrollVector.y * __instance.Up; if (__instance.m_RotationByMouse) { dPos += scaledScrollVector.y * (float)Math.Sin(pitchRadians) * yAxis; } //Mod.Debug($"dPos: {dPos} pitch: {pitch:##.000} sine: {Math.Sin(pitchRadians):#.000}"); __instance.m_TargetPosition += dPos; if (!settings.toggleFreeCamera) { if (!__instance.NoClamp && !__instance.m_SkipClampOneFrame) { __instance.m_TargetPosition = __instance.ClampByLevelBounds(__instance.m_TargetPosition); } __instance.m_TargetPosition = __instance.PlaceOnGround(__instance.m_TargetPosition); if (__instance.NewBehaviour) { if (!__instance.m_AttachPointPos.HasValue) { __instance.m_AttachPointPos = new Vector3?(__instance.Camera.transform.parent.localPosition); } __instance.m_TargetPosition = __instance.LowerGently(targetPosition, __instance.m_TargetPosition, dt); } } } __instance.m_ScrollOffset = Vector2.zero; return(false); }