public IDisposable ProcessEntity(ISetupSystem system, IEntity entity) { var hasEntityPredicate = system.Group is IHasPredicate; if (!hasEntityPredicate) { system.Setup(entity); return(null); } var groupPredicate = system.Group as IHasPredicate; if (groupPredicate.CanProcessEntity(entity)) { system.Setup(entity); return(null); } var disposable = entity .WaitForPredicateMet(groupPredicate.CanProcessEntity) .ContinueWith(x => { _entitySubscriptions[system].Remove(x.Result.Id); system.Setup(x.Result); }); return(disposable); }
public SubscriptionToken ProcessEntity(ISetupSystem system, IEntity entity) { var hasEntityPredicate = system.TargetGroup is IHasPredicate; if (!hasEntityPredicate) { system.Setup(entity); return(null); } var groupPredicate = system.TargetGroup as IHasPredicate; if (groupPredicate.CanProcessEntity(entity)) { system.Setup(entity); return(null); } var subscription = entity.WaitForPredicateMet(groupPredicate.CanProcessEntity) .Subscribe(system.Setup); var subscriptionToken = new SubscriptionToken(entity, subscription); return(subscriptionToken); }
public IDisposable ProcessEntity(ISetupSystem system, IEntity entity) { var hasEntityPredicate = system.TargetGroup is IHasPredicate; if (!hasEntityPredicate) { system.Setup(entity); return(null); } var groupPredicate = system.TargetGroup as IHasPredicate; if (groupPredicate.CanProcessEntity(entity)) { system.Setup(entity); return(null); } return(entity.WaitForPredicateMet(groupPredicate.CanProcessEntity) .FirstAsync() .Subscribe(x => { _entitySubscriptions[system].Remove(x.Id); system.Setup(x); })); }
public IEnumerable <SubscriptionToken> Setup(ISetupSystem system) { var subscriptions = new List <SubscriptionToken>(); var entities = PoolManager.GetEntitiesFor(system.TargetGroup); entities.ForEachRun(x => { var possibleSubscription = ProcessEntity(system, x); if (possibleSubscription != null) { subscriptions.Add(possibleSubscription); } }); return(subscriptions); }
public void Setup(ISetupSystem system) { var hasEntityPredicate = system.TargetGroup.TargettedEntities != null; var groupAccessor = PoolManager.CreateGroupAccessor(system.TargetGroup); groupAccessor.Entities.ForEachRun(x => { if (hasEntityPredicate) { if (system.TargetGroup.TargettedEntities(x)) { system.Setup(x); } return; } system.Setup(x); }); }
public SubscriptionToken ProcessEntity(ISetupSystem system, IEntity entity) { var hasEntityPredicate = system.TargetGroup.TargettedEntities != null; if (!hasEntityPredicate) { system.Setup(entity); return(null); } if (system.TargetGroup.TargettedEntities(entity)) { system.Setup(entity); return(null); } var subscription = entity.WaitForPredicateMet(system.TargetGroup.TargettedEntities) .Subscribe(system.Setup); var subscriptionToken = new SubscriptionToken(entity, subscription); return(subscriptionToken); }