private void  DrawPath(UnitySO_GeneratorConfig pConfig, string strExplainName, ref string strEditPath, bool bIsFolder, bool bIsRelative)
    {
        GUILayout.BeginHorizontal();

        if (bIsFolder)
        {
            GUILayout.Label($"{strExplainName} Folder Path : ", GUILayout.Width(300f));
        }
        else
        {
            GUILayout.Label($"{strExplainName} File Path : ", GUILayout.Width(300f));
        }

        GUILayout.Label(strEditPath, GUILayout.Width(400f));

        if (GUILayout.Button($"Edit {strExplainName}"))
        {
            string strPath = bIsFolder ? EditorUtility.OpenFolderPanel("Root Folder", "", "") : EditorUtility.OpenFilePanel("File Path", "", "");
            if (bIsRelative)
            {
                Uri pCurrentURI = new Uri(Application.dataPath);
                strEditPath = pCurrentURI.MakeRelativeUri(new Uri(strPath)).ToString();
            }
            else
            {
                strEditPath = strPath;
            }

            pConfig.DoSave();
        }

        GUILayout.EndHorizontal();
    }
    public static void DoUpdate_FromLocalFile()
    {
        Stopwatch pStopWatch = new Stopwatch();

        pStopWatch.Start();

        Debug.Log($"{nameof(DoUpdate_FromLocalFile)} Start");

        if (_pTypeDataList == null || _pTypeDataList.listTypeData.Count == 0)
        {
            Debug.LogError("Error");
            return;
        }

        UnitySO_GeneratorConfig pConfig = UnitySO_GeneratorConfig.instance;

        ClearData();
        foreach (TypeData pTypeData in _pTypeDataList.listTypeData)
        {
            Generate_TypeToSO(pTypeData, pConfig);
        }

        Reference_OtherSO();

        AssetDatabase.Refresh(ImportAssetOptions.ForceUpdate);
        Debug.Log($"{nameof(DoUpdate_FromLocalFile)} Finish Elapse : " + pStopWatch.Elapsed);
    }
    private void DrawSheetsScroll(UnitySO_GeneratorConfig pConfig, bool bIsPossibleUpdate, bool bIsPossibleDownload)
    {
        GUILayout.BeginHorizontal(GUI.skin.box);
        _vecScrollVector = EditorGUILayout.BeginScrollView(_vecScrollVector);
        for (int i = 0; i < _pTypeDataList.listTypeData.Count; i++)
        {
            GUILayout.BeginHorizontal();

            TypeData pTypeData = _pTypeDataList.listTypeData[i];
            pTypeData.bEnable = EditorGUILayout.Toggle(pTypeData.strFileName, pTypeData.bEnable);

            GUI.enabled = bIsPossibleDownload;
            if (GUILayout.Button("Download And Update"))
            {
                SettingWork_FromConfig();
                Download(pTypeData);
                ClearData();
                Generate_TypeToSO(pTypeData, pConfig);
            }

            GUI.enabled = bIsPossibleUpdate;
            if (GUILayout.Button("Update From Local"))
            {
                ClearData();
                Generate_TypeToSO(pTypeData, pConfig);
            }

            GUILayout.EndHorizontal();
        }

        GUI.enabled = true;
        EditorGUILayout.EndScrollView();
        GUILayout.EndHorizontal();
    }
