/// <summary>
        /// Evaluate the camera translation based on WASD and apply boost.
        /// </summary>
        /// <param name="sms"></param>
        /// <param name="deltaTime"></param>
        /// <returns>return true if translation is not a vector3.zero</returns>
        private bool EvaluateTranslation(SimulatorMovementSpeed sms, ref SimulatorCameraState scs, float deltaTime)
        {
            var translation = GetInputTranslationDirection() * sms.BaseSpeed * deltaTime;

            if (translation != Vector3.zero)
            {
                SimulatorCameraStateSystem.ResetCameraStateTransform(scs);

                // Speed up movement when shift key held
                if (Input.GetKey(KeyCode.LeftShift))
                {
                    // Modify movement by a boost factor (defined in Inspector and modified in play mode through up and down arrow)
                    translation *= Mathf.Pow(2.0f, sms.LeftShiftBoost);
                }

                scs.TargetCameraState.Translate(translation);
                return(true);
            }
            return(false);
        }
示例#2
0
 public static void ResetCameraStateTransform(SimulatorCameraState scs)
 {
     scs.InterpolatingCameraState.SetFromTransform(VRSF_Components.CameraRig.transform);
     scs.TargetCameraState.SetFromTransform(VRSF_Components.CameraRig.transform);
 }
        /// <summary>
        /// Framerate-independent interpolation for position and Rotation
        /// </summary>
        /// <param name="sms"></param>
        /// <param name="scs"></param>
        /// <param name="smr"></param>
        /// <param name="deltaTime"></param>
        public static void Interpolate(SimulatorMovementSpeed sms, SimulatorMovementRotation smr, ref SimulatorCameraState scs, float deltaTime)
        {
            // Calculate the lerp amount, such that we get 99% of the way to our target in the specified time
            var positionLerpPct = 1f - Mathf.Exp(Mathf.Log(1f - 0.99f) / sms.PositionLerpTime * deltaTime);
            var rotationLerpPct = 1f - Mathf.Exp(Mathf.Log(1f - 0.99f) / smr.RotationLerpTime * deltaTime);

            scs.InterpolatingCameraState.LerpTowards(scs.TargetCameraState, positionLerpPct, rotationLerpPct);
            scs.InterpolatingCameraState.UpdateTransform(VRSF_Components.CameraRig.transform);
        }