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(); submitButton = GetComponent(); submitButton.onStateTransition.AddListener(OnStateTransition); } /// /// 设置验证状态(决定按钮外观) /// public void SetValidState(bool valid) { isValid = valid; UpdateButtonVisual(); UpdateInteractableState(); } /// /// 设置锁定状态(决定能否交互,不改变外观) /// 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; } } } }