| | |
| | | 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; |
| | |
| | | [SerializeField] Text moneyText; |
| | | |
| | | int m_SelectedMoneyType; |
| | | int m_SelectedNeedCount; |
| | | int m_NeedMoney1; |
| | | int m_NeedMoney2; |
| | | |
| | |
| | | { |
| | | 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); |
| | | } |
| | | }); |
| | | } |
| | |
| | | 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) |
| | | { |
| | |
| | | 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) |
| | |
| | | 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; |
| | |
| | | } |
| | | |
| | | m_SelectedMoneyType = moneyType; |
| | | m_SelectedNeedCount = needCount; |
| | | UpdateMoneyDisplay(moneyType, needCount); |
| | | } |
| | | |
| | |
| | | { |
| | | moneyIcon.SetIconWithMoneyType(moneyType); |
| | | moneyText.text = GetPayMethodMoneyText(moneyType, needCount); |
| | | // 切换选项时同步刷新 Recharge6 内容(货币图标+名称变化) |
| | | m_Content.text = Language.Get("Recharge6", UIHelper.GetIconNameWithMoneyType(moneyType), ConfirmCancel.payMethodMoney, ConfirmCancel.payMethodTitle); |
| | | } |
| | | |
| | |
| | | |
| | | private void OnConfirm() |
| | | { |
| | | if (UIHelper.GetMoneyCnt(m_SelectedMoneyType) < m_SelectedNeedCount) |
| | | { |
| | | SysNotifyMgr.Instance.ShowTip("LackMoney", m_SelectedMoneyType); |
| | | return; |
| | | } |
| | | |
| | | CloseWindow(); |
| | | ConfirmCancel.OnDualToggleConfirmEvent?.Invoke(true, m_SelectedMoneyType); |
| | | } |