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 "" 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