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(); if (group == null) { group = gameObject.AddComponent(); } 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); } }