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