Esempio n. 1
0
        public static LookupInstructions Load(string resourcePath, Func <LookupInstructions> getDefault = null)
        {
            var isEditor = Application.isEditor && !Application.isPlaying;

            var assetPath = isEditor
                ? Path.Combine(ConstFolder.ASSETS_RESOURCES, resourcePath)
                : resourcePath;
            var textAsset = isEditor
                ? AssetDatabase.LoadAssetAtPath <TextAsset>(assetPath)
                : Resources.Load <TextAsset>(Path.Combine(Path.GetDirectoryName(assetPath), Path.GetFileNameWithoutExtension(assetPath)));

            var instructions = (LookupInstructions)null;

            if (textAsset == null)
            {
                instructions = new LookupInstructions(getDefault.SafeInvoke());
            }
            else
            {
                instructions = JsonUtility.FromJson <LookupInstructions>(textAsset.text);
            }

            instructions.Init(isEditor);
            return(instructions);
        }
Esempio n. 2
0
 private LookupInstructions(LookupInstructions other)
 {
     if (other != null)
     {
         editorLookup.AddRange(other.editorLookup);
         ingameLookup.AddRange(other.ingameLookup);
         ignoredLookup.AddRange(other.ignoredLookup);
     }
 }
Esempio n. 3
0
        private static void Forage()
        {
            var instructions = LookupInstructions.Load(FORAGE_INSTRUCTION, () => new PrateekDefaultInstructions());

            Execute(instructions);

#if UNITY_EDITOR
            instructions.Save(FORAGE_INSTRUCTION);
#endif
        }
Esempio n. 4
0
        private static void Execute(LookupInstructions instructions)
        {
            var builder    = (StringBuilder)null;
            var types      = new List <Type>(TYPE_COUNT);
            var assemblies = AppDomain.CurrentDomain.GetAssemblies();

            foreach (var domainAssembly in assemblies)
            {
                var assemblyTypes     = (Type[])null;
                var shortName         = domainAssembly.FullName.Substring(0, domainAssembly.FullName.IndexOf(Const.COMMA_C));
                var allowWorkerLookup = instructions.Allow(shortName);
                var allowTypeLookup   = instructions.Allow(shortName, true);
                if (!allowWorkerLookup)
                {
                    builder.Log($"Ignoring {domainAssembly.FullName}");
                    if (allowTypeLookup)
                    {
                        assemblyTypes = domainAssembly.GetTypes();
                        foreach (var assemblyType in assemblyTypes)
                        {
                            if (!assemblyType.IsSubclassOf(typeof(AssemblyForagerWorker)))
                            {
                                types.Add(assemblyType);
                                continue;
                            }
                        }
                    }
                    continue;
                }

                assemblyTypes = domainAssembly.GetTypes();
                foreach (var assemblyType in assemblyTypes)
                {
                    if (!assemblyType.IsSubclassOf(typeof(AssemblyForagerWorker)))
                    {
                        types.Add(assemblyType);
                        continue;
                    }

                    if (assemblyType.IsAbstract || assemblyType.IsInterface)
                    {
                        continue;
                    }

                    var worker = Activator.CreateInstance(assemblyType) as AssemblyForagerWorker;
                    worker.Init();
                    workers.Add(worker);

                    LogWorker(ref builder, worker);
                }
            }

            builder.Log("- Starting type lookup");
            foreach (var assemblyType in types)
            {
                foreach (var worker in workers)
                {
                    worker.TryStore(assemblyType);
                }
            }

            builder.Log("- Calling WorkDone");
            foreach (var worker in workers)
            {
                worker.WorkDone();
            }

            builder.Log("- Clearing workers");
            workers.Clear();
        }