update: 修复编译 bug
# Conflicts: # Editor/GuruManager/Helper/GuruServiceConverterHelper.csdev
							parent
							
								
									9d168cdd46
								
							
						
					
					
						commit
						f33fc2c764
					
				| 
						 | 
					@ -1,3 +1,4 @@
 | 
				
			||||||
 | 
					#if GURU_SDK_DEV
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace Guru.Editor
 | 
					namespace Guru.Editor
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -5,37 +6,69 @@ namespace Guru.Editor
 | 
				
			||||||
    using System.IO;
 | 
					    using System.IO;
 | 
				
			||||||
    using UnityEditor;
 | 
					    using UnityEditor;
 | 
				
			||||||
    using UnityEngine;
 | 
					    using UnityEngine;
 | 
				
			||||||
 | 
					    using UnityEngine.Networking;
 | 
				
			||||||
    using System.Collections.Generic;
 | 
					    using System.Collections.Generic;
 | 
				
			||||||
    using System.Linq;
 | 
					    using System.Linq;
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    public class GuruServiceConverterHelper
 | 
					    public class GuruServiceJsonBuilder: EditorWindow
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        const string K_APP_SETTINGS = "app_settings";
 | 
					        const string GuruProjectSettingsName = "guru-project-settings.cfg";
 | 
				
			||||||
        const string K_ADJUST_SETTINGS = "adjust_settings";
 | 
					        
 | 
				
			||||||
        const string K_FB_SETTINGS = "fb_settings";
 | 
					        
 | 
				
			||||||
        const string K_AD_SETTINGS = "ad_settings";
 | 
					        // Tool Version
 | 
				
			||||||
        const string K_IAP_SETTINGS = "iap_settings";
 | 
					        public const string Version = "0.2.0";
 | 
				
			||||||
        const char K_SPLITTER_TAB = '\t';
 | 
					        
 | 
				
			||||||
        const char K_SPLITTER_COMMA = ',';
 | 
					        private const string K_APP_SETTINGS = "app_settings";
 | 
				
			||||||
 | 
					        private const string K_ADJUST_SETTINGS = "adjust_settings";
 | 
				
			||||||
 | 
					        private const string K_FB_SETTINGS = "fb_settings";
 | 
				
			||||||
 | 
					        private const string K_AD_SETTINGS = "ad_settings";
 | 
				
			||||||
 | 
					        private const string K_IAP_SETTINGS = "iap_settings";
 | 
				
			||||||
 | 
					        private const char K_SPLITTER_TAB = '\t';
 | 
				
			||||||
 | 
					        private const char K_SPLITTER_COMMA = ',';
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        private const string NoSelectionName = "------";
 | 
				
			||||||
 | 
					        private const string STATE_IDLE = "s_idle";
 | 
				
			||||||
 | 
					        private const string STATE_LOADING = "s_loading";
 | 
				
			||||||
 | 
					        private const string STATE_SUCCESS = "s_success";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        private static GuruServiceJsonBuilder _instance;
 | 
				
			||||||
 | 
					        private List<string> _projectNames;
 | 
				
			||||||
 | 
					        private int _selectedProjectIndex = 0;
 | 
				
			||||||
 | 
					        private static Dictionary<string, string> _publishLinks;
 | 
				
			||||||
 | 
					        public static Dictionary<string, string> PublishLinks
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            get
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if (_publishLinks == null) _publishLinks = LoadProjectSettingsCfg();
 | 
				
			||||||
 | 
					                return _publishLinks;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #region Link & Keys
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        private const string TSVLink = "https://docs.google.com/spreadsheets/d/e/{0}/pub?gid=0&single=true&output=tsv";
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #endregion
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        #region Export JSON
 | 
					        #region Export JSON
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// 从 TSV 文件进行转化
 | 
					        /// 从 TSV 文件进行转化
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        /// <param name="tsvPath"></param>
 | 
					        /// <param name="tsv"></param>
 | 
				
			||||||
        /// <param name="savePath"></param>
 | 
					        /// <param name="savePath"></param>
 | 
				
			||||||
        public static void ConvertFromTSV(string tsvPath, string savePath = "")
 | 
					        public static void ConvertFromTSV(string tsv, string savePath = "")
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (!File.Exists(tsvPath))
 | 
					            if (string.IsNullOrEmpty(tsv))
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                EditorUtility.DisplayDialog("FILE NOT FOUND!", $"File not exist:\n{tsvPath}", "OK");
 | 
					                EditorUtility.DisplayDialog("空文件!", $"文件格式错误!\n{tsv}", "OK");
 | 
				
			||||||
                return;
 | 
					                return;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            var guru_service = EditorGuruServiceIO.CreateEmpty();
 | 
					            var guru_service = EditorGuruServiceIO.CreateEmpty();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var lines = File.ReadAllLines(tsvPath);
 | 
					            var lines = tsv.Split('\n');
 | 
				
			||||||
            string line = "";
 | 
					            string line = "";
 | 
				
			||||||
            for (int index = 0; index < lines.Length; index++)
 | 
					            for (int index = 0; index < lines.Length; index++)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
