Esempio n. 1
0
    IEnumerator DunkJump_C()
    {
        if (playerController)
        {
            playerController.DisableInput();
        }
        passController.DisableBallReception();
        ChangeState(DunkState.Jumping);
        pawnController.Freeze();
        if ((int)AbilityManager.GetAbilityLevel(ConcernedAbility.Dunk) > 0)         //If ability "Dunk" is upgraded
        {
            AttractEnemies();
        }

        Vector3 i_startPosition = transform.position;
        Vector3 i_endPosition   = i_startPosition + Vector3.up * dunkJumpHeight + transform.forward * dunkJumpLength;

        for (float i = 0; i < dunkJumpDuration; i += Time.deltaTime)
        {
            transform.position = Vector3.Lerp(i_startPosition, i_endPosition, i / dunkJumpDuration);
            yield return(new WaitForEndOfFrame());
        }

        transform.position = i_endPosition;
    }
    IEnumerator DashTowardHand_C()
    {
        linkedPawn.animator.SetBool("GrapplePulled", true);
        linkedPawn.Freeze();
        linkedPawn.moveState = MoveState.Blocked;
        Vector3 startPosition                   = armTransform.transform.position;
        Vector3 endPosition                     = grabHand.transform.position;
        float   totalDistance                   = Vector3.Distance(startPosition, endPosition);
        List <EnemyBehaviour> enemyHit          = new List <EnemyBehaviour>();
        int colliderRecalculationIterationCount = frameCountBetweenCollisionRecalculationDuringDash;

        for (float i = 0; i < totalDistance - distanceFromHandOnDash; i += Time.deltaTime * dashSpeed)
        {
            Vector3 armPosition = Vector3.Lerp(startPosition, endPosition, dashSpeedCurve.Evaluate(i / totalDistance));
            linkedPawn.transform.position = armPosition + (linkedPawn.transform.position - armTransform.position);
            linkedPawn.transform.forward  = endPosition - startPosition;
            colliderRecalculationIterationCount--;
            if (colliderRecalculationIterationCount <= 0)
            {
                colliderRecalculationIterationCount = frameCountBetweenCollisionRecalculationDuringDash;
                foreach (Collider c in Physics.OverlapSphere(transform.position, dashHitboxRadius, LayerMask.GetMask("Enemy")))
                {
                    EnemyBehaviour enemy = c.GetComponentInParent <EnemyBehaviour>();
                    if (!enemyHit.Contains(enemy))
                    {
                        enemy.BumpMe(c.transform.position - transform.position, BumpForce.Force1);
                        enemyHit.Add(enemy);
                    }
                }
            }
            yield return(null);
        }
        linkedPawn.UnFreeze();
        linkedPawn.moveState = MoveState.Idle;
        linkedPawn.animator.SetBool("GrapplePulled", false);
        RetractArm();
    }