Exemplo n.º 1
0
    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;
    }