/// <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; })); }
public void Update() { LifeCycle.Update(); IEntityCollectionData collectionData = Data as IEntityCollectionData; if (collectionData == null) { return; } foreach (IEntity child in collectionData.GetChildren().Distinct()) { child.Update(); } }
public void Configure(TData data, IMode mode, Stage stage) { IEntityCollectionData collectionData = data as IEntityCollectionData; if (collectionData != null) { foreach (IEntity child in collectionData.GetChildren().Distinct()) { child.Configure(mode); } } foreach (IConfigurator <TData> configurator in configurators) { configurator.Configure(data, mode, stage); } IModeData modeData = data as IModeData; if (modeData != null) { modeData.Mode = mode; } }