Files
aibis-dream/Assets/Scripts/UI/DialogUI/Options/OnelineOption.cs
T
dingyuntian 8ab73ca5a9 问题修复
增加单行的选项界面
2026-01-04 15:39:20 +08:00

81 lines
2.4 KiB
C#

using System;
using UnityEngine;
using UnityEngine.UI;
using TMPro;
namespace AibisDream
{
public class OnelineOption : MonoBehaviour
{
[SerializeField] private TMP_Text text;
[SerializeField] private BaseButton button;
[SerializeField] private Image arrow;
[SerializeField] private Image selectedSign;
[Header("颜色配置")]
[SerializeField] private ColorBlock colorBlock;
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($"<s>{option.Line}</s>");
return;
}
selectedSign.gameObject.SetActive(option.IsSelected);
text.SetText(option.Line);
button.onClick.AddListener(() =>
{
option.Select();
hide?.Invoke();
});
}
private void OnStateTransition(SelectionType state, bool instant)
{
switch (state)
{
case SelectionType.Normal:
arrow.gameObject.SetActive(false);
SetColor(colorBlock.normalColor);
break;
case SelectionType.Highlighted:
arrow.gameObject.SetActive(true);
SetColor(colorBlock.highlightedColor);
break;
case SelectionType.Pressed:
arrow.gameObject.SetActive(true);
SetColor(colorBlock.pressedColor);
break;
case SelectionType.Selected:
arrow.gameObject.SetActive(true);
SetColor(colorBlock.selectedColor);
break;
case SelectionType.Disabled:
arrow.gameObject.SetActive(false);
SetColor(colorBlock.disabledColor);
break;
}
}
private void SetColor(Color color)
{
arrow.color = color;
text.color = color;
selectedSign.color = color;
}
}
}