示例#1
0
        protected override void DrawGUI()
        {
            var generateInfos = GameTextLanguage.GameTextInfos;

            if (generateInfos == null)
            {
                return;
            }

            Reload();

            GUILayout.Space(3f);

            GameTextGenerateInfo info = null;

            if (selection.HasValue)
            {
                info = generateInfos.ElementAtOrDefault(selection.Value);
            }

            using (new DisableScope(info == null))
            {
                if (GUILayout.Button("Generate"))
                {
                    GameTextGenerater.Generate(connector, info);
                    Repaint();
                }
            }

            GUILayout.Space(3f);

            var labels = generateInfos.Select(x => x.Language).ToArray();

            EditorGUI.BeginChangeCheck();

            var index = EditorGUILayout.Popup(GameTextLanguage.Prefs.selection, labels);

            if (EditorGUI.EndChangeCheck())
            {
                selection = index;
                GameTextLanguage.Prefs.selection = index;

                GameTextLoader.Reload();
            }
        }
        public static void Generate(SpreadsheetConnector connector, GameTextGenerateInfo generateInfo)
        {
            if (generateInfo == null)
            {
                return;
            }

            var progressTitle   = "Generate Progress";
            var progressMessage = string.Empty;

            var gameTextConfig = GameTextConfig.Instance;

            progressMessage = "Connection Spreadsheet.";
            EditorUtility.DisplayProgressBar(progressTitle, progressMessage, 0f);

            var asset = LoadAsset(gameTextConfig.ScriptableObjectFolderPath, generateInfo.AssetPath);

            progressMessage = "Load GameText form Spreadsheet.";
            EditorUtility.DisplayProgressBar(progressTitle, progressMessage, 0f);

            // Spreadsheetに接続しデータを取得 (同期通信).
            var spreadsheets = connector.GetSpreadsheet(gameTextConfig.SpreadsheetId).ToArray();

            EditorUtility.DisplayProgressBar(progressTitle, progressMessage, 1f);

            if (spreadsheets.Any())
            {
                // 全更新するので最も最近編集されたシート情報から最終更新日を取得.
                var spreadsheetsUpdateDate = spreadsheets.Select(x => x.LastUpdateDate).Max().ToUnixTime();

                var lastUpdateDate = asset.updateTime.HasValue ? asset.updateTime.Value : DateTime.MinValue.ToUnixTime();

                // ローカルデータが最新なら更新処理は行わない.
                if (lastUpdateDate < spreadsheetsUpdateDate)
                {
                    AssetDatabase.StartAssetEditing();

                    progressMessage = "Generating GameTextScript.";
                    EditorUtility.DisplayProgressBar(progressTitle, progressMessage, 0f);

                    GameTextScriptGenerator.Generate(spreadsheets, gameTextConfig, generateInfo.TextColumn);

                    EditorUtility.DisplayProgressBar(progressTitle, progressMessage, 0.2f);

                    progressMessage = "Generating GameTextAsset.";
                    EditorUtility.DisplayProgressBar(progressTitle, progressMessage, 0.5f);

                    GameTextAssetGenerator.Build(asset, spreadsheets, gameTextConfig, generateInfo.TextColumn);

                    EditorUtility.DisplayProgressBar(progressTitle, progressMessage, 0.8f);

                    EditorUtility.DisplayProgressBar(progressTitle, progressMessage, 1f);

                    UnityConsole.Info("GameTextを出力しました");

                    SaveLastUpdateDate(asset, spreadsheetsUpdateDate);

                    AssetDatabase.SaveAssets();

                    AssetDatabase.StopAssetEditing();
                }
                else
                {
                    UnityConsole.Info("GameTextは最新の状態です");
                }
            }
            else
            {
                Debug.LogError("Spreadsheetにデータがありません.");
            }

            EditorUtility.ClearProgressBar();
        }