コード例 #1
0
        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
        }
コード例 #2
0
        //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
        }