100 lines
2.8 KiB
C#
100 lines
2.8 KiB
C#
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($"<s>{option.Line}</s>");
|
|
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;
|
|
}
|
|
}
|
|
}
|