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
}