public void Configure(EntityData data, IMode mode, Stage stage)
            {
                if (stage == Stage.Inactive)
                {
                    return;
                }

                if (data.Behavior is IOptional == false)
                {
                    return;
                }

                bool wasSkipped = data.Mode.CheckIfSkipped(data.Behavior.GetType());
                bool isSkipped  = mode.CheckIfSkipped(data.Behavior.GetType());

                if (wasSkipped == isSkipped)
                {
                    return;
                }

                if (isSkipped)
                {
                    if (data.Behavior.LifeCycle.Stage != Stage.Inactive && mode.CheckIfSkipped(data.Behavior.GetType()))
                    {
                        data.Behavior.LifeCycle.MarkToFastForward();

                        if (data.Behavior.LifeCycle.Stage == Stage.Active)
                        {
                            data.Behavior.LifeCycle.Deactivate();
                        }
                    }
                }
                else
                {
                    if (stage == Stage.Deactivating)
                    {
                        data.Behavior.LifeCycle.MarkToFastForwardStage(Stage.Activating);
                        data.Behavior.LifeCycle.MarkToFastForwardStage(Stage.Active);
                    }

                    data.Behavior.LifeCycle.Activate();
                }
            }
Example #2
0
        ///<inheritdoc />
        public override void Configure(IMode mode, Stage stage)
        {
            if (Data.Current == null)
            {
                return;
            }

            if (Data.Current is IOptional &&
                mode.CheckIfSkipped(Data.Current.GetType()) &&
                Data.Current.LifeCycle.Stage != Stage.Inactive)
            {
                Data.Current.LifeCycle.MarkToFastForward();
            }
        }
Example #3
0
        /// <summary>
        /// Takes a <paramref name="collection"/> of entities and filters out the ones that must be skipped due to <paramref name="mode"/>
        /// or contains a <seealso cref="IBackgroundBehaviorData"/> with `IsBlocking` set to false.
        /// </summary>
        protected IEnumerable <IEntity> GetBlockingChildren(IEntityCollectionData collection, IMode mode)
        {
            return(collection.GetChildren()
                   .Where(child => mode.CheckIfSkipped(child.GetType()) == false)
                   .Where(child =>
            {
                IDataOwner dataOwner = child as IDataOwner;
                if (dataOwner == null)
                {
                    return true;
                }

                IBackgroundBehaviorData blockingData = dataOwner.Data as IBackgroundBehaviorData;
                return blockingData == null || blockingData.IsBlocking;
            }));
        }
Example #4
0
        /// <inheritdoc />
        public override void Configure(IMode mode, Stage stage)
        {
            foreach (TEntity child in Data.GetChildren())
            {
                if (child is IOptional)
                {
                    bool wasSkipped = Data.Mode != null && Data.Mode.CheckIfSkipped(child.GetType());
                    bool isSkipped  = mode.CheckIfSkipped(child.GetType());

                    if (wasSkipped == isSkipped)
                    {
                        continue;
                    }

                    if (isSkipped)
                    {
                        if (child.LifeCycle.Stage == Stage.Inactive)
                        {
                            continue;
                        }

                        child.LifeCycle.MarkToFastForward();

                        if (child.LifeCycle.Stage == Stage.Active)
                        {
                            child.LifeCycle.Deactivate();
                        }
                    }
                    else
                    {
                        if (stage == Stage.Deactivating)
                        {
                            child.LifeCycle.MarkToFastForwardStage(Stage.Activating);
                            child.LifeCycle.MarkToFastForwardStage(Stage.Active);
                        }

                        if (stage == Stage.Activating || stage == Stage.Active)
                        {
                            child.LifeCycle.Activate();
                        }
                    }
                }

                child.Configure(mode);
            }
        }
Example #5
0
        /// <inheritdoc />
        public override void Configure(IMode mode, Stage stage)
        {
            if (stage == Stage.Inactive)
            {
                return;
            }

            try
            {
                if (Data.Current is IOptional == false)
                {
                    return;
                }
            }
            catch (InvalidOperationException)
            {
                return;
            }

            if (mode.CheckIfSkipped(Data.Current.GetType()))
            {
                Data.Current.LifeCycle.MarkToFastForwardStage(stage);
            }
        }