using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { [XLua.Hotfix] public class DungeonAssistPlayerWin : Window { [SerializeField] Button oneKeyHelpBtn; [SerializeField] Text oneKeyHelpText; [SerializeField] Button freeRefreshBtn; [SerializeField] Text freeRefreshText; [SerializeField] Button goldRefreshBtn; [SerializeField] Image goldRefreshImg; [SerializeField] Text goldRefreshCostMoneyText; [SerializeField] Text goldRefreshRemianNumText; [SerializeField] ScrollerController assistPlayerCtrl; DungeonAssistModel assistModel { get { return ModelCenter.Instance.GetModel(); } } private bool isRefresh; #region Built-in protected override void BindController() { assistPlayerCtrl.OnRefreshCell += RefreshAssistPlayer; } protected override void AddListeners() { goldRefreshBtn.AddListener(ClickRefresh); oneKeyHelpBtn.AddListener(ClickOneKeyAssist); freeRefreshBtn.AddListener(ClickRefresh); } protected override void OnPreOpen() { assistModel.UpdataAssistPlayerListEvent += UpdateAssistPlayersList; assistModel.UpdataAssistPlayerEvent += UpdateAssistPlayerState; SetDisplay(); } protected override void OnAfterOpen() { } protected override void OnPreClose() { assistModel.UpdataAssistPlayerListEvent -= UpdateAssistPlayersList; assistModel.UpdataAssistPlayerEvent -= UpdateAssistPlayerState; TimeDownMgr.Instance.Stop(TimeDownMgr.CoolTimeType.DungeonAssistCoolTime); StopAllCoroutines(); } protected override void OnAfterClose() { } #endregion public void SetDisplay() { isRefresh = true; UpdateAssistPlayers(); UpdateOneKeyAssist(); UpdateRefreshTimes(); } private void UpdateAssistPlayersList() { UpdateAssistPlayers(); UpdateOneKeyAssist(); UpdateRefreshTimes(); } private void UpdateAssistPlayerState(int id) { UpdateOneKeyAssist(); } private void UpdateAssistPlayers() { var playerInfos = assistModel.GetAssistPlayerInfos(); if (playerInfos == null) return; assistPlayerCtrl.Refresh(); for(int i = 0; i < playerInfos.Count; i++) { var info = playerInfos[i]; assistPlayerCtrl.AddCell(ScrollerDataType.Header,info.PlayerID); } assistPlayerCtrl.Restart(); } private void RefreshAssistPlayer(ScrollerDataType type, CellView cell) { var playerCell = cell.GetComponent(); playerCell.SetDisplay(cell.index); } private void UpdateOneKeyAssist() { UpdateTime(assistModel.assistCoolTime); TimeDownMgr.Instance.Begin(TimeDownMgr.CoolTimeType.DungeonAssistCoolTime, assistModel.assistCoolTime, UpdateTime); } private void UpdateRefreshTimes() { int remainNum = 0; bool isFree = assistModel.TryGetFreeRefresh(out remainNum); freeRefreshBtn.gameObject.SetActive(isFree); goldRefreshBtn.gameObject.SetActive(!isFree); if(isFree) { freeRefreshText.text = Language.Get("DungeonAssist129",remainNum); } else { goldRefreshCostMoneyText.text = assistModel.refreshCostMoney.ToString(); goldRefreshRemianNumText.text = Language.Get("DungeonAssist129", remainNum); } UpdateGoldRefreshBtn(); } private void UpdateGoldRefreshBtn() { int remainNum = 0; bool isFree = assistModel.TryGetFreeRefresh(out remainNum); if(isFree || remainNum > 0) { goldRefreshImg.material = MaterialUtility.GetUIDefaultGraphicMaterial(); } else { goldRefreshImg.material = MaterialUtility.GetDefaultSpriteGrayMaterial(); } } private void UpdateTime(float time) { if(time > 0) { oneKeyHelpText.text = Language.Get("DungeonAssist128", time); } else { assistModel.SendPlayerAssist(1); } } private void ClickOneKeyAssist() { assistModel.SendPlayerAssist(1); CloseClick(); } private void ClickRefresh() { if (!isRefresh) return; isRefresh = false; int remainNum = 0; bool isFree = assistModel.TryGetFreeRefresh(out remainNum); if(isFree) { assistModel.SendAssistRefresh(); } else { if(remainNum > 0) { ulong haveBindGold = UIHelper.GetMoneyCnt(2); if (haveBindGold < (ulong)assistModel.refreshCostMoney) { ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"), Language.Get("DungeonAssist130", assistModel.refreshCostMoney), (bool isOk) => { if (isOk) { ulong haveGold = UIHelper.GetMoneyCnt(1); if (haveGold >= (ulong)assistModel.refreshCostMoney) { assistModel.SendAssistRefresh(); } else { WindowCenter.Instance.Open(); } } }); } else { assistModel.SendAssistRefresh(); } } else { return; } } StartCoroutine(DelayRefreshTime()); } IEnumerator DelayRefreshTime() { yield return new WaitForSeconds(0.5f); isRefresh = true; } } }