using System; using TMPro; using UnityEngine; using UnityEngine.UI; namespace TH1_UI.View.Outside { public class UIOutsideQuestionnaireOptionMono : MonoBehaviour { public Toggle Toggle; public TextMeshProUGUI LabelText; public QuestionnaireOptionInfo OptionInfo { get; private set; } private Action _onValueChanged; public bool IsOn => Toggle != null && Toggle.isOn; public void SetContent(QuestionnaireOptionInfo info, bool selected, Action onValueChanged) { EnsureLayout(); OptionInfo = info; _onValueChanged = onValueChanged; if (LabelText != null) { LabelText.text = UIOutsideQuestionnaireView.ResolveText(info?.Text); } if (Toggle != null) { Toggle.onValueChanged.RemoveAllListeners(); Toggle.SetIsOnWithoutNotify(selected); Toggle.onValueChanged.AddListener(OnToggleChanged); } } public void SetSelectedWithoutNotify(bool value) { Toggle?.SetIsOnWithoutNotify(value); } public void SetInteractable(bool value) { if (Toggle != null) { Toggle.interactable = value; } } private void OnToggleChanged(bool value) { _onValueChanged?.Invoke(this, value); } private void EnsureLayout() { if (Toggle == null) { Toggle = GetComponent(); if (Toggle == null) { Toggle = gameObject.AddComponent(); } } var rowImage = GetComponent(); if (rowImage == null) { rowImage = gameObject.AddComponent(); } rowImage.color = new Color(1f, 1f, 1f, 0.04f); rowImage.raycastTarget = true; Toggle.targetGraphic = rowImage; var layout = GetComponent(); if (layout == null) { layout = gameObject.AddComponent(); } layout.padding = new RectOffset(10, 10, 6, 6); layout.spacing = 10f; layout.childControlWidth = false; layout.childControlHeight = true; layout.childForceExpandWidth = false; layout.childForceExpandHeight = false; layout.childAlignment = TextAnchor.MiddleLeft; var layoutElement = GetComponent(); if (layoutElement == null) { layoutElement = gameObject.AddComponent(); } layoutElement.minHeight = 38f; layoutElement.preferredHeight = 38f; if (Toggle.graphic == null) { var markRoot = new GameObject("Mark", typeof(RectTransform)); markRoot.transform.SetParent(transform, false); var markRect = markRoot.GetComponent(); markRect.sizeDelta = new Vector2(22f, 22f); markRoot.AddComponent().preferredWidth = 22f; var markBg = markRoot.AddComponent(); markBg.color = new Color(1f, 1f, 1f, 0.16f); var check = new GameObject("Check", typeof(RectTransform), typeof(Image)); check.transform.SetParent(markRoot.transform, false); var checkRect = check.GetComponent(); checkRect.anchorMin = new Vector2(0.22f, 0.22f); checkRect.anchorMax = new Vector2(0.78f, 0.78f); checkRect.offsetMin = Vector2.zero; checkRect.offsetMax = Vector2.zero; var checkImage = check.GetComponent(); checkImage.color = new Color(0.2f, 0.85f, 0.72f, 1f); Toggle.graphic = checkImage; } if (LabelText == null) { LabelText = UIOutsideQuestionnaireView.CreateText(transform, "Label", "", 20f, new Color(0.94f, 0.94f, 0.9f, 1f), TextAlignmentOptions.Left); LabelText.enableWordWrapping = true; LabelText.gameObject.AddComponent().flexibleWidth = 1f; } } } }