Files
aibis-dream/Assets/Scripts/UI/DialogUI/Options/OnelineOption.cs
T

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;
}
}
}