11 using System.Collections;
12 using System.Collections.Generic;
13 using System.Text.RegularExpressions;
15 using UnityEngine.Networking;
16 using UnityEngine.SceneManagement;
26 public string version =
"";
28 public int checkdate = 0;
29 public string desc =
"";
30 public string homepage =
"";
36 internal static string _version =
"2.6.0";
37 internal static int _versionDate = 20211230;
38 public static string version {
get {
return _version; } }
39 public static int versionDate {
get {
return _versionDate; } }
40 public static string fullVersion {
get {
return version +
"-" + versionDate; } }
42 [SerializeField]
private string m_NowVersion;
43 [SerializeField]
private string m_NewVersion;
44 [SerializeField]
private List<BaseChart> m_ChartList =
new List<BaseChart>();
45 [SerializeField]
internal Dictionary<string, ChartTheme> m_ThemeDict =
new Dictionary<string, ChartTheme>();
46 [SerializeField]
internal List<string> m_ThemeNames =
new List<string>();
53 if (m_XCharts ==
null)
55 m_XCharts = FindObjectOfType<XChartsMgr>();
56 if (m_XCharts ==
null)
58 var obj = GameObject.Find(
"_xcharts_");
59 if (obj ==
null) obj =
new GameObject(
"_xcharts_");
62 m_XCharts.m_NowVersion = fullVersion;
70 if (m_XCharts !=
null)
72 GameObject.DestroyImmediate(
this);
75 SerieLabelPool.ClearAll();
77 XThemeMgr.ReloadThemeList();
80 public string changeLog {
get;
private set; }
81 public string newVersion {
get {
return m_NewVersion; } }
82 public string nowVersion {
get {
return m_NowVersion; } }
83 public string desc {
get;
private set; }
84 public string homepage {
get;
private set; }
85 public int newDate {
get;
private set; }
86 public int newCheckDate {
get;
private set; }
87 public bool isCheck {
get;
private set; }
88 public bool isNetworkError {
get;
private set; }
89 public string networkError {
get;
private set; }
91 public bool needUpdate
95 return !isNetworkError && newDate > versionDate;
99 public void CheckVersion()
101 StartCoroutine(GetVersion());
104 IEnumerator GetVersion()
107 isNetworkError =
false;
109 var url =
"https://raw.githubusercontent.com/monitor1394/unity-ugui-XCharts/master/Assets/XCharts/package.json";
110 var web = UnityWebRequest.Get(url);
111 #if UNITY_2017_3_OR_NEWER
112 yield
return web.SendWebRequest();
114 yield
return web.Send();
116 CheckVersionWebRequest(web);
119 url =
"https://gitee.com/monitor1394/unity-ugui-XCharts/raw/master/Assets/XCharts/package.json";
120 web = UnityWebRequest.Get(url);
121 #if UNITY_2017_3_OR_NEWER
122 yield
return web.SendWebRequest();
124 yield
return web.Send();
126 CheckVersionWebRequest(web);
130 url =
"https://raw.githubusercontent.com/monitor1394/unity-ugui-XCharts/master/Assets/XCharts/CHANGELOG.md";
131 web = UnityWebRequest.Get(url);
132 #if UNITY_2017_3_OR_NEWER
133 yield
return web.SendWebRequest();
135 yield
return web.Send();
137 if (!CheckLogWebRequest(web))
139 url =
"https://gitee.com/monitor1394/unity-ugui-XCharts/raw/master/Assets/XCharts/CHANGELOG.md";
140 web = UnityWebRequest.Get(url);
141 #if UNITY_2017_3_OR_NEWER
142 yield
return web.SendWebRequest();
144 yield
return web.Send();
146 CheckLogWebRequest(web);
152 private void CheckVersionWebRequest(UnityWebRequest web)
154 if (IsWebRequestError(web))
156 isNetworkError =
true;
157 networkError = web.error;
160 else if (web.responseCode == 200)
162 isNetworkError =
false;
163 var cv = JsonUtility.FromJson<
XChartsVersion>(web.downloadHandler.text);
164 m_NewVersion = cv.version +
"-" + cv.date;
166 newCheckDate = cv.checkdate;
168 homepage = cv.homepage;
172 isNetworkError =
true;
173 if (web.responseCode > 0)
174 networkError = web.responseCode.ToString();
175 if (!
string.IsNullOrEmpty(web.error))
176 networkError +=
"," + web.error;
177 if (
string.IsNullOrEmpty(networkError))
186 private bool CheckLogWebRequest(UnityWebRequest web)
188 bool success =
false;
189 if (web.responseCode == 200)
191 CheckLog(web.downloadHandler.text);
198 private void CheckLog(
string text)
200 StringBuilder sb =
new StringBuilder();
201 var temp = text.Split(
'\n');
202 var regex =
new Regex(
".*(\\d{4}\\.\\d{2}\\.\\d{2}).*");
203 var checkDate = versionDate;
204 foreach (var t
in temp)
206 if (regex.IsMatch(t))
208 var mat = regex.Match(t);
209 var date = mat.Groups[1].ToString().Replace(
".",
"");
211 if (
int.TryParse(date, out logDate))
213 if (logDate >= checkDate)
215 sb.Append(t).Append(
"\n");
225 sb.Append(t).Append(
"\n");
228 changeLog = sb.ToString();
231 public bool IsWebRequestError(UnityWebRequest request)
234 return request.isError && request.responseCode < 400;
236 return request.isError && !request.isHttpError;
238 return (
int)request.result > 1;
240 return request.isNetworkError;
246 SceneManager.sceneUnloaded += OnSceneLoaded;
249 private void OnDisable()
251 SceneManager.sceneUnloaded -= OnSceneLoaded;
254 void OnSceneLoaded(Scene scene)
256 SerieLabelPool.ClearAll();
261 var sameNameChart = GetChart(chart.
chartName);
262 if (sameNameChart !=
null)
264 var path = ChartHelper.GetFullName(sameNameChart.transform);
265 Debug.LogError(
"A chart named `" + chart.
chartName +
"` already exists:" + path);
267 if (!ContainsChart(chart))
269 m_ChartList.Add(chart);
273 public BaseChart GetChart(
string chartName)
275 if (
string.IsNullOrEmpty(chartName))
return null;
276 return m_ChartList.Find(chart => chartName.Equals(chart.
chartName));
279 public List<BaseChart> GetCharts(
string chartName)
281 if (
string.IsNullOrEmpty(chartName))
return null;
282 return m_ChartList.FindAll(chart => chartName.Equals(chartName));
285 public void RemoveChart(
string chartName)
287 if (
string.IsNullOrEmpty(chartName))
return;
288 m_ChartList.RemoveAll(chart => chartName.Equals(chart.
chartName));
291 public bool ContainsChart(
string chartName)
293 if (
string.IsNullOrEmpty(chartName))
return false;
294 return GetCharts(chartName) !=
null;
297 public bool ContainsChart(
BaseChart chart)
299 return m_ChartList.Contains(chart);
302 public static void RemoveAllChartObject()
304 if (Instance.m_ChartList.Count == 0)
308 foreach (var chart
in Instance.m_ChartList)
311 chart.RemoveChartObject();
315 public static string GetPackageFullPath()
317 string packagePath = Path.GetFullPath(
"Packages/com.monitor1394.xcharts");
318 if (Directory.Exists(packagePath))
322 packagePath = Path.GetFullPath(
"Assets/..");
323 if (Directory.Exists(packagePath))
326 if (File.Exists(packagePath +
"/Assets/Packages/com.monitor1394.xcharts/package.json"))
328 return packagePath +
"/Assets/Packages/com.monitor1394.xcharts";
332 if (File.Exists(packagePath +
"/Assets/XCharts/package.json"))
334 return packagePath +
"/Assets/XCharts";
338 string[] matchingPaths = Directory.GetDirectories(packagePath,
"XCharts", SearchOption.AllDirectories);
339 string path = ValidateLocation(matchingPaths, packagePath);
340 if (path !=
null)
return Path.Combine(packagePath, path);
346 private static string ValidateLocation(
string[] paths,
string projectPath)
348 for (
int i = 0; i < paths.Length; i++)
350 if (File.Exists(paths[i] +
"/package.json"))
352 string folderPath = paths[i].Replace(projectPath,
"");
353 folderPath = folderPath.TrimStart(
'\\',
'/');
362 public static void EnableTextMeshPro()
364 DefineSymbolsUtil.AddGlobalDefine(
"dUI_TextMeshPro");
365 RemoveAllChartObject();
368 public static void DisableTextMeshPro()
370 DefineSymbolsUtil.RemoveGlobalDefine(
"dUI_TextMeshPro");
371 RemoveAllChartObject();
374 public static bool IsExistTMPAssembly()
377 #if UNITY_2018_1_OR_NEWER
378 foreach (var assembly
in UnityEditor.Compilation.CompilationPipeline.GetAssemblies(UnityEditor.Compilation.AssembliesType.Player))
380 if (assembly.name.Equals(
"Unity.TextMeshPro"))
return true;
382 #elif UNITY_2017_3_OR_NEWER
383 foreach (var assembly
in UnityEditor.Compilation.CompilationPipeline.GetAssemblies())
385 if (assembly.name.Equals(
"Unity.TextMeshPro"))
return true;
391 public static bool ModifyTMPRefence(
bool removeTMP =
false)
393 var packagePath =
XChartsMgr.GetPackageFullPath();
394 if (!ModifyTMPRefence(packagePath +
"/Runtime/XCharts.Runtime.asmdef", removeTMP))
return false;
395 if (!ModifyTMPRefence(packagePath +
"/Editor/XCharts.Editor.asmdef", removeTMP))
return false;
399 private static bool ModifyTMPRefence(
string asmdefPath,
bool removeTMP =
false)
401 if (!File.Exists(asmdefPath))
403 Debug.LogError(
"AddTMPRefence ERROR: can't find: " + asmdefPath);
408 var dest =
new List<string>();
409 var refs =
new List<string>();
410 var lines = File.ReadAllLines(asmdefPath);
411 var referencesStart =
false;
412 var addedTMP =
false;
413 var removedTMP =
false;
414 var tmpName =
"\"Unity.TextMeshPro\"";
416 foreach (var line
in lines)
418 if (
string.IsNullOrEmpty(line))
continue;
419 if (line.Contains(
"\"references\": ["))
422 referencesStart =
true;
424 else if (referencesStart)
426 if (line.Contains(
"],"))
428 referencesStart =
false;
431 var old = dest[dest.Count - 1];
432 if (old.EndsWith(
","))
433 dest[dest.Count - 1] = old.Substring(0, old.Length - 1);
435 if (!removeTMP && !refs.Contains(tmpName))
438 dest[dest.Count - 1] = dest[dest.Count - 1] +
",";
439 dest.Add(
" " + tmpName);
452 if (!line.Contains(tmpName))
465 refs.Add(line.Trim());
474 if (addedTMP || removedTMP)
476 File.WriteAllText(asmdefPath,
string.Join(
"\n", dest.ToArray()));
477 AssetDatabase.SaveAssets();
478 AssetDatabase.Refresh();
482 catch (System.Exception e)
484 Debug.LogError(
"AddTMPRefence ERROR:" + e.Message);