| 
						 | 
					@ -82,15 +115,44 @@ namespace Guru.Editor
 | 
				
			||||||
                
 | 
					                
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            guru_service.version = GetFileVersionByDate();
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            if (string.IsNullOrEmpty(savePath))
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                var dir = Path.GetFullPath($"{Application.dataPath}/../output");
 | 
				
			||||||
 | 
					                if (!Directory.Exists(dir)) Directory.CreateDirectory(dir);
 | 
				
			||||||
 | 
					                savePath = $"{dir}/guru-services-{guru_service.app_settings.app_id.ToLower()}.json";
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            var arr = savePath.Split('/');
 | 
				
			||||||
 | 
					            var fileName = arr[arr.Length - 1];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            EditorGuruServiceIO.SourceServiceFilePath = savePath;
 | 
					            EditorGuruServiceIO.SourceServiceFilePath = savePath;
 | 
				
			||||||
            EditorGuruServiceIO.SaveConfig(guru_service, savePath);
 | 
					            EditorGuruServiceIO.SaveConfig(guru_service, savePath);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (EditorUtility.DisplayDialog("CONVERT SUCCESS!", $"Export Json to:\n{savePath}", "OK"))
 | 
					            if (EditorUtility.DisplayDialog("CONVERT SUCCESS!", $"Export Json File\n{fileName}\nto:\n{savePath}", "OK"))
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                GuruEditorHelper.OpenPath(Directory.GetParent(savePath)?.FullName ?? Application.dataPath);
 | 
					                GuruEditorHelper.OpenPath(Directory.GetParent(savePath)?.FullName ?? Application.dataPath);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public static void ConvertFromTsvFile(string tsvPath, string savePath = "")
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (!File.Exists(tsvPath))
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                EditorUtility.DisplayDialog("FILE NOT FOUND!", $"File not exist:\n{tsvPath}", "OK");
 | 
				
			||||||
 | 
					                return;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            var tsvString = File.ReadAllText(tsvPath);
 | 
				
			||||||
 | 
					            if (!string.IsNullOrEmpty(tsvString))
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                ConvertFromTSV(tsvString, savePath);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// AppSettings 填充
 | 
					        /// AppSettings 填充
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
| 
						 | 
					@ -220,6 +282,13 @@ namespace Guru.Editor
 | 
				
			||||||
            index--;
 | 
					            index--;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        private static long GetFileVersionByDate()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            var startDt = new DateTime(1970,1,1,0,0,0);
 | 
				
			||||||
 | 
					            return (long) (DateTime.UtcNow.Ticks - startDt.Ticks) / 10000;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private static void FillFacebookSettings(GuruServicesConfig settings, string[] lines, ref int index)
 | 
					        private static void FillFacebookSettings(GuruServicesConfig settings, string[] lines, ref int index)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            string value = "";
 | 
					            string value = "";
 | 
				
			||||||
| 
						 | 
					@ -418,9 +487,6 @@ namespace Guru.Editor
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        #endregion
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #region Utils
 | 
					        #region Utils
 | 
				
			||||||
