static SettingsSaver() { // const string typeSignature = "DNAISettings"; // var an = new AssemblyName(typeSignature); // AssemblyBuilder assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(an, AssemblyBuilderAccess.Run); // ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("MainModule"); // _typeBuilder = moduleBuilder.DefineType(typeSignature, // TypeAttributes.Public // | TypeAttributes.Class // | TypeAttributes.AutoClass // | TypeAttributes.AnsiClass // | TypeAttributes.BeforeFieldInit // | TypeAttributes.AutoLayout, //#if UNITY // typeof(ScriptableObject) //#else // null //#endif // ); // Type[] ctorParams = new Type[] { }; // ConstructorInfo classCtorInfo = typeof(SerializableAttribute).GetConstructor(ctorParams); // CustomAttributeBuilder myCABuilder = new CustomAttributeBuilder( // classCtorInfo, // new object[] { }); // _typeBuilder.SetCustomAttribute(myCABuilder); #if !UNITY _settingsClassBuilder = new SettingsClassBuilder(); #endif }
//private static Type CompileResultType() //{ // TypeBuilder tb = _typeBuilder; // ConstructorBuilder constructor = tb.DefineDefaultConstructor(MethodAttributes.Public | MethodAttributes.SpecialName | MethodAttributes.RTSpecialName); // foreach (var field in _settingsClassBuilder.Properties) // CreateProperty(field.Key, field.Value.GetType()); // return tb.CreateType(); //} //private static void CreateProperty(string propertyName, Type propertyType) //{ // FieldBuilder fieldBuilder = _typeBuilder.DefineField(propertyName, propertyType, FieldAttributes.Public); // PropertyBuilder propertyBuilder = _typeBuilder.DefineProperty(propertyName, PropertyAttributes.HasDefault, propertyType, null); // MethodBuilder getPropMthdBldr = _typeBuilder.DefineMethod("get_" + propertyName, MethodAttributes.Public | MethodAttributes.SpecialName | MethodAttributes.HideBySig, propertyType, Type.EmptyTypes); // ILGenerator getIl = getPropMthdBldr.GetILGenerator(); // getIl.Emit(OpCodes.Ldarg_0); // getIl.Emit(OpCodes.Ldfld, fieldBuilder); // getIl.Emit(OpCodes.Ret); // MethodBuilder setPropMthdBldr = // _typeBuilder.DefineMethod("set_" + propertyName, // MethodAttributes.Public // | MethodAttributes.SpecialName // | MethodAttributes.HideBySig, // null, new[] { propertyType }); // ILGenerator setIl = setPropMthdBldr.GetILGenerator(); // Label modifyProperty = setIl.DefineLabel(); // Label exitSet = setIl.DefineLabel(); // setIl.MarkLabel(modifyProperty); // setIl.Emit(OpCodes.Ldarg_0); // setIl.Emit(OpCodes.Ldarg_1); // setIl.Emit(OpCodes.Stfld, fieldBuilder); // setIl.Emit(OpCodes.Nop); // setIl.MarkLabel(exitSet); // setIl.Emit(OpCodes.Ret); // propertyBuilder.SetGetMethod(getPropMthdBldr); // propertyBuilder.SetSetMethod(setPropMthdBldr); //} public static void LoadSettings() { #if UNITY Directory.CreateDirectory(Constants.RootPath); _settingsClassBuilder = AssetDatabase.LoadAssetAtPath <SettingsClassBuilder>(Constants.RootPath + FileName); if (_settingsClassBuilder == null) { _settingsClassBuilder = ScriptableObject.CreateInstance <SettingsClassBuilder>(); AssetDatabase.CreateAsset(_settingsClassBuilder, Constants.RootPath + FileName); AssetDatabase.SaveAssets(); AssetDatabase.ImportAsset(Constants.RootPath + FileName); } AssetDatabase.SaveAssets(); EditorUtility.SetDirty(_settingsClassBuilder); #endif }