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_SelectedNeedCount; 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, m_NeedMoney1); } }); m_Toggle2.onValueChanged.AddListener((bool isOn) => { if (isOn) { TrySelectMoneyType(ConfirmCancel.moneyType2, m_NeedMoney2); } }); } protected override void OnPreOpen() { m_NeedMoney1 = ConfirmCancel.moneyNeedCount1; m_NeedMoney2 = ConfirmCancel.moneyNeedCount2; m_ToggleTxt1.text = ConfirmCancel.toggleText1; m_ToggleTxt2.text = ConfirmCancel.toggleText2; 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(); if (group == null) { group = gameObject.AddComponent(); } group.allowSwitchOff = false; 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 = showMoney1 && have1 >= m_NeedMoney1; bool enough2 = showMoney2 && have2 >= m_NeedMoney2; if (enough1 || (!enough2 && showMoney1)) { m_Toggle1.SetIsOnWithoutNotify(showToggles); m_Toggle2.SetIsOnWithoutNotify(false); m_SelectedMoneyType = ConfirmCancel.moneyType1; m_SelectedNeedCount = m_NeedMoney1; } else { m_Toggle1.SetIsOnWithoutNotify(false); m_Toggle2.SetIsOnWithoutNotify(showToggles); m_SelectedMoneyType = ConfirmCancel.moneyType2; m_SelectedNeedCount = m_NeedMoney2; } UpdateMoneyDisplay(m_SelectedMoneyType, m_SelectedNeedCount); } void TrySelectMoneyType(int moneyType, int needCount) { long have = UIHelper.GetMoneyCnt(moneyType); if (have < needCount) { SysNotifyMgr.Instance.ShowTip("LackMoney", moneyType); if (m_SelectedMoneyType == ConfirmCancel.moneyType1) { m_Toggle1.isOn = true; } else { m_Toggle2.isOn = true; } return; } m_SelectedMoneyType = moneyType; m_SelectedNeedCount = needCount; UpdateMoneyDisplay(moneyType, needCount); } void UpdateMoneyDisplay(int moneyType, int needCount) { moneyIcon.SetIconWithMoneyType(moneyType); moneyText.text = GetPayMethodMoneyText(moneyType, needCount); 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() { if (UIHelper.GetMoneyCnt(m_SelectedMoneyType) < m_SelectedNeedCount) { SysNotifyMgr.Instance.ShowTip("LackMoney", m_SelectedMoneyType); return; } CloseWindow(); ConfirmCancel.OnDualToggleConfirmEvent?.Invoke(true, m_SelectedMoneyType); } private void OnCancel() { CloseWindow(); ConfirmCancel.OnDualToggleConfirmEvent?.Invoke(false, 0); } }