IEnumerator ProgressAndCompleteNextTurn()
    {
        while (true)
        {
            TurnManager.CycleToNextTurn();

            // Set camera to next character
            ProgressQueueUnit now       = TurnManager.ProgressQueue.Peek();
            Character         character = CharacterManager.ActiveCharacters[now.CharacterId];
            CameraManager.FollowNewCharacter(now.CharacterId);
            Debug.Log(character.Name + "'s turn.");

            if (character.IsControllable)
            {
                uiManager.BeginPlayerTurn();

                // Wait for player to finish turn
                yield return(new WaitUntil(() => UiManager.hasFinishedControlling));
            }
            else
            {
                AiManager.CompleteTurn(now.CharacterId);
            }

            TurnManager.ResetCurrentCharacterProgress();

            yield return(new WaitForSeconds(0.1f));
        }
    }
    // Keep progressing everyone and leave the first person eligible for turn at front
    public static void CycleToNextTurn()
    {
        ProgressQueueUnit next      = ProgressQueue.Peek();
        Character         character = CharacterManager.ActiveCharacters[next.CharacterId];

        next.Progress += character.Speed;
        while (next.Progress < 100)
        {
            ProgressQueue.Enqueue(ProgressQueue.Dequeue());

            next           = ProgressQueue.Peek();
            character      = CharacterManager.ActiveCharacters[next.CharacterId];
            next.Progress += character.Speed;
        }
    }
 public static void AddToProgressQueue(ProgressQueueUnit newCharacter)
 {
     ProgressQueue.Enqueue(newCharacter);
 }