using System.Collections; using UnityEngine.UI; namespace UnityEngine.Rendering.UI { /// /// DebugUIHandler for toggle with history widget. /// public class DebugUIHandlerToggleHistory : DebugUIHandlerToggle { Toggle[] historyToggles; const float xDecal = 60f; internal override void SetWidget(DebugUI.Widget widget) { int historyDepth = (widget as DebugUI.HistoryBoolField)?.historyDepth ?? 0; historyToggles = new Toggle[historyDepth]; for (int index = 0; index < historyDepth; ++index) { var historyToggle = Instantiate(valueToggle, transform); Vector3 pos = historyToggle.transform.position; pos.x += (index + 1) * xDecal; historyToggle.transform.position = pos; var background = historyToggle.transform.GetChild(0).GetComponent(); background.sprite = Sprite.Create(Texture2D.whiteTexture, new Rect(-1, -1, 2, 2), Vector2.zero); background.color = new Color32(50, 50, 50, 120); var checkmark = background.transform.GetChild(0).GetComponent(); checkmark.color = new Color32(110, 110, 110, 255); historyToggles[index] = historyToggle.GetComponent(); } //this call UpdateValueLabel which will rely on historyToggles base.SetWidget(widget); } /// /// Update the label. /// internal protected override void UpdateValueLabel() { base.UpdateValueLabel(); DebugUI.HistoryBoolField field = m_Field as DebugUI.HistoryBoolField; int historyDepth = field?.historyDepth ?? 0; for (int index = 0; index < historyDepth; ++index) { if (index < historyToggles.Length && historyToggles[index] != null) historyToggles[index].isOn = field.GetHistoryValue(index); } if (isActiveAndEnabled) StartCoroutine(RefreshAfterSanitization()); } IEnumerator RefreshAfterSanitization() { yield return null; //wait one frame valueToggle.isOn = m_Field.getter(); } } }