using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class LineupRecommendWin : UIBase { [SerializeField] AvatarCell avatarCell; [SerializeField] Text txtPlayerName; [SerializeField] Text txtFightPoint; [SerializeField] OfficialTitleCell officialRankText; [SerializeField] ScrollerController scroller; LineupRecommendManager manager { get { return LineupRecommendManager.Instance; } } protected override void InitComponent() { base.InitComponent(); avatarCell.redpoint.redpointId = MainRedDot.PhantasmPavilionRepoint; avatarCell.button.SetListener(() => { UIManager.Instance.OpenWindow(); }); } protected override void OnPreOpen() { PlayerDatas.Instance.playerDataRefreshEvent += PlayerDataRefresh; scroller.OnRefreshCell += OnRefreshCell; scroller.OnGetDynamicSize += OnGetDynamicSize; manager.OnUpdateLineupRecommendInfoEvent += OnUpdateLineupRecommendInfoEvent; manager.OnUpdateSwitchOnOrOffEvent += OnUpdateSwitchOnOrOffEvent; manager.ClearOnList(); UpdatePlayerInfo(); scroller.lockType = EnhanceLockType.KeepVertical; CreateScoller(); int index = 0; manager.TryGetJumpIndex(out index); scroller.JumpIndex(index); } protected override void OnPreClose() { PlayerDatas.Instance.playerDataRefreshEvent -= PlayerDataRefresh; scroller.OnRefreshCell -= OnRefreshCell; scroller.OnGetDynamicSize -= OnGetDynamicSize; manager.OnUpdateLineupRecommendInfoEvent -= OnUpdateLineupRecommendInfoEvent; manager.OnUpdateSwitchOnOrOffEvent -= OnUpdateSwitchOnOrOffEvent; } private void OnUpdateSwitchOnOrOffEvent() { CreateScoller(); } private void OnUpdateLineupRecommendInfoEvent() { RefreshScoller(); } private void OnRefreshCell(ScrollerDataType type, CellView cell) { var _cell = cell.GetComponent(); _cell?.Display(cell.index); } private bool OnGetDynamicSize(ScrollerDataType type, int index, out float height) { height = 0; List sortShowList = manager.GetSortShowList(); if (index < 0 || index >= sortShowList.Count) return false; var id = sortShowList[index]; bool isOn = manager.IsOn(id); height = isOn ? 502 : 252; return true; } void PlayerDataRefresh(PlayerDataType type) { switch (type) { case PlayerDataType.FightPower: txtFightPoint.text = UIHelper.ReplaceLargeArtNum(PlayerDatas.Instance.baseData.FightPower); break; case PlayerDataType.RealmLevel: officialRankText.InitUI(PlayerDatas.Instance.baseData.realmLevel, PlayerDatas.Instance.baseData.TitleID); break; case PlayerDataType.Face: case PlayerDataType.FacePic: avatarCell.InitUI(AvatarHelper.GetAvatarModel((int)PlayerDatas.Instance.baseData.PlayerID, PlayerDatas.Instance.baseData.face, PlayerDatas.Instance.baseData.facePic)); break; case PlayerDataType.ExAttr3: officialRankText.InitUI(PlayerDatas.Instance.baseData.realmLevel, PlayerDatas.Instance.baseData.TitleID); break; } } void RefreshScoller() { scroller.m_Scorller.RefreshActiveCellViews(); } void CreateScoller() { scroller.Refresh(); var list = manager.GetSortShowList(); if (!list.IsNullOrEmpty()) { for (int i = 0; i < list.Count; i++) { scroller.AddCell(ScrollerDataType.Header, i); } } scroller.Restart(); } private void UpdatePlayerInfo() { // 从玩家数据中获取信息并更新UI avatarCell.InitUI(AvatarHelper.GetAvatarModel((int)PlayerDatas.Instance.baseData.PlayerID, PlayerDatas.Instance.baseData.face, PlayerDatas.Instance.baseData.facePic)); txtPlayerName.text = PlayerDatas.Instance.baseData.PlayerName; txtFightPoint.text = UIHelper.ReplaceLargeArtNum(PlayerDatas.Instance.baseData.FightPower); officialRankText.InitUI(PlayerDatas.Instance.baseData.realmLevel, PlayerDatas.Instance.baseData.TitleID); } }