Пример #1
0
 public void Write()
 {
     ClassfileGenerator.CreateEnum(_enumInfo);
 }
        private void OnGUI()
        {
            if (AppCoreSettings.Instance == null)
            {
                return;
            }

            _scrollPos = EditorGUILayout.BeginScrollView(_scrollPos, GUILayout.Width(position.width), GUILayout.Height(position.height));

            EditorGUI.BeginDisabledGroup(EditorApplication.isCompiling);

            AppCoreSettings.Instance.ScenesEnum.OnGUI();

            if (AppCoreSettings.Instance.ScenesEnum.Draw)
            {
                //EditorGUILayout.HelpBox("Button below only adds scenes to the list above from Build Settings", MessageType.Info);

                if (GUILayout.Button("Add scenes from Build Settings"))
                {
                    var elements = AppCoreSettings.Instance.ScenesEnum.EnumInfo.Elements;

                    for (int i = 0; i < UnityEngine.SceneManagement.SceneManager.sceneCountInBuildSettings; i++)
                    {
                        var name = SceneNameByIndex(i);

                        if (!elements.Contains(name))
                        {
                            elements.Add(name);
                        }
                    }
                }
            }

            AppCoreSettings.Instance.PagesEnum.OnGUI();
            AppCoreSettings.Instance.PrefsKeyEnum.OnGUI();

            if (AppCoreSettings.Instance.PrefsKeyEnum.Draw)
            {
                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.PrefixLabel("Usings");
                EditorGUILayout.BeginVertical();
                for (int i = 0; i < AppCoreSettings.Instance.DataContainerUsings.Count; i++)
                {
                    AppCoreSettings.Instance.DataContainerUsings[i] = GUILayout.TextField(AppCoreSettings.Instance.DataContainerUsings[i]);
                }
                EditorGUILayout.BeginHorizontal();
                if (GUILayout.Button("+"))
                {
                    AppCoreSettings.Instance.DataContainerUsings.Add("");
                }
                if (AppCoreSettings.Instance.DataContainerUsings.Count > 0 && GUILayout.Button("-"))
                {
                    AppCoreSettings.Instance.DataContainerUsings.RemoveAt(AppCoreSettings.Instance.DataContainerUsings.Count - 1);
                }
                if (GUILayout.Button("Clear"))
                {
                    AppCoreSettings.Instance.DataContainerUsings.Clear();
                }
                EditorGUILayout.EndHorizontal();
                EditorGUILayout.EndVertical();
                EditorGUILayout.EndHorizontal();

                if (GUILayout.Button("Generate DataContainer.cs"))
                {
                    List <string> body = new List <string>();

                    body.Add("IDataManager _dataManager;\n\npublic DataContainer(IDataManager dataManager)\n{\n _dataManager = dataManager;\n}\n");

                    var elements = AppCoreSettings.Instance.PrefsKeyEnum.EnumInfo.Elements;
                    for (int i = 0; i < elements.Count; i++)
                    {
                        string keyEnumName      = elements[i];
                        string propertyName     = "";
                        string prefsManagerName = "";
                        string typeString       = "";

                        if (!DataManager.ParseKeyString(keyEnumName, out propertyName, out typeString, out prefsManagerName))
                        {
                            continue;
                        }

                        switch (typeString)
                        {
                        case "Int":
                        case "int":
                            body.Add($"public int {propertyName}");
                            body.Add("{");
                            body.Add($"    get {{ return {prefsManagerName}.GetInt(PrefsKey.{keyEnumName}, 0); }}");
                            body.Add($"    set {{ {prefsManagerName}.SetInt(PrefsKey.{keyEnumName}, value); }}");
                            body.Add("}");
                            break;

                        case "bool":
                        case "Bool":
                            body.Add($"public bool {propertyName}");
                            body.Add("{");
                            body.Add($"    get {{ return {prefsManagerName}.GetInt(PrefsKey.{keyEnumName}, 0) == 1; }}");
                            body.Add($"    set {{ {prefsManagerName}.SetInt(PrefsKey.{keyEnumName}, value ? 1 : 0); }}");
                            body.Add("}");
                            break;

                        case "Float":
                        case "float":
                            body.Add($"public float {propertyName}");
                            body.Add("{");
                            body.Add($"    get {{ return {prefsManagerName}.GetFloat(PrefsKey.{keyEnumName}, 0.0f); }}");
                            body.Add($"    set {{ {prefsManagerName}.SetFloat(PrefsKey.{keyEnumName}, value); }}");
                            body.Add("}");
                            break;

                        case "String":
                        case "string":
                            body.Add($"public string {propertyName}");
                            body.Add("{");
                            body.Add($"    get {{ return {prefsManagerName}.GetString(PrefsKey.{keyEnumName}, \"\"); }}");
                            body.Add($"    set {{ {prefsManagerName}.SetString(PrefsKey.{keyEnumName}, value); }}");
                            body.Add("}");
                            break;

                        case "enum":
                        case "Enum":
                            body.Add($"public {typeString} {propertyName}");
                            body.Add("{");
                            body.Add($"    get {{ return ({typeString}){prefsManagerName}.GetInt(PrefsKey.{keyEnumName}, 0); }}");
                            body.Add($"    set {{ {prefsManagerName}.SetInt(PrefsKey.{keyEnumName}, (int)value); }}");
                            body.Add("}");
                            break;

                        default:
                            var type = TypeUtility.GetTypeByName(typeString);

                            if (type == null)
                            {
                                continue;
                            }

                            if (type.IsEnum)
                            {
                                goto case "enum";
                            }

                            body.Add($"public {typeString} {propertyName}");
                            body.Add("{");
                            body.Add($"    get {{ return {prefsManagerName}.Get<{typeString}>(PrefsKey.{keyEnumName}, default); }}");
                            body.Add($"    set {{ {prefsManagerName}.Set<{typeString}>(PrefsKey.{keyEnumName}, value); }}");
                            body.Add("}");
                            break;
                        }
                    }

                    ClassfileGenerator.CreateClass(new ClassInfo()
                    {
                        name = "DataContainer",
                        //nspace = "AppCore",
                        body   = body.ToArray(),
                        usings = AppCoreSettings.Instance.DataContainerUsings.ToArray(),
                    });
                }
            }

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.PrefixLabel("Loading Canvas Prefab");
            AppCoreSettings.Instance.LoadingCanvas =
                (LoadingCanvas)EditorGUILayout.ObjectField(AppCoreSettings.Instance.LoadingCanvas,
                                                           typeof(LoadingCanvas),
                                                           false);
            EditorGUILayout.EndHorizontal();


            GUILayout.BeginHorizontal();
            bool hasAppMetrica    = PreprocessorManager.Has(BuildTargetGroup.iOS, PreprocessorManager.Consts.PREPROCESSOR_APP_METRICA);
            bool appMetricaToggle = EditorGUILayout.Toggle("AppMetrica", hasAppMetrica);

            if (appMetricaToggle != hasAppMetrica)
            {
                if (hasAppMetrica)
                {
                    PreprocessorManager.Remove(BuildTargetGroup.Android, PreprocessorManager.Consts.PREPROCESSOR_APP_METRICA);
                    PreprocessorManager.Remove(BuildTargetGroup.iOS, PreprocessorManager.Consts.PREPROCESSOR_APP_METRICA);
                }
                else
                {
                    PreprocessorManager.Add(BuildTargetGroup.Android, PreprocessorManager.Consts.PREPROCESSOR_APP_METRICA);
                    PreprocessorManager.Add(BuildTargetGroup.iOS, PreprocessorManager.Consts.PREPROCESSOR_APP_METRICA);
                }
            }
            GUILayout.EndHorizontal();

            EditorGUILayout.HelpBox("Add/remove preprocessor APCR_APPMETRICA", MessageType.Info);


            EditorGUILayout.EndScrollView();

            EditorGUI.EndDisabledGroup();
        }