using System; using System.Collections.Generic; using UnityEngine; public class PhantasmPavilionFaceWin : UIBase { [SerializeField] ButtonEx btnAllAdd; [Header("二级标签页")] [SerializeField] GroupButtonEx btnFace; [SerializeField] GroupButtonEx btnFacePic; [SerializeField] GroupButtonEx btnChatBox; [Header("选中项展示")] [SerializeField] Transform transNowFace; [SerializeField] Transform transNowFacePic; [SerializeField] Transform transNowChatBox; // 当前头像 [SerializeField] EllipseMask maskNowFace; [SerializeField] ImageEx imgNowFaceBg; [SerializeField] ImageEx imgNowFace; [SerializeField] UIFrame uiFrameNowFace; [SerializeField] UIEffectPlayer effectPlayerNowFace; // 当前头像框 [SerializeField] ImageEx imgNowFacePicFaceBg; [SerializeField] EllipseMask maskNowFacePicFace; [SerializeField] ImageEx imgNowFacePicFace; [SerializeField] UIFrame uiFrameNowFacePicFace; [SerializeField] UIEffectPlayer UIEffectPlayerNowFacePicFace; [SerializeField] ImageEx imgNowFacePic; [SerializeField] UIFrame uiFrameNowFacePic; [SerializeField] UIEffectPlayer UIEffectPlayerNowFacePic; //当前气泡 [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 scrFace; [SerializeField] ScrollerController scrFacePic; [SerializeField] ScrollerController scrChatBox; [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(); btnFace.AddListener(() => { SelectTeamFunc(PhantasmPavilionType.Face, true); }); btnFacePic.AddListener(() => { SelectTeamFunc(PhantasmPavilionType.FacePic, true); }); btnChatBox.AddListener(() => { SelectTeamFunc(PhantasmPavilionType.ChatBox, true); }); btnAllAdd.AddListener(() => { AttributeManager.Instance.OpenTotalAttributeWin(manager.GetTotalAttr()); }); } protected override void OnPreOpen() { base.OnPreOpen(); scrInfo.OnRefreshCell += OnRefreshInfoCell; scrFace.OnRefreshCell += OnRefreshFaceCell; scrFacePic.OnRefreshCell += OnRefreshFacePicCell; scrChatBox.OnRefreshCell += OnRefreshChatBoxCell; manager.OnSelectItemIdChange += OnSelectItemIdChange; PackManager.Instance.RefreshItemEvent += OnRefreshItemEvent; GlobalTimeEvent.Instance.secondEvent += OnSecondEvent; PlayerDatas.Instance.playerDataRefreshEvent += OnPlayerDataRefreshEvent; manager.OnUpdateChatBoxInfoEvent += OnUpdateChatBoxInfoEvent; manager.OnUpdateFaceInfoEvent += OnUpdateFaceInfoEvent; manager.OnUpdateFacePicInfo += OnUpdateFacePicInfo; manager.OnTimeOut += OnTimeOut; InitRedPoint(); SelectTiltleBtn(); } protected override void OnPreClose() { base.OnPreClose(); scrInfo.OnRefreshCell -= OnRefreshInfoCell; scrFace.OnRefreshCell -= OnRefreshFaceCell; scrFacePic.OnRefreshCell -= OnRefreshFacePicCell; scrChatBox.OnRefreshCell -= OnRefreshChatBoxCell; manager.OnSelectItemIdChange -= OnSelectItemIdChange; PackManager.Instance.RefreshItemEvent -= OnRefreshItemEvent; GlobalTimeEvent.Instance.secondEvent -= OnSecondEvent; PlayerDatas.Instance.playerDataRefreshEvent -= OnPlayerDataRefreshEvent; manager.OnUpdateChatBoxInfoEvent -= OnUpdateChatBoxInfoEvent; manager.OnUpdateFaceInfoEvent -= OnUpdateFaceInfoEvent; manager.OnUpdateFacePicInfo -= OnUpdateFacePicInfo; manager.OnTimeOut -= OnTimeOut; manager.RemoveAllNewHeroByTabType(PhantasmPavilionType.Face, functionOrder + 1); manager.UpdateRedPoint(); } private void OnTimeOut() { RefreshAll(manager.nowType); } private void OnUpdateFacePicInfo() { RefreshAll(manager.nowType); } private void OnUpdateFaceInfoEvent() { RefreshAll(manager.nowType); } private void OnUpdateChatBoxInfoEvent() { RefreshAll(manager.nowType); } void InitRedPoint() { btnFace.redpoint.redpointId = manager.GetRedpointId(PhantasmPavilionRepointType.FaceAvatar); btnFacePic.redpoint.redpointId = manager.GetRedpointId(PhantasmPavilionRepointType.FaceFrame); btnChatBox.redpoint.redpointId = manager.GetRedpointId(PhantasmPavilionRepointType.FaceBubble); } void SelectTiltleBtn() { if (functionOrder == 0) { btnFace.SelectBtn(); SelectTeamFunc(PhantasmPavilionType.Face); } else if (functionOrder == 1) { btnFacePic.SelectBtn(); SelectTeamFunc(PhantasmPavilionType.FacePic); } else if (functionOrder == 2) { btnChatBox.SelectBtn(); SelectTeamFunc(PhantasmPavilionType.ChatBox); } } void SelectTeamFunc(PhantasmPavilionType type, bool isRemove = false) { manager.SetSelectItemId(type); if (isRemove) { manager.RemoveAllNewHeroByTabType(manager.nowType); manager.UpdateRedPoint(); RefreshAll(manager.nowType, false); } manager.nowType = type; CreateAll(type); } private void OnPlayerDataRefreshEvent(PlayerDataType type) { switch (type) { case PlayerDataType.Face: case PlayerDataType.FacePic: case PlayerDataType.ExAttr10: RefreshAll(manager.nowType, false); break; } } 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, false); } private void RefreshAll(PhantasmPavilionType type, bool isJump = true) { switch (type) { case PhantasmPavilionType.Face: scrFace.m_Scorller.RefreshActiveCellViews(); if (isJump) { scrFace.JumpIndex(manager.GetJumpIndex(type)); } break; case PhantasmPavilionType.FacePic: scrFacePic.m_Scorller.RefreshActiveCellViews(); if (isJump) { scrFacePic.JumpIndex(manager.GetJumpIndex(type)); } break; case PhantasmPavilionType.ChatBox: scrChatBox.m_Scorller.RefreshActiveCellViews(); if (isJump) { scrChatBox.JumpIndex(manager.GetJumpIndex(type)); } break; } CreateInfoScroller(); DisplayButton(type, manager.selectId); DisplayInfo(type, manager.selectId); } void CreateAll(PhantasmPavilionType type) { transNowFace.SetActive(type == PhantasmPavilionType.Face); transNowFacePic.SetActive(type == PhantasmPavilionType.FacePic); transNowChatBox.SetActive(type == PhantasmPavilionType.ChatBox); scrFace.SetActive(type == PhantasmPavilionType.Face); scrFacePic.SetActive(type == PhantasmPavilionType.FacePic); scrChatBox.SetActive(type == PhantasmPavilionType.ChatBox); switch (type) { case PhantasmPavilionType.Face: CreateFaceScroller(); break; case PhantasmPavilionType.FacePic: CreateFacePicScroller(); break; case PhantasmPavilionType.ChatBox: CreateChatBoxScroller(); break; } 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 OnRefreshFaceCell(ScrollerDataType type, CellView cell) { var _cell = cell.GetComponent(); _cell?.Display(cell.index); } private void OnRefreshFacePicCell(ScrollerDataType type, CellView cell) { var _cell = cell.GetComponent(); _cell?.Display(cell.index); } private void OnRefreshChatBoxCell(ScrollerDataType type, CellView cell) { var _cell = cell.GetComponent(); _cell?.Display(cell.index); } public void DisplayInfo(PhantasmPavilionType type, int id) { int resourceType = manager.GetResourceType(type, id); string resourceValue = manager.GetResourceValue(type, id); string str = AvatarHelper.GetAvatarBgColorStr(id); switch (type) { case PhantasmPavilionType.Face: manager.ShowFace(imgNowFace, effectPlayerNowFace, uiFrameNowFace, maskNowFace, id); imgNowFaceBg.SetSprite(str); if (resourceType == 1) { imgNowFace.SetNativeSize(); } break; case PhantasmPavilionType.FacePic: if (!manager.TryGetNowShowID(PhantasmPavilionType.Face, out int faceID)) return; manager.ShowFace(imgNowFacePicFace, UIEffectPlayerNowFacePicFace, uiFrameNowFacePicFace, maskNowFacePicFace, faceID); str = AvatarHelper.GetAvatarBgColorStr(faceID); imgNowFacePicFaceBg.SetSprite(str); manager.Show(imgNowFacePic, UIEffectPlayerNowFacePic, uiFrameNowFacePic, resourceType, resourceValue); if (resourceType == 1) { imgNowFacePicFace.SetNativeSize(); imgNowFacePic.SetNativeSize(); } break; case PhantasmPavilionType.ChatBox: manager.Show(imgNowChatBox, UIEffectPlayerNowChatBox, uiFrameNowChatBox, resourceType, resourceValue); if (resourceType == 1) { imgNowChatBox.SetNativeSize(); } break; } 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 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(); } private void CreateFaceScroller() { PhantasmPavilionType type = PhantasmPavilionType.Face; scrFace.Refresh(); List showItemList = manager.ShowItemList(type); 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++) { scrFace.AddCell(ScrollerDataType.Header, i); } } scrFace.Restart(); int jumpIndex = manager.GetJumpIndex(type); scrFace.JumpIndex(jumpIndex); } private void CreateFacePicScroller() { PhantasmPavilionType type = PhantasmPavilionType.FacePic; scrFacePic.Refresh(); List showItemList = manager.ShowItemList(type); 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++) { scrFacePic.AddCell(ScrollerDataType.Header, i); } } scrFacePic.Restart(); int jumpIndex = manager.GetJumpIndex(type); scrFacePic.JumpIndex(jumpIndex); } private void CreateChatBoxScroller() { PhantasmPavilionType type = PhantasmPavilionType.ChatBox; scrChatBox.Refresh(); List showItemList = manager.ShowItemList(type); 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++) { scrChatBox.AddCell(ScrollerDataType.Header, i); } } scrChatBox.Restart(); int jumpIndex = manager.GetJumpIndex(type); scrChatBox.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)); } } }