using System; using Cysharp.Threading.Tasks; using UnityEngine; using UnityEngine.UI; /// /// 淘金刷新界面 /// public class GoldRushRefreshWin : UIBase { [SerializeField] ItemCell itemCell; [SerializeField] Text nameText; [SerializeField] CountControler countControler; [SerializeField] Text timeText; [SerializeField] Text moneyText; [SerializeField] Image iconImg; [SerializeField] Transform refreshRect; [SerializeField] ButtonEx refreshBtn; [SerializeField] ButtonEx workBtn; [SerializeField] ButtonEx callBackBtn; [SerializeField] Text callBackText; [SerializeField] Text workingText; GoldRushItemConfig config; int workerCount; protected override void InitComponent() { workBtn.AddListener(DoingWork); refreshBtn.AddListener(RefreshItem); callBackBtn.AddListener(CallBackWorker); } protected override void OnPreOpen() { GoldRushManager.Instance.OnGoldRushCampEvent += OnGoldRushCampEvent; GlobalTimeEvent.Instance.secondEvent += OnSecondEvent; var goldID = GoldRushManager.Instance.GetCampGoldID(GoldRushManager.Instance.selectCampID); if (goldID == 0) { DelayCloseWindow().Forget(); return; } Display(); } protected override void OnPreClose() { GoldRushManager.Instance.OnGoldRushCampEvent -= OnGoldRushCampEvent; GlobalTimeEvent.Instance.secondEvent -= OnSecondEvent; } void Display() { var goldID = GoldRushManager.Instance.GetCampGoldID(GoldRushManager.Instance.selectCampID); config = GoldRushItemConfig.Get(goldID); int emptyCnt = GoldRushManager.Instance.GetEmptyWorkerCount(); int itemID = config.ItemID; itemCell.Init(new ItemCellModel(itemID, false, config.ItemCount)); itemCell.button.AddListener(()=> { ItemTipUtility.Show(itemID); }); nameText.text = GoldRushManager.Instance.GetCampItemName(config); var endTime = GoldRushManager.Instance.GetCampEndTime(GoldRushManager.Instance.selectCampID); if (endTime == 0) { //未开始 timeText.text = TimeUtility.SecondsToHMS(config.NeedSeconds); refreshRect.SetActive(true); callBackBtn.SetActive(false); iconImg.SetIconWithMoneyType(GoldRushManager.Instance.refreshMoneyType); moneyText.text = UIHelper.ShowUseMoney(GoldRushManager.Instance.refreshMoneyType, GoldRushManager.Instance.GetRefreshMoney(GoldRushManager.Instance.selectCampID)); workBtn.SetInteractable(emptyCnt != 0); workerCount = Math.Min(emptyCnt, 1); } else { timeText.text = TimeUtility.SecondsToHMS(endTime - TimeUtility.AllSeconds); refreshRect.SetActive(false); callBackBtn.SetActive(true); RefreshCallBackBtn(); workerCount = GoldRushManager.Instance.GetCampWorkerCnt(GoldRushManager.Instance.selectCampID); } countControler.Init(ChangeWorkerCount, config.WorkerMax, workerCount, AddWorker, DecWorker); } void RefreshCallBackBtn() { var realCnt = GoldRushManager.Instance.GetCampWorkerCnt(GoldRushManager.Instance.selectCampID); if (workerCount == 0) { callBackBtn.SetInteractable(true); callBackText.text = Language.Get("GoldRush33"); //撤回监工 } else if (realCnt == workerCount) { callBackBtn.SetInteractable(false); callBackText.text = Language.Get("GoldRush14"); //调整监工 } else { callBackBtn.SetInteractable(true); callBackText.text = Language.Get("GoldRush14"); //调整监工 } } void OnSecondEvent() { var endTime = GoldRushManager.Instance.GetCampEndTime(GoldRushManager.Instance.selectCampID); if (endTime != 0) { timeText.text = TimeUtility.SecondsToHMS(endTime - TimeUtility.AllSeconds); var addStr = new string('.', (int)Time.time % 4); workingText.text = Language.Get("GoldRush37") + addStr; } } void OnGoldRushCampEvent(int campID) { if (campID != GoldRushManager.Instance.selectCampID) { return; } var goldID = GoldRushManager.Instance.GetCampGoldID(GoldRushManager.Instance.selectCampID); if (goldID == 0) { //已完成 CloseWindow(); return; } Display(); } void ChangeWorkerCount(int count) { workerCount = count; var endTime = GoldRushManager.Instance.GetCampEndTime(GoldRushManager.Instance.selectCampID); if (endTime == 0) { //未开始 timeText.text = TimeUtility.SecondsToHMS(config.NeedSeconds / Math.Max(1, count)); } else { timeText.text = TimeUtility.SecondsToHMS(endTime - TimeUtility.AllSeconds); RefreshCallBackBtn(); } } bool AddWorker(int count) { if (count >= config.WorkerMax) { return false; } //可派遣的监工: 空闲监工数+当前监工数 if (count + 1 > GoldRushManager.Instance.GetEmptyWorkerCount() + GoldRushManager.Instance.GetCampWorkerCnt(GoldRushManager.Instance.selectCampID)) { SysNotifyMgr.Instance.ShowTip("GoldRush2"); return false; } return true; } bool DecWorker(int count) { if (count <= 0) return false; return true; } void DoingWork() { var endTime = GoldRushManager.Instance.GetCampEndTime(GoldRushManager.Instance.selectCampID); if (endTime != 0) return; int emptyCnt = GoldRushManager.Instance.GetEmptyWorkerCount(); if (emptyCnt == 0 || workerCount > emptyCnt) { SysNotifyMgr.Instance.ShowTip("GoldRush2"); return; } if (workerCount == 0) { SysNotifyMgr.Instance.ShowTip("GoldRush5"); return; } if (workerCount > config.WorkerMax) { return; } //仓库容量已达上限 if (GoldRushManager.Instance.GetWarehouseCnt() >= GoldRushManager.Instance.warehouseMaxCnt) { SysNotifyMgr.Instance.ShowTip("GoldRush3"); return; } GoldRushManager.Instance.SendGoldRushOP(2, GoldRushManager.Instance.selectCampID, workerCount); SysNotifyMgr.Instance.ShowTip("GoldRush6"); CloseWindow(); } void RefreshItem() { var endTime = GoldRushManager.Instance.GetCampEndTime(GoldRushManager.Instance.selectCampID); if (endTime != 0) return; if (!UIHelper.CheckMoneyCount(GoldRushManager.Instance.refreshMoneyType, GoldRushManager.Instance.GetRefreshMoney(GoldRushManager.Instance.selectCampID), 2)) { return; } GoldRushManager.Instance.SendGoldRushOP(1, GoldRushManager.Instance.selectCampID, 0); SysNotifyMgr.Instance.ShowTip("GoldRush4"); } void CallBackWorker() { var endTime = GoldRushManager.Instance.GetCampEndTime(GoldRushManager.Instance.selectCampID); if (endTime == 0) return; var realCnt = GoldRushManager.Instance.GetCampWorkerCnt(GoldRushManager.Instance.selectCampID); if (workerCount == 0) { ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"), Language.Get("GoldRush38"), (bool isOK) => { if (isOK) { //撤回监工 GoldRushManager.Instance.SendGoldRushOP(3, GoldRushManager.Instance.selectCampID, 0); CloseWindow(); } }); } else if (realCnt == workerCount) { return; } else { //调整监工 GoldRushManager.Instance.SendGoldRushOP(2, GoldRushManager.Instance.selectCampID, workerCount); SysNotifyMgr.Instance.ShowTip("GoldRush1"); CloseWindow(); } } }