85 lines
2.6 KiB
C#
85 lines
2.6 KiB
C#
using UnityEngine;
|
|
using AibisDream.UI;
|
|
using UnityEngine.Events;
|
|
using UnityEngine.UI;
|
|
|
|
namespace AibisDream
|
|
{
|
|
public class BlockSubmitHander : MonoBehaviour
|
|
{
|
|
[Header("图片索引")]
|
|
[SerializeField] private SpriteTint validAsset;
|
|
[SerializeField] private SpriteTint invalidAsset;
|
|
|
|
private BaseButton submitButton;
|
|
private Image submitButtonImage;
|
|
public UnityEvent OnClick => submitButton.onClick;
|
|
|
|
// 状态管理
|
|
private bool isValid = false;
|
|
private bool isLocked = false;
|
|
|
|
private void Awake()
|
|
{
|
|
submitButtonImage = GetComponent<Image>();
|
|
submitButton = GetComponent<BaseButton>();
|
|
submitButton.onStateTransition.AddListener(OnStateTransition);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 设置验证状态(决定按钮外观)
|
|
/// </summary>
|
|
public void SetValidState(bool valid)
|
|
{
|
|
isValid = valid;
|
|
UpdateButtonVisual();
|
|
UpdateInteractableState();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 设置锁定状态(决定能否交互,不改变外观)
|
|
/// </summary>
|
|
public void SetLockedState(bool locked)
|
|
{
|
|
isLocked = locked;
|
|
UpdateInteractableState();
|
|
}
|
|
|
|
private void UpdateInteractableState()
|
|
{
|
|
if (submitButton == null) return;
|
|
submitButton.interactable = isValid && !isLocked;
|
|
}
|
|
|
|
private void UpdateButtonVisual()
|
|
{
|
|
if (submitButtonImage == null) return;
|
|
var asset = isValid ? validAsset : invalidAsset;
|
|
submitButtonImage.sprite = asset.normalSprite;
|
|
}
|
|
|
|
private void OnStateTransition(SelectionType stateTransition, bool instant)
|
|
{
|
|
var asset = isValid ? validAsset : invalidAsset;
|
|
|
|
switch (stateTransition)
|
|
{
|
|
case SelectionType.Normal:
|
|
submitButtonImage.sprite = asset.normalSprite;
|
|
break;
|
|
case SelectionType.Highlighted:
|
|
submitButtonImage.sprite = asset.highlightedSprite;
|
|
break;
|
|
case SelectionType.Pressed:
|
|
submitButtonImage.sprite = asset.pressedSprite;
|
|
break;
|
|
case SelectionType.Selected:
|
|
submitButtonImage.sprite = asset.selectedSprite;
|
|
break;
|
|
case SelectionType.Disabled:
|
|
submitButtonImage.sprite = asset.disabledSprite;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
} |