void Update() { if (state != CamState.CutScene) { switch (state) { case CamState.PlayerFollow: targetPos = player.position + dispFromPlayer; break; case CamState.PorterPipe: targetPos = GetCamPos(player.position, camDistZ, zFreeze); break; } MoveTowardsTarget(); } else { if (InputController.GetJump(InputStateType.JUST_PRESSED)) { StopCoroutine(cutSceneCoroutine); state = oldState; OnCutSceneEnd?.Invoke(); if (debug) { Debug.Log("Cutscene cancelled by Player."); } } } }
private IEnumerator PlayCutScene(CutSceneTransition[] c) { oldState = state; state = CamState.CutScene; if (debug) { Debug.Log("Starting CutScene with " + c.Length + " Transitions."); } for (int i = 0; i < c.Length; i++) { Vector3 previousPosition; Vector3 previousRotation; float counter = Time.timeSinceLevelLoad; CutSceneTransition transition = c[i]; if (i == 0) { previousPosition = transform.position; previousRotation = transform.eulerAngles; } else { previousPosition = c[i - 1].GetPos(); previousRotation = c[i - 1].GetRot(); } while (Time.timeSinceLevelLoad - counter < transition.TimeToComplete) { transform.position = Vector3.Lerp(previousPosition, transition.GetPos(), (Time.timeSinceLevelLoad - counter) / transition.TimeToComplete); transform.eulerAngles = GlobalMethods.LerpAngle(previousRotation, transition.GetRot(), (Time.timeSinceLevelLoad - counter) / transition.TimeToComplete); yield return(null); if (debug) { Debug.Log("Transition #" + i + " TimeLeft: " + (transition.TimeToComplete - (Time.timeSinceLevelLoad - counter))); } } } state = oldState; OnCutSceneEnd?.Invoke(); if (debug) { Debug.Log("Ending Cutscene"); } }