Main/Component/UI/Effect/EffectPlayer.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Main/System/BillboardRank/PlayerRankCell.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Main/System/BillboardRank/PlayerRankCell.cs.meta | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Main/System/BillboardRank/PlayerRankWin.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Main/System/BillboardRank/PlayerRankWin.cs.meta | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Main/System/BillboardRank/PlayerTop3Cell.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Main/System/BillboardRank/PlayerTop3Cell.cs.meta | 补丁 | 查看 | 原始文档 | blame | 历史 | |
Main/System/BillboardRank/RankModel.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Main/System/BillboardRank/Top3Cell.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Main/System/Boss/MainBossEnterWin.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Main/System/Boss/MainBossRankWin.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
Main/Component/UI/Effect/EffectPlayer.cs
@@ -10,9 +10,9 @@ public float destroyDelay = 0f; public Canvas canvas = null; [HideInInspector] public Canvas canvas = null; public GameObject effectTarget = null; [HideInInspector] public GameObject effectTarget = null; protected void Start() { @@ -47,7 +47,7 @@ // 实例化特效 effectTarget = Instantiate(effectPrefab, transform); effectTarget.name = $"Effect_{effectCfg.packageName}"; effectTarget.name = $"Effect_{effectCfg.fxName}"; if (null == canvas) canvas = GetComponentInParent<Canvas>(); Main/System/BillboardRank/PlayerRankCell.cs
New file @@ -0,0 +1,75 @@ //-------------------------------------------------------- // [Author]: 玩个游戏 // [ Date ]: Wednesday, September 26, 2018 //-------------------------------------------------------- using UnityEngine; using UnityEngine.UI; //玩家通用排名 public class PlayerRankCell : MonoBehaviour { [SerializeField] AvatarCell avatarCell; [SerializeField] Text rankText; [SerializeField] Text rankValueText; //排名比较内容 [SerializeField] Text nameText; [SerializeField] OfficialTitleCell officialTitleCell; [SerializeField] Button queryPlayerBtn; //后续添加点击查看玩家详情 // rank 为0 代表玩家自己 public void Display(int rankType, int rank, string valueFormat) { RankData rankData = null; if (rank != 0) { rankData = RankModel.Instance.GetRankDataByRank(rankType, rank); } else { rankData = RankModel.Instance.GetMyRank(rankType); if (rankData == null) { //取玩家自己的数据 avatarCell.InitUI(AvatarHelper.GetAvatarModel((int)PlayerDatas.Instance.baseData.PlayerID, PlayerDatas.Instance.baseData.face, PlayerDatas.Instance.baseData.facePic)); rankText.text = Language.Get("L1045"); rankValueText.text = valueFormat; nameText.text = PlayerDatas.Instance.baseData.PlayerName; officialTitleCell.InitUI(PlayerDatas.Instance.baseData.realmLevel, PlayerDatas.Instance.baseData.TitleID); return; } rank = rankData.rank; } if (rankData == null) { officialTitleCell.SetActive(false); avatarCell.SetActive(false); nameText.text = Language.Get("L1124"); rankValueText.text = "0";//Language.Get("L1125"); } else { officialTitleCell.SetActive(true); officialTitleCell.InitUI((int)rankData.value1, (int)rankData.value2); avatarCell.SetActive(true); avatarCell.InitUI(AvatarHelper.GetAvatarModel((int)rankData.id, (int)rankData.value3, (int)rankData.value4)); nameText.text = rankData.name1; rankValueText.text = string.Format(valueFormat, rankData.cmpValue, rankData.cmpValue2, rankData.cmpValue3); } rankText.text = rank.ToString(); if (queryPlayerBtn != null) { queryPlayerBtn.AddListener(() => { }); } } } Main/System/BillboardRank/PlayerRankCell.cs.meta
File was renamed from Main/System/Boss/MainBossRankWin.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 guid: 7e7e900f52142524a9ffc5db6c48c478 guid: 82782c30954476f409ed7ba5a4b12285 MonoImporter: externalObjects: {} serializedVersion: 2 Main/System/BillboardRank/PlayerRankWin.cs
New file @@ -0,0 +1,111 @@ //-------------------------------------------------------- // [Author]: 玩个游戏 // [ Date ]: Tuesday, July 24, 2018 //-------------------------------------------------------- using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; //通用玩家个人排行榜 public class PlayerRankWin : UIBase { [SerializeField] List<PlayerTop3Cell> playerTop3Cells; [SerializeField] ScrollerController scrollerController; [SerializeField] Text cmpStrText; //排行榜排名内容,如战力,通过层数等 [SerializeField] PlayerRankCell myRankCell; [SerializeField] Button btnClose; [HideInInspector] public int rankType; [HideInInspector] public string valueFormat = "{0}"; [HideInInspector] public int groupValue1 = 0; //一般用于跨服 [HideInInspector] public int groupValue2 = 0; //一般用于跨服 protected override void InitComponent() { btnClose.AddListener(()=> { CloseWindow(); }); } protected override void NextFrameAfterOpen() { RankModel.Instance.onRankRefresh += OnRankRefresh; RankModel.Instance.onMyRankRefresh += OnMyRankRefresh; scrollerController.OnRefreshCell += OnRefreshCell; Refresh(); } protected override void OnPreClose() { RankModel.Instance.onRankRefresh -= OnRankRefresh; RankModel.Instance.onMyRankRefresh -= OnMyRankRefresh; scrollerController.OnRefreshCell -= OnRefreshCell; } protected override void OnClose() { base.OnClose(); } public override void Refresh() { cmpStrText.text = Language.Get("RankTypeName_" + rankType); ShowTop3(); CreateScroller(); ShowMyRank(); } void CreateScroller() { scrollerController.Refresh(); var cnt = RankModel.Instance.GetRankShowMaxCnt(rankType); for (int i = 3; i < cnt; i++) { scrollerController.AddCell(ScrollerDataType.Header, i); } } void OnRefreshCell(ScrollerDataType type, CellView cell) { var _cell = cell.GetComponent<PlayerRankCell>(); _cell.Display(rankType, cell.index + 1, valueFormat); RankModel.Instance.ListenRankPage(rankType, cell.index, groupValue1, groupValue2); } void ShowTop3() { for (int i = 0; i < playerTop3Cells.Count; i++) { playerTop3Cells[i].Display(functionOrder, i + 1); } } void ShowMyRank() { myRankCell.Display(rankType, 0, valueFormat); } void OnRankRefresh(int type) { ShowTop3(); scrollerController.m_Scorller.RefreshActiveCellViews(); } void OnMyRankRefresh(int type) { ShowMyRank(); } } Main/System/BillboardRank/PlayerRankWin.cs.metacopy from Main/System/Boss/MainBossRankWin.cs.meta copy to Main/System/BillboardRank/PlayerRankWin.cs.meta
File was copied from Main/System/Boss/MainBossRankWin.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 guid: 7e7e900f52142524a9ffc5db6c48c478 guid: 9c456f61d9549794896a813f4f3d4247 MonoImporter: externalObjects: {} serializedVersion: 2 Main/System/BillboardRank/PlayerTop3Cell.cs
New file @@ -0,0 +1,38 @@ //-------------------------------------------------------- // [Author]: 玩个游戏 // [ Date ]: Wednesday, September 26, 2018 //-------------------------------------------------------- using UnityEngine; using UnityEngine.UI; //玩家通用的前3排名 public class PlayerTop3Cell : MonoBehaviour { //[SerializeField] Model 显示NPC 武将模型 [SerializeField] Text rankValueText; //排名比较内容 [SerializeField] Text nameText; [SerializeField] OfficialTitleCell officialTitleCell; [SerializeField] Button queryPlayerBtn; //后续添加点击查看玩家详情 public void Display(int rankType, int rank, string valueFormat = "{0}") { var rankData = RankModel.Instance.GetRankDataByRank(rankType, rank); if (rankData == null) { rankValueText.text = "0";//Language.Get("L1125"); nameText.text = Language.Get("L1124"); officialTitleCell.SetActive(false); return; } officialTitleCell.SetActive(true); rankValueText.text = string.Format(valueFormat, rankData.cmpValue, rankData.cmpValue2, rankData.cmpValue3); nameText.text = rankData.name1; officialTitleCell.InitUI((int)rankData.value1, (int)rankData.value2); } } Main/System/BillboardRank/PlayerTop3Cell.cs.meta
Main/System/BillboardRank/RankModel.cs
@@ -1,5 +1,4 @@ using System; using System.Collections; using System.Collections.Generic; using UnityEngine; @@ -9,9 +8,32 @@ public event Action<int> onRankRefresh; public event Action<int> onMyRankRefresh; //排行榜滚动显示的最大数量 类型 Dictionary<int, int> ranksShowMaxCnt = new Dictionary<int, int>(); //分页查询 Dictionary<int, int> queryRankCD = new Dictionary<int, int>(); //首次查询CD,不影响后续的分页查询 //分页查询 排名索引按字段存储 1代表第一名 Dictionary<int, Dictionary<int, RankData>> m_RankPageDatas = new Dictionary<int, Dictionary<int, RankData>>(); //类型:ID -排名索引,通过ID进行排重删除 不同名次 同ID的数据 Dictionary<int, Dictionary<int, int>> m_RankIDToIndex = new Dictionary<int, Dictionary<int, int>>(); Action completeEvent = null; //查询完成事件 //监听排行榜显示名次,用于分页查询,第一页查询由外部触发 //使用场景 如界面排行榜滚动的时候每次查询30个排名名额,在显示大于m*30 +20名时,监听下一页,查询m+1页 int pageCnt = 20; //每页查询条数 int queryPointNum = 12; //查询点 int queryPageCD = 60; //内部查询点CD 避免不断上下滑动的时候过于频繁查询,外部使用重新打开的时候可以重置CD Dictionary<int, float> queryPageTimes = new Dictionary<int, float>(); //查询页CD Dictionary<int, int> ranksServerMaxCnt = new Dictionary<int, int>(); //服务器排行榜当前总数量(动态变化),分页查询的时候过滤用 public override void Init() { DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += OnBeforePlayerDataInitialize; ParseConfig(); } public void OnBeforePlayerDataInitialize() @@ -19,6 +41,21 @@ m_RankPageDatas.Clear(); m_RankIDToIndex.Clear(); queryRankCD.Clear(); } void ParseConfig() { var config = FuncConfigConfig.Get("BillboardSet"); ranksShowMaxCnt = ConfigParse.ParseIntDict(config.Numerical3); } public int GetRankShowMaxCnt(int type) { if (ranksShowMaxCnt.ContainsKey(type)) { return ranksShowMaxCnt[type]; } return 100; } public override void Release() @@ -53,11 +90,6 @@ #region 分页查询 Dictionary<int, int> queryRankCD = new Dictionary<int, int>(); //首次查询CD,不影响后续的分页查询 //分页查询 排名索引按字段存储 1代表第一名 Dictionary<int, Dictionary<int, RankData>> m_RankPageDatas = new Dictionary<int, Dictionary<int, RankData>>(); //类型:ID -排名索引,通过ID进行排重删除 不同名次 同ID的数据 Dictionary<int, Dictionary<int, int>> m_RankIDToIndex = new Dictionary<int, Dictionary<int, int>>(); //!!!本服分页查询使用说明 @@ -66,12 +98,15 @@ // // startIndex 和 count 配对,与watchID无关联 // watchID; //查看指定ID名次前后,查询范围服务端已固定,如果只要查指定目标,count可以设置1减少附加信息 public void QueryRankByPage(int type, int startIndex = 0, int count = 20, int watchID = 0, bool forceQuery = false, int groupValue1 = 0, int groupValue2 = 0) public void QueryRankByPage(int type, int startIndex = 0, int count = 20, int watchID = 0, bool forceQuery = false, int groupValue1 = 0, int groupValue2 = 0, Action complete = null) { completeEvent = complete; if (queryRankCD.ContainsKey(type) && !forceQuery) { if (Time.time - queryRankCD[type] < 2f) { completeEvent?.Invoke(); completeEvent = null; return; } } @@ -88,12 +123,7 @@ queryRankCD[type] = (int)Time.time; } //监听排行榜显示名次,用于分页查询,第一页查询由外部触发 //使用场景 如界面排行榜滚动的时候每次查询30个排名名额,在显示大于m*30 +20名时,监听下一页,查询m+1页 int pageCnt = 20; //每页查询条数 int queryPointNum = 12; //查询点 int queryPageCD = 60; //内部查询点CD 避免不断上下滑动的时候过于频繁查询,外部使用重新打开的时候可以重置CD Dictionary<int, float> queryPageTimes = new Dictionary<int, float>(); //查询页CD public void ListenRankPage(int type, int index, int groupValue1 = 0, int groupValue2 = 0) { int page = index / pageCnt; @@ -101,6 +131,14 @@ { if (queryPageTimes.ContainsKey(page) && Time.realtimeSinceStartup - queryPageTimes[page] < queryPageCD) return; if (ranksServerMaxCnt.ContainsKey(type)) { if(index >= ranksServerMaxCnt[type]) { //超过服务器已上榜的总数量,比如总榜单是100名,当前只有8名玩家上榜,往下滚动就不再查询 return; } } Debug.LogFormat("分页查询:{0} - {1}", index, page); QueryRankByPage(type, pageCnt * (page + 1), pageCnt, 0, true, groupValue1, groupValue2); queryPageTimes[page] = Time.realtimeSinceStartup; @@ -171,6 +209,12 @@ m_RankIDToIndex.Add(rankType, new Dictionary<int, int>()); } if (!ranksServerMaxCnt.ContainsKey(rankType)) { ranksServerMaxCnt.Add(rankType, package.DataTotal); } ranksServerMaxCnt[rankType] = package.DataTotal; for (int i = 0; i < package.PageDataCnt; i++) { int id = (int)package.PageDataList[i].ID; @@ -232,9 +276,12 @@ { onRankRefresh?.Invoke(package.Type); } completeEvent?.Invoke(); completeEvent = null; } //排名从0 开始 //排名从1 开始 //如果是跨服排行榜 类型可能因跨服功能不同 由分组分赛季等情况组合 public Dictionary<int, RankData> GetRankPageDatas(int type) { @@ -244,6 +291,18 @@ return datas; } return null; } //查询指定目标排名的数据 public RankData GetRankDataByRank(int type, int rank) { Dictionary<int, RankData> rankDatas = null; RankData rankData = null; if (m_RankPageDatas.TryGetValue(type, out rankDatas)) { rankDatas.TryGetValue(rank, out rankData); } return rankData; } @@ -265,7 +324,7 @@ return null; } public RankData GetMyRankByID(int type, int queryID) public RankData GetRankByID(int type, int queryID) { Dictionary<int, RankData> rankDatas = null; if (m_RankPageDatas.TryGetValue(type, out rankDatas)) @@ -283,6 +342,30 @@ #endregion } // 默认情况,各个榜可能有所变化 // 玩家个人榜 // ID - 玩家ID // Name1 - 玩家名 // Name2 - 游戏账号 // Type2 - 职业 // Value1 - 官职 // Value2 - 称号ID // Value3 - 头像 // Value4 - 头像框 // Value5 - 主角形象 // --------------------------------------- // 仙盟榜 // ID - 仙盟ID // ID2 - 盟主ID // Name1 - 仙盟名 // Name2 - 盟主名 // Value1 - 总战力,整除亿部分 // Value2 - 总战力,求余亿部分 // Value3 - 徽章 // Value4 - 仙盟等级 // Value5 - 仙盟ServerID public class RankData { public int type; //排行榜类型 Main/System/BillboardRank/Top3Cell.cs
File was deleted Main/System/Boss/MainBossEnterWin.cs
@@ -22,8 +22,13 @@ CloseBtn.AddListener(CloseWindow); rankBtn.AddListener(()=> { RankModel.Instance.QueryRankByPage(1); UIManager.Instance.OpenWindow<MainBossRankWin>(); RankModel.Instance.ResetQueryParam(); RankModel.Instance.QueryRankByPage(1, watchID:(int)PlayerDatas.Instance.baseData.PlayerID, complete:()=> { var win = UIManager.Instance.OpenWindow<PlayerRankWin>(); win.rankType = 1; }); }); } Main/System/Boss/MainBossRankWin.cs
File was deleted