Files
ZHGD_Web/SelfPackages/XCharts/Runtime/Internal/XChartsMgr.cs
2025-07-13 23:16:20 +08:00

168 lines
5.3 KiB
C#

using System.Collections.Generic;
using System.IO;
using UnityEngine;
using UnityEngine.SceneManagement;
using System.Linq;
#if UNITY_EDITOR
using ADB = UnityEditor.AssetDatabase;
#endif
namespace XCharts.Runtime
{
class XChartsVersion
{
public string version = "";
public int date = 0;
public int checkdate = 0;
public string desc = "";
public string homepage = "";
}
[ExecuteInEditMode]
public static class XChartsMgr
{
public static readonly string version = "3.10.2";
public static readonly int versionDate = 20240311;
public static string fullVersion { get { return version + "-" + versionDate; } }
internal static List<BaseChart> chartList = new List<BaseChart>();
internal static Dictionary<string, Theme> themes = new Dictionary<string, Theme>();
internal static List<string> themeNames = new List<string>();
static XChartsMgr()
{
SerieLabelPool.ClearAll();
chartList.Clear();
if (Resources.Load<XCSettings>("XCSettings"))
XCThemeMgr.ReloadThemeList();
SceneManager.sceneUnloaded += OnSceneLoaded;
}
static void OnSceneLoaded(Scene scene)
{
SerieLabelPool.ClearAll();
}
public static void AddChart(BaseChart chart)
{
var sameNameChart = GetChart(chart.chartName);
if (sameNameChart != null)
{
var path = ChartHelper.GetFullName(sameNameChart.transform);
Debug.LogError("A chart named `" + chart.chartName + "` already exists:" + path);
RemoveChart(chart.chartName);
}
if (!ContainsChart(chart))
{
chartList.Add(chart);
}
}
public static BaseChart GetChart(string chartName)
{
if (string.IsNullOrEmpty(chartName)) return null;
return chartList.Find(chart => chartName.Equals(chart.chartName));
}
public static List<BaseChart> GetCharts(string chartName)
{
if (string.IsNullOrEmpty(chartName)) return null;
return chartList.FindAll(chart => chartName.Equals(chart.chartName));
}
public static void RemoveChart(string chartName)
{
if (string.IsNullOrEmpty(chartName)) return;
chartList.RemoveAll(chart => chartName.Equals(chart.chartName));
}
public static bool ContainsChart(string chartName)
{
if (string.IsNullOrEmpty(chartName)) return false;
var list = GetCharts(chartName);
return list != null && list.Count > 0;
}
public static bool ContainsChart(BaseChart chart)
{
return chartList.Contains(chart);
}
public static bool IsRepeatChartName(BaseChart chart, string chartName = null)
{
if (chartName == null)
chartName = chart.chartName;
if (string.IsNullOrEmpty(chartName))
return false;
foreach (var temp in chartList)
{
if (temp != chart && chartName.Equals(temp.chartName))
return true;
}
return false;
}
public static string GetRepeatChartNameInfo(BaseChart chart, string chartName)
{
if (string.IsNullOrEmpty(chartName))
return string.Empty;
string result = "";
foreach (var temp in chartList)
{
if (temp != chart && chartName.Equals(temp.chartName))
result += ChartHelper.GetFullName(temp.transform) + "\n";
}
return result;
}
public static void RemoveAllChartObject()
{
if (chartList.Count == 0)
{
return;
}
foreach (var chart in chartList)
{
if (chart != null)
chart.RebuildChartObject();
}
}
#if UNITY_EDITOR
public static string GetPackageFullPath()
{
string packagePath = Path.GetFullPath("Packages/com.monitor1394.xcharts");
if (Directory.Exists(packagePath))
{
return packagePath;
}
packagePath = ADB.FindAssets("t:Script")
.Where(v => Path.GetFileNameWithoutExtension(ADB.GUIDToAssetPath(v)) == "XChartsMgr")
.Select(id => ADB.GUIDToAssetPath(id))
.FirstOrDefault();
packagePath = Path.GetDirectoryName(packagePath);
packagePath = packagePath.Substring(0, packagePath.LastIndexOf("Runtime"));
return packagePath;
}
[UnityEditor.Callbacks.DidReloadScripts]
static void OnEditorReload()
{
for (int i = chartList.Count - 1; i >= 0; i--)
{
var chart = chartList[i];
if (chart == null)
{
chartList.RemoveAt(i);
}
else
{
chart.InitComponentHandlers();
chart.InitSerieHandlers();
}
}
}
#endif
}
}