using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace vnxbqy.UI { 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; [SerializeField] Button m_AddFriend; [SerializeField] Button m_close; 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); m_close.AddListener(ClickOneKeyAssist); m_AddFriend.SetListener(OpenAddFriendWindow); } protected override void OnPreOpen() { assistModel.UpdataAssistPlayerListEvent += UpdateAssistPlayersList; assistModel.UpdataAssistPlayerEvent += UpdateAssistPlayerState; SetDisplay(); } protected override void OnAfterOpen() { WindowCenter.Instance.Open(); } private void OpenAddFriendWindow() { WindowCenter.Instance.Open(); } 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.SetActive(isFree); goldRefreshBtn.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 money = UIHelper.GetMoneyCnt(2); if (money < (ulong)assistModel.refreshCostMoney) { //WindowCenter.Instance.Open(); SysNotifyMgr.Instance.ShowTip("LackMoney", 2); } else { assistModel.SendAssistRefresh(); } } else { return; } } StartCoroutine(DelayRefreshTime()); } IEnumerator DelayRefreshTime() { yield return new WaitForSeconds(0.5f); isRefresh = true; } } }