12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- /************************************************/
- /* */
- /* Copyright (c) 2018 - 2021 monitor1394 */
- /* https://github.com/monitor1394 */
- /* */
- /************************************************/
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.UI;
- namespace XCharts
- {
- internal static class SerieLabelPool
- {
- private static readonly Stack<GameObject> m_Stack = new Stack<GameObject>(200);
- private static Dictionary<int, bool> m_ReleaseDic = new Dictionary<int, bool>(1000);
- public static GameObject Get(string name, Transform parent, SerieLabel label, Color color,
- float iconWidth, float iconHeight, ChartTheme theme)
- {
- GameObject element;
- if (m_Stack.Count == 0 || !Application.isPlaying)
- {
- element = CreateSerieLabel(name, parent, label, color, iconWidth, iconHeight, theme);
- }
- else
- {
- element = m_Stack.Pop();
- if (element == null)
- {
- element = CreateSerieLabel(name, parent, label, color, iconWidth, iconHeight, theme);
- }
- m_ReleaseDic.Remove(element.GetInstanceID());
- element.name = name;
- element.transform.SetParent(parent);
- element.transform.localEulerAngles = new Vector3(0, 0, label.textStyle.rotate);
- var text = new ChartText(element);
- text.SetColor(color);
- text.SetFontAndSizeAndStyle(label.textStyle, theme.common);
- ChartHelper.SetActive(element, true);
- }
- return element;
- }
- private static GameObject CreateSerieLabel(string name, Transform parent, SerieLabel label, Color color,
- float iconWidth, float iconHeight, ChartTheme theme)
- {
- var element = ChartHelper.AddSerieLabel(name, parent, label.backgroundWidth, label.backgroundHeight,
- color, label.textStyle, theme);
- ChartHelper.AddIcon("Icon", element.transform, iconWidth, iconHeight);
- return element;
- }
- public static void Release(GameObject element)
- {
- if (element == null) return;
- ChartHelper.SetActive(element, false);
- if (!Application.isPlaying) return;
- if (!m_ReleaseDic.ContainsKey(element.GetInstanceID()))
- {
- m_Stack.Push(element);
- m_ReleaseDic.Add(element.GetInstanceID(), true);
- }
- }
- public static void ReleaseAll(Transform parent)
- {
- int count = parent.childCount;
- for (int i = 0; i < count; i++)
- {
- Release(parent.GetChild(i).gameObject);
- }
- }
- public static void ClearAll()
- {
- m_Stack.Clear();
- m_ReleaseDic.Clear();
- }
- }
- }
|