307 lines
7 KiB
Lua
307 lines
7 KiB
Lua
|
local Json = require("XCommon/Json")
|
|||
|
local type = type
|
|||
|
local table = table
|
|||
|
local string = string
|
|||
|
local math = math
|
|||
|
local next = next
|
|||
|
local debug = debug
|
|||
|
local tostring = tostring
|
|||
|
|
|||
|
local tableInsert = table.insert
|
|||
|
local stringMatch = string.match
|
|||
|
local mathModf = math.modf
|
|||
|
|
|||
|
XTool = XTool or {}
|
|||
|
|
|||
|
XTool.UObjIsNil = function(uobj)
|
|||
|
return uobj == nil or not uobj:Exist()
|
|||
|
end
|
|||
|
|
|||
|
XTool.LoopMap = function(map, func)
|
|||
|
if type(map) == "userdata" then
|
|||
|
if not map then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
local e = map:GetEnumerator()
|
|||
|
while e:MoveNext() do
|
|||
|
func(e.Current.Key, e.Current.Value)
|
|||
|
end
|
|||
|
e:Dispose()
|
|||
|
elseif type(map) == "table" then
|
|||
|
for key, value in pairs(map) do
|
|||
|
func(key, value)
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
XTool.LoopCollection = function(collection, func)
|
|||
|
if type(collection) == "table" then
|
|||
|
for _, value in pairs(collection) do
|
|||
|
func(value)
|
|||
|
end
|
|||
|
elseif type(collection) == "userdata" then
|
|||
|
for i = 0, collection.Count - 1 do
|
|||
|
func(collection[i])
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
XTool.LoopArray = function(collection, func)
|
|||
|
for i = 0, collection.Length - 1 do
|
|||
|
func(collection[i])
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
XTool.CsList2LuaTable = function(collection)
|
|||
|
local ret = {}
|
|||
|
for i = 0, collection.Count - 1 do
|
|||
|
tableInsert(ret, collection[i])
|
|||
|
end
|
|||
|
return ret
|
|||
|
end
|
|||
|
|
|||
|
XTool.CsMap2LuaTable = function(map)
|
|||
|
local ret = {}
|
|||
|
local e = map:GetEnumerator()
|
|||
|
while e:MoveNext() do
|
|||
|
ret[e.Current.Key] = e.Current.Value
|
|||
|
end
|
|||
|
e:Dispose()
|
|||
|
return ret
|
|||
|
end
|
|||
|
|
|||
|
XTool.CsObjectFields2LuaTable = function(CsObj)
|
|||
|
if CsObj == nil or type(CsObj) ~= "userdata" then
|
|||
|
return {}
|
|||
|
end
|
|||
|
local jsonStr = CS.XTool.SerializeObject(CsObj)
|
|||
|
return Json.decode(jsonStr)
|
|||
|
end
|
|||
|
|
|||
|
XTool.Clone = function(t)
|
|||
|
local cache = {}
|
|||
|
|
|||
|
local function clone(o)
|
|||
|
if type(o) ~= "table" then return o end
|
|||
|
if cache[o] then return cache[o] end
|
|||
|
|
|||
|
local newO = {}
|
|||
|
for k, v in pairs(o) do
|
|||
|
newO[clone(k)] = clone(v)
|
|||
|
end
|
|||
|
|
|||
|
local mTable = getmetatable(o)
|
|||
|
if type(mTable) == "table" then
|
|||
|
setmetatable(newO, mTable)
|
|||
|
end
|
|||
|
|
|||
|
cache[o] = newO
|
|||
|
|
|||
|
return newO
|
|||
|
end
|
|||
|
|
|||
|
return clone(t)
|
|||
|
end
|
|||
|
|
|||
|
XTool.GetFileNameWithoutExtension = function(path)
|
|||
|
return stringMatch(path, "[./]*([^/]*)%.%w+")
|
|||
|
end
|
|||
|
|
|||
|
XTool.GetFileName = function(path)
|
|||
|
return stringMatch(path, "[./]*([^/]*%.%w+)")
|
|||
|
end
|
|||
|
|
|||
|
XTool.GetExtension = function(path)
|
|||
|
return stringMatch(path, "[./]*(%.%w+)")
|
|||
|
end
|
|||
|
|
|||
|
XTool.GetTableCount = function(list)
|
|||
|
if type(list) ~= "table" then
|
|||
|
XLog.Error(" XTool.GetTableCount 函数错误 : 参数list需要是table类型的, list:" .. type(list))
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
local count = 0
|
|||
|
for _, _ in pairs(list) do
|
|||
|
count = count + 1
|
|||
|
end
|
|||
|
|
|||
|
return count
|
|||
|
end
|
|||
|
|
|||
|
local NumberText = {
|
|||
|
[0] = "",
|
|||
|
[1] = CS.XTextManager.GetText("One"),
|
|||
|
[2] = CS.XTextManager.GetText("Two"),
|
|||
|
[3] = CS.XTextManager.GetText("Three"),
|
|||
|
[4] = CS.XTextManager.GetText("Four"),
|
|||
|
[5] = CS.XTextManager.GetText("Five"),
|
|||
|
[6] = CS.XTextManager.GetText("Six"),
|
|||
|
[7] = CS.XTextManager.GetText("Seven"),
|
|||
|
[8] = CS.XTextManager.GetText("Eight"),
|
|||
|
[9] = CS.XTextManager.GetText("Nine"),
|
|||
|
[10] = CS.XTextManager.GetText("Ten"),
|
|||
|
}
|
|||
|
|
|||
|
XTool.ParseNumberString = function(num)
|
|||
|
return NumberText[mathModf(num / 10)] .. NumberText[num % 10]
|
|||
|
end
|
|||
|
|
|||
|
XTool.ConvertNumberString = function(num)
|
|||
|
return NumberText[num] or ""
|
|||
|
end
|
|||
|
|
|||
|
XTool.MatchEmoji = function(text)
|
|||
|
return stringMatch(text, '%[%d%d%d%d%d%]')
|
|||
|
end
|
|||
|
|
|||
|
XTool.CopyToClipboard = function(text)
|
|||
|
CS.XAppPlatBridge.CopyStringToClipboard(tostring(text))
|
|||
|
XUiManager.TipText("Clipboard", XUiManager.UiTipType.Tip)
|
|||
|
end
|
|||
|
|
|||
|
XTool.ToArray = function(t)
|
|||
|
local array = {}
|
|||
|
for _, v in pairs(t) do
|
|||
|
table.insert(array, v)
|
|||
|
end
|
|||
|
return array
|
|||
|
end
|
|||
|
|
|||
|
XTool.MergeArray = function(...)
|
|||
|
local res = {}
|
|||
|
for _, t in pairs({ ... }) do
|
|||
|
if type(t) == "table" then
|
|||
|
for _, v in pairs(t) do
|
|||
|
table.insert(res, v)
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
return res
|
|||
|
end
|
|||
|
|
|||
|
function XTool.ReverseList(list)
|
|||
|
if not list then return end
|
|||
|
|
|||
|
local length = #list
|
|||
|
local middle = math.floor(length * 0.5)
|
|||
|
for i = 1, middle do
|
|||
|
local reverseI = length - i + 1
|
|||
|
local tmp = list[i]
|
|||
|
list[i] = list[reverseI]
|
|||
|
list[reverseI] = tmp
|
|||
|
end
|
|||
|
|
|||
|
return list
|
|||
|
end
|
|||
|
|
|||
|
XTool.Waterfall = function(cbList)
|
|||
|
local last
|
|||
|
for i = #cbList, 1, -1 do
|
|||
|
if type(cbList[i]) == "function" then
|
|||
|
local nextCb = last
|
|||
|
local cb = function()
|
|||
|
cbList[i](nextCb)
|
|||
|
end
|
|||
|
last = cb
|
|||
|
else
|
|||
|
XLog.Error("XTool.Waterfall error, unit is not function")
|
|||
|
end
|
|||
|
end
|
|||
|
if last then
|
|||
|
last()
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
XTool.InitUiObject = function(targetObj)
|
|||
|
targetObj.Obj = targetObj.Transform:GetComponent("UiObject")
|
|||
|
if targetObj.Obj ~= nil then
|
|||
|
for i = 0, targetObj.Obj.NameList.Count - 1 do
|
|||
|
targetObj[targetObj.Obj.NameList[i]] = targetObj.Obj.ObjList[i]
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
XTool.InitUiObjectByUi = function(targetUi, uiPrefab)
|
|||
|
targetUi.GameObject = uiPrefab.gameObject
|
|||
|
targetUi.Transform = uiPrefab.transform
|
|||
|
XTool.InitUiObject(targetUi)
|
|||
|
return targetUi
|
|||
|
end
|
|||
|
|
|||
|
XTool.DestroyChildren = function(gameObject)
|
|||
|
if not gameObject then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
if XTool.UObjIsNil(gameObject) then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
local transform = gameObject.transform
|
|||
|
for i = 0, transform.childCount - 1, 1 do
|
|||
|
CS.UnityEngine.Object.Destroy(transform:GetChild(i).gameObject)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
XTool.IsTableEmpty = function(tb)
|
|||
|
return not tb or not next(tb)
|
|||
|
end
|
|||
|
|
|||
|
XTool.IsNumberValid = function(number)
|
|||
|
return number and number ~= 0
|
|||
|
end
|
|||
|
|
|||
|
XTool.GetStackTraceName = function(level)
|
|||
|
level = level or 3
|
|||
|
local info
|
|||
|
for i = level, 2, -1 do
|
|||
|
info = debug.getinfo(i)
|
|||
|
if info then
|
|||
|
break
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
local name = "lua:" .. tostring(info.source) .. "_" .. tostring(info.currentline)
|
|||
|
return name
|
|||
|
end
|
|||
|
|
|||
|
-- datas : 只接受数组
|
|||
|
XTool.TableRemove = function(datas, removeValue)
|
|||
|
local removePos = nil
|
|||
|
for index, value in ipairs(datas) do
|
|||
|
if value == removeValue then
|
|||
|
removePos = index
|
|||
|
break
|
|||
|
end
|
|||
|
end
|
|||
|
if removePos then table.remove(datas, removePos) end
|
|||
|
end
|
|||
|
|
|||
|
-- 保留digit位小数
|
|||
|
XTool.MathGetRoundingValue = function(value, digit)
|
|||
|
return math.floor( value * XTool.MathPow(10, digit) ) / XTool.MathPow(10 , digit)
|
|||
|
end
|
|||
|
|
|||
|
XTool.MathPow = function(a, b)
|
|||
|
return a ^ b
|
|||
|
end
|
|||
|
|
|||
|
--随机打乱
|
|||
|
XTool.RandomBreakTableOrder = function(t)
|
|||
|
local index
|
|||
|
local temp
|
|||
|
local total = #t
|
|||
|
for i = 1, total, 1 do
|
|||
|
for j = i + 1, total, 1 do
|
|||
|
index = math.random(j, total);
|
|||
|
temp = t[i];
|
|||
|
t[i] = t[index];
|
|||
|
t[index] = temp;
|
|||
|
break
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
return t
|
|||
|
end
|