lcy
2 天以前 4435dad5cb74b7d68f57d4b62f04d3e3de4adbd9
Main/System/Tip/PayMethodConfirmWin.cs
@@ -1,12 +1,11 @@
using UnityEngine;
using UnityEngine.UI;
// 支付方式选择确认框:双货币(现金礼券/玄玉)二选一
public class PayMethodConfirmWin : UIBase
{
    [SerializeField] Text m_Content;
    [SerializeField] Toggle m_Toggle1;      //代金礼券
    [SerializeField] Toggle m_Toggle2;      //玄玉
    [SerializeField] Toggle m_Toggle1;
    [SerializeField] Toggle m_Toggle2;
    [SerializeField] Text m_ToggleTxt1;
    [SerializeField] Text m_ToggleTxt2;
    [SerializeField] Button m_ConfirmBtn;
@@ -15,6 +14,7 @@
    [SerializeField] Text moneyText;
    int m_SelectedMoneyType;
    int m_SelectedNeedCount;
    int m_NeedMoney1;
    int m_NeedMoney2;
@@ -27,14 +27,14 @@
        {
            if (isOn)
            {
                TrySelectMoneyType(ConfirmCancel.moneyType1, ConfirmCancel.moneyNeedCount1);
                TrySelectMoneyType(ConfirmCancel.moneyType1, m_NeedMoney1);
            }
        });
        m_Toggle2.onValueChanged.AddListener((bool isOn) =>
        {
            if (isOn)
            {
                TrySelectMoneyType(ConfirmCancel.moneyType2, ConfirmCancel.moneyNeedCount2);
                TrySelectMoneyType(ConfirmCancel.moneyType2, m_NeedMoney2);
            }
        });
    }
@@ -44,11 +44,18 @@
        m_NeedMoney1 = ConfirmCancel.moneyNeedCount1;
        m_NeedMoney2 = ConfirmCancel.moneyNeedCount2;
        // 设置两个 Toggle 的文字
        m_ToggleTxt1.text = ConfirmCancel.toggleText1;
        m_ToggleTxt2.text = ConfirmCancel.toggleText2;
        // 先设互斥 ToggleGroup,避免初始化时 listener 触发状态错乱
        var availableMoneyTypes = GeneralDefine.GetPayMethodAvailableMoneyTypes();
        bool showMoney1 = availableMoneyTypes.Contains(ConfirmCancel.moneyType1);
        bool showMoney2 = availableMoneyTypes.Contains(ConfirmCancel.moneyType2);
        if (!showMoney1 && !showMoney2)
        {
            showMoney1 = true;
            showMoney2 = true;
        }
        var group = gameObject.GetComponent<ToggleGroup>();
        if (group == null)
        {
@@ -58,32 +65,32 @@
        m_Toggle1.group = group;
        m_Toggle2.group = group;
        // 判断各货币是否充足
        int showCount = (showMoney1 ? 1 : 0) + (showMoney2 ? 1 : 0);
        bool showToggles = showCount > 1;
        m_Toggle1.gameObject.SetActive(showToggles && showMoney1);
        m_Toggle2.gameObject.SetActive(showToggles && showMoney2);
        long have1 = UIHelper.GetMoneyCnt(ConfirmCancel.moneyType1);
        long have2 = UIHelper.GetMoneyCnt(ConfirmCancel.moneyType2);
        bool enough1 = have1 >= m_NeedMoney1;
        bool enough2 = have2 >= m_NeedMoney2;
        bool enough1 = showMoney1 && have1 >= m_NeedMoney1;
        bool enough2 = showMoney2 && have2 >= m_NeedMoney2;
        // 用 SetIsOnWithoutNotify 避免触发 listener,然后手动初始化
        if (enough1)
        if (enough1 || (!enough2 && showMoney1))
        {
            m_Toggle1.SetIsOnWithoutNotify(true);
            m_Toggle1.SetIsOnWithoutNotify(showToggles);
            m_Toggle2.SetIsOnWithoutNotify(false);
            m_SelectedMoneyType = ConfirmCancel.moneyType1;
        }
        else if (enough2)
        {
            m_Toggle1.SetIsOnWithoutNotify(false);
            m_Toggle2.SetIsOnWithoutNotify(true);
            m_SelectedMoneyType = ConfirmCancel.moneyType2;
            m_SelectedNeedCount = m_NeedMoney1;
        }
        else
        {
            m_Toggle1.SetIsOnWithoutNotify(true);
            m_Toggle2.SetIsOnWithoutNotify(false);
            m_SelectedMoneyType = ConfirmCancel.moneyType1;
            m_Toggle1.SetIsOnWithoutNotify(false);
            m_Toggle2.SetIsOnWithoutNotify(showToggles);
            m_SelectedMoneyType = ConfirmCancel.moneyType2;
            m_SelectedNeedCount = m_NeedMoney2;
        }
        UpdateMoneyDisplay(m_SelectedMoneyType, m_SelectedMoneyType == ConfirmCancel.moneyType1 ? m_NeedMoney1 : m_NeedMoney2);
        UpdateMoneyDisplay(m_SelectedMoneyType, m_SelectedNeedCount);
    }
    void TrySelectMoneyType(int moneyType, int needCount)
@@ -91,10 +98,7 @@
        long have = UIHelper.GetMoneyCnt(moneyType);
        if (have < needCount)
        {
            // 货币不足,弹出提示并切回原来的选中项
            string moneyName = ItemConfig.Get(UIHelper.GetItemIDWithMoneyType(moneyType))?.ItemName ?? moneyType.ToString();
            SysNotifyMgr.Instance.ShowTip("LackMoney", moneyType);
            // 恢复原来的选中
            if (m_SelectedMoneyType == ConfirmCancel.moneyType1)
            {
                m_Toggle1.isOn = true;
@@ -107,6 +111,7 @@
        }
        m_SelectedMoneyType = moneyType;
        m_SelectedNeedCount = needCount;
        UpdateMoneyDisplay(moneyType, needCount);
    }
@@ -114,7 +119,6 @@
    {
        moneyIcon.SetIconWithMoneyType(moneyType);
        moneyText.text = GetPayMethodMoneyText(moneyType, needCount);
        // 切换选项时同步刷新 Recharge6 内容(货币图标+名称变化)
        m_Content.text = Language.Get("Recharge6", UIHelper.GetIconNameWithMoneyType(moneyType), ConfirmCancel.payMethodMoney, ConfirmCancel.payMethodTitle);
    }
@@ -133,6 +137,12 @@
    private void OnConfirm()
    {
        if (UIHelper.GetMoneyCnt(m_SelectedMoneyType) < m_SelectedNeedCount)
        {
            SysNotifyMgr.Instance.ShowTip("LackMoney", m_SelectedMoneyType);
            return;
        }
        CloseWindow();
        ConfirmCancel.OnDualToggleConfirmEvent?.Invoke(true, m_SelectedMoneyType);
    }