Files
aibis-dream/Assets/Scripts/MiniGame/BlockPuzzle/Class/UIHander/BlockSubmitHander.cs
T

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