コード例 #1
0
        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);
                }
            }
        }
コード例 #2
0
        protected override void OnCreateManager()
        {
            base.OnCreateManager();

            FindGameObjectComponentDispatchers();
            GenerateComponentGroups();

            logger   = worker.LogDispatcher;
            injector = new RequiredFieldInjector(EntityManager, logger);
        }