Beispiel #1
0
            static void Postfix(MainCameraControl __instance)
            {
                Transform forwardRefTransform = __instance.GetComponentInParent <PlayerController>().forwardReference;//forwardReference is the main camera transform

                if (pdaIsClosing && pdaCloseTimer < pdaCloseDelay)
                {
                    pdaCloseTimer += Time.deltaTime;
                }
                else if (pdaCloseTimer >= pdaCloseDelay || (pdaIsClosing && Player.main.GetPDA().state == PDA.State.Opened))
                {
                    pdaIsClosing  = false;
                    pdaCloseTimer = 0;
                }
                if (Player.main.GetPDA().state == PDA.State.Closing)
                {
                    pdaIsClosing = true;
                }
                //when the pda is opened the viewmodel is moved forward but even when the state is closed, it is kept foward for a short while which was causing the neck to
                //show if I also moved the model forward at the same time. So I maintain my own closing state with pdaIsClosing and only move the model forward after pdaCloseDelay.
                //There may be a better way to solve this so someone please fix it.
                //I think the shifting of the model happens because of local position changes in the actual 3D model since the offset values didn't change during the model shift.
                if (Player.main.GetPDA().state == PDA.State.Closed && !pdaIsClosing)
                {
                    if (Player.main.motorMode == Player.MotorMode.Seaglide)
                    {
                        __instance.viewModel.transform.localPosition = __instance.viewModel.transform.parent.worldToLocalMatrix.MultiplyPoint(forwardRefTransform.position + (forwardRefTransform.up * seaglideYOffset) + forwardRefTransform.forward * seaglideZOffset);
                    }
                    else if (Player.main.transform.position.y < Ocean.main.GetOceanLevel() + 1f && !Player.main.IsInside() && !Player.main.precursorOutOfWater)
                    {
                        //use the viewModel transform instead of forwardRef since the player body pitches while swimming.
                        string clipName = Player.main.playerAnimator.GetCurrentAnimatorClipInfo(0)[0].clip.name;
                        if (clipName == "Back_lean" || clipName == "view_surface_swim_forward")
                        {
                            __instance.viewModel.transform.localPosition = __instance.viewModel.transform.parent.worldToLocalMatrix.MultiplyPoint(forwardRefTransform.position + (__instance.viewModel.transform.up * (swimYOffset - 0.1f)) + __instance.viewModel.transform.forward * (swimZOffset - 0.1f));
                        }
                        else
                        {
                            __instance.viewModel.transform.localPosition = __instance.viewModel.transform.parent.worldToLocalMatrix.MultiplyPoint(forwardRefTransform.position + (__instance.viewModel.transform.up * swimYOffset) + __instance.viewModel.transform.forward * swimZOffset);
                        }
                    }
                    else if (!__instance.cinematicMode && Player.main.motorMode != Player.MotorMode.Vehicle && Player.main.motorMode != Player.MotorMode.Seaglide)
                    {
                        if (Player.main.movementSpeed == 0)
                        {
                            __instance.viewModel.transform.localPosition = __instance.viewModel.transform.parent.worldToLocalMatrix.MultiplyPoint(forwardRefTransform.position + Vector3.up * defaultYOffset + new Vector3(forwardRefTransform.forward.x, 0f, forwardRefTransform.forward.z).normalized *defaultZOffset);
                        }
                        else
                        {
                            __instance.viewModel.transform.localPosition = __instance.viewModel.transform.parent.worldToLocalMatrix.MultiplyPoint(forwardRefTransform.position + Vector3.up * defaultYOffset + new Vector3(forwardRefTransform.forward.x, 0f, forwardRefTransform.forward.z).normalized *(defaultZOffset - 0.1f));
                        }
                    }
                }
            }
        public static void MCC_Update_Postfix(MainCameraControl __instance)
        {
            Transform forwardReference = __instance.GetComponentInParent <PlayerController>().forwardReference;

            if (MainPatcher.pdaIsClosing && MainPatcher.pdaCloseTimer < MainPatcher.pdaCloseDelay)
            {
                MainPatcher.pdaCloseTimer += Time.deltaTime;
            }
            else if (MainPatcher.pdaCloseTimer >= MainPatcher.pdaCloseDelay || (MainPatcher.pdaIsClosing && Player.main.GetPDA().state == PDA.State.Opened))
            {
                MainPatcher.pdaIsClosing  = false;
                MainPatcher.pdaCloseTimer = 0f;
            }
            if (Player.main.GetPDA().state == PDA.State.Closing)
            {
                MainPatcher.pdaIsClosing = true;
            }
            if (Player.main.GetPDA().state == PDA.State.Closed && !MainPatcher.pdaIsClosing)
            {
                if (Player.main.motorMode == Player.MotorMode.Seaglide)
                {
                    __instance.viewModel.transform.localPosition = __instance.viewModel.transform.parent.worldToLocalMatrix.MultiplyPoint(forwardReference.position + forwardReference.up * MainPatcher.seaglideYOffset + forwardReference.forward * MainPatcher.seaglideZOffset);
                    return;
                }
#if SN1
                if (Player.main.transform.position.y < Ocean.main.GetOceanLevel() + 1f && !Player.main.IsInside() && !Player.main.precursorOutOfWater)
#elif BZ
                if (Player.main.transform.position.y < Ocean.GetOceanLevel() + 1f && !Player.main.IsInside() && !Player.main.forceWalkMotorMode)
#endif
                {
                    string name = Player.main.playerAnimator.GetCurrentAnimatorClipInfo(0)[0].clip.name;
                    if (name == "Back_lean" || name == "view_surface_swim_forward")
                    {
                        __instance.viewModel.transform.localPosition = __instance.viewModel.transform.parent.worldToLocalMatrix.MultiplyPoint(forwardReference.position + __instance.viewModel.transform.up * (MainPatcher.swimYOffset - 0.1f) + __instance.viewModel.transform.forward * (MainPatcher.swimZOffset - 0.1f));
                        return;
                    }
                    __instance.viewModel.transform.localPosition = __instance.viewModel.transform.parent.worldToLocalMatrix.MultiplyPoint(forwardReference.position + __instance.viewModel.transform.up * MainPatcher.swimYOffset + __instance.viewModel.transform.forward * MainPatcher.swimZOffset);
                    return;
                }
                else if (!__instance.cinematicMode && Player.main.motorMode != Player.MotorMode.Vehicle && Player.main.motorMode != Player.MotorMode.Seaglide)
                {
                    if (Player.main.movementSpeed == 0f)
                    {
                        __instance.viewModel.transform.localPosition = __instance.viewModel.transform.parent.worldToLocalMatrix.MultiplyPoint(forwardReference.position + Vector3.up * MainPatcher.defaultYOffset + new Vector3(forwardReference.forward.x, 0f, forwardReference.forward.z).normalized *MainPatcher.defaultZOffset);
                        return;
                    }
                    __instance.viewModel.transform.localPosition = __instance.viewModel.transform.parent.worldToLocalMatrix.MultiplyPoint(forwardReference.position + Vector3.up * MainPatcher.defaultYOffset + new Vector3(forwardReference.forward.x, 0f, forwardReference.forward.z).normalized *(MainPatcher.defaultZOffset - 0.1f));
                }
            }
        }