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);
|
}
|
}
|