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); }
private LookupInstructions(LookupInstructions other) { if (other != null) { editorLookup.AddRange(other.editorLookup); ingameLookup.AddRange(other.ingameLookup); ignoredLookup.AddRange(other.ignoredLookup); } }
private static void Forage() { var instructions = LookupInstructions.Load(FORAGE_INSTRUCTION, () => new PrateekDefaultInstructions()); Execute(instructions); #if UNITY_EDITOR instructions.Save(FORAGE_INSTRUCTION); #endif }
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(); }