Files
ft/Client/Assets/Scripts/EventMowForTreasure/UIPanel/EventMowForTreasureExchangePanel.cs
2026-06-29 21:18:33 +08:00

144 lines
5.3 KiB
C#

using asap.core;
using GameCore;
using TMPro;
using UniRx;
using UnityEngine;
using UnityEngine.UI;
namespace EventMowForTreasure
{
public class EventMowForTreasureExchangePanel : BasePanel
{
#region UI
private TMP_Text _textOwn;
private Button _btnAdd;
private Button _btnReduce;
private Button _btnExchange;
private Button _btnExchangeGray;
private TMP_Text _textNum;
private TMP_Text _textCost;
private TMP_Text _textCostGray;
private Image _imgDefaultTool;
private Image _imgExchangeTool;
private GameObject _btnAddGray;
private GameObject _objCommonGray;
#endregion
#region data
private int _exchangeNum = 1;
private int _exchangeRate;
private int _toolConfigID;
private EventMowForTreasureManager _manager;
private EventMowForTreasureManager Manager =>
_manager ??= GContext.container.Resolve<EventMowForTreasureManager>();
#endregion
private void Awake()
{
_textOwn = gameObject.FindChildGameObject("text_own").GetComponent<TMP_Text>();
_textNum = gameObject.FindChildGameObject("text_num").GetComponent<TMP_Text>();
_textCost = gameObject.FindChildGameObject("p_text").GetComponent<TMP_Text>();
_textCostGray=gameObject.FindChildGameObject("p_text_cost_gary").GetComponent<TMP_Text>();
_btnAdd = gameObject.FindChildGameObject("btn_add").GetComponent<Button>();
_btnAdd.onClick.AddListener(OnClick_btnAdd);
_btnReduce = gameObject.FindChildGameObject("btn_reduce").GetComponent<Button>();
_btnReduce.onClick.AddListener(OnClick_btnReduce);
_btnExchange = gameObject.FindChildGameObject("btn_green").GetComponent<Button>();
_btnExchange.onClick.AddListener(OnClick_btnExchange);
_imgDefaultTool = gameObject.FindChildGameObject("p_image_default_tool").GetComponent<Image>();
_imgExchangeTool = gameObject.FindChildGameObject("p_img_exchange_tool").GetComponent<Image>();
_btnAddGray=gameObject.FindChildGameObject("btn_add_gray");
_objCommonGray=gameObject.FindChildGameObject("btn_common_gray");
_btnExchangeGray = _objCommonGray.GetComponentInChildren<Button>();
_btnExchangeGray.onClick.AddListener(OnClick_btnExchangeGray);
GContext.OnEvent<EventMowForTreasureToolAmountChange>().Subscribe(_ => ShowUI()).AddTo(disposables);
InitUI();
}
protected override void Start()
{
base.Start();
ShowUI();
}
protected override void OnDestroy()
{
_btnAdd.onClick.RemoveAllListeners();
_btnReduce.onClick.RemoveAllListeners();
_btnExchange.onClick.RemoveAllListeners();
base.OnDestroy();
}
private void OnClick_btnExchange()
{
if (!Manager.TryExchangeTool(_exchangeNum,_exchangeRate,_toolConfigID)) return;
ToastPanel.Show(LocalizationMgr.GetText("EventMowForTreasurePanel_8"));
UIManager.Instance.DestroyUI(UITypes.EventMowForTreasureExchangePanel);
}
private void OnClick_btnExchangeGray()
{
Manager.ShowFestPackPanel();
}
private void OnClick_btnReduce()
{
if (_exchangeNum == 0) return;
_exchangeNum--;
ShowUI();
}
private void OnClick_btnAdd()
{
_exchangeNum++;
ShowUI();
}
private void InitUI()
{
var zeroStr = "0";
_textOwn.text = zeroStr;
_textNum.text = zeroStr;
_textCost.text = zeroStr;
_textCostGray.text=zeroStr;
}
public void SetData(int toolConfigID, int exchangeRate)
{
_toolConfigID = toolConfigID;
_exchangeRate = exchangeRate;
ShowUI();
}
private void ShowUI()
{
if (_toolConfigID == 0) return;
var defaultToolConfig =Manager.GetDefaultToolConfig();
if(defaultToolConfig==null)
return;
var defaultToolID = defaultToolConfig.ID;
if (defaultToolID == 0) return;
_btnReduce.gameObject.SetActive(_exchangeNum > 1);
Manager.TryGetToolAmount(defaultToolID, out var ownAmount);
var cost = _exchangeNum * _exchangeRate;
var isCanExchange = ownAmount >= cost;
_btnAddGray.SetActive(!isCanExchange);
_btnAdd.gameObject.SetActive(isCanExchange);
_btnExchange.gameObject.SetActive(isCanExchange);
_objCommonGray.SetActive(!isCanExchange);
_textOwn.text = $"{ownAmount}";
_textOwn.color=isCanExchange?Color.white:Color.red;
_textNum.text = $"{_exchangeNum}";
var costStr = $"{cost}";
_textCost.text = costStr;
_textCostGray.text = costStr;
_ = GContext.container.Resolve<IUIService>().SetImageSprite(_imgDefaultTool, defaultToolConfig.Icon);
var toolConfig = Manager.Tables.TbEventMowForTreasureTool.GetOrDefault(_toolConfigID);
_ = GContext.container.Resolve<IUIService>().SetImageSprite(_imgExchangeTool, toolConfig.Icon);
}
}
}