using System; using UnityEngine.UI; namespace UnityEngine.Rendering.UI { /// /// DebugUIHandler for indirect toggle widget. /// public class DebugUIHandlerIndirectToggle : DebugUIHandlerWidget { /// /// Label of the widget. /// public Text nameLabel; /// Toggle of the toggle field. public Toggle valueToggle; /// Checkmark image. public Image checkmarkImage; /// /// Getter function for this indirect widget. /// public Func getter; /// /// Setter function for this indirect widget. /// public Action setter; // Should not be here, this is a byproduct of the Bitfield UI Handler implementation. internal int index; /// /// Initialize the indirect widget. /// public void Init() { UpdateValueLabel(); valueToggle.onValueChanged.AddListener(OnToggleValueChanged); } void OnToggleValueChanged(bool value) { setter(index, value); } /// /// OnSelection implementation. /// /// True if the selection wrapped around. /// Previous widget. /// True if the selection is allowed. public override bool OnSelection(bool fromNext, DebugUIHandlerWidget previous) { nameLabel.color = colorSelected; checkmarkImage.color = colorSelected; return true; } /// /// OnDeselection implementation. /// public override void OnDeselection() { nameLabel.color = colorDefault; checkmarkImage.color = colorDefault; } /// /// OnAction implementation. /// public override void OnAction() { bool value = !getter(index); setter(index, value); UpdateValueLabel(); } internal void UpdateValueLabel() { if (valueToggle != null) valueToggle.isOn = getter(index); } } }