Example #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();
            }
        }
Example #2
0
        static void AddEntityViewToTheSuitableEngines(Dictionary <Type, FasterList <IHandleEntityViewEngine> > entityViewEngines, ITypeSafeList entityViewsList, Type entityViewType)
        {
            FasterList <IHandleEntityViewEngine> enginesForEntityView;

            if (entityViewEngines.TryGetValue(entityViewType, out enginesForEntityView))
            {
                int viewsCount;

                var entityViews = entityViewsList.ToArrayFast(out viewsCount);

                for (int i = 0; i < viewsCount; i++)
                {
                    int count;
                    var fastList = FasterList <IHandleEntityViewEngine> .NoVirt.ToArrayFast(enginesForEntityView, out count);

                    IEntityView entityView = entityViews[i];
                    for (int j = 0; j < count; j++)
                    {
#if ENGINE_PROFILER_ENABLED && UNITY_EDITOR
                        EngineProfiler.MonitorAddDuration(fastList[j], entityView);
#else
                        fastList[j].Add(entityView);
#endif
                    }
                }
            }
        }
Example #3
0
        void RemoveNodeFromEngines <T>(T node, Type nodeType) where T : INode
        {
            FasterList <IEngine> enginesForNode;

            if (_nodeEngines.TryGetValue(nodeType, out enginesForNode))
            {
                for (int j = 0; j < enginesForNode.Count; j++)
                {
#if ENGINE_PROFILER_ENABLED && UNITY_EDITOR
                    EngineProfiler.MonitorRemoveDuration(RemoveNodeFromEngine, (enginesForNode[j] as INodeEngine), node);
#else
                    (enginesForNode[j] as INodeEngine).Remove(node);
#endif
                }
            }
        }
Example #4
0
        void AddNodeToTheSuitableEngines(INode node, Type nodeType)
        {
            FasterList <IEngine> enginesForNode;

            if (_nodeEngines.TryGetValue(nodeType, out enginesForNode))
            {
                for (int j = 0; j < enginesForNode.Count; j++)
                {
#if ENGINE_PROFILER_ENABLED && UNITY_EDITOR
                    EngineProfiler.MonitorAddDuration(AddNodeToEngine, enginesForNode[j] as INodeEngine, node);
#else
                    (enginesForNode[j] as INodeEngine).Add(node);
#endif
                }
            }
        }
Example #5
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();
            }
        }
        static void RemoveEntityViewFromEngines(Dictionary <Type, FasterList <IHandleEntityViewEngine> > entityViewEngines,
                                                IEntityView entityView, Type entityViewType)
        {
            FasterList <IHandleEntityViewEngine> enginesForEntityView;

            if (entityViewEngines.TryGetValue(entityViewType, out enginesForEntityView))
            {
                int count;
                var fastList = FasterList <IHandleEntityViewEngine> .NoVirt.ToArrayFast(enginesForEntityView, out count);

                for (int j = 0; j < count; j++)
                {
#if ENGINE_PROFILER_ENABLED && UNITY_EDITOR
                    EngineProfiler.MonitorRemoveDuration(fastList[j], entityView);
#else
                    fastList[j].Remove(entityView);
#endif
                }
            }
        }
Example #7
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);
        }