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