コード例 #1
0
            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);
            }