using Cysharp.Threading.Tasks; using DG.Tweening; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Globalization; using System.Linq; using UnityEngine; using UnityEngine.UI; public static class GlobalUtil { public static int[] Minutes_Seconds(float second) { int[] result = new int[2]; result[0] = Mathf.FloorToInt(second / 60f); result[1] = Mathf.FloorToInt(second % 60f); return result; } public static int[] Hour_Minutes_Seconds(float second) { int[] result = new int[3]; result[0] = (int)second / 3600; result[1] = ((int)second - result[0] * 3600) / 60; result[2] = (int)second - result[0] * 3600 - result[1] * 60; return result; } // // public static string Common_TimeFormat(float leftTime, bool isStandard = true) // { // var day = (int)leftTime / 60 / 60 / 24; // var hour = (int)(leftTime - day * 60 * 60 * 24) / 60 / 60; // if (isStandard == true) // { // var minute = (int)(leftTime - day * 60 * 60 * 24 - hour * 60 * 60) / 60; // var second = (int)leftTime % 60; // return string.Format(Framework.language.GetLangByID("common.time4"), day, hour, minute, second); // } // else // { // if (day >= 1) //超过1,显示为 **天**小时 // { // return string.Format(Framework.language.GetLangByID("common.time1"), day, hour); // } // var minute = (int)(leftTime - day * 60 * 60 * 24 - hour * 60 * 60) / 60; // if (day < 1 && hour >= 1) // { // return string.Format(Framework.language.GetLangByID("common.time2"), hour, minute); // } // else // { // var second = (int)leftTime % 60; // return string.Format(Framework.language.GetLangByID("common.time3"), minute, second); // } // } // } public static int Day(float second) { return Mathf.FloorToInt(second / 86400f); } #region UI相关 /// /// 文本长度显示 /// /// /// public static void SetText_Count(this Text tx, int count) { /* if (count > 9999) tx.text = $"x9999+"; else tx.text = $"x{count}";*/ tx.text = $"x{SetFormatNum(count)}"; } public static async void ForceRebuildLayoutImmediate(GameObject go) { //await Task.Delay(1); var list = go.GetComponentsInChildren(true); //Debug.LogError("ForceRebuildLayoutImmediate.list.Lenth==" + list.Length); for (int i = list.Length - 1; i <= 0; i--) { LayoutRebuilder.ForceRebuildLayoutImmediate(list[i]); } LayoutRebuilder.ForceRebuildLayoutImmediate(go.GetComponent()); } #endregion #region DOTween public static Tweener DOScale_zero(this Transform target, Vector3 endValue, float duration) { target.transform.localScale = Vector3.zero; return target.DOScale(endValue, duration); } #endregion public static T FromJson(this string jsonString) { return JsonConvert.DeserializeObject(jsonString); } /// /// 判断阶级是否足够 /// /// /// // public static bool GetIsUp_Str(HeroData hero) // { // var config = Config_Hero.GetItem(hero.heroId); // var item = Config_HeroRank.GetItem(config.colour, hero.rank); // return hero.level < item.maxLv; // } /// /// 升阶条件判断(是否可升阶) /// /// // public static bool GetIsUpStar(HeroData hero) // { // var heroCfg = Config_Hero.GetItem(hero.heroId); // var rank = Config_HeroRank.GetItem(heroCfg.colour, hero.rank); // string[] strs = rank.specialEffect.Split(','); // switch (strs[0]) // { // case "lvHeroCount": // var lv = int.Parse(strs[1]); // var num = int.Parse(strs[2]); // // var cardNum = 0; // foreach (var card in Game.account.heroDatas) // if (card.Value.level >= lv) // cardNum++; // // if (cardNum >= num) // return true; // // UITool.OpenTips($"必须有{num}个{lv}级英雄。"); // break; // } // return false; // } /// /// 是否可升星 /// // public static bool GetIsUpStar2(HeroData hero) // { // var allStars = Config_HeroSkill.GetItems(hero.heroId); // bool isMax = hero.starLevel >= allStars[allStars.Count - 1].star; // if (isMax) return false;//星级已满 // // /// 同阵营同星级 // HashSet hs_zhen_star = new HashSet(); // // /// 同模版同星级 // HashSet hs_m_star = new HashSet(); // // var heroConfig = Config_Hero.GetItem(hero.heroId); // var skillConfig = Config_HeroSkill.GetItem(hero.heroId, hero.starLevel); // var starConfig = Config_HeroStar.GetItem(heroConfig.colour, hero.starLevel); // // int moBan_starNum, moBan_count, zhen_starNum, zhen_count; // // //显示升星材料 // var strs = starConfig.consume.Split(';').Where((s) => !string.IsNullOrEmpty(s)).ToArray(); // for (int index = 0; index < strs.Length; index++) // { // var ins_strs = strs[index].Split(','); // // var v_type = ins_strs[0]; // var v_star = int.Parse(ins_strs[1]); // var v_num = int.Parse(ins_strs[2]); // // if (v_type == "sameTp")//同模版X星级 // { // moBan_starNum = v_star; // moBan_count = v_num; // // var config_icon = Config_FakeItem.GetItem(heroConfig.item_icon); // } // else if (v_type == "sameCamp")//同阵营X星级 // { // zhen_starNum = v_star; // zhen_count = v_num; // } // // } // // // // //bool GetIs // return false; // // } /// /// 升级道具是否足够 /// /// // public static bool GetIsUp_Prop(HeroData hero, int[] up_ids = null) // { // if (up_ids == null) // up_ids = Config_GlobalAtt.GetItem("resetBioExpItemIds").value.Split(';').Select(int.Parse).ToArray(); // // //判断是否可升级 // var config_level = Config_HeroLevel.GetItem(hero.level); // var config = Config_Hero.GetItem(hero.heroId); // var config_rank = Config_HeroRank.GetItem(config.colour, hero.rank); // int exp = 0; // switch (config_rank.afterColour) // { // case 2: exp = config_level.expColour2; break; // case 3: exp = config_level.expColour3; break; // case 4: exp = config_level.expColour4; break; // case 5: exp = config_level.expColour5; break; // } // // int allPropExp = 0; // //升级道具 // foreach (var id in up_ids) // { // var prop = Config_PropItem.GetItem(id); // string[] strs = prop.useLogic.Split(';'); // foreach (string str in strs) // { // string[] strs2 = str.Split(","); // if (strs2.Length == 3 && strs2[0] == "heroExp") // { // int addExp = int.Parse(strs2[2]); // allPropExp += addExp * Game.backpack.GetCount(prop.itemId); // } // } // // } // //if (!(allPropExp >= exp)) // // Debug.Log($"还差:{exp - allPropExp}"); // return allPropExp >= exp; // } /// /// 神器升级道具是否足够 /// /// // public static bool GetRelicIsUp_Prop(ArtifactData data, int[] up_ids = null) // { // if (up_ids == null) // up_ids = Config_GlobalAtt.GetItem("resetRelicExpItemIds").value.Split(';').Select(int.Parse).ToArray(); // // //判断是否可升级 // var config = Config_Relic.GetItem(data.petId); // var config_level = Config_RelicLevel.GetItem(config.colour, data.level); // // int exp = config_level.exp; // // int allPropExp = 0; // //升级道具 // foreach (var id in up_ids) // { // var prop = Config_PropItem.GetItem(id); // string[] strs = prop.useLogic.Split(';'); // foreach (string str in strs) // { // string[] strs2 = str.Split(","); // if (strs2.Length == 2 && strs2[0] == "relicExp") // { // int addExp = int.Parse(strs2[1]); // allPropExp += addExp * Game.backpack.GetCount(prop.itemId); // } // } // // } // // return allPropExp >= exp; // } /// /// 计算神器升级使用道具 /// /// 道具uuid, 数量 // public static Tuple[] GetRelicUpProp(ArtifactData data, int[] up_ids = null) // { // if (up_ids == null) // up_ids = Config_GlobalAtt.GetItem("resetRelicExpItemIds").value.Split(';').Select(int.Parse).ToArray(); // // //判断是否可升级 // var config = Config_Relic.GetItem(data.petId); // var config_level = Config_RelicLevel.GetItem(config.colour, data.level); // // int exp = config_level.exp; // // var list = new List>(); // // //升级道具 // foreach (var id in up_ids) // { // var prop = Config_PropItem.GetItem(id); // string[] strs = prop.useLogic.Split(';'); // // foreach (string str in strs) // { // string[] strs2 = str.Split(","); // if (strs2.Length == 2 && strs2[0] == "relicExp") // { // var item = Game.backpack.GetItem(id); // if (item != null && item.count > 0) // list.Add(Tuple.Create(item.uuid, int.Parse(strs2[1]), item.count)); // break; // } // } // // // } // // return FindItemsToLevelUp(list, exp); // } /// /// 计算使用道具 /// /// 道具uuid, 数量 // public static Tuple[] GetUpProp(HeroData hero, int[] up_ids = null) // { // if (up_ids == null) // up_ids = Config_GlobalAtt.GetItem("resetBioExpItemIds").value.Split(';').Select(int.Parse).ToArray(); // // var config_level = Config_HeroLevel.GetItem(hero.level); // var config = Config_Hero.GetItem(hero.heroId); // var config_rank = Config_HeroRank.GetItem(config.colour, hero.rank); // int exp = 0; // switch (config_rank.afterColour) // { // case 2: exp = config_level.expColour2; break; // case 3: exp = config_level.expColour3; break; // case 4: exp = config_level.expColour4; break; // case 5: exp = config_level.expColour5; break; // } // // var list = new List>(); // // //升级道具 // foreach (var id in up_ids) // { // var prop = Config_PropItem.GetItem(id); // string[] strs = prop.useLogic.Split(';'); // // foreach (string str in strs) // { // string[] strs2 = str.Split(","); // if (strs2.Length == 3 && strs2[0] == "heroExp") // { // var item = Game.backpack.GetItem(id); // if (item != null && item.count > 0) // list.Add(Tuple.Create(item.uuid, int.Parse(strs2[2]), item.count)); // break; // } // } // // // } // // return FindItemsToLevelUp(list, exp); // } /// /// 计算需要使用的道具 /// /// Item1:道具UUID,Item2: 增加的经验值,Item3:拥有的数量 /// 升级所需经验值 /// Item1:道具UUID, Item2:使用数量 public static Tuple[] FindItemsToLevelUp(List> items, int expToNextLevel) { items.Sort((a, b) => a.Item2.CompareTo(b.Item2)); // 按经验值从小到大排序 var result = new List>(); int totalExp = 0; // 首先尝试使用最低经验的道具 foreach (var item in items) { long itemId = item.Item1; int itemExp = item.Item2; int itemCount = item.Item3; int neededCount = Math.Min((expToNextLevel - totalExp + itemExp - 1) / itemExp, itemCount); if (neededCount > 0) { result.Add(Tuple.Create(itemId, neededCount)); totalExp += neededCount * itemExp; if (totalExp >= expToNextLevel) return result.ToArray(); } } // 如果最低经验道具不足,则尝试使用更高经验的道具 if (totalExp < expToNextLevel) { result.Clear(); totalExp = 0; foreach (var item in items) { long itemId = item.Item1; int itemExp = item.Item2; int itemCount = item.Item3; int neededCount = Math.Min((expToNextLevel - totalExp + itemExp - 1) / itemExp, itemCount); if (neededCount > 0) { result.Add(Tuple.Create(itemId, neededCount)); totalExp += neededCount * itemExp; if (totalExp >= expToNextLevel) break; } } } return result.ToArray(); } public static Vector2 GetPivotByScreenClick(Vector2 click) { float x = 0f; float y = 0f; if (click.x > Screen.width / 2) x = 1f; if (click.y > Screen.height / 2) y = 1f; return new Vector2(x, y); } public static void LogDouble(string title, string info) { Debug.Log($"{title} |- {info}"); } public static void LogDouble_Blue(string title, string info) { Debug.Log($"{title} |- {info}"); } public static void LogDouble(string title, string info, string info2) { Debug.Log($"{title} |- {info} {info2}"); } public static void LogDouble(string title, string info, string info2, string info3) { Debug.Log($"{title} |- {info} {info2} {info3}"); } public static void Log_OpenUI_Light2(string title, string info1, string info2) { Debug.Log($"{title} {info1} |- {info2}"); } public static void Log_OpenUI_Light(string title, string info1, string info2) { Debug.Log($"{title} {info1} |- {info2}"); } public static void Log_OpenUI_Drak(string title, string info1, string info2) { Debug.Log($"{title} {info1} |- {info2}"); } public static void LogDouble_Magenta(string title, string info) { Debug.Log($"{title} |- {info}"); } public static void LogDoubleError(string title, string info) { Debug.LogError($"{title} |- {info}"); } public static void LogDoubleError(string title, string info, string info2) { Debug.LogError($"{title} |- {info} {info2}"); } public static void LogDoubleError_ExcelBug(string title, object info) { Debug.LogError($"{title} |- {info}"); } public static void LogDoubleError_ExcelBug(string title, object info, object info2) { Debug.LogError($"{title} |- {info} {info2}"); } public static void LogDouble_Green(string title, string info, string info2) { Debug.Log($"{title} |- {info} {info2}"); } public static void LogDouble_Yelow(string title, string info, string info2) { Debug.Log($"{title} |- {info} {info2}"); } public static void ClearConsole() { #if UNITY_EDITOR System.Reflection.Assembly assembly = System.Reflection.Assembly.GetAssembly(typeof(UnityEditor.SceneView)); System.Type logEntries = assembly.GetType("UnityEditor.LogEntries"); System.Reflection.MethodInfo clearConsoleMethod = logEntries.GetMethod("Clear"); clearConsoleMethod.Invoke(new object(), null); #endif } /// /// 转百分比 /// /// /// [Obsolete("停止使用")] public static string ToPercentage(this float number) { // 将浮点数乘以100 float percentageValue = number * 100; // 使用CultureInfo.InvariantCulture确保使用不依赖于当前文化的字符串格式 // "0.##" 格式确保最多保留两位小数 string formattedValue = percentageValue.ToString("0.##", CultureInfo.InvariantCulture) + "%"; return formattedValue; } /// /// 显示属性 /// [Obsolete("停止使用")] public static string ToAtt(this string att, int type) { return int.Parse(att).ToAtt(type); } /// /// 显示属性 /// [Obsolete("停止使用")] public static string ToAtt(this int att, int type, string fq = "v") { if (att == 0) return (type == 1 || fq == "q") ? "0%" : "0"; if (type == 1 || fq == "q") return (att / 1000f).ToPercentage(); else return att.ToString(); } public static string GetSkillType(int typeII) { switch (typeII) { case 0: return "普"; case 1: return "密"; case 2: return "必"; case 3: return "被"; case 4: return "神"; } return "无"; } /// /// 显示星星 /// public static void ShowSart(Transform starItem, int num) { if (num == 0) { starItem.parent.gameObject.SetActive(false); return; } else starItem.parent.gameObject.SetActive(true); if (num <= 5) { starItem.ForParent(num, (tr, index) => { var img = tr.GetComponent(); RewardUtil.SetSprite_Star(img, 0); img.color = Color.white; }); } else if (num <= 10) { starItem.ForParent(num - 5, (tr, index) => { var img = tr.GetComponent(); RewardUtil.SetSprite_Star(img, 1); img.color = Color.white; }); } else if (num <= 15) { starItem.ForParent(num - 10, (tr, index) => { var img = tr.GetComponent(); RewardUtil.SetSprite_Star(img, 2); img.color = Color.white; }); } else if (num <= 20) { starItem.ForParent(num - 15, (tr, index) => { var img = tr.GetComponent(); RewardUtil.SetSprite_Star(img, 3); img.color = Color.white; }); } else { starItem.ForParent(num - 20, (tr, index) => { var img = tr.GetComponent(); RewardUtil.SetSprite_Star(img, 4); img.color = Color.white; }); } starItem.parent.gameObject.SetActive(num > 0); } /// /// 显示星星 /// public static void ShowSart_white(Transform starItem, int num) { if (num <= 5) starItem.ForParent(num, (tr, index) => { var img = tr.GetComponent(); RewardUtil.SetSprite_Star_White(img, 0); img.color = new Color32(58, 57, 53, 255); }); else if (num <= 10) starItem.ForParent(num - 5, (tr, index) => { var img = tr.GetComponent(); RewardUtil.SetSprite_Star_White(img, 1); img.color = new Color32(58, 57, 53, 255); }); else if (num <= 15) starItem.ForParent(num - 10, (tr, index) => { var img = tr.GetComponent(); RewardUtil.SetSprite_Star_White(img, 2); img.color = new Color32(58, 57, 53, 255); }); else if (num <= 20) starItem.ForParent(num - 15, (tr, index) => { var img = tr.GetComponent(); RewardUtil.SetSprite_Star_White(img, 3); img.color = new Color32(58, 57, 53, 255); }); else starItem.ForParent(num - 20, (tr, index) => { var img = tr.GetComponent(); RewardUtil.SetSprite_Star_White(img, 4); img.color = new Color32(58, 57, 53, 255); }); } /// /// 神器显示0星 /// public static void ShowSart_Zero(Transform starItem) { starItem.ForParent(5, (tr, index) => { var img = tr.GetComponent(); RewardUtil.SetSprite_Star_White(img, 0); //img.SetSprite_Star_White(0); img.color = new Color32(93, 91, 88, 255); }); } //public static bool GetCondition_Hero(string text, HeroData hero) //{ // if (hero == null) return true; // MatchCollection matches = Regex.Matches(text, @"(\w+):(\d+)"); // foreach (Match match in matches) // { // // 提取键和值 // string key = match.Groups[1].Value; // int value = int.Parse(match.Groups[2].Value); // switch (key) // { // case "lv": // if (hero.level < value) return false; // break; // case "star": // if (hero.starLevel < value) return false; // break; // } // } // return true; //} //public static bool GetCondition_Relic(string text, ArtifactData relic) //{ // if (relic == null) return true; // MatchCollection matches = Regex.Matches(text, @"(\w+):(\d+)"); // foreach (Match match in matches) // { // // 提取键和值 // string key = match.Groups[1].Value; // int value = int.Parse(match.Groups[2].Value); // switch (key) // { // case "lv": // if (relic.level < value) return false; // break; // case "star": // if (relic.star < value) return false; // break; // } // } // return true; //} //static bool GetCondition_Hero2(string text, HeroData hero) //{ // if (hero == null) return true; // MatchCollection matches = Regex.Matches(text, @"(\w+),(\d+)"); // foreach (Match match in matches) // { // // 提取键和值 // string key = match.Groups[1].Value; // int value = int.Parse(match.Groups[2].Value); // switch (key) // { // case "lv": // if (hero.level < value) return false; // break; // case "star": // if (hero.starLevel < value) return false; // break; // } // } // return true; //} /// /// 显示神器图标 /// // public static void ShowRelicIcons(Transform[] relicContents, List ids) // { // //显示神器 // if (ids.Count == 0) // { // foreach (var item in relicContents) // if (item != null) // item.gameObject.SetActive(false); // } // else // { // var content = relicContents[ids.Count - 1]; // // for (int i = 0; i < relicContents.Length; i++) // relicContents[i].gameObject.SetActive(i == ids.Count - 1); // // content.ForChild(async (tr, index) => // { // var relicCfg = Config_Relic.GetItem(ids[index]); // var img = content.GetChild(index).GetComponent(); // await RewardUtil.SetSprite_RelicIcon_Small(img, relicCfg.img2); // //await img.SetSprite_RelicIcon_Small(relicCfg.img2); // img.SetNativeSize(); // img.gameObject.SetActive(true); // img.transform.localScale = new Vector3(1.4f, 1.4f, 1.4f); // //岩柱神器 做特殊处理 // if (relicCfg.id == 9) // switch (ids.Count) // { // case 1: // img.transform.localPosition = new Vector3(78, 90, 0); // img.transform.localScale = new Vector3(1.3f, 1.3f, 1.3f); // break; // case 2: // switch (index) // { // case 0: // img.transform.localPosition = new Vector3(-119, 31, 0); // img.transform.localScale = new Vector3(-1.2f, 1.2f, 1.2f); // break; // // case 1: // img.transform.localPosition = new Vector3(128, 23, 0); // img.transform.localScale = new Vector3(1.26f, 1.26f, 1.26f); // break; // } // break; // case 3: // switch (index) // { // case 0: // img.transform.localPosition = new Vector3(-136, 20, 0); // img.transform.localScale = new Vector3(-1.2f, 1.2f, 1.2f); // break; // // case 1: // img.transform.localPosition = new Vector3(66, 82, 0); // img.transform.localScale = new Vector3(1f, 1f, 1f); // break; // // case 2: // img.transform.localPosition = new Vector3(147, 6, 0); // img.transform.localScale = new Vector3(1f, 1f, 1f); // break; // } // // break; // // } // else // switch (ids.Count) // { // case 1: // img.transform.localPosition = new Vector3(12, 50, 0); // img.transform.localScale = new Vector3(1.3f, 1.3f, 1.3f); // break; // case 2: // switch (index) // { // case 0: // img.transform.localPosition = new Vector3(-37, 43, 0); // img.transform.localScale = new Vector3(1.4f, 1.4f, 1.4f); // break; // // case 1: // img.transform.localPosition = new Vector3(68, 57, 0); // img.transform.localScale = new Vector3(1.26f, 1.26f, 1.26f); // break; // } // break; // case 3: // switch (index) // { // case 0: // img.transform.localPosition = new Vector3(-67, 11, 0); // img.transform.localScale = new Vector3(1.4f, 1.4f, 1.4f); // break; // case 1: // img.transform.localPosition = new Vector3(11, 59, 0); // img.transform.localScale = new Vector3(1.4f, 1.4f, 1.4f); // break; // case 2: // img.transform.localPosition = new Vector3(73, 3, 0); // img.transform.localScale = new Vector3(1.4f, 1.4f, 1.4f); // break; // } // break; // } // }); // } // } // // public static string GetLangByJson(this LanguageJson_UTFP utfp) // { // return Framework.language.GetLangByJson(utfp); // } // // [Obsolete("停止使用")] // public static void SetText_Power(this Text tx, long power) // { // if (power >= 100000000) // 大于等于1亿时,用亿为单位,保留小数点后1位 // tx.text = (power / 100000000f).ToString("F1") + "亿"; // else if (power >= 100000) // 大于等于10万且小于1亿时,用万为单位,保留小数点后1位 // tx.text = (power / 10000f).ToString("F1") + "万"; // else // tx.text = power.ToString(); // 小于10万时,直接显示 // } // // public static bool SetGoodsCountDown(ShopGoodData data, GameObject go, LanguageDownTime ldt, OnDownTimeCallBack callBack = null) // { // double leftTime = 0.0f; // double refreshTime = data.refreshGoodsCountTime == "-1" ? -1 : double.Parse(data.refreshGoodsCountTime) - double.Parse(data.goodsTimeLimitNowTime); // double limitTime = string.IsNullOrEmpty(data.goodsTimeLimitEndTime) ? 0 : double.Parse(data.goodsTimeLimitEndTime) - double.Parse(data.goodsTimeLimitNowTime); // var srCfg = Config_ShopReplenishment.GetItem(data.limitBuyId); // if (srCfg == null || refreshTime == -1) //非限购 或 限购但不需补货 // { // if (limitTime > 0) //限时 // leftTime = limitTime; // } // else // { // if (limitTime > 0) //限时 // leftTime = refreshTime > limitTime ? limitTime : refreshTime; //取小的 // else // leftTime = refreshTime; // } // // if (leftTime > 0) // { // go.SetActive(true); // ldt.callBack = callBack; // ldt.timeUnitType = TimeUnitType.Common; // ldt.i18n = ""; //"shop.leftTime"; // ldt.SetTime((float)leftTime / 1000, true); // ldt.RefDownTime(); // return true; // } // else // { // ldt.SetTime(0, false); // go.SetActive(false); // return false; // } // } // public static int CreateAttr(Transform clone, int value, string type, string k, int idx, AttrData attrData = null, bool isZeroShow = false, bool isZeroCreate = false, bool prefix = false) // { // if (isZeroCreate == false && value == 0) // return 0; // else // { // attrData = attrData ?? new AttrData(); // var cfg = Config_BonusProperty.GetItem(k); // if (type == "v" || type == "fv") // { // CreateAttrObj(clone, idx, value, (tr) => // { // tr.Find("value").GetComponent().text = (value > 0 && prefix == true ? "+" : "") + value.ToString().ToAtt(cfg.type); // tr.Find("name").GetComponent().text = Framework.language.GetLangByID(cfg.text_i18); // tr.Find("icon").GetComponent().SetAtlasSprite("Assets/Art/UI/Picture/Attribute/atlas_Attribute", cfg.icon); // // if (tr.Find("ga_nextLv") != null) // { // var nextValue = type == "v" ? attrData.v : attrData.fv; // tr.Find("ga_nextLv").gameObject.SetActive(nextValue > value); // tr.Find("ga_nextLv/tx_nextLv").GetComponent().text = nextValue.ToString().ToAtt(cfg.type); // + (Game.gsAttr.IsPercent(k) ? "%" : ""); // } // }, isZeroShow, isZeroCreate); // return 1; // } // else if (type == "q" || type == "fq") // { // CreateAttrObj(clone, idx, value, (tr) => // { // tr.Find("value").GetComponent().text = (value > 0 && prefix == true ? "+" : "") + (value / 1000f).ToPercentage(); // + "%"; // tr.Find("name").GetComponent().text = Framework.language.GetLangByID(cfg.text_i18); // tr.Find("icon").GetComponent().SetAtlasSprite("Assets/Art/UI/Picture/Attribute/atlas_Attribute", cfg.icon); // // if (tr.Find("ga_nextLv") != null) // { // var nextValue = type == "q" ? attrData.q : attrData.fq; // tr.Find("ga_nextLv").gameObject.SetActive(nextValue > value); // tr.Find("ga_nextLv/tx_nextLv").GetComponent().text = (nextValue / 1000f).ToPercentage(); // } // }, isZeroShow, isZeroCreate); // return 1; // } // else // return 0; // } // } public static void CreateAttrObj(Transform clone, int idx, int value, Action onCreate, bool isZeroShow = false, bool isZeroCreate = false) { Transform tr; if (idx < clone.parent.childCount) tr = clone.parent.GetChild(idx); else tr = GameObject.Instantiate(clone.gameObject, clone.parent).transform; tr.gameObject.SetActive(true); if (isZeroShow == false && value == 0) tr.ForChild((child, idx) => child.gameObject.SetActive(false)); else { tr.ForChild((child, idx) => child.gameObject.SetActive(true)); onCreate.Invoke(tr); } } public static string SetFormatNum(long num) { if (Math.Abs(num) < 100000) return num.ToString(); else if (Math.Abs(num) >= 100000 && Math.Abs(num) < 1000000) return (Math.Abs(num) / 10000f).ToString("F1") + "W"; else if (Math.Abs(num) >= 1000000 && Math.Abs(num) < 1000000000) return (Math.Abs(num) / 1000000f).ToString("F1") + "M"; else return (Math.Abs(num) / 1000000000f).ToString("F1") + "G"; } public static string SetFormatPower(long power) { if (power >= 100000000) // 大于等于1亿时,用亿为单位,保留小数点后1位 return (power / 100000000f).ToString("F1") + "亿"; else if (power >= 100000) // 大于等于10万且小于1亿时,用万为单位,保留小数点后1位 return (power / 10000f).ToString("F1") + "万"; else return power.ToString(); // 小于10万时,直接显示 } public static string SetFormatDate(string time) { DateTime utcDateTime = DateTimeOffset.FromUnixTimeMilliseconds(long.Parse(time)).UtcDateTime; TimeZoneInfo targetTimeZone = TimeZoneInfo.Local; DateTime localDateTime = TimeZoneInfo.ConvertTimeFromUtc(utcDateTime, targetTimeZone); return localDateTime.ToString("yyyy-MM-dd-HH:mm"); } public static string SetFormatTokenNum(long num) { if (Math.Abs(num) < 100000000) return num.ToString(); else return (Math.Abs(num) / 10000f).ToString("F0") + "W"; } //布阵限制/星数条件 // public static bool TeamSetupConditionFilter(string condition, List cards, HeroData card = null) // { // string i18n; // return TeamSetupConditionFilter(condition, cards, card, out i18n); // } // // public static bool TeamSetupConditionFilter(string condition, List cards, HeroData card, out string i18n) // { // i18n = ""; // var str = condition.Split(','); // var state = false; // switch (str[0]) // { // case "hpPerUp": // case "pkLimitTime": // case "maxDeadCount": // case "win": // case "allCarLive": // state = true; // break; // case "joinBanClan": // if (card != null) // state = IsJoinBanClan(str, new List { card }, out i18n); // else // state = IsJoinBanClan(str, cards, out i18n); // break; // case "joinClanCount": // state = IsJoinClanCount(str, cards, card, out i18n); // break; // case "joinLimitClan": // if (card != null) // state = IsJoinLimitClan(str, new List { card }, out i18n); // else // state = IsJoinLimitClan(str, cards, out i18n); // break; // default: // state = true; // break; // } // return state; // } //禁用xx阵营角色, 阵营1#阵营2... // static bool IsJoinBanClan(string[] str, List nodes, out string i18n) // { // i18n = ""; // var clans = str[1].Split('#'); // //var nodes = nodes_left.GetAllNodes(); // foreach (var item in nodes) // { // var cfg = Config_Hero.GetItem(item.heroId); // foreach (var item2 in clans) // { // if (cfg.tankClans == item2) // { // var clanCfg = Config_HeroClan.GetItem(int.Parse(cfg.tankClans)); // i18n = string.Format(Framework.language.GetLangByID("teamsetup.limit.joinBanClan"), Framework.language.GetLangByID(clanCfg.name_i18)); // return false; // } // } // } // return true; // } //xx阵营角色不能多余xx名, 阵营#数量 // static bool IsJoinClanCount(string[] str, List nodes, HeroData node, out string i18n) // { // i18n = ""; // var clanCountStr = str[1].Split('#'); // var count = 0; // //var nodes = nodes_left.GetAllNodes(); // //var flag = false; // foreach (var item in nodes) // { // var cfg = Config_Hero.GetItem(item.heroId); // if (cfg.tankClans == clanCountStr[0]) // { // /*if (node != null && item.heroUUID == node.heroUUID) //忘记用来做什么了 @许杰涛 // flag = true;*/ // count++; // } // } // if (count > int.Parse(clanCountStr[1])) // { // var clanCfg = Config_HeroClan.GetItem(int.Parse(clanCountStr[0])); // i18n = string.Format(Framework.language.GetLangByID("teamsetup.limit.joinClanCount"), Framework.language.GetLangByID(clanCfg.name_i18), clanCountStr[1]); // } // /* if (!flag) // return true; // else*/ // return count <= int.Parse(clanCountStr[1]); // } //只能使用xx阵营的角色挑战副本, 阵营1#阵营2... // static bool IsJoinLimitClan(string[] str, List nodes, out string i18n) // { // i18n = ""; // var clans = str[1].Split('#'); // //var nodes = nodes_left.GetAllNodes(); // var state = true; // foreach (var item in nodes) // { // var cfg = Config_Hero.GetItem(item.heroId); // if (!clans.Contains(cfg.tankClans)) // { // state = false; // break; // } // } // if (!state) // { // var str2 = ""; // foreach (var item2 in clans) // { // var clanCfg = Config_HeroClan.GetItem(int.Parse(item2)); // str2 += Framework.language.GetLangByID(clanCfg.name_i18); // } // for (int i = 0; i < clans.Length; i++) // { // var clanCfg = Config_HeroClan.GetItem(int.Parse(clans[i])); // str2 += Framework.language.GetLangByID(clanCfg.name_i18) + ((i != clans.Length - 1) ? "/" : ""); // } // i18n = string.Format(Framework.language.GetLangByID("teamsetup.limit.joinLimitClan"), str2); // } // return state; // } #region 时间 public static long GetCurrentTimeStamp() { DateTime epochStart = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); long currentTimestamp = (long)(DateTime.UtcNow - epochStart).TotalMilliseconds; return currentTimestamp; } public static double GetCurrentTimeStampSeconds() { DateTime epochStart = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); return (DateTime.UtcNow - epochStart).TotalSeconds; //return currentTimestamp; } #endregion }