| 
						 | 
					@ -499,16 +565,299 @@ namespace Guru.Editor
 | 
				
			||||||
            if(!Directory.Exists(saveDir)) Directory.CreateDirectory(saveDir);
 | 
					            if(!Directory.Exists(saveDir)) Directory.CreateDirectory(saveDir);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            string searchPath = "~/Downloads/";
 | 
					            string searchPath = "~/Downloads/";
 | 
				
			||||||
            string tsv = EditorUtility.OpenFilePanel("Load Guru Service TSV", searchPath, ".tsv");
 | 
					            string tsvPath = EditorUtility.OpenFilePanel("Load Guru Service TSV", searchPath, ".tsv");
 | 
				
			||||||
            if (!string.IsNullOrEmpty(tsv))
 | 
					            if (!string.IsNullOrEmpty(tsvPath))
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                GuruServiceConverterHelper.ConvertFromTSV(tsv, saveFile);
 | 
					                ConvertFromTsvFile(tsvPath, saveFile);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [MenuItem("Guru/Guru-Service Json Builder...", false, 0)]
 | 
				
			||||||
 | 
					        private static void OpenWindow()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if(_instance != null ) _instance.Close();
 | 
				
			||||||
 | 
					            _instance = GetWindow<GuruServiceJsonBuilder>();
 | 
				
			||||||
 | 
					            _instance.Show();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #endregion
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #region Settings
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        private static string GetRelativeDir()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            var guids = AssetDatabase.FindAssets(nameof(GuruServiceJsonBuilder));
 | 
				
			||||||
 | 
					            if (guids.Length > 0)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                var path = AssetDatabase.GUIDToAssetPath(guids[0]);
 | 
				
			||||||
 | 
					                var rpath = Directory.GetParent(path).FullName;
 | 
				
			||||||
 | 
					                return rpath;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return Path.GetFullPath($"Assets/../Packages/Editor/GuruJsonBuilder");
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        private static Dictionary<string, string> LoadProjectSettingsCfg()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            var cfgPath = $"{GetRelativeDir()}/{GuruProjectSettingsName}";
 | 
				
			||||||
 | 
					            if (File.Exists(cfgPath))
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                var lines = File.ReadAllLines(cfgPath);
 | 
				
			||||||
 | 
					                int len = lines?.Length ?? -1;
 | 
				
			||||||
 | 
					                if (len > 0)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    Dictionary<string, string> dict = new Dictionary<string, string>(lines.Length);
 | 
				
			||||||
 | 
					                    int i = 0;
 | 
				
			||||||
 | 
					                    string[] raw;
 | 
				
			||||||
 | 
					                    string line, key, value;
 | 
				
			||||||
 | 
					                    while (i < len)
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        line = lines[i];
 | 
				
			||||||
 | 
					                        if(string.IsNullOrEmpty(line)) continue;
 | 
				
			||||||
 | 
					                        raw = lines[i].Split(',');
 | 
				
			||||||
 | 
					                        value = "";
 | 
				
			||||||
 | 
					                        key = raw[0];
 | 
				
			||||||
 | 
					                        if(string.IsNullOrEmpty(key)) continue; 
 | 
				
			||||||
 | 
					                        if(raw.Length > 1) value = raw[1];
 | 
				
			||||||
 | 
					                        dict[key] = value;
 | 
				
			||||||
 | 
					                        i++;
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    return dict;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return null;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #endregion
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        #region Window
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        private void Awake()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Debug.Log($"------- Awake -------");
 | 
				
			||||||
 | 
					            this.titleContent = new GUIContent("Json Builder");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            _projectNames = new List<string>(20);
 | 
				
			||||||
 | 
					            string[] names = PublishLinks.Keys.ToArray();
 | 
				
			||||||
 | 
					            string name = "";
 | 
				
			||||||
 | 
					            for(int i = 0; i < names.Length; i++)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                name = names[i];
 | 
				
			||||||
 | 
					                if (name == "Default")
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    _projectNames.Insert(0, NoSelectionName);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                else
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    _projectNames.Add(name);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            _selectedProjectIndex = 0;
 | 
				
			||||||
 | 
					            _state = STATE_IDLE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            var json = LoadProjectSettingsCfg();
 | 
				
			||||||
 | 
					            Debug.Log(json);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        private void OnEnable()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            // Debug.Log($"------- OnEnable -------");
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        private void OnGUI()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            GUI_Title();
 | 
				
			||||||
 | 
					            switch (_state)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                case STATE_IDLE:
 | 
				
			||||||
 | 
					                    GUI_Projects();
 | 
				
			||||||
 | 
					                    break;
 | 
				
			||||||
 | 
					                case STATE_LOADING:
 | 
				
			||||||
 | 
					                    GUI_Loading();
 | 
				
			||||||
 | 
					                    break;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #region GUI
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        private string _state = "";
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        private void GUI_Title()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            var s = new GUIStyle("box")
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                fontSize = 20,
 | 
				
			||||||
 | 
					                fontStyle = FontStyle.Bold,
 | 
				
			||||||
 | 
					                stretchWidth = true,
 | 
				
			||||||
 | 
					                alignment = TextAnchor.MiddleCenter,
 | 
				
			||||||
 | 
					                padding = new RectOffset(4, 4, 4, 4),
 | 
				
			||||||
 | 
					            };
 | 
				
			||||||
 | 
					            GUILayout.Label("Guru-Service Json Builder", s, GUILayout.Height(60));
 | 
				
			||||||
 | 
					            s.fontSize = 14;
 | 
				
			||||||
 | 
					            GUILayout.Label($"Version: {Version}", s);
 | 
				
			||||||
 | 
					            GUILayout.Space(10);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        private void GUI_Loading()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            var s = new GUIStyle("box")
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                fontSize = 16,
 | 
				
			||||||
 | 
					                alignment = TextAnchor.MiddleCenter,
 | 
				
			||||||
 | 
					                stretchWidth = true,
 | 
				
			||||||
 | 
					                padding = new RectOffset(4, 4, 4, 4),
 | 
				
			||||||
 | 
					            };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            GUILayout.Label("Loading...", s);
 | 
				
			||||||
 | 
					            GUILayout.Space(10);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        private void GUI_Projects()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            _selectedProjectIndex = EditorGUILayout.Popup("选择生成项目", _selectedProjectIndex, _projectNames.ToArray());
 | 
				
			||||||
 | 
					            GUILayout.Space(5);
 | 
				
			||||||
 | 
					            if (GUILayout.Button("生成 guru-services.json", GUILayout.Height(40)))
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                var id = _projectNames[_selectedProjectIndex];
 | 
				
			||||||
 | 
					                if (id == NoSelectionName)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    ShowDialog("选择错误", "请选择一个存在的项目");
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                else
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    DownloadTsvAndBuild(_selectedProjectIndex, (success, txt) =>
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        if (success)
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            ConvertFromTSV(txt);
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                        else
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            ShowDialog("网络错误", txt);
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                        _state = STATE_IDLE;
 | 
				
			||||||
 | 
					                    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    _state = STATE_LOADING;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        private void ShowDialog(string title, string content, string okName = "OK", Action onOKCallback = null,
 | 
				
			||||||
 | 
					            string cancelName = "", Action onCancelCallback = null)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (EditorUtility.DisplayDialog(title, content, okName, cancelName))
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                onOKCallback?.Invoke();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                onCancelCallback?.Invoke();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #endregion
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        #region Networking
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        private static string GetProjectTSVUrl(string pid)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (PublishLinks.TryGetValue(pid, out var id))
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                string url = string.Format(TSVLink, id);
 | 
				
			||||||
 | 
					                return url;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            return "";
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        private void DownloadTsvAndBuild(int projIndex, Action<bool, string> loadCompleted = null)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            var pid = _projectNames[projIndex];
 | 
				
			||||||
 | 
					            var id = GetProjectTSVUrl(pid);
 | 
				
			||||||
 | 
					            string title, msg;
 | 
				
			||||||
 | 
					            if(string.IsNullOrEmpty(id))
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                title = "参数错误";
 | 
				
			||||||
 | 
					                msg = $"项目 {pid} 不正确, 请重新选择...";
 | 
				
			||||||
 | 
					                ShowDialog(title, msg);
 | 
				
			||||||
 | 
					                Debug.LogError($"{title}\n{msg}");
 | 
				
			||||||
 | 
					                return;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            var www = UnityEngine.Networking.UnityWebRequest.Get(id);
 | 
				
			||||||
 | 
					            www.SendWebRequest().completed += ap =>
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if (www.result == UnityWebRequest.Result.Success)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    Debug.Log($"<color=#088ff00>--- Load Success ---</color>");
 | 
				
			||||||
 | 
					                    // Debug.Log(www.downloadHandler.text);
 | 
				
			||||||
 | 
					                    loadCompleted?.Invoke(true, www.downloadHandler.text);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                else
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    msg = $"Result {www.result}: {www.responseCode}\n\r{www.error}";
 | 
				
			||||||
 | 
					                    Debug.LogError(msg);
 | 
				
			||||||
 | 
					                    loadCompleted?.Invoke(false, msg);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            };
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #endregion
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        #region TEST
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if GURU_SDK_DEV
 | 
				
			||||||
 | 
					        // [MenuItem("Tools/Test/Fetch Config File", false, 1)]
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					        private static void Test_FetchConfigFile()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            var pid = "FindOut";
 | 
				
			||||||
 | 
					            var url = GetProjectTSVUrl(pid);
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if(string.IsNullOrEmpty(url))
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                Debug.LogError($"Wrong ProjectId: {pid}");
 | 
				
			||||||
 | 
					                return;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            var www = UnityEngine.Networking.UnityWebRequest.Get(url);
 | 
				
			||||||
 | 
					            www.SendWebRequest().completed += ap =>
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if (www.result == UnityWebRequest.Result.Success)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    Debug.Log($"<color=#088ff00>--- Load Success ---</color>");
 | 
				
			||||||
 | 
					                    Debug.Log(www.downloadHandler.text);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                else
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    Debug.LogError($"Loading Failed: {www.error} : {www.result} : {www.responseCode}");
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            };
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #endregion
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
		Loading…
	
		Reference in New Issue