public SubscriptionAggregate(SubscriptionSystem subscriptionSystem, EntityId entityId, params Type[] typesToSubscribeTo) { subscriptions = new ISubscription[typesToSubscribeTo.Length]; for (int i = 0; i < typesToSubscribeTo.Length; ++i) { var subscription = subscriptionSystem.Subscribe(entityId, typesToSubscribeTo[i]); typesToSubscriptionIndexes.Add(typesToSubscribeTo[i], i); subscriptions[i] = subscription; subscription.SetAvailabilityHandler(Handler.Pool.Rent(this)); } }
// todo should either special case monobehaviours or not use callbacks // for non monobehaviours we could use functors public RequiredSubscriptionsInjector(object target, EntityId entityId, SubscriptionSystem subscriptionSystem, Action onEnable = null, Action onDisable = null) { this.target = target; this.onEnable = onEnable; this.onDisable = onDisable; info = RequiredSubscriptionsDatabase.GetOrCreateRequiredSubscriptionsInfo(target.GetType()); if (info == null || info.RequiredTypes.Length == 0) { onEnable?.Invoke(); return; } subscriptions = subscriptionSystem.Subscribe(entityId, info.RequiredTypes); subscriptions.SetAvailabilityHandler(Handler.Pool.Rent(this)); }