using System; using System.Collections.Generic; using UnityEngine; public class PhantasmPavilionTitleWin : UIBase { [SerializeField] ButtonEx btnAllAdd; [Header("二级标签页")] [SerializeField] GroupButtonEx btnTabType1; [SerializeField] GroupButtonEx btnTabType2; [Header("选中项展示")] //当前气泡 [SerializeField] ImageEx imgNowChatBox; [SerializeField] UIFrame uiFrameNowChatBox; [SerializeField] UIEffectPlayer UIEffectPlayerNowChatBox; [Header("属性展示")] [SerializeField] TextEx txtName; [SerializeField] TextEx txtGetWayString; [SerializeField] TextEx txtAddInfo; [SerializeField] TextEx txtUnLockInfo; [SerializeField] TextEx txtNoInfo; [SerializeField] ScrollerController scrInfo; [Header("滚动列表")] [SerializeField] ScrollerController scrTitle; [Header("按钮")] [SerializeField] PhantasmPavilionUnlockButton btnUnlock; [SerializeField] PhantasmPavilionUnlockButton btnUnlock1; [SerializeField] PhantasmPavilionPutOnButton btnPutOn1; [SerializeField] PhantasmPavilionPutOnButton btnPutOn2; [SerializeField] PhantasmPavilionPutOnButton btnPutOn3; [SerializeField] PhantasmPavilionAddStarButton btnAddStar; [SerializeField] ButtonEx btnTakeOff1; [SerializeField] ButtonEx btnTakeOff2; [SerializeField] ButtonEx btnTakeOff3; [SerializeField] TextEx txtRemainingTime1; [SerializeField] TextEx txtRemainingTime2; int nowTabType = 0; // 0-皇宫 1-活动 PhantasmPavilionManager manager { get { return PhantasmPavilionManager.Instance; } } protected override void InitComponent() { base.InitComponent(); btnTakeOff1.AddListener(() => { manager.SendOPPack(PhantasmPavilionType.Title, PhantasmPavilionOperation.Remove, (uint)manager.selectId); }); btnTakeOff2.AddListener(() => { manager.SendOPPack(PhantasmPavilionType.Title, PhantasmPavilionOperation.Remove, (uint)manager.selectId); }); btnTakeOff3.AddListener(() => { manager.SendOPPack(PhantasmPavilionType.Title, PhantasmPavilionOperation.Remove, (uint)manager.selectId); }); btnTabType1.AddListener(() => { SelectTeamFunc(PhantasmPavilionType.Title, 0); }); btnTabType2.AddListener(() => { SelectTeamFunc(PhantasmPavilionType.Title, 1); }); btnAllAdd.AddListener(() => { AttributeManager.Instance.OpenTotalAttributeWin(manager.GetTotalAttr()); }); } protected override void OnPreOpen() { base.OnPreOpen(); scrInfo.OnRefreshCell += OnRefreshInfoCell; scrTitle.OnRefreshCell += OnRefreshTitleCell; manager.OnSelectItemIdChange += OnSelectItemIdChange; PackManager.Instance.RefreshItemEvent += OnRefreshItemEvent; GlobalTimeEvent.Instance.secondEvent += OnSecondEvent; PlayerDatas.Instance.playerDataRefreshEvent += OnPlayerDataRefreshEvent; manager.OnUpdateTitleInfoEvent += OnUpdateTitleInfoEvent; manager.OnTimeOut += OnTimeOut; InitRedPoint(); TabSetActive(); SelectTiltleBtn(); txtName.SetActive(false); //称号名称与美术资源一体,不需要额外单独显示 } protected override void OnPreClose() { base.OnPreClose(); scrInfo.OnRefreshCell -= OnRefreshInfoCell; scrTitle.OnRefreshCell -= OnRefreshTitleCell; manager.OnSelectItemIdChange -= OnSelectItemIdChange; PackManager.Instance.RefreshItemEvent -= OnRefreshItemEvent; GlobalTimeEvent.Instance.secondEvent -= OnSecondEvent; PlayerDatas.Instance.playerDataRefreshEvent -= OnPlayerDataRefreshEvent; manager.OnUpdateTitleInfoEvent -= OnUpdateTitleInfoEvent; manager.OnTimeOut -= OnTimeOut; } private void OnUpdateTitleInfoEvent() { RefreshAll(manager.nowType, functionOrder + 1); } private void OnTimeOut() { RefreshAll(manager.nowType, functionOrder + 1); } void InitRedPoint() { btnTabType1.redpoint.redpointId = manager.GetRedpointId(PhantasmPavilionRepointType.TitlePalace); btnTabType2.redpoint.redpointId = manager.GetRedpointId(PhantasmPavilionRepointType.TitleEvent); } void SelectTiltleBtn() { functionOrder = 0; btnTabType1.SelectBtn(); SelectTeamFunc(PhantasmPavilionType.Title, 0); } void SelectTeamFunc(PhantasmPavilionType type, int order) { manager.SetSelectItemId(type, order + 1); manager.nowType = type; functionOrder = order; CreateTitleScroller(); CreateAll(); } private void OnPlayerDataRefreshEvent(PlayerDataType type) { if (type != PlayerDataType.ExAttr3) 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) { // 卸下称号后,自动选中第一个物品 if (!manager.Has(type, manager.selectId)) { manager.SetSelectItemId(type, functionOrder + 1); } scrTitle.m_Scorller.RefreshActiveCellViews(); if (isJump) { scrTitle.JumpIndex(manager.GetJumpIndex(type, tabType)); } CreateInfoScroller(); DisplayButton(type, manager.selectId); DisplayInfo(type, manager.selectId); } void CreateAll() { CreateTitleScroller(); 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 OnRefreshTitleCell(ScrollerDataType type, CellView cell) { var _cell = cell.GetComponent(); _cell?.Display(cell.index, cell); } public void DisplayInfo(PhantasmPavilionType type, int id) { int resourceType = manager.GetResourceType(type, id); string resourceValue = manager.GetResourceValue(type, id); manager.Show(imgNowChatBox, UIEffectPlayerNowChatBox, uiFrameNowChatBox, resourceType, resourceValue); if (resourceType == 1) { imgNowChatBox.SetNativeSize(); } txtName.text = manager.GetName(type, id); txtGetWayString.text = Language.Get("PhantasmPavilion06", manager.GetGetWayString(type, id)); PhantasmPavilionState state = manager.GetUnLockState(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 isUsing = manager.IsUsing(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 && !isUsing); btnPutOn1.SetActive(state == PhantasmPavilionState.Activated && !isCanStarAdd && !isUsing && hasLimitTimeShow); btnPutOn3.SetActive(state == PhantasmPavilionState.Activated && !isCanStarAdd && !isUsing && !hasLimitTimeShow); btnTakeOff2.SetActive(state == PhantasmPavilionState.Activated && isCanStarAdd && isUsing); btnTakeOff1.SetActive(state == PhantasmPavilionState.Activated && !isCanStarAdd && isUsing && hasLimitTimeShow); btnTakeOff3.SetActive(state == PhantasmPavilionState.Activated && !isCanStarAdd && isUsing && !hasLimitTimeShow); btnUnlock.Display(id); btnUnlock1.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.Title, 1); btnTabType1.SetActive(!list.IsNullOrEmpty()); list = manager.ShowItemList(PhantasmPavilionType.Title, 2); btnTabType2.SetActive(!list.IsNullOrEmpty()); } private void CreateTitleScroller() { PhantasmPavilionType type = PhantasmPavilionType.Title; scrTitle.Refresh(); int tabType = functionOrder + 1; List showItemList = manager.ShowItemList(type, 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; scrTitle.AddCell(ScrollerDataType.Header, i, cellInfo); } } scrTitle.Restart(); int jumpIndex = manager.GetJumpIndex(type, tabType); scrTitle.JumpIndex(jumpIndex); } 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)); } } }