// event queue private static IEnumerator Execute(AISequence sequence) { if (sequence.events != null) { for (int i = 0; i < sequence.events.Length; i++) { while (paused) { yield return(new WaitForSecondsRealtime(0.05f)); } sequence.events[i].action?.Invoke(); // TODO reduce the wait time if the above invocation takes too long yield return(new WaitForSecondsRealtime(sequence.events[i].duration)); } } else { AISequence[] children = sequence.GetChildren(); for (int i = 0; i < children.Length; i++) { yield return(Execute(children[i])); } } }
public static void Add(AISequence sequence) { if (GameManager.Boss.DebugMode) { if (sequence == null) { Debug.LogError("Null AISequence added to queue."); return; } // Generate warning if there's a named sequence without a description. // // Note that "glue" AISequences are allowed; those that don't subclass AISequence // don't need to provide a description. This includes subclassed AISequences that // have additional Wait()s or Then()s called. if (sequence.Description == null && !sequence.Name.Equals("AISequence")) { Debug.LogWarning("Found AISequence with a name, but without a description. Name: " + sequence.Name); } // Generate warning if there's a sequence with too high a difficulty. if (sequence.Difficulty >= 8f) { Debug.LogWarning("Found AISequence \"" + sequence.Name + "\" with very high difficulty: " + sequence.Difficulty + ". "); } Debug.Log("Added AISequence" + (sequence.Name.Equals("AISequence") ? " " : " \"" + sequence.Name + "\" ") + "to queue. Here's what it says it'll do: \"" + (sequence.Description ?? sequence.ToString()) + "\"."); } queuedSequences.Enqueue(sequence); }
// event queue private IEnumerator ExecuteQueue() { while (running) { //Profiler.BeginSample("Event Queue"); while (queuedSequences.Count == 0) { yield return(new WaitForSeconds(0.05f)); } AISequence nextSequence = queuedSequences.Dequeue(); yield return(Execute(nextSequence)); //Profiler.EndSample(); } }
public static void ExecuteAsync(AISequence sequence) { GameManager.Boss.StartCoroutine(Execute(sequence)); }