Exemple #1
0
        public void AddEngine(IEngine engine)
        {
#if ENGINE_PROFILER_ENABLED && UNITY_EDITOR
            EngineProfiler.AddEngine(engine);
#endif
            var queryableNodeEngine = engine as IQueryableNodeEngine;
            if (queryableNodeEngine != null)
            {
                queryableNodeEngine.nodesDB =
                    new EngineNodeDB(_nodesDB, _nodesDBdic, _metaNodesDB);
            }

            var engineType            = engine.GetType();
            var implementedInterfaces = engineType.GetInterfaces();

            CollectImplementedInterfaces(implementedInterfaces);

            var engineAdded = CheckGenericEngines(engine);

            if (CheckLegacyNodesEngine(engine, ref engineAdded) == false)
            {
                CheckNodesEngine(engine, engineType, ref engineAdded);
            }

            if (engineAdded == false)
            {
                _otherEngines.Add(engine);
            }

            var callBackOnAddEngine = engine as ICallBackOnAddEngine;
            if (callBackOnAddEngine != null)
            {
                callBackOnAddEngine.Ready();
            }
        }
Exemple #2
0
        public void AddEngine(IEngine engine)
        {
#if ENGINE_PROFILER_ENABLED && UNITY_EDITOR
            EngineProfiler.AddEngine(engine);
#endif
            if (engine is IQueryableNodeEngine)
            {
                (engine as IQueryableNodeEngine).nodesDB = new EngineNodeDB(_nodesDB, _nodesDBdic, _nodesDBgroups);
            }

            if (engine is INodesEngine)
            {
                var nodesEngine = engine as INodesEngine;

                AddEngine(nodesEngine, nodesEngine.AcceptedNodes(), _nodeEngines);
            }
            else
            {
                var engineType = engine.GetType();
//                Type baseInterface = null;

#if !NETFX_CORE
                var baseType = engineType.BaseType;

                if (baseType.IsGenericType
#else
                var baseType = engineType.GetTypeInfo().BaseType;

                if (baseType.IsConstructedGenericType
#endif
                    && baseType.GetGenericTypeDefinition() == typeof(SingleNodeEngine <>))
                {
                    AddEngine(engine as INodeEngine <INode>, baseType.GetGenericArguments(), _nodeEngines);
                }
                else
                {
                    _otherEnginesReferences.Add(engine);
                }
            }

            if (engine is ICallBackOnAddEngine)
            {
                (engine as ICallBackOnAddEngine).Ready();
            }
        }
Exemple #3
0
        public void AddEngine(IEngine engine)
        {
#if ENGINE_PROFILER_ENABLED && UNITY_EDITOR
            EngineProfiler.AddEngine(engine);
#endif
            if (engine is IQueryableNodeEngine)
            {
                (engine as IQueryableNodeEngine).nodesDB = new EngineNodeDB(_nodesDB, _nodesDBdic, _nodesDBgroups);
            }

            if (engine is INodesEngine)
            {
                var nodesEngine = engine as INodesEngine;

                AddEngine(nodesEngine, nodesEngine.AcceptedNodes(), _nodeEngines);

                return;
            }
#if !NETFX_CORE
            var baseType = engine.GetType().BaseType;

            if (baseType.IsGenericType)
#else
            var baseType = engine.GetType().GetTypeInfo().BaseType;

            if (baseType.IsConstructedGenericType)
#endif

            {
                var genericType = baseType.GetGenericTypeDefinition();

                if (genericType == typeof(SingleNodeEngine <>))
                {
                    AddEngine(engine as INodeEngine <INode>, baseType.GetGenericArguments(), _nodeEngines);

                    return;
                }
            }

            _otherEnginesReferences.Add(engine);
        }