/// <inheritdoc /> public override void FastForward() { if (Data.Current == null) { return; } if (Data.Current.FindPathInGraph(step => step.Data.Transitions.Data.Transitions.Select(transition => transition.Data.TargetStep), null, out IList <IStep> pathToChapterEnd) == false) { throw new InvalidStateException("The end of the chapter is not reachable from the current step."); } foreach (IStep step in pathToChapterEnd) { if (Data.Current.LifeCycle.Stage == Stage.Inactive) { Data.Current.LifeCycle.Activate(); } Data.Current.LifeCycle.MarkToFastForward(); ITransition toAutocomplete = Data.Current.Data.Transitions.Data.Transitions.First(transition => transition.Data.TargetStep == step); if (toAutocomplete.IsCompleted == false) { toAutocomplete.Autocomplete(); } Data.Current.LifeCycle.Deactivate(); Data.Current = step; } }
public override void FastForward(EntityData data) { IList <IStep> happyPath; if (data.Current == null) { return; } if (data.Current.FindPathInGraph(step => step.Data.Transitions.Data.Transitions.Select(transition => transition.Data.TargetStep), null, out happyPath) == false) { throw new InvalidStateException("The end of the chapter is not reachable from current step."); } for (int i = 0; i < happyPath.Count; i++) { if (data.Current.LifeCycle.Stage == Stage.Inactive) { data.Current.LifeCycle.Activate(); } data.Current.LifeCycle.MarkToFastForward(); ITransition toAutocomplete = data.Current.Data.Transitions.Data.Transitions.First(transition => transition.Data.TargetStep == happyPath[i]); if (toAutocomplete.IsCompleted == false) { toAutocomplete.Autocomplete(); } data.Current.LifeCycle.Deactivate(); data.Current = happyPath[i]; } }
public static void SkipStep(ITransition transition) { if (IsRunning == false) { return; } Current.Data.Current.Data.Current.LifeCycle.MarkToFastForward(); transition.Autocomplete(); }
/// <summary> /// Skips the current step and uses given transition. /// </summary> /// <param name="transition">Transition which should be used.</param> public static void SkipStep(ITransition transition) { if (IsRunning == false) { return; } Current.Data.Current.Data.Current.LifeCycle.MarkToFastForward(); transition.Autocomplete(); Events.FastForwardStep?.Invoke(instance, new FastForwardCourseEventArgs(transition, Current)); }