Files
XCharts/Runtime/Internal/SerieLabelPool.cs
2020-02-13 09:23:30 +08:00

69 lines
2.4 KiB
C#

/******************************************/
/* */
/* Copyright (c) 2018 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);
public static GameObject Get(string name, Transform parent, SerieLabel label, Font font, Color color,
float iconWidth, float iconHeight)
{
GameObject element;
if (m_Stack.Count == 0 || !Application.isPlaying)
{
element = ChartHelper.AddSerieLabel(name, parent, font,
color, label.backgroundColor, label.fontSize, label.fontStyle, label.rotate,
label.backgroundWidth, label.backgroundHeight, 1);
ChartHelper.AddIcon("Icon", element.transform, iconWidth, iconHeight);
}
else
{
element = m_Stack.Pop();
element.name = name;
element.transform.SetParent(parent);
element.transform.localEulerAngles = new Vector3(0, 0, label.rotate);
var text = element.GetComponentInChildren<Text>();
text.color = color;
text.font = font;
text.fontSize = label.fontSize;
text.fontStyle = label.fontStyle;
ChartHelper.SetActive(element, true);
}
return element;
}
public static void Release(GameObject element)
{
ChartHelper.SetActive(element, false);
//if (m_Stack.Count > 0 && ReferenceEquals(m_Stack.Peek(), element))
// Debug.LogError("Internal error. Trying to destroy object that is already released to pool." + element.name);
if (Application.isPlaying)
m_Stack.Push(element);
}
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();
}
}
}