Example #1
0
            /// <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;
                }
            }
Example #2
0
            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];
                }
            }
Example #3
0
        public static void SkipStep(ITransition transition)
        {
            if (IsRunning == false)
            {
                return;
            }

            Current.Data.Current.Data.Current.LifeCycle.MarkToFastForward();
            transition.Autocomplete();
        }
Example #4
0
        /// <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));
        }