using System; using UnityEngine; using UnityEngine.UI; using TMPro; using AibisDream.Utility; namespace AibisDream { public class OnelineOption : MonoBehaviour { [SerializeField] private TMP_Text text; [SerializeField] private BaseButton button; [SerializeField] private Image arrow; [SerializeField] private Image box; [Header("颜色配置")] [SerializeField] private ColorBlock colorBlock; [Header("文字颜色")] [SerializeField] private Color exploredNormalColor = new(0.45f, 0.45f, 0.45f, 1f); [SerializeField] private Color normalColor = Color.white; private DialogOption _option; public void Init() { button.onStateTransition.AddListener(OnStateTransition); } public void SetOption(DialogOption option, Action hide = null) { _option = option; if (!option.IsAvailable) { button.interactable = false; text.SetText($"{option.Line}"); return; } button.interactable = true; text.SetText(option.Line); button.onClick.AddListener(() => { option.Select(); hide?.Invoke(); }); OnStateTransition(SelectionType.Normal, true); } private void OnStateTransition(SelectionType state, bool instant) { switch (state) { case SelectionType.Normal: // arrow.SetAlpha(0f); SetBoxColor(colorBlock.normalColor); break; case SelectionType.Highlighted: // arrow.SetAlpha(1f); SetBoxColor(colorBlock.highlightedColor); break; case SelectionType.Pressed: // arrow.SetAlpha(1f); SetBoxColor(colorBlock.pressedColor); break; case SelectionType.Selected: // arrow.SetAlpha(1f); SetBoxColor(colorBlock.selectedColor); break; case SelectionType.Disabled: // arrow.SetAlpha(0f); SetBoxColor(colorBlock.disabledColor); break; } SetTextColor(GetNormalColor()); } private void SetBoxColor(Color color) { box.color = color; } private Color GetNormalColor() { return _option.IsTrackable && _option.IsExplored ? exploredNormalColor : normalColor; } private void SetTextColor(Color color) { arrow.color = color; text.color = color; } } }