304 lines
7.2 KiB
Lua
304 lines
7.2 KiB
Lua
|
|
local setmetatable = setmetatable
|
|||
|
|
|
|||
|
|
function class(classname, super)
|
|||
|
|
local superType = type(super)
|
|||
|
|
local cls
|
|||
|
|
|
|||
|
|
if superType ~= "function" and superType ~= "table" then
|
|||
|
|
superType = nil
|
|||
|
|
super = nil
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
if superType == "function" or (super and super.__ctype == 1) then
|
|||
|
|
-- inherited from native C++ Object
|
|||
|
|
cls = {}
|
|||
|
|
|
|||
|
|
if superType == "table" then
|
|||
|
|
-- copy fields from super
|
|||
|
|
for k,v in pairs(super) do cls[k] = v end
|
|||
|
|
cls.__create = super.__create
|
|||
|
|
cls.super = super
|
|||
|
|
else
|
|||
|
|
cls.__create = super
|
|||
|
|
cls.ctor = function() end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
cls.__cname = classname
|
|||
|
|
cls.__ctype = 1
|
|||
|
|
|
|||
|
|
function cls.new(...)
|
|||
|
|
local instance = cls.__create(...)
|
|||
|
|
-- copy fields from class to native object
|
|||
|
|
for k,v in pairs(cls) do instance[k] = v end
|
|||
|
|
instance.class = cls
|
|||
|
|
instance:ctor(...)
|
|||
|
|
return instance
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
else
|
|||
|
|
-- inherited from Lua Object
|
|||
|
|
if super then
|
|||
|
|
cls = {}
|
|||
|
|
setmetatable(cls, {__index = super})
|
|||
|
|
cls.super = super
|
|||
|
|
else
|
|||
|
|
cls = {ctor = function() end}
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
cls.__cname = classname
|
|||
|
|
cls.__ctype = 2 -- lua
|
|||
|
|
cls.__index = cls
|
|||
|
|
|
|||
|
|
function cls.new(...)
|
|||
|
|
local instance = setmetatable({}, cls)
|
|||
|
|
instance.class = cls
|
|||
|
|
instance:ctor(...)
|
|||
|
|
return instance
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
return cls
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 刘海偏移
|
|||
|
|
function get_offset(full_offset)
|
|||
|
|
if full_offset then
|
|||
|
|
local r = GRoot.inst.width / GRoot.inst.height
|
|||
|
|
if r >= 2 then
|
|||
|
|
local d = (Screen.dpi /160)
|
|||
|
|
return d * 20
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
return 0
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
---lua table 浅拷贝
|
|||
|
|
function membe_clone(orig)
|
|||
|
|
local copy
|
|||
|
|
if type(orig) == "table" then
|
|||
|
|
copy = {}
|
|||
|
|
for orig_key, orig_value in pairs(orig) do
|
|||
|
|
copy[orig_key] = orig_value
|
|||
|
|
end
|
|||
|
|
else -- number, string, boolean, etc
|
|||
|
|
copy = orig
|
|||
|
|
end
|
|||
|
|
return copy
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- lua table 深拷贝
|
|||
|
|
function membe_deep_clone(orig)
|
|||
|
|
local copy
|
|||
|
|
if type(orig) == "table" then
|
|||
|
|
copy = {}
|
|||
|
|
for orig_key, orig_value in pairs(orig) do
|
|||
|
|
copy[membe_deep_clone(orig_key)] = membe_deep_clone(orig_value)
|
|||
|
|
end
|
|||
|
|
else
|
|||
|
|
copy = orig
|
|||
|
|
end
|
|||
|
|
return copy
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
|
|||
|
|
---字符串分割函数
|
|||
|
|
function split(str, delimiter)
|
|||
|
|
if str==nil or str=='' or delimiter==nil then
|
|||
|
|
return nil
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
local result = {}
|
|||
|
|
for match in (str..delimiter):gmatch("(.-)"..delimiter) do
|
|||
|
|
table.insert(result, match)
|
|||
|
|
end
|
|||
|
|
return result
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
|
|||
|
|
function handler( obj,func)
|
|||
|
|
return function(...)
|
|||
|
|
return func(obj, ...)
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--重新require一个lua文件,替代系统文件。
|
|||
|
|
function unimport(moduleName,currentModuleName)
|
|||
|
|
local package = package
|
|||
|
|
local currentModuleNameParts
|
|||
|
|
local moduleFullName = moduleName
|
|||
|
|
local offset = 1
|
|||
|
|
|
|||
|
|
while true do
|
|||
|
|
if string.byte(moduleName, offset) ~= 46 then -- .
|
|||
|
|
moduleFullName = string.sub(moduleName, offset)
|
|||
|
|
if currentModuleNameParts and #currentModuleNameParts > 0 then
|
|||
|
|
moduleFullName = table.concat(currentModuleNameParts, ".") .. "." .. moduleFullName
|
|||
|
|
end
|
|||
|
|
break
|
|||
|
|
end
|
|||
|
|
offset = offset + 1
|
|||
|
|
|
|||
|
|
if not currentModuleNameParts then
|
|||
|
|
if not currentModuleName then
|
|||
|
|
local n,v = debug.getlocal(3, 1)
|
|||
|
|
currentModuleName = v
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
currentModuleNameParts = string.split(currentModuleName, ".")
|
|||
|
|
end
|
|||
|
|
table.remove(currentModuleNameParts, #currentModuleNameParts)
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
package.loaded[moduleFullName] = nil
|
|||
|
|
package.preload[moduleFullName] = nil
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
function table.nums(t)
|
|||
|
|
local count = 0
|
|||
|
|
for k, v in pairs(t) do
|
|||
|
|
count = count + 1
|
|||
|
|
end
|
|||
|
|
return count
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- @param t 要检查的表格(t表示是table)
|
|||
|
|
-- @param table 返回指定表格的所有键(key),它是一个键集合的表格
|
|||
|
|
--]]
|
|||
|
|
function table.keys( t )
|
|||
|
|
local keys = {}
|
|||
|
|
for k, _ in pairs( t ) do
|
|||
|
|
keys[#keys + 1] = k
|
|||
|
|
end
|
|||
|
|
return keys
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
function list_remove(t,item)
|
|||
|
|
for i,v in ipairs(t) do
|
|||
|
|
if v == item then
|
|||
|
|
table.remove(t,i)
|
|||
|
|
break
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
function list_check(t,item)
|
|||
|
|
for i,v in ipairs(t) do
|
|||
|
|
if v == item then
|
|||
|
|
return true
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
return false
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
function list_index(t,item)
|
|||
|
|
for i,v in ipairs(t) do
|
|||
|
|
if v == item then
|
|||
|
|
return i
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
return 0
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
function list_concat(des,tag)
|
|||
|
|
for i = 1, #tag do
|
|||
|
|
table.insert(des, tag[i])
|
|||
|
|
end
|
|||
|
|
return des
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
function vardump(object, label)
|
|||
|
|
local lookupTable = {}
|
|||
|
|
local result = {}
|
|||
|
|
|
|||
|
|
local function _v(v)
|
|||
|
|
if type(v) == "string" then
|
|||
|
|
v = "\"" .. v .. "\""
|
|||
|
|
end
|
|||
|
|
return tostring(v)
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
local function _vardump(object, label, indent, nest)
|
|||
|
|
label = label or "<var>"
|
|||
|
|
local postfix = ""
|
|||
|
|
if nest > 1 then postfix = "," end
|
|||
|
|
if type(object) ~= "table" then
|
|||
|
|
-- if type(label) == "string" then
|
|||
|
|
result[#result +1] = string.format("%s%s = %s%s", indent, label, _v(object), postfix)
|
|||
|
|
-- else
|
|||
|
|
-- result[#result +1] = string.format("%s%s%s", indent, _v(object), postfix)
|
|||
|
|
-- end
|
|||
|
|
elseif not lookupTable[object] then
|
|||
|
|
lookupTable[object] = true
|
|||
|
|
|
|||
|
|
-- if type(label) == "string" then
|
|||
|
|
result[#result +1 ] = string.format("%s%s = {", indent, label)
|
|||
|
|
-- else
|
|||
|
|
-- result[#result +1 ] = string.format("%s{", indent)
|
|||
|
|
-- end
|
|||
|
|
local indent2 = indent .. " "
|
|||
|
|
local keys = {}
|
|||
|
|
local values = {}
|
|||
|
|
for k, v in pairs(object) do
|
|||
|
|
keys[#keys + 1] = k
|
|||
|
|
values[k] = v
|
|||
|
|
end
|
|||
|
|
table.sort(keys, function(a, b)
|
|||
|
|
if type(a) == "number" and type(b) == "number" then
|
|||
|
|
return a < b
|
|||
|
|
else
|
|||
|
|
return tostring(a) < tostring(b)
|
|||
|
|
end
|
|||
|
|
end)
|
|||
|
|
for i, k in ipairs(keys) do
|
|||
|
|
_vardump(values[k], k, indent2, nest + 1)
|
|||
|
|
end
|
|||
|
|
result[#result +1] = string.format("%s}%s", indent, postfix)
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
_vardump(object, label, "", 1)
|
|||
|
|
|
|||
|
|
return table.concat(result, "\n")
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
function sysrandom(min,max)
|
|||
|
|
local num = math.random(min,max)
|
|||
|
|
return num
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
|
|||
|
|
function IsHasDictionary(currentTarget,list)
|
|||
|
|
if list and #list>0 then
|
|||
|
|
for k,v in ipairs(list) do
|
|||
|
|
if v==currentTarget then
|
|||
|
|
return true
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
return false
|
|||
|
|
else
|
|||
|
|
return false
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
|
|||
|
|
function CheckDictionaryFromContent(target,list)
|
|||
|
|
if list and #list>0 then
|
|||
|
|
for k,v in pairs(list) do
|
|||
|
|
if v.card==target then
|
|||
|
|
return true,k
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
else
|
|||
|
|
return false
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
|
|||
|
|
function CombineDictionaryAndRemoveSomeItem(list1,list2)
|
|||
|
|
local tempList=membe_clone(list2)
|
|||
|
|
for i=1,#list1 do
|
|||
|
|
if IsHasDictionary(list1[i],list2)==false then
|
|||
|
|
table.insert(tempList,list1[i])
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
return tempList
|
|||
|
|
end
|