using System; using System.Collections.Generic; using UnityEngine; public class PhantasmPavilionModelWin : UIBase { [SerializeField] float modelSize; [SerializeField] float lhSize; [SerializeField] ButtonEx btnAllAdd; [Header("二级标签页")] [SerializeField] GroupButtonEx btnTabType1; [SerializeField] GroupButtonEx btnTabType2; [Header("选中项展示")] //当前气泡 [SerializeField] Transform lhframe; [SerializeField] UIHeroController heroIh; [SerializeField] UIHeroController heroModel; [SerializeField] UIEffectPlayer heroAddStar; [Header("属性展示")] [SerializeField] TextEx txtName; [SerializeField] TextEx txtGetWayString; [SerializeField] TextEx txtAddInfo; [SerializeField] TextEx txtUnLockInfo; [SerializeField] TextEx txtNoInfo; [SerializeField] ScrollerController scrInfo; [Header("滚动列表")] [SerializeField] ScrollerController scrModel; [Header("按钮")] [SerializeField] PhantasmPavilionUnlockButton btnUnlock; [SerializeField] PhantasmPavilionUnlockButton btnUnlock1; [SerializeField] PhantasmPavilionPutOnButton btnPutOn1; [SerializeField] PhantasmPavilionPutOnButton btnPutOn2; [SerializeField] PhantasmPavilionPutOnButton btnPutOn3; [SerializeField] PhantasmPavilionAddStarButton btnAddStar; [SerializeField] TextEx txtRemainingTime1; [SerializeField] TextEx txtRemainingTime2; PhantasmPavilionManager manager { get { return PhantasmPavilionManager.Instance; } } protected override void InitComponent() { base.InitComponent(); btnTabType1.AddListener(() => { SelectTeamFunc(PhantasmPavilionType.Model, 0); }); btnTabType2.AddListener(() => { SelectTeamFunc(PhantasmPavilionType.Model, 1); }); btnAllAdd.AddListener(() => { AttributeManager.Instance.OpenTotalAttributeWin(manager.GetTotalAttr()); }); } protected override void OnPreOpen() { base.OnPreOpen(); scrInfo.OnRefreshCell += OnRefreshInfoCell; scrModel.OnRefreshCell += OnRefreshModelCell; manager.OnSelectItemIdChange += OnSelectItemIdChange; PackManager.Instance.RefreshItemEvent += OnRefreshItemEvent; GlobalTimeEvent.Instance.secondEvent += OnSecondEvent; PlayerDatas.Instance.playerDataRefreshEvent += OnPlayerDataRefreshEvent; manager.OnUpdateModelInfoEvent += OnUpdateModelInfoEvent; manager.OnTimeOut += OnTimeOut; manager.OnUpdateModelStarAdd += OnUpdateModelStarAdd; InitRedPoint(); TabSetActive(); SelectTiltleBtn(); } protected override void OnPreClose() { base.OnPreClose(); scrInfo.OnRefreshCell -= OnRefreshInfoCell; scrModel.OnRefreshCell -= OnRefreshModelCell; manager.OnSelectItemIdChange -= OnSelectItemIdChange; PackManager.Instance.RefreshItemEvent -= OnRefreshItemEvent; GlobalTimeEvent.Instance.secondEvent -= OnSecondEvent; PlayerDatas.Instance.playerDataRefreshEvent -= OnPlayerDataRefreshEvent; manager.OnUpdateModelInfoEvent -= OnUpdateModelInfoEvent; manager.OnTimeOut -= OnTimeOut; manager.OnUpdateModelStarAdd -= OnUpdateModelStarAdd; } private void OnTimeOut() { RefreshAll(manager.nowType, functionOrder + 1); } private void OnUpdateModelInfoEvent() { RefreshAll(manager.nowType, functionOrder + 1); } private void OnUpdateModelStarAdd() { heroAddStar.Play(); } void InitRedPoint() { btnTabType1.redpoint.redpointId = manager.GetRedpointId(PhantasmPavilionRepointType.ModelNormal); btnTabType2.redpoint.redpointId = manager.GetRedpointId(PhantasmPavilionRepointType.ModelEvent); } void SelectTiltleBtn() { functionOrder = 0; btnTabType1.SelectBtn(); SelectTeamFunc(PhantasmPavilionType.Model, 0); } void SelectTeamFunc(PhantasmPavilionType type, int order) { manager.SetSelectItemId(type, order + 1); manager.nowType = type; functionOrder = order; CreateAll(); } private void OnPlayerDataRefreshEvent(PlayerDataType type) { if (type != PlayerDataType.ModelMark) return; RefreshAll(manager.nowType, functionOrder + 1, false); } private void OnSecondEvent() { bool isLimitedTime = manager.IsLimitTime(manager.nowType, manager.selectId); if (isLimitedTime) { UpdateTimer(manager.nowType, manager.selectId); } } private void OnRefreshItemEvent(PackType type, int arg2, int arg3) { if (type != PackType.Item) return; DisplayButton(manager.nowType, manager.selectId); } private void OnSelectItemIdChange(int id) { RefreshAll(manager.nowType, functionOrder + 1, false); } private void RefreshAll(PhantasmPavilionType type, int tabType, bool isJump = true) { scrModel.m_Scorller.RefreshActiveCellViews(); if (isJump) { scrModel.JumpIndex(manager.GetJumpIndex(type, tabType)); } CreateInfoScroller(); DisplayButton(type, manager.selectId); DisplayInfo(type, manager.selectId); } void CreateAll() { CreateModelScroller(); CreateInfoScroller(); DisplayButton(manager.nowType, manager.selectId); DisplayInfo(manager.nowType, manager.selectId); } private void OnRefreshInfoCell(ScrollerDataType type, CellView cell) { var _cell = cell.GetComponent(); _cell?.Display(cell.index, cell); } private void OnRefreshModelCell(ScrollerDataType type, CellView cell) { var _cell = cell.GetComponent(); _cell?.Display(cell.index, cell); } public void DisplayInfo(PhantasmPavilionType type, int id) { if (!ModelConfig.HasKey(id)) return; ModelConfig model = ModelConfig.Get(id); int skinID = model.SkinID; lhframe.transform.localScale = new Vector3(lhSize, lhSize, lhSize); heroIh.Create(skinID, motionName: "", isLh: true); heroModel.Create(skinID, modelSize); PhantasmPavilionState state = manager.GetUnLockState(type, id); bool isCanStarAdd = manager.HasStarAddAttr(type, id); string name = manager.GetName(type, id); if (isCanStarAdd && manager.TryGetInfo(type, id, out var info) && state == PhantasmPavilionState.Activated && info.Star > 0) { txtName.text = StringUtility.Contact(name, " ", Language.Get("L1113", info.Star)); } else { txtName.text = name; } txtGetWayString.text = Language.Get("PhantasmPavilion06", manager.GetGetWayString(type, id)); bool isHasAttr = manager.HasInitAttr(type, id); // 是否有解锁属性 txtAddInfo.SetActive(state == PhantasmPavilionState.Activated); txtUnLockInfo.SetActive(state != PhantasmPavilionState.Activated); txtNoInfo.SetActive(!isHasAttr); CreateInfoScroller(); } public void DisplayButton(PhantasmPavilionType type, int id) { PhantasmPavilionState state = manager.GetUnLockState(type, id); bool isCanStarAdd = manager.HasStarAddAttr(type, id); bool hasLimitTimeShow = manager.TryGetLimitTimeShow(type, id, out int remainingSeconds); int unlockWay = manager.GetUnlockWay(type, id); btnUnlock.SetActive(state != PhantasmPavilionState.Activated && unlockWay == 2); btnUnlock1.SetActive(state != PhantasmPavilionState.Activated && unlockWay != 2); btnAddStar.SetActive(state == PhantasmPavilionState.Activated && isCanStarAdd); btnPutOn2.SetActive(state == PhantasmPavilionState.Activated && isCanStarAdd); btnPutOn1.SetActive(state == PhantasmPavilionState.Activated && !isCanStarAdd && hasLimitTimeShow); btnPutOn3.SetActive(state == PhantasmPavilionState.Activated && !isCanStarAdd && !hasLimitTimeShow); btnUnlock1.Display(id); btnUnlock.Display(id); btnAddStar.Display(id); btnPutOn1.Display(id); btnPutOn2.Display(id); btnPutOn3.Display(id); UpdateTimer(type, id); } private void CreateInfoScroller() { PhantasmPavilionType type = manager.nowType; int id = manager.selectId; if (!manager.Has(type, id)) return; scrInfo.Refresh(); int[] attrIDList = manager.GetAttrIDList(type, id); int[] initAttrValueList = manager.GetInitAttrValueList(type, id); if (!attrIDList.IsNullOrEmpty() && !initAttrValueList.IsNullOrEmpty() && attrIDList.Length == initAttrValueList.Length) { for (int i = 0; i < attrIDList.Length; i++) { CellInfo cellInfo = new CellInfo(); cellInfo.infoInt1 = id; scrInfo.AddCell(ScrollerDataType.Header, i, cellInfo); } } scrInfo.Restart(); } public void TabSetActive() { var list = manager.ShowItemList(PhantasmPavilionType.Model, 1); btnTabType1.SetActive(!list.IsNullOrEmpty()); list = manager.ShowItemList(PhantasmPavilionType.Model, 2); btnTabType2.SetActive(!list.IsNullOrEmpty()); } private void CreateModelScroller() { PhantasmPavilionType type = PhantasmPavilionType.Model; scrModel.Refresh(); int tabType = functionOrder + 1; List showItemList = manager.ShowItemList(PhantasmPavilionType.Model, tabType); if (!showItemList.IsNullOrEmpty() && manager.TryGetRowCountMax(type, out int rowCountMax)) { int rowCount = (int)Math.Ceiling((double)showItemList.Count / rowCountMax); for (int i = 0; i < rowCount; i++) { CellInfo cellInfo = new CellInfo(); cellInfo.infoInt1 = tabType; scrModel.AddCell(ScrollerDataType.Header, i, cellInfo); } } scrModel.Restart(); scrModel.JumpIndex(manager.GetJumpIndex(type, tabType)); } public void UpdateTimer(PhantasmPavilionType type, int id) { bool hasLimitTimeShow = manager.TryGetLimitTimeShow(type, id, out int remainingSeconds); if (!hasLimitTimeShow) { txtRemainingTime1.SetActive(false); txtRemainingTime2.SetActive(false); return; } bool isCanStarAdd = manager.HasStarAddAttr(type, id); txtRemainingTime1.SetActive(hasLimitTimeShow && !isCanStarAdd); txtRemainingTime2.SetActive(hasLimitTimeShow && isCanStarAdd); if (remainingSeconds > 0) { string countdownText = TimeUtility.SecondsToShortDHMS(remainingSeconds); txtRemainingTime1.text = Language.Get("PhantasmPavilion10", UIHelper.AppendColor(TextColType.DarkGreen, countdownText)); txtRemainingTime2.text = Language.Get("PhantasmPavilion10", UIHelper.AppendColor(TextColType.DarkGreen, countdownText)); } } }