public MonoBehaviourActivationManager(GameObject gameObject, RequiredFieldInjector injector, InjectableStore store, ILogDispatcher logger) { this.logger = logger; this.store = store; this.injector = injector; var spatialComponent = gameObject.GetComponent <SpatialOSComponent>(); var workerType = spatialComponent.Worker.WorkerType; entity = spatialComponent.Entity; foreach (var behaviour in gameObject.GetComponents <MonoBehaviour>()) { if (ReferenceEquals(behaviour, null)) { continue; } var behaviourType = behaviour.GetType(); if (injector.IsSpatialOSBehaviour(behaviourType)) { var componentReadRequirements = injector.GetComponentPresenceRequirements(behaviourType); var componentAuthRequirements = injector.GetComponentAuthorityRequirements(behaviourType); var workerTypeRequirements = injector.GetComponentWorkerTypeRequirementsForBehaviours(behaviourType); if (workerTypeRequirements != null && !workerTypeRequirements.Contains(workerType)) { // This behaviour does not want to be enabled for this worker. RunWithExceptionHandling(() => behaviour.enabled = false); continue; } var readRequirementCount = componentReadRequirements.Count; var authRequirementCount = componentAuthRequirements.Count; // This is the case when a MonoBehaviour only requires CommandRequestSenders. if (readRequirementCount == 0 && authRequirementCount == 0) { behavioursToEnable.Add(behaviour); } if (readRequirementCount > 0) { AddBehaviourForComponentIds(behaviour, componentReadRequirements, behavioursRequiringComponentsPresent); } if (authRequirementCount > 0) { AddBehaviourForComponentIds(behaviour, componentAuthRequirements, behavioursRequiringComponentsWithAuth); } numUnsatisfiedRequirements[behaviour] = componentReadRequirements.Count + componentAuthRequirements.Count; RunWithExceptionHandling(() => behaviour.enabled = false); } } }
protected override void OnCreateManager() { base.OnCreateManager(); FindGameObjectComponentDispatchers(); GenerateComponentGroups(); logger = worker.LogDispatcher; injector = new RequiredFieldInjector(EntityManager, logger); }