コード例 #1
0
    public void destroyRoutineSequence(RoutineSequence sequence)
    {
        if (this.sequenceHead == sequence)
        {
            // remove first
            this.sequenceHead = sequence.listNext;
        }
        else
        {
            // not head of list
            if (sequence.listNext != null)
            {
                // remove between
                sequence.listPrevious.listNext = sequence.listNext;
                sequence.listNext.listPrevious = sequence.listPrevious;
            }
            else if (sequence.listPrevious != null)
            {
                // and listNext is null
                sequence.listPrevious.listNext = null;
                // remove last
            }
        }
        sequence.listPrevious = null;
        sequence.listNext     = null;

        if (sequence.currentCoroutine == null)
        {
            destroyRoutine(sequence.currentCoroutine);
            sequence.currentCoroutine = null;
        }
    }
コード例 #2
0
    public void updateAllSequenceRoutines()
    {
        routineSequence = this.sequenceHead;
        while (routineSequence != null)
        {
            // store listNext before coroutine finishes and is removed from the list
            sequenceNext = routineSequence.listNext;


            if (routineSequence.currentFiber >= routineSequence.fibers.Length && routineSequence.currentCoroutine.finished)
            {
                destroyRoutineSequence(routineSequence);
            }
            else if (routineSequence.currentCoroutine.finished)
            {
                routineSequence.currentFiber++;
                if (routineSequence.currentFiber < routineSequence.fibers.Length)
                {
                    routineSequence.currentCoroutine = startRoutine(routineSequence.fibers[routineSequence.currentFiber]);
                }
            }

            routineSequence = sequenceNext;
        }
    }
コード例 #3
0
 public void addSequence(RoutineSequence sequence)
 {
     if (this.sequenceHead != null)
     {
         sequence.listNext         = this.sequenceHead;
         sequenceHead.listPrevious = sequence;
     }
     sequenceHead = sequence;
 }
コード例 #4
0
    public void flushRoutineSequence(RoutineSequence sequence)
    {
        if (sequence.currentCoroutine.finished != null)
        {
            flushRoutine(sequence.currentCoroutine);
        }

        for (int i = sequence.currentFiber + 1; i < sequence.fibers.Length; i++)
        {
            sequence.currentCoroutine = startRoutine(sequence.fibers[i]);
            flushRoutine(sequence.currentCoroutine);
        }
        destroyRoutineSequence(sequence);
    }
コード例 #5
0
    public RoutineSequence startRoutineSequence(IEnumerable[] fibers)
    {
        // if function does not have a yield, fiber will be null and we no-op
        if (fibers == null || fibers.Length == 0)
        {
            return(null);
        }
        // create coroutine node and run until we reach first yield
        RoutineSequence sequence = new RoutineSequence(fibers);

        addSequence(sequence);
        sequence.currentCoroutine = startRoutine(fibers[++sequence.currentFiber]);

        //		Debug.LogError("1"  + sequence.currentFiber);
        return(sequence);
    }