lcy
2 天以前 f4d2e99c6041c0d0c933472dcbbeab3cbf4028ef
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
using UnityEngine;
using UnityEngine.UI;
 
// 支付方式选择确认框:双货币(现金礼券/玄玉)二选一
public class PayMethodConfirmWin : UIBase
{
    [SerializeField] Text m_Content;
    [SerializeField] Toggle m_Toggle1;      //代金礼券
    [SerializeField] Toggle m_Toggle2;      //玄玉
    [SerializeField] Text m_ToggleTxt1;
    [SerializeField] Text m_ToggleTxt2;
    [SerializeField] Button m_ConfirmBtn;
    [SerializeField] Button m_CancelBtn;
    [SerializeField] Image moneyIcon;
    [SerializeField] Text moneyText;
 
    int m_SelectedMoneyType;
    int m_NeedMoney1;
    int m_NeedMoney2;
 
    protected override void InitComponent()
    {
        m_ConfirmBtn.AddListener(OnConfirm);
        m_CancelBtn.AddListener(OnCancel);
 
        m_Toggle1.onValueChanged.AddListener((bool isOn) =>
        {
            if (isOn)
            {
                TrySelectMoneyType(ConfirmCancel.moneyType1, ConfirmCancel.moneyNeedCount1);
            }
        });
        m_Toggle2.onValueChanged.AddListener((bool isOn) =>
        {
            if (isOn)
            {
                TrySelectMoneyType(ConfirmCancel.moneyType2, ConfirmCancel.moneyNeedCount2);
            }
        });
    }
 
    protected override void OnPreOpen()
    {
        m_NeedMoney1 = ConfirmCancel.moneyNeedCount1;
        m_NeedMoney2 = ConfirmCancel.moneyNeedCount2;
 
        // 设置两个 Toggle 的文字
        m_ToggleTxt1.text = ConfirmCancel.toggleText1;
        m_ToggleTxt2.text = ConfirmCancel.toggleText2;
 
        // 先设互斥 ToggleGroup,避免初始化时 listener 触发状态错乱
        var group = gameObject.GetComponent<ToggleGroup>();
        if (group == null)
        {
            group = gameObject.AddComponent<ToggleGroup>();
        }
        group.allowSwitchOff = false;
        m_Toggle1.group = group;
        m_Toggle2.group = group;
 
        // 判断各货币是否充足
        long have1 = UIHelper.GetMoneyCnt(ConfirmCancel.moneyType1);
        long have2 = UIHelper.GetMoneyCnt(ConfirmCancel.moneyType2);
        bool enough1 = have1 >= m_NeedMoney1;
        bool enough2 = have2 >= m_NeedMoney2;
 
        // 用 SetIsOnWithoutNotify 避免触发 listener,然后手动初始化
        if (enough1)
        {
            m_Toggle1.SetIsOnWithoutNotify(true);
            m_Toggle2.SetIsOnWithoutNotify(false);
            m_SelectedMoneyType = ConfirmCancel.moneyType1;
        }
        else if (enough2)
        {
            m_Toggle1.SetIsOnWithoutNotify(false);
            m_Toggle2.SetIsOnWithoutNotify(true);
            m_SelectedMoneyType = ConfirmCancel.moneyType2;
        }
        else
        {
            m_Toggle1.SetIsOnWithoutNotify(true);
            m_Toggle2.SetIsOnWithoutNotify(false);
            m_SelectedMoneyType = ConfirmCancel.moneyType1;
        }
        UpdateMoneyDisplay(m_SelectedMoneyType, m_SelectedMoneyType == ConfirmCancel.moneyType1 ? m_NeedMoney1 : m_NeedMoney2);
    }
 
    void TrySelectMoneyType(int moneyType, int needCount)
    {
        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;
            }
            else
            {
                m_Toggle2.isOn = true;
            }
            return;
        }
 
        m_SelectedMoneyType = moneyType;
        UpdateMoneyDisplay(moneyType, needCount);
    }
 
    void UpdateMoneyDisplay(int moneyType, int needCount)
    {
        moneyIcon.SetIconWithMoneyType(moneyType);
        moneyText.text = GetPayMethodMoneyText(moneyType, needCount);
        // 切换选项时同步刷新 Recharge6 内容(货币图标+名称变化)
        m_Content.text = Language.Get("Recharge6", UIHelper.GetIconNameWithMoneyType(moneyType), ConfirmCancel.payMethodMoney, ConfirmCancel.payMethodTitle);
    }
 
    string GetPayMethodMoneyText(int moneyType, int needCount)
    {
        long haveCount = UIHelper.GetMoneyCnt(moneyType);
        if (moneyType == 97 || moneyType == 99)
        {
            return UIHelper.AppendColor(
                haveCount >= needCount ? TextColType.Green : TextColType.Red,
                $"{UIHelper.ReplaceLargeNum(haveCount / 100.0, 2)}/{UIHelper.ReplaceLargeNum(needCount / 100.0, 2)}");
        }
 
        return UIHelper.ShowUseMoney(moneyType, needCount);
    }
 
    private void OnConfirm()
    {
        CloseWindow();
        ConfirmCancel.OnDualToggleConfirmEvent?.Invoke(true, m_SelectedMoneyType);
    }
 
    private void OnCancel()
    {
        CloseWindow();
        ConfirmCancel.OnDualToggleConfirmEvent?.Invoke(false, 0);
    }
}