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(); } }
///<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(); } }
/// <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; })); }
/// <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); } }
/// <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); } }