using System.Collections;
using UnityEngine.UI;
namespace UnityEngine.Rendering.UI
{
///
/// DebugUIHandler for enum with history widget.
///
public class DebugUIHandlerEnumHistory : DebugUIHandlerEnumField
{
Text[] historyValues;
const float xDecal = 60f;
internal override void SetWidget(DebugUI.Widget widget)
{
int historyDepth = (widget as DebugUI.HistoryEnumField)?.historyDepth ?? 0;
historyValues = new Text[historyDepth];
for (int index = 0; index < historyDepth; ++index)
{
var historyValue = Instantiate(valueLabel, transform);
Vector3 pos = historyValue.transform.position;
pos.x += (index + 1) * xDecal;
historyValue.transform.position = pos;
var text = historyValue.GetComponent();
text.color = new Color32(110, 110, 110, 255);
historyValues[index] = text;
}
//this call UpdateValueLabel which will rely on historyToggles
base.SetWidget(widget);
}
///
/// Update the label of the widget.
///
protected override void UpdateValueLabel()
{
int index = m_Field.currentIndex;
// Fallback just in case, we may be handling sub/sectionned enums here
if (index < 0)
index = 0;
valueLabel.text = m_Field.enumNames[index].text;
DebugUI.HistoryEnumField field = m_Field as DebugUI.HistoryEnumField;
int historyDepth = field?.historyDepth ?? 0;
for (int indexHistory = 0; indexHistory < historyDepth; ++indexHistory)
{
if (indexHistory < historyValues.Length && historyValues[indexHistory] != null)
historyValues[indexHistory].text = field.enumNames[field.GetHistoryValue(indexHistory)].text;
}
if (isActiveAndEnabled)
StartCoroutine(RefreshAfterSanitization());
}
IEnumerator RefreshAfterSanitization()
{
yield return null; //wait one frame
m_Field.currentIndex = m_Field.getIndex();
valueLabel.text = m_Field.enumNames[m_Field.currentIndex].text;
}
}
}