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; } }
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; } }
public void addSequence(RoutineSequence sequence) { if (this.sequenceHead != null) { sequence.listNext = this.sequenceHead; sequenceHead.listPrevious = sequence; } sequenceHead = sequence; }
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); }
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); }