예제 #1
0
        public static Dictionary <string, int> GetStats()
        {
            var types = ReflectionTools.GetAvailableAssemblies().SelectMany(x => x.GetTypes());

            var components = types
                             .Where(type => type.ImplementsInterface <IComponent>())
                             .ToArray();

            var systems = types
                          .Where(IsSystem)
                          .ToArray();

            var contexts = GetContexts(components);

            var stats = new Dictionary <string, int>
            {
                {
                    "Total Components", components.Length
                },
                {
                    "Systems", systems.Length
                }
            };

            foreach (var context in contexts)
            {
                stats.Add("Components in " + context.Key, context.Value);
            }

            return(stats);
        }
예제 #2
0
        public CodeGeneratorData[] GetData()
        {
            var assemblies = _assembliesConfig.DoUseWhitelistOfAssemblies
                                ? ReflectionTools.GetAvailableAssemblies(_assembliesConfig.WhiteListedAssemblies)
                                : ReflectionTools.GetAvailableAssemblies();

            var types = _types ??
                        assemblies.SelectMany(x => x.GetTypes());

            var entityIndexData = types
                                  .Where(type => !type.IsAbstract)
                                  .Where(type => type.ImplementsInterface <IComponent>())
                                  .ToDictionary(
                type => type,
                type => type.GetPublicMemberInfos())
                                  .Where(kv => kv.Value.Any(info => info.attributes.Any(attr => attr.attribute is AbstractEntityIndexAttribute)))
                                  .SelectMany(kv => CreateEntityIndexData(kv.Key, kv.Value));

            var customEntityIndexData = types
                                        .Where(type => !type.IsAbstract)
                                        .Where(type => Attribute.IsDefined(type, typeof(CustomEntityIndexAttribute)))
                                        .Select(CreateCustomEntityIndexData);

            return(entityIndexData
                   .Concat(customEntityIndexData)
                   .ToArray());
        }
예제 #3
0
        public CodeGeneratorData[] GetData()
        {
            var assemblies = _assembliesConfig.DoUseWhitelistOfAssemblies
                                ? ReflectionTools.GetAvailableAssemblies(_assembliesConfig.WhiteListedAssemblies)
                                : ReflectionTools.GetAvailableAssemblies();

            var types = _types ?? assemblies.SelectMany(x => x.GetTypes());

            var dataFromComponents = types
                                     .Where(type => type.ImplementsInterface <IComponent>())
                                     .Where(type => !type.IsAbstract)
                                     .Select(CreateDataForComponent)
                                     .ToArray();

            var dataFromNonComponents = types
                                        .Where(type => !type.ImplementsInterface <IComponent>())
                                        .Where(type => !type.IsGenericType)
                                        .Where(HasContexts)
                                        .SelectMany(CreateDataForNonComponent)
                                        .ToArray();

            var mergedData = Merge(dataFromNonComponents, dataFromComponents);

            var dataFromEvents = mergedData
                                 .Where(data => data.IsEvent())
                                 .SelectMany(CreateDataForEvents)
                                 .ToArray();

            return(Merge(dataFromEvents, mergedData));
        }
예제 #4
0
        /// <summary>
        /// Creates zero or more <see cref="CodeGeneratorData"/> derived instances for code generation to execute upon.
        /// </summary>
        /// <returns></returns>
        public CodeGeneratorData[] GetData()
        {
            // If we are only searching specific assemblies use that whitelist, otherwise get all loaded assemblies.
            var assemblies = _assembliesConfig.DoUseWhitelistOfAssemblies
                                ? ReflectionTools.GetAvailableAssemblies(_assembliesConfig.WhiteListedAssemblies)
                                : ReflectionTools.GetAvailableAssemblies();

            var types = assemblies
                        .SelectMany(x => x.GetTypes()).ToArray();

            var codeGenData = new List <CodeGeneratorData>();

            codeGenData.AddRange(GetFactoryCodeGeneratorData(types));
            codeGenData.AddRange(GetFactoryEnumCodeGeneratorData(types));

            return(codeGenData.ToArray());
        }
 static BlueprintInspector()
 {
     ASSEMBLIES = ReflectionTools.GetAvailableAssemblies();
 }