IEnumerator moveRoutine() { moving = true; moveDir = RandomExtra.Chance(.5f) ? Vector2.right : Vector2.left; float mainTimer = Random.Range(MoveTimeRange.x, MoveTimeRange.y); float directionTimer = Random.Range(DirectionSwitchTimeRange.x, DirectionSwitchTimeRange.y); while (mainTimer > 0) { if (Mathf.Abs(transform.position.x - PlayerRef.transform.position.x) <= AttackDistance && RandomExtra.ChancePerSecond(AttackChancePerSecond)) { moving = false; yield break; // do a grab, as long as the parent immediately calls grab } mainTimer -= Time.deltaTime; directionTimer -= Time.deltaTime; if (directionTimer <= 0) { directionTimer = Random.Range(DirectionSwitchTimeRange.x, DirectionSwitchTimeRange.y); moveDir *= -1; } transform.position += (Vector3)moveDir * MoveSpeed * Time.deltaTime; yield return(null); } moving = false; }