using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class TianziBillboradWin : UIBase { [SerializeField] float modelSize; [SerializeField] ButtonEx btnClose; [SerializeField] ButtonEx btnRank; [SerializeField] ButtonEx btnAds; [SerializeField] ButtonEx btnChallenge1; [SerializeField] ButtonEx btnChallenge2; [SerializeField] ButtonEx btnSweep; [SerializeField] ImageEx imgChallengeRed1; [SerializeField] ImageEx imgChallengeRed2; [SerializeField] ImageEx imgSweepRed; [SerializeField] TextEx txtBossName; [SerializeField] UIHeroController bossModel; [SerializeField] UIEffectPlayer uiEffectPlayer; [SerializeField] List skillWords; [SerializeField] List possibleRewards; [SerializeField] TextEx txtTodayChallengeCount; [SerializeField] TextEx txtTodayAdsCount; [SerializeField] TextEx txtHistoryHurt; [SerializeField] TextEx txtTodayHurt; [SerializeField] List bossHeads; [SerializeField] RectTransform layoutGroupRect; TianziBillboradManager model { get { return TianziBillboradManager.Instance; } } DungeonManager dungeonModel { get { return DungeonManager.Instance; } } AdsManager adsModel { get { return AdsManager.Instance; } } TimeMgr timeModel { get { return TimeMgr.Instance; } } protected override void InitComponent() { base.InitComponent(); btnClose.SetListener(CloseWindow); btnRank.SetListener(() => { UIManager.Instance.OpenWindow(); }); btnAds.SetListener(() => { if (!model.TryGetADAwardConfigByMapId(model.DataMapID, out ADAwardConfig adAwardConfig)) return; adsModel.PlayAds(adAwardConfig.ADID); }); btnChallenge1.SetListener(OnClickChallenge); btnChallenge2.SetListener(OnClickChallenge); btnSweep.SetListener(() => { if (model.isSkipSweepTip) { int remainChallageCount = model.GetRemainChallageCount(); if (remainChallageCount <= 0) { SysNotifyMgr.Instance.ShowTip("TianziBillborad02"); return; } model.SendBBeginFBWipeOut(); } else { UIManager.Instance.OpenWindow(); } }); } void OnClickChallenge() { int remainChallageCount = model.GetRemainChallageCount(); if (remainChallageCount <= 0) { SysNotifyMgr.Instance.ShowTip("TianziBillborad01"); return; } BattleManager.Instance.SendTurnFight((uint)model.DataMapID, model.todayLineID); } protected override void OnPreOpen() { base.OnPreOpen(); model.UpdateTianziKYInfoExent += OnUpdateTianziKYInfoExent; dungeonModel.UpdateFBInfoListEvent += OnUpdateFBInfoListEvent; adsModel.OnAdsInfoListUpdateEvent += OnAdsInfoListUpdateEvent; timeModel.OnDayEvent += OnDayEvent; GlobalTimeEvent.Instance.secondEvent += OnSecondEvent; Display(); } protected override void OnPreClose() { base.OnPreClose(); model.UpdateTianziKYInfoExent -= OnUpdateTianziKYInfoExent; dungeonModel.UpdateFBInfoListEvent -= OnUpdateFBInfoListEvent; adsModel.OnAdsInfoListUpdateEvent -= OnAdsInfoListUpdateEvent; timeModel.OnDayEvent -= OnDayEvent; GlobalTimeEvent.Instance.secondEvent -= OnSecondEvent; } private void OnUpdateTianziKYInfoExent() { Display(); } private void OnSecondEvent() { if (bossHeads == null) return; foreach (var head in bossHeads) { if (head != null) { head.UpdateTimer(); } } } private void OnUpdateFBInfoListEvent(int mapID) { if (mapID != model.DataMapID) return; if (!model.TryGetADAwardConfigByMapId(model.DataMapID, out ADAwardConfig adAwardConfig)) return; Display(); } private void OnAdsInfoListUpdateEvent(int id, int type, int mapId) { if (mapId != model.DataMapID) return; if (!model.TryGetADAwardConfigByMapId(model.DataMapID, out ADAwardConfig adAwardConfig)) return; Display(); } private void OnDayEvent() { Display(); } public void Display() { if (!model.TryGetBossConfig(model.DataMapID, model.todayLineID, out DungeonConfig dungeonConfig, out NPCLineupConfig npcLineupConfig, out NPCConfig npcConfig)) return; if (!DungeonManager.Instance.TryGetFBInfoByMapID(model.DataMapID, out var fbInfo)) return; if (!model.TryGetADAwardConfigByMapId(model.DataMapID, out ADAwardConfig adAwardConfig)) return; DisplayFBInfo(npcConfig); DisplayButton(adAwardConfig, fbInfo); DisplaySkillWordsList(npcLineupConfig); DisplayItemCellList(possibleRewards, model.GetPossibleRewards(npcConfig.NPCID)); DisplayBossHeadList(bossHeads, model.GetBossIDList(model.DataMapID)); } private void DisplayButton(ADAwardConfig adAwardConfig, FBInfo fbInfo) { bool isTodayFirst = fbInfo.EnterCnt <= 0; btnChallenge2.SetActive(isTodayFirst); btnChallenge1.SetActive(!isTodayFirst); btnSweep.SetActive(!isTodayFirst); btnAds.SetActive(!isTodayFirst); if (!DungeonOpenTimeConfig.HasKey(model.DataMapID)) return; DungeonOpenTimeConfig dungeonOpenTimeConfig = DungeonOpenTimeConfig.Get(model.DataMapID); int remainChallageCount = model.GetRemainChallageCount(); int maxCount = dungeonOpenTimeConfig.DayTimes; txtTodayChallengeCount.text = UIHelper.AppendColor(remainChallageCount > 0 ? TextColType.Green : TextColType.Red, Language.Get("TianziBillborad03", remainChallageCount, maxCount)); imgChallengeRed1.SetActive(remainChallageCount > 0); imgChallengeRed2.SetActive(remainChallageCount > 0); imgSweepRed.SetActive(false); int adsCnt = AdsManager.Instance.GetADCntByADID(adAwardConfig.ADID); bool isShowAds = adsCnt < adAwardConfig.ADCntMax; int remainAdsCount = adAwardConfig.ADCntMax - adsCnt; btnAds.SetActive(!isTodayFirst && isShowAds); txtTodayAdsCount.text = UIHelper.AppendColor(isShowAds ? TextColType.Green : TextColType.Red, Language.Get("BoneField09", remainAdsCount, adAwardConfig.ADCntMax)); ; } private void DisplayFBInfo(NPCConfig npcConfig) { txtBossName.text = npcConfig.NPCName; uiEffectPlayer.Play(); bossModel.Create(npcConfig.SkinID, modelSize); txtHistoryHurt.text = Language.Get("TianziBillborad01", UIHelper.ReplaceLargeNum(model.historyHurt)); txtTodayHurt.text = Language.Get("TianziBillborad02", UIHelper.ReplaceLargeNum(model.todayHurt)); } public void DisplayItemCellList(List itemCells, int[][] items) { if (itemCells.IsNullOrEmpty() || items.IsNullOrEmpty()) return; for (int i = 0; i < itemCells.Count; i++) { if (i < items.Length) { int index = i; itemCells[i].SetActive(true); itemCells[i].Init(new ItemCellModel(items[i][0], true, items[i][1])); itemCells[i].button.SetListener(() => { ItemTipUtility.Show(items[index][0], true); }); } else { itemCells[i].SetActive(false); } } } public void DisplaySkillWordsList(NPCLineupConfig npcLineupConfig) { if (skillWords.IsNullOrEmpty()) return; for (int i = 0; i < skillWords.Count; i++) { if (i < npcLineupConfig.SkillIDExList.Length) { skillWords[i].SetActive(true); int skillID = npcLineupConfig.SkillIDExList[i]; skillWords[i].Init(skillID, () => { SmallTipWin.showText = Language.Get("SmallTipFomat", SkillConfig.Get(skillID)?.SkillName, SkillConfig.Get(skillID)?.Description); SmallTipWin.worldPos = CameraManager.uiCamera.ScreenToWorldPoint(Input.mousePosition); SmallTipWin.isDownShow = true; UIManager.Instance.OpenWindow(); }); } else { skillWords[i].SetActive(false); } } } public void DisplayBossHeadList(List heads, List bossIds) { if (heads.IsNullOrEmpty() || bossIds.IsNullOrEmpty()) return; for (int i = 0; i < heads.Count; i++) { if (i < bossIds.Count) { heads[i].SetActive(true); heads[i].Display(bossIds[i]); } else { heads[i].SetActive(false); } } ExecuteNextFrame(() => { if (this != null && gameObject.activeInHierarchy && !isClosing && layoutGroupRect != null) { LayoutRebuilder.ForceRebuildLayoutImmediate(layoutGroupRect); } }); } }