using System; using FairyGUI; using System.Text; using UnityEngine; using System.Collections.Generic; using Application = UnityEngine.Application; using Random = UnityEngine.Random; using DG.Tweening; namespace ZooMatch { public static class CommonHelper { public static Dictionary activeTimes = new Dictionary(); public static Dictionary activeTimes_saveingpot = new Dictionary(); public static int GetIndexByChanceList(int[] chanceList) { float total = 0; for (int i = 0; i < chanceList.Length; i++) { total += chanceList[i]; } float result = Random.Range(0, total); float tmpTotal = 0; for (int i = 0; i < chanceList.Length; i++) { float chance = chanceList[i]; tmpTotal += chance; if (result < tmpTotal) { return i; } } return -1; } public static bool GetBoolByChance(float chance) { var value = UnityEngine.Random.Range(0, 1f); if (value <= chance) return true; return false; } public static void SetActive(this Component component, bool isActive) { component.gameObject.SetActive(isActive); } public static string GetAppSavePath() { return Application.persistentDataPath; } public static GTweener FadeIn(GObject obj, float duration = 0.3f, float delay = 0) { if (obj != null) { obj.alpha = 0.5f; return obj.TweenFade(1, duration).SetDelay(delay); } return null; } public static GTweener FadeOut(GObject obj, float duration = 0.3f, float delay = 0) { if (obj != null) { obj.alpha = 1; return obj.TweenFade(0f, duration).SetDelay(delay); } return null; } private static float clickTime; public static bool IsClickNoQuick() { if (Time.time < clickTime) { clickTime = Time.time + 0.1f; return false; } clickTime = Time.time + 0.3f; return true; } public static void InitGButton(GObject button, Action action, bool isNetworkCheck = false, bool isQuickClickCheck = true) { button?.onClick.Set(() => { if (isQuickClickCheck && !IsClickNoQuick()) { return; } action?.Invoke(); }); } public static string TimeFormat(int second, CountDownType countDownType = CountDownType.Second, string dayFormat = "") { var result = new StringBuilder(); if (second < 0) { second = 0; } if (countDownType == CountDownType.Second) { result.Append(second); return result.ToString(); } int tmpSecond; if (second >= 60) { tmpSecond = second % 60; } else { tmpSecond = second; } result.Append(tmpSecond); if (tmpSecond < 10) { result.Insert(0, 0); } int tmpMin = second / 60; if (countDownType == CountDownType.Minute) { result.Insert(0, ":"); result.Insert(0, tmpMin); return result.ToString(); } int tmpHour = tmpMin / 60; if (countDownType == CountDownType.Hour) { if (tmpMin >= 60) { tmpMin %= 60; } result.Insert(0, ":"); result.Insert(0, tmpMin); if (tmpMin < 10) { result.Insert(0, 0); } result.Insert(0, ":"); result.Insert(0, tmpHour); if (tmpHour < 10) { result.Insert(0, 0); } return result.ToString(); } int tmpDay = tmpHour / 24; if (countDownType == CountDownType.Day) { if (tmpMin >= 60) { tmpMin %= 60; } result.Insert(0, ":"); result.Insert(0, tmpMin); if (tmpMin < 10) { result.Insert(0, 0); } if (tmpHour >= 24) { tmpHour %= 24; } result.Insert(0, ":"); result.Insert(0, tmpHour); if (tmpHour < 10) { result.Insert(0, 0); } if (string.IsNullOrEmpty(dayFormat)) { dayFormat = "Days"; } result.Insert(0, $" {dayFormat} "); result.Insert(0, tmpDay); } return result.ToString(); } public static string FormatTime(int second, CountDownType countDownType = CountDownType.Second, string dayFormat = "") { StringBuilder result = new StringBuilder(); if (second < 0) { second = 0; } if (countDownType == CountDownType.Second) { result.Append(second); return result.ToString(); } int tmpSecond; if (second >= 60) { tmpSecond = second % 60; } else { tmpSecond = second; } result.Append(tmpSecond); if (tmpSecond < 10) { result.Insert(0, 0); } int tmpMin = second / 60; if (countDownType == CountDownType.Minute) { result.Insert(0, ":"); result.Insert(0, tmpMin); return result.ToString(); } int tmpHour = tmpMin / 60; if (countDownType == CountDownType.Hour) { if (tmpMin >= 60) { tmpMin %= 60; } result.Insert(0, ":"); result.Insert(0, tmpMin); if (tmpMin < 10) { result.Insert(0, 0); } result.Insert(0, ":"); result.Insert(0, tmpHour); if (tmpHour < 10) { result.Insert(0, 0); } return result.ToString(); } int tmpDay = tmpHour / 24; if (countDownType == CountDownType.Day) { if (tmpMin >= 60) { tmpMin %= 60; } result.Insert(0, ":"); result.Insert(0, tmpMin); if (tmpMin < 10) { result.Insert(0, 0); } if (tmpHour >= 24) { tmpHour %= 24; } result.Insert(0, ":"); result.Insert(0, tmpHour); if (tmpHour < 10) { result.Insert(0, 0); } if (string.IsNullOrEmpty(dayFormat)) { dayFormat = "Days"; } result.Insert(0, $" {dayFormat} "); result.Insert(0, tmpDay); } return result.ToString(); } public static void RandomSortList(List list) { System.Random r = new System.Random(); for (int i = 0; i < list.Count; i++) { int index = r.Next(list.Count); (list[i], list[index]) = (list[index], list[i]); } } public static int RandomInt(this IList array) { return Random.Range(array[0], array[1]); } public static int RandomRange(int[] range) { if (range == null) { return 0; } if (range.Length == 2) { return RandomRange(range[0], range[1]); } else { return range[0]; } } public static int RandomRange(int begin, int end) { return Random.Range(begin, end); } public static float RandomRange(float begin, float end) { return Random.Range(begin, end); } public static T RandomWeight(Dictionary weightDic) { int totalWeight = 0; foreach (var weight in weightDic) { totalWeight += weight.Value; } int randomWeight = Random.Range(0, totalWeight); int currWeight = 0; foreach (var weight in weightDic) { currWeight += weight.Value; if (randomWeight < currWeight) { return weight.Key; } } return default; } public static int RandomWeight(List weightArray) { float totalWeight = 0; for (var i = 0; i < weightArray.Count; i++) totalWeight += weightArray[i]; var randomWeight = Random.Range(0, totalWeight); if (randomWeight >= totalWeight) return weightArray.Count - 1; float currWeight = 0; for (var i = 0; i < weightArray.Count; i++) { currWeight += weightArray[i]; if (randomWeight < currWeight) return i; } return -1; } public static int RandomRangeIncludeEnd(int[] range) { if (range == null) return 0; if (range.Length == 2) return RandomRange(range[0], range[1] + 1); return range[0]; } public static bool IsToday(long timestamp) { // 将时间戳转换为DateTime对象 DateTime dateTime = DateTimeOffset.FromUnixTimeSeconds(timestamp).ToLocalTime().DateTime; // 获取今天的日期(不包含时间部分) DateTime today = DateTime.Today; //Debug.Log($"dateTime: {dateTime.Date} \n today: {today} \n 是否是今天: {dateTime.Date == today}"); // 比较日期部分是否相等 return dateTime.Date == today; } public static void CheckAdTimes() { DateTime today = DateTime.Today; var localTimes = PlayerPrefs.GetString("task_ad_times"); if (string.IsNullOrEmpty(localTimes)) { PlayerPrefs.SetString("task_ad_times", today.ToString()); return; } if (localTimes != today.ToString()) { DataMgr.VideoWatchCount.Value = 0; SaveData.GetSaveObject().ad_task_record = new List(); PlayerPrefs.SetString("task_ad_times", today.ToString()); } } public static void ShowNumAnim(GTextField text_gold, decimal coin, int id = 102, float time = 1.0f) { var currency = id == 102 ? DataMgr.Ticket.Value : DataMgr.Coin.Value; var startNum = currency - coin; if (id == 102) { DOVirtual.Float((float)startNum, (float)currency, time, value => { text_gold.text = $"{GameHelper.Get102Str((decimal)value)}"; }).OnComplete(() => { // 动画完成时确保最终值被正确设置 text_gold.text = $"{GameHelper.Get102Str((decimal)currency)}"; }); } else { DOVirtual.Float((float)startNum, (float)currency, time, value => { text_gold.text = $"{GameHelper.Get101Str((decimal)value)}"; }).OnComplete(() => { // 动画完成时确保最终值被正确设置 text_gold.text = $"{GameHelper.Get101Str((decimal)currency)}"; }); } } } }