IEnumerator <WaitForSeconds> RotationSequence(TileEdge[] lookAts, float totalDuration) { float duration = totalDuration * robotMoveTimeFraction; float partDuration = duration / (lookAts.Length - 1); position = position.Rotate(lookAts[lookAts.Length - 1]); for (int from = 0, to = 1; to < lookAts.Length; from++, to++) { if (reachedGoal) { break; } float delta = 0; float start = Time.timeSinceLevelLoad; Vector3 fromForward = lookAts[from].transform.position - transform.position; Vector3 toForward = lookAts[to].transform.position - transform.position; Quaternion qFrom = Quaternion.LookRotation(fromForward, Vector3.up); Quaternion qTo = Quaternion.LookRotation(toForward, Vector3.up); while (delta < partDuration) { delta = Time.timeSinceLevelLoad - start; transform.rotation = Quaternion.Lerp(qFrom, qTo, delta / partDuration); yield return(new WaitForSeconds(moveAnimationDelta)); if (dead) { break; } } if (dead) { break; } } ManageFlame(); transform.LookAt(position.heading.transform, Vector3.up); }