Exemple #4
0
    private static void GenerateSO(UnitySO_GeneratorConfig pConfig, Type pType_Container, Type pType_SO, TypeData pTypeData,
                                   JArray pJArray_Instance)
    {
        ScriptableObject pContainerInstance = (ScriptableObject)UnitySO_GeneratorConfig.CreateSOFile(pType_Container,
                                                                                                     pConfig.strDataExport_FolderPath + "/" + pTypeData.strFileName + "_Container", true);

        _mapSOInstance.Add(pType_SO, new SOInstance(pTypeData, pContainerInstance));

        List <Container_CachingLogicBase> listCachingLogic       = new List <Container_CachingLogicBase>();
        Dictionary <string, FieldInfo>    mapFieldInfo_SO        = pType_SO.GetFields().ToDictionary((pFieldInfo) => pFieldInfo.Name);
        IEnumerable <FieldInfo>           arrFieldInfo_Container = pType_Container.GetFields();

        foreach (var pFieldInfo in arrFieldInfo_Container)
        {
            Type pTypeField         = pFieldInfo.FieldType;
            Type pTypeField_Generic = pTypeField.GetGenericTypeDefinition();
            if (pTypeField_Generic == typeof(List <>))
            {
                listCachingLogic.Add(new Container_CachingLogic_List(pContainerInstance, pFieldInfo));
            }
        }

        Generate_SOInstance(pTypeData, pType_SO, pJArray_Instance, pContainerInstance, mapFieldInfo_SO, listCachingLogic,
                            pTypeData.listFieldData);
    }
    private static void SettingWork_FromConfig()
    {
        UnitySO_GeneratorConfig pConfig = UnitySO_GeneratorConfig.instance;

        _pWork_Json.strExportPath = pConfig.strJsonData_FolderPath;
        _pWork_SO.strExportPath   = pConfig.strSOScript_FolderPath;
        _pWork_SO.strCommandLine  = pConfig.strSOCommandLine;
    }
    /* protected - [abstract & virtual]         */


    // ========================================================================== //

    #region Private

    private static bool ParsingConfig(UnitySO_GeneratorConfig pConfig)
    {
        _pTypeDataList = new TypeDataList("");
        if (GetData_FromJson(pConfig.pTypeDataFile, ref _pTypeDataList) == false)
        {
            _pTypeDataList = null;
            return(false);
        }

        return(true);
    }
    static void Init()
    {
        // Get existing open window or if none, make a new one:
        UnitySO_Generator window = (UnitySO_Generator)GetWindow(typeof(UnitySO_Generator), false);

        window.minSize = new Vector2(900, 300);
        window.Show();

        UnitySO_GeneratorConfig pConfig = UnitySO_GeneratorConfig.instance;

        if (string.IsNullOrEmpty(pConfig.strSheetID) == false)
        {
#pragma warning disable CS4014 // 이 호출을 대기하지 않으므로 호출이 완료되기 전에 현재 메서드가 계속 실행됩니다.
            DoConnect();
#pragma warning restore CS4014 // 이 호출을 대기하지 않으므로 호출이 완료되기 전에 현재 메서드가 계속 실행됩니다.
        }
    }
    public static async Task DoConnect()
    {
        UnitySO_GeneratorConfig pConfig = UnitySO_GeneratorConfig.instance;

        await _pConnector.DoConnect(pConfig.strSheetID,
                                    (strSheetID, strFileName, eSheetType, listSheet, pException_OnError) =>
        {
            _strSheetID_Connected = strSheetID;
            if (pException_OnError != null)
            {
                Debug.LogError(pException_OnError);
                return;
            }
            Debug.Log("Success Connect - " + strSheetID);
        },
                                    pConfig.strCredential_FilePath
                                    );
    }
Exemple #9
0
    private static void Generate_TypeToSO(TypeData pTypeData, UnitySO_GeneratorConfig pConfig)
    {
        if (pTypeData.bEnable == false)
        {
            return;
        }

        Debug.Log($"{nameof(Generate_TypeToSO)} {pTypeData.strFileName} - Start");

        Stopwatch pStopWatch = new Stopwatch();

        pStopWatch.Start();

        string strTypeName = pTypeData.strFileName;
        Type   pType_SO    = GetTypeFromAssemblies(strTypeName, typeof(ScriptableObject));

        if (pType_SO == null)
        {
            Debug.LogError($"pType_SO == null - {strTypeName} - {strTypeName}");
            return;
        }

        Type pType_Container = GetTypeFromAssemblies(strTypeName + "_Container");

        if (pType_Container == null)
        {
            Debug.LogError($"pType_Container == null - {strTypeName} - {strTypeName}");
            return;
        }

        JArray pJArray_Instance = GetDataArray_FromJson(strTypeName);

        if (pJArray_Instance.Count == 0)
        {
            Debug.LogError($"{strTypeName} - pJArray_Instance.Count == 0");
            return;
        }

        GenerateSO(pConfig, pType_Container, pType_SO, pTypeData, pJArray_Instance);
        Debug.Log($"{nameof(Generate_TypeToSO)} {pTypeData.strFileName} - Finish Elapse : " + pStopWatch.Elapsed);
    }
 private static bool Check_IsPossible_Update(UnitySO_GeneratorConfig pConfig)
 {
     return(_pTypeDataList != null && string.IsNullOrEmpty(pConfig.strJsonData_FolderPath) == false);
 }
 private void DrawPath_File(UnitySO_GeneratorConfig pConfig, string strExplainName, ref string strFilePath, bool bIsRelative = true)
 {
     DrawPath(pConfig, strExplainName, ref strFilePath, false, bIsRelative);
 }
 private void DrawPath_Folder(UnitySO_GeneratorConfig pConfig, string strExplainName, ref string strFolderPath, bool bIsRelative = true)
 {
     DrawPath(pConfig, strExplainName, ref strFolderPath, true, bIsRelative);
 }
    // ========================================================================== //

    /* protected - Override & Unity API         */

    private void OnGUI()
    {
        UnitySO_GeneratorConfig pConfig = UnitySO_GeneratorConfig.instance;

        if (pConfig == null)
        {
            Debug.LogError("pConfig == null");
            return;
        }

        GUILayout.Space(10f);
        DrawPath_File(pConfig, "Credential Path", ref pConfig.strCredential_FilePath);
        GUILayout.Space(10f);


        DrawPath_Folder(pConfig, "SOScript Folder Path", ref pConfig.strSOScript_FolderPath);
        DrawPath_Folder(pConfig, "Json Data Folder Path", ref pConfig.strJsonData_FolderPath);
        GUILayout.Space(10f);

        DrawPath_Folder(pConfig, "SO Export Path", ref pConfig.strDataExport_FolderPath);

        if (_pTypeDataList == null)
        {
            ParsingConfig(pConfig);
        }

        GUILayout.BeginHorizontal();
        {
            EditorGUI.BeginChangeCheck();
            pConfig.pTypeDataFile = (TextAsset)EditorGUILayout.ObjectField("TypeData File : ", pConfig.pTypeDataFile, typeof(TextAsset), false, GUILayout.Width(700f));
            if (EditorGUI.EndChangeCheck())
            {
                pConfig.DoSave();
            }

            if (GUILayout.Button("Parsing File"))
            {
                if (ParsingConfig(pConfig) == false)
                {
                    Debug.LogError("TypeDataList JsonParsing Fail");
                    return;
                }
            }
        }
        GUILayout.EndHorizontal();
        GUILayout.Space(30f);

        if (_pTypeDataList != null)
        {
            GUILayout.Label($"TypeData File is Valid");
        }
        else
        {
            GUILayout.Label($"TypeData File is InValid");
        }

        bool bIsPossibleUpdate = Check_IsPossible_Update(pConfig);

        GUI.enabled = bIsPossibleUpdate;

        if (GUILayout.Button("Update Form Local", GUILayout.Width(200f)))
        {
            DoUpdate_FromLocalFile();
        }
        GUILayout.Space(30f);

        GUILayout.BeginHorizontal();
        {
            GUILayout.Label($"SheetID : ", GUILayout.Width(100f));

            EditorGUI.BeginChangeCheck();
            pConfig.strSheetID = GUILayout.TextField(pConfig.strSheetID);
            if (EditorGUI.EndChangeCheck())
            {
                pConfig.DoSave();
            }

            if (GUILayout.Button("Connect!", GUILayout.Width(100f)))
            {
#pragma warning disable 4014
                DoConnect();
#pragma warning restore 4014
            }
        }
        GUILayout.EndHorizontal();

        if (_pConnector.bIsConnected)
        {
            GUILayout.Label($"Excel is Connected : {_strSheetID_Connected} - Sheet List");
        }
        else
        {
            GUILayout.Label($"Excel is Not Connected", GetRedGUIStyle());
        }


        GUILayout.Space(30f);

        if (_pTypeDataList == null)
        {
            return;
        }

        bool bIsMatchSheetID     = Check_IsMatch_SheetID();
        bool bIsPossibleDownload = Check_IsPossibleDownload(bIsMatchSheetID);

        DrawSheetsScroll(pConfig, bIsPossibleUpdate, bIsPossibleDownload);

        GUILayout.Space(30f);

        if (bIsMatchSheetID == false)
        {
            GUILayout.Label($"SheetID Is Not Match - Local : {_pTypeDataList.strFileName}, Current Connected : {_strSheetID_Connected}", GetRedGUIStyle());
        }

        GUILayout.BeginHorizontal();
        {
            GUILayout.Label($"CommandLine : ", GUILayout.Width(100f));

            EditorGUI.BeginChangeCheck();
            pConfig.strSOCommandLine = GUILayout.TextField(pConfig.strSOCommandLine);
            if (EditorGUI.EndChangeCheck())
            {
                pConfig.DoSave();
            }
        }
        GUILayout.EndHorizontal();

        GUI.enabled = bIsPossibleDownload;
        if (GUILayout.Button("Download And Update", GUILayout.Width(200f)))
        {
            DoDownload_And_Update();
        }
    }