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(); } }
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 } } } }
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 } } }
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 } } }
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 } } }
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); }