266 lines
8.3 KiB
C#
266 lines
8.3 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using System.Text.RegularExpressions;
|
|
using UnityEngine.UI;
|
|
using System.Net.NetworkInformation;
|
|
using System.Net.Sockets;
|
|
using System.IO;
|
|
|
|
namespace BF
|
|
{
|
|
public static class Utils
|
|
{
|
|
private const uint HASH_SEED = 31;
|
|
public const string FORWARD_SLASH = "/";
|
|
|
|
private static Regex RegexMatchPath;
|
|
|
|
private static bool c_free_flag = false;
|
|
private static bool c_config_flag = false;
|
|
|
|
public static char[] GetFreeChar()
|
|
{
|
|
if (!c_free_flag)
|
|
{
|
|
c_free_flag = true;
|
|
for (int i = 0; i < 16; ++i)
|
|
{
|
|
GameConst.C_FREE_CHAR[i] = (char)(GameConst.C_FREE_CHAR[i] ^ (0x29 - i));
|
|
}
|
|
}
|
|
return GameConst.C_FREE_CHAR;
|
|
}
|
|
|
|
public static char[] GetConfigChar()
|
|
{
|
|
if (!c_config_flag)
|
|
{
|
|
c_config_flag = true;
|
|
for (int i = 0; i < 13; ++i)
|
|
{
|
|
GameConst.C_CONFIG_CHAR[i] = (char)(GameConst.C_CONFIG_CHAR[i] ^ (0x32 - i));
|
|
}
|
|
}
|
|
return GameConst.C_CONFIG_CHAR;
|
|
}
|
|
|
|
public static bool IsNull(UnityEngine.Object o) // 或者名字叫IsDestroyed等等
|
|
{
|
|
return o == null;
|
|
}
|
|
|
|
public static Component BFGetComponent(this GameObject go, Type componentType)
|
|
{
|
|
var com = go.GetComponent(componentType);
|
|
if (com)
|
|
{
|
|
return com;
|
|
}
|
|
else
|
|
{
|
|
return null;
|
|
}
|
|
}
|
|
public static void GetTransformPath(Transform trans, Transform parentTrans, ref string path)
|
|
{
|
|
if (path == "")
|
|
path = trans.name;
|
|
else
|
|
path = trans.name + FORWARD_SLASH + path;
|
|
if (trans.parent != null && trans != parentTrans)
|
|
GetTransformPath(trans.parent, parentTrans, ref path);
|
|
}
|
|
|
|
public static T GetLuaInPath<T>(string path)
|
|
{
|
|
var ret = BFMain.Instance.LuaMgr.luaEnv.Global.GetInPath<T>(path);
|
|
return ret;
|
|
}
|
|
|
|
public static string GetAssetPathByFullPath(string fullPath)
|
|
{
|
|
if (null == RegexMatchPath)
|
|
RegexMatchPath = new Regex("(.+?)(Assets/.+)");
|
|
|
|
fullPath = fullPath.Replace("\\", "/");
|
|
return RegexMatchPath.Replace(fullPath, "$2");
|
|
}
|
|
|
|
public static Vector2 RectTransformScreenPointToLocalPointInRectangle(RectTransform rt, float x, float y, Camera cam)
|
|
{
|
|
Vector2 lp;
|
|
RectTransformUtility.ScreenPointToLocalPointInRectangle(rt, new Vector2(x, y), cam, out lp);
|
|
return lp;
|
|
}
|
|
|
|
public static bool RectangleContainsScreenPoint(RectTransform rt, float x, float y, Camera cam)
|
|
{
|
|
return RectTransformUtility.RectangleContainsScreenPoint(rt, new Vector2(x, y), cam);
|
|
}
|
|
|
|
public static int KillDOTween(int id, bool complete = false)
|
|
{
|
|
return DG.Tweening.DOTween.Kill(id, complete);
|
|
}
|
|
|
|
public static void SetDOTweenTimeScale(int id, float timeScale)
|
|
{
|
|
var list = DG.Tweening.DOTween.TweensById(id);
|
|
if (!ReferenceEquals(list, null))
|
|
{
|
|
int count = list.Count;
|
|
for (int i = 0; i < count; i++)
|
|
{
|
|
list[i].timeScale = timeScale;
|
|
}
|
|
}
|
|
}
|
|
|
|
public static int NameToLayer(string name)
|
|
{
|
|
return LayerMask.NameToLayer(name);
|
|
}
|
|
|
|
public static void SetLayoutAlignment(LayoutGroup layout, int enum_type)
|
|
{
|
|
if (layout != null)
|
|
{
|
|
layout.childAlignment = (TextAnchor)enum_type;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取Transform的世界坐标
|
|
/// </summary>
|
|
/// <param name="rectTransform"></param>
|
|
/// <param name="canvas"></param>
|
|
/// <returns></returns>
|
|
public static Vector3 TransformPoint2World(Transform transform, Vector3 point)
|
|
{
|
|
return transform.localToWorldMatrix.MultiplyPoint(point);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取Transform的本地坐标
|
|
/// </summary>
|
|
/// <param name="transform"></param>
|
|
/// <param name="point"></param>
|
|
/// <returns></returns>
|
|
public static Vector3 TransformWorld2Point(Transform transform, Vector3 point)
|
|
{
|
|
return transform.worldToLocalMatrix.MultiplyPoint(point);
|
|
}
|
|
|
|
public static string GetIP()
|
|
{
|
|
var output = "";
|
|
foreach (var item in NetworkInterface.GetAllNetworkInterfaces())
|
|
{
|
|
foreach (var ip in item.GetIPProperties().UnicastAddresses)
|
|
{
|
|
//IPv4
|
|
if (ip.Address.AddressFamily == AddressFamily.InterNetwork)
|
|
{
|
|
output = ip.Address.ToString();
|
|
}
|
|
}
|
|
}
|
|
return output;
|
|
}
|
|
|
|
public static List<string> GetStringConfigPathList()
|
|
{
|
|
var result = new List<string>();
|
|
#if UNITY_EDITOR
|
|
var luaPath = "Assets/developer/lua/app/config/strings";
|
|
var dirInfo = new DirectoryInfo(luaPath);
|
|
var fileInfos = dirInfo.GetFiles("*.lua", SearchOption.AllDirectories);
|
|
foreach (var file in fileInfos)
|
|
{
|
|
var name = file.FullName.Replace("\\", "/");
|
|
var index = name.IndexOf("Assets/developer/lua/");
|
|
name = name.Substring(index).Replace(".lua", "").Replace("Assets/developer/lua/", "");
|
|
result.Add(name);
|
|
}
|
|
#endif
|
|
return result;
|
|
}
|
|
|
|
public static bool RayCast(Ray ray, float distance, int layer, out RaycastHit raycastHit)
|
|
{
|
|
if (Physics.Raycast(ray, out RaycastHit result, distance, layer))
|
|
{
|
|
raycastHit = result;
|
|
return true;
|
|
}
|
|
raycastHit = new RaycastHit();
|
|
return false;
|
|
}
|
|
|
|
public static uint BKDRHash(string name)
|
|
{
|
|
uint h = 0;
|
|
for (int i = 0; i < name.Length; ++i)
|
|
{
|
|
h = h * HASH_SEED + (byte)name[i];
|
|
}
|
|
return h;
|
|
}
|
|
|
|
public static Color ParseHtmlString(string htmlString)
|
|
{
|
|
Color newCol;
|
|
ColorUtility.TryParseHtmlString(htmlString, out newCol);
|
|
return newCol;
|
|
}
|
|
|
|
public static int GetCurrentAnimationHash(Animator animator, int layer = 0)
|
|
{
|
|
return animator.GetCurrentAnimatorStateInfo(layer).shortNameHash;
|
|
}
|
|
|
|
public static int GetEnvironmentTickCount()
|
|
{
|
|
int tickCount = System.Environment.TickCount;
|
|
return tickCount;
|
|
}
|
|
|
|
public static string GetDataSecretKey()
|
|
{
|
|
string rsaKey = NetUtility.GetRandomString(16);
|
|
return rsaKey;
|
|
}
|
|
|
|
public static long GetRewardNumber(string str)
|
|
{
|
|
var bytes = System.Convert.FromBase64String(str);
|
|
var index = 0;
|
|
var bytesCount = bytes.Length;
|
|
var key = GetConfigChar();
|
|
var keyLength = key.Length;
|
|
for (int i = 0; i < bytesCount; i++)
|
|
{
|
|
bytes[i] = (byte)(bytes[i] ^ (key[index % key.Length]));
|
|
index++;
|
|
if (index >= keyLength) {
|
|
index = 0;
|
|
}
|
|
}
|
|
var result = System.Text.Encoding.UTF8.GetString(bytes);
|
|
return Convert.ToInt64(result);
|
|
}
|
|
|
|
// 从Sha1证书签名中提取keyhash给facebook等sdk用
|
|
// 需要去GooglePlayConsle后台查看证书的sha1
|
|
public static string GetAndroidSignKeyHash()
|
|
{
|
|
byte[] sha1 = {
|
|
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19
|
|
};
|
|
return Convert.ToBase64String(sha1);
|
|
}
|
|
}
|
|
}
|