示例#1
0
        public override void CalcOutput(PlayerEntity player, ICameraMotorInput input, ICameraMotorState state,
                                        SubCameraMotorState subState,
                                        DummyCameraMotorOutput output,
                                        ICameraNewMotor last, int clientTime)
        {
            output.Far          = input.GetPoseConfig(_modeId).Far;
            output.Near         = input.GetPoseConfig(_modeId).Near;
            output.ForbidDetect = input.GetPoseConfig(_modeId).ForbidDetect;

            _transitionTime = CameraUtility.GetPostureTransitionTime(_motorType, subState);
            var elapsedPercent = ElapsedPercent(clientTime, subState.ModeTime, _transitionTime);
            var realPercent    = EaseInOutQuad(0, 1, elapsedPercent);

            if (state.IsFristPersion())
            {
                //一人称和瞄准相机没有偏移
                output.Fov = Mathf.Lerp(input.GetPoseConfig(last.ModeId).Fov,
                                        input.GetPoseConfig(_modeId).Fov, realPercent);
            }
            else
            {
                if (last is AirplanePoseMotor || last is DrivePoseMotor)
                {
                    realPercent = 1;
                }

                output.ArchorOffset = Vector3.Lerp(input.GetPoseConfig(last.ModeId).AnchorOffset,
                                                   input.GetPoseConfig(_modeId).AnchorOffset, realPercent);
                output.ArchorPostOffset =
                    Vector3.Lerp(input.GetPoseConfig(last.ModeId).ScreenOffset,
                                 input.GetPoseConfig(_modeId).ScreenOffset, realPercent);
                output.Offset = Vector3.Lerp(new Vector3(0, 0, -input.GetPoseConfig(last.ModeId).Distance),
                                             new Vector3(0, 0, -input.GetPoseConfig(_modeId).Distance), realPercent);
                output.ArchorEulerAngle = Vector3.Lerp(last.FinalEulerAngle, FinalEulerAngle, realPercent);
                output.Fov = Mathf.Lerp(input.GetPoseConfig(last.ModeId).Fov,
                                        input.GetPoseConfig(_modeId).Fov, realPercent);
            }
        }