/// <summary> /// /// </summary> /// <returns></returns> IEnumerator DoTransitionTo(bl_TPViewData newViewState) { OnViewChanged(); Vector3 origin = playerCamera.localPosition; Quaternion originRot = Quaternion.Euler(playerCamera.localEulerAngles); Vector3 targetPosition = newViewState.GetViewPosition; Quaternion targetRot = Quaternion.Euler(newViewState.ViewRotation); cameraRay.ExtraRayDistance = newViewState.DistanceFromPlayer; CurrentViewData = newViewState; float d = 0; float t = 0; while (d < 1) { d += Time.deltaTime / newViewState.TransitionDuration; t = newViewState.transitionCurve.Evaluate(d); playerCamera.localPosition = Vector3.Lerp(origin, targetPosition, t); playerCamera.localRotation = Quaternion.Slerp(originRot, targetRot, t); cameraShaker?.GetDefaultPosition(); yield return(null); } cameraShaker?.GetDefaultPosition(); }
/// <summary> /// Make transition to the default view position /// </summary> public void TransitionToDefault() { m_overrideViewState = null; m_viewOverrideState = TPViewOverrideState.None; if (playerViewMode == MPlayerViewMode.FirstPerson || isAiming) { return; } StartCoroutine(DoTransitionTo(viewState)); }
/// <summary> /// /// </summary> public void TransitionTo(bl_TPViewData newViewState, TPViewOverrideState overrideState = TPViewOverrideState.OverrideSingle) { m_viewOverrideState = overrideState; m_overrideViewState = newViewState; if (!initialized) { SetDefaultView(); } if (playerViewMode == MPlayerViewMode.FirstPerson || isAiming) { return; } StartCoroutine(DoTransitionTo(newViewState)); }
/// <summary> /// /// </summary> void SetDefaultView() { if (initialized) { return; } var gpv = bl_CameraViewSettings.Instance.CurrentViewMode; if (gpv == MPlayerViewMode.ThirdPerson) { playerViewMode = MPlayerViewMode.ThirdPerson; SetupThirdPerson(); cameraRay.ExtraRayDistance = viewState.DistanceFromPlayer; playerCamera.localPosition = viewState.GetViewPosition; playerCamera.localRotation = Quaternion.Euler(viewState.ViewRotation); cameraShaker?.GetDefaultPosition(); CurrentViewData = viewState; } initialized = true; }
/// <summary> /// /// </summary> /// <returns></returns> IEnumerator DoAimTransition(bool aiming) { OnViewChanged(); bl_TPViewData toData = viewState; if (m_viewOverrideState == TPViewOverrideState.OverrideDefault || m_viewOverrideState == TPViewOverrideState.OverrideAll) { toData = m_overrideViewState; } CurrentViewData = toData; Vector3 origin = playerCamera.localPosition; Vector3 targetPosition = toData.GetViewPosition; Quaternion originRot = Quaternion.Euler(playerCamera.localEulerAngles); Quaternion targetRot = Quaternion.Euler(toData.ViewRotation); if (aiming) { targetPosition = new Vector3(viewAimState.ViewPosition.x, viewAimState.ViewPosition.y, -viewAimState.DistanceFromPlayer); targetRot = Quaternion.Euler(viewAimState.ViewRotation); } float d = 0; float t = 0; while (d < 1) { d += Time.deltaTime / viewAimState.TransitionDuration; t = bl_CameraViewSettings.Instance.aimTransitionCurve.Evaluate(d); playerCamera.localPosition = Vector3.Lerp(origin, targetPosition, t); playerCamera.localRotation = Quaternion.Slerp(originRot, targetRot, t); cameraShaker?.GetDefaultPosition(); yield return(null); } cameraShaker?.GetDefaultPosition(); }
/// <summary> /// /// </summary> /// <returns></returns> IEnumerator DoViewTransition() { OnViewChanged(); Vector3 origin = playerCamera.localPosition; Quaternion originRot = Quaternion.Euler(playerCamera.localEulerAngles); Vector3 targetPosition = defaultFPPosition; Quaternion targetRot = Quaternion.Euler(defaultFPRotation); bl_TPViewData toData = viewState; if (m_viewOverrideState == TPViewOverrideState.OverrideDefault || m_viewOverrideState == TPViewOverrideState.OverrideAll) { toData = m_overrideViewState; } CurrentViewData = toData; if (playerViewMode == MPlayerViewMode.ThirdPerson) { SetupThirdPerson(); cameraRay.ExtraRayDistance = toData.DistanceFromPlayer; targetPosition = toData.GetViewPosition; targetRot = Quaternion.Euler(toData.ViewRotation); } else { cameraRay.ExtraRayDistance = 0; bl_UCrosshair.Instance.fadeOnAim = true; } float d = 0; float t = 0; while (d < 1) { d += Time.deltaTime / toData.TransitionDuration; t = toData.transitionCurve.Evaluate(d); playerCamera.localPosition = Vector3.Lerp(origin, targetPosition, t); playerCamera.localRotation = Quaternion.Slerp(originRot, targetRot, t); cameraShaker?.GetDefaultPosition(); yield return(null); } //update the camera shaker origin position cameraShaker?.GetDefaultPosition(); if (playerViewMode == MPlayerViewMode.FirstPerson) { playerSettings.RemoteObjects.SetActive(false); weaponCamera.enabled = true; playerNetwork.gunManager.GetCurrentWeapon()?.ResetDefaultMuzzlePoint(); #if UNITY_POST_PROCESSING_STACK_V2 if (playerCameraEffects != null) { playerCameraEffects.enabled = false; } if (weaponCameraEffects != null) { weaponCameraEffects.enabled = true; } #endif } }