using System;
using Framework;
using PhxhSDK;
using UnityEngine;
using UnityEngine.UI;
///
/// UI窗口基类 - 按钮绑定部分
/// 包含按钮事件绑定、音频处理等功能
///
public abstract partial class UIWindow
{
#region Button Binding Core
///
/// 处理按钮点击的音频逻辑
///
/// 按钮组件
/// 是否播放音频
private void HandleButtonAudio(Button button, bool playAudio)
{
if (!playAudio) return;
var clickAudio = button.GetComponent();
if (clickAudio)
{
if (clickAudio.IsPlayAudio && !string.IsNullOrEmpty(clickAudio.AudioKey))
{
AudioManager.Instance.PlayAudio(clickAudio.AudioKey);
}
}
else
{
CommonUtilsFramework.PlayUICommonSound();
}
}
///
/// 绑定按钮点击事件的核心逻辑
///
/// 按钮组件
/// 点击回调
/// 是否播放音频
private void BindButtonCore(Button button, Action action, bool playAudio = true)
{
if (button is null) return;
button.onClick.RemoveAllListeners();
button.onClick.AddListener(() =>
{
if (UIManager.IsUIInputBlocked) return;
UIManager.Instance.BlockUIForNormalOperation();
HandleButtonAudio(button, playAudio);
action?.Invoke();
});
}
///
/// 绑定按钮点击事件的核心逻辑(带参数)
///
/// 参数类型
/// 按钮组件
/// 点击回调
/// 参数
/// 是否播放音频
private void BindButtonCore(Button button, Action action, T parameter, bool playAudio = true)
{
if (button is null) return;
button.onClick.RemoveAllListeners();
button.onClick.AddListener(() =>
{
if (UIManager.IsUIInputBlocked) return;
UIManager.Instance.BlockUIForNormalOperation();
HandleButtonAudio(button, playAudio);
if (parameter == null)
{
DebugUtil.LogError("=== 传入参数为空! ===");
}
action?.Invoke(parameter);
});
}
#endregion
#region Button Binding Public Interface
///
/// 通过路径绑定按钮
///
/// 按钮路径
/// 点击回调
/// 是否播放音频
/// 找到的GameObject
public Button BindButton(string target, Action action, bool playAudio = true)
{
GameObject obj = transform.Find(target)?.gameObject;
if (obj is not null)
{
Button button = obj.GetComponent