using System.Collections.Generic;
using TMPro;
using UnityEngine;
using DefaultNamespace.ProcessMode;
using Framework.Manager;
///
/// TextMeshPro 下拉框验证组件
/// 可以挂载到任何 TMP_Dropdown 上,实现选择正确后自动跳转引导
///
public class TMPDropdownValidator : MonoBehaviour
{
[Header("验证设置")]
[Tooltip("是否启用自动跳转功能")]
[SerializeField] private bool enableAutoJump = true;
[Tooltip("是否启用调试日志")]
[SerializeField] private bool enableDebugLog = true;
[Tooltip("验证延迟时间(秒),避免频繁验证")]
[SerializeField] private float validationDelay = 0.5f;
private TMP_Dropdown dropdown;
private int lastValidatedIndex = -1;
///
/// 初始化组件
///
private void Awake()
{
dropdown = GetComponent();
if (dropdown == null)
{
Debug.LogError($"TMPDropdownValidator: 在 {gameObject.name} 中未找到 TMP_Dropdown 组件!");
return;
}
// 监听选择变化事件
dropdown.onValueChanged.AddListener(OnDropdownValueChanged);
if (enableDebugLog)
{
Debug.Log($"TMPDropdownValidator: 初始化完成 - {gameObject.name}");
}
}
///
/// 下拉框选择变化回调
///
/// 选择的索引
private void OnDropdownValueChanged(int value)
{
// 检查是否与上次验证的索引相同
if (value == lastValidatedIndex)
{
return;
}
// 立即执行验证(移除防抖延迟)
ValidateSelection(value);
}
///
/// 验证选择并自动跳转
///
/// 选择的索引
private void ValidateSelection(int selectedIndex)
{
lastValidatedIndex = selectedIndex;
// 检查是否有有效选择
if (selectedIndex < 0 || selectedIndex >= dropdown.options.Count)
{
if (enableDebugLog)
{
Debug.Log($"TMPDropdownValidator: 选择无效,不验证 - 下拉框: {gameObject.name}, 索引: {selectedIndex}");
}
return;
}
// 获取选择的文本
string selectedText = dropdown.options[selectedIndex].text;
if (enableDebugLog)
{
Debug.Log($"TMPDropdownValidator: 开始验证选择 - 下拉框: {gameObject.name}, 索引: {selectedIndex}, 文本: '{selectedText}'");
}
// 使用新的严谨验证方法:验证选择是否匹配当前动作的正确答案,传递UI的Instance ID
string uiInstanceId = gameObject.GetInstanceID().ToString();
bool isSelectionCorrect = MotionFramework.MotionEngine.GetModule().ValidateInputAgainstCurrentAction(selectedText, uiInstanceId);
if (isSelectionCorrect)
{
if (enableDebugLog)
{
Debug.Log($"TMPDropdownValidator: 选择正确自动跳转 - 下拉框: {gameObject.name}, 索引: {selectedIndex}, 文本: '{selectedText}'");
}
if (enableAutoJump)
{
// 选择正确,直接跳转到下一个引导步骤(不调用 HandleClick)
InterfaceManager.LoadTriggerNextGuide();
}
}
else
{
if (enableDebugLog)
{
Debug.Log($"TMPDropdownValidator: 选择错误,不跳转 - 下拉框: {gameObject.name}, 索引: {selectedIndex}, 文本: '{selectedText}'");
}
}
}
///
/// 手动触发验证
///
public void TriggerValidation()
{
if (dropdown != null && dropdown.value >= 0 && dropdown.value < dropdown.options.Count)
{
ValidateSelection(dropdown.value);
}
}
///
/// 设置是否启用自动跳转
///
/// 是否启用
public void SetAutoJumpEnabled(bool enabled)
{
enableAutoJump = enabled;
if (enableDebugLog)
{
Debug.Log($"TMPDropdownValidator: 自动跳转功能 {(enabled ? "启用" : "禁用")} - {gameObject.name}");
}
}
///
/// 设置验证延迟时间
///
/// 延迟时间(秒)
public void SetValidationDelay(float delay)
{
validationDelay = Mathf.Max(0f, delay);
if (enableDebugLog)
{
Debug.Log($"TMPDropdownValidator: 验证延迟设置为 {validationDelay} 秒 - {gameObject.name}");
}
}
///
/// 清除下拉框选择
///
public void ClearSelection()
{
if (dropdown != null)
{
dropdown.value = 0; // 重置为第一个选项
lastValidatedIndex = -1;
}
}
///
/// 获取当前选择值
///
/// 当前选择的文本
public string GetCurrentValue()
{
if (dropdown != null && dropdown.value >= 0 && dropdown.value < dropdown.options.Count)
{
return dropdown.options[dropdown.value].text;
}
return "";
}
///
/// 获取当前选择索引
///
/// 当前选择的索引
public int GetCurrentIndex()
{
return dropdown?.value ?? -1;
}
///
/// 设置下拉框选项
///
/// 选项列表
public void SetOptions(List options)
{
if (dropdown != null)
{
dropdown.ClearOptions();
dropdown.AddOptions(options);
lastValidatedIndex = -1;
if (enableDebugLog)
{
Debug.Log($"TMPDropdownValidator: 设置选项完成 - 下拉框: {gameObject.name}, 选项数量: {options.Count}");
}
}
}
}