/// <summary> /// 给排行榜添加一个元素 /// </summary> /// <param name="rankName">Rank name.</param> /// <param name="name">Name.</param> /// <param name="value">Value.</param> /// <typeparam name="T">The 1st type parameter.</typeparam> public void AddRankNode(string rankName, string name, object value) { L_RankData rankData = RootData.FindChild(rankName); if (rankData == null) { Debug.LogWarning("排行榜[" + rankName + "]尚未创建!"); return; } if (rankData.GetValue <string>() != value.GetType().ToString()) { Debug.LogWarning("排行榜[" + rankName + "]数据类型[" + rankData.Value + "],与添加的数据[" + name + "]类型[" + value.GetType() + "]不一致!"); return; } L_RankData data = rankData.FindChild(name); if (data == null) { data = rankData.CreatChildData(name, value); } else { data.Value = value; } }
// 获得数据节点 public IDataNode GetRankData(string rankname, bool isOrder = true) { L_RankData rankData = RootData.FindChild(rankname); OrderRank(rankData, isOrder); // 排序 return((IDataNode)rankData); }
/// <summary> /// 存储数据 /// </summary> /// <param name="rankname">排行榜名.</param> /// <param name="isOrder">If set to <c>true</c> 正序/逆序.</param> public void SaveTheRank(string rankname, bool isOrder = true) { L_RankData rankData = RootData.FindChild(rankname); OrderRank(rankData, isOrder); // 排序 if (rankData != null) { XmlTool.SaveData <L_RankData>(rankData, FilePath + rankname); } }
/// <summary> /// 创建一个排行榜 /// </summary> /// <param name="name">排行榜名字</param> /// <param name="value">排行榜的内容</param> /// <typeparam name="T">排行榜的类型</typeparam> public void CreateRank <T>(string rankname) { if (typeof(T) != typeof(int) && typeof(T) != typeof(float)) { Debug.LogWarning("排行榜只支持Int 和 float 两种数据类型!"); return; } if (RootData.Exist(rankname)) { Debug.LogWarning("当前排行榜已经存在!"); return; } L_RankData rankData = RootData.CreatChildData(rankname, typeof(T).ToString()); }
/// <summary> /// 加载排行榜(覆盖当前排行榜) /// </summary> /// <param name="rankname">Rankname.</param> /// <typeparam name="T">The 1st type parameter.</typeparam> public void LoadRank(string rankname) { // 覆盖 L_RankData rankData = RootData.FindChild(rankname); if (rankData == null) { rankData = RootData.CreatChildData(rankname, "none"); } else { rankData.ClearChildren(); } XmlTool.LoadDataWihtPath <L_RankData>(ref rankData, FilePath + rankname); }
/// <summary> /// 排序 /// </summary> /// <param name="rootData">要排序的数据</param> /// <param name="isOrder">If set to <c>true</c> 正序/逆序 </param> void OrderRank(L_RankData rootData, bool isOrder = true) { List <L_RankData> datas = rootData.Children; for (int j = 0; j < datas.Count - 1; j++) { for (int i = 0; i < datas.Count - 1; i++) { if (isOrder ? datas[i].GetValue <int>() < datas[i + 1].GetValue <int>() : datas[i].GetValue <int>() > datas[i + 1].GetValue <int>()) { object v = datas[i].Value; datas[i].Value = datas[i + 1].Value; datas[i + 1].Value = v; string k = datas[i].Key; datas[i].Key = datas[i + 1].Key; datas[i + 1].Key = k; } } } }