示例#1
0
    // 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]));
            }
        }
    }
示例#2
0
    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);
    }
示例#3
0
    // 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();
        }
    }
示例#4
0
 public static void ExecuteAsync(AISequence sequence)
 {
     GameManager.Boss.StartCoroutine(Execute(sequence));
 }