public IEnumerator _TakeDamage() { Debug.Log("DAMAGE TAKE"); PlayerControllerController.invincible = true; orbitController.planet.StopAttacking(); freeRoamCollider.enabled = false; orbitController.enabled = false; takeDamageCam.gameObject.SetActive(true); // ask orbit controller for planet to player vector Vector3 planetToPlayer = (transform.position - orbitController.curTargetPlanet.position).normalized; // add velocity away from planet GetComponent <Rigidbody>().velocity = planetToPlayer * ejectVelocity; float prevDrag = GetComponent <Rigidbody>().drag;// = planetToPlayer * ejectVelocity; GetComponent <Rigidbody>().drag = 1f; // activate free roam after delay yield return(new WaitForSeconds(ejectAttack)); takeDamageCam.gameObject.SetActive(false); orbitCam.gameObject.SetActive(false); freeIntermediateCam.gameObject.SetActive(true); yield return(new WaitForSeconds(ejectSustain)); // wait for recentering through intermediateCam freeIntermediateCam.gameObject.SetActive(false); freeCam.m_BindingMode = CinemachineTransposer.BindingMode.LockToTargetWithWorldUp; freeCam.gameObject.SetActive(true); yield return(new WaitForSeconds(ejectDecay)); // wait for recentering through intermediateCam freeCam.m_BindingMode = CinemachineTransposer.BindingMode.SimpleFollowWithWorldUp; freeRoamCollider.enabled = true; freeRoamController.enabled = true; GetComponent <Rigidbody>().drag = prevDrag; yield return(new WaitForSeconds(.5f)); healthbar.FadeToMax(); // return to max health PlayerControllerController.invincible = false; }