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(); }