zworld-em/Content/Script/UnLuaDefine.lua

66 lines
1.5 KiB
Lua
Raw Normal View History

2025-05-11 22:07:21 +08:00
local rawget = _G.rawget
local rawset = _G.rawset
local rawequal = _G.rawequal
local type = _G.type
local getmetatable = _G.getmetatable
local require = _G.require
local GetUProperty = GetUProperty
local SetUProperty = SetUProperty
local NotExist = {}
local function Index(t, k)
local mt = getmetatable(t)
local super = mt
while super do
local v = rawget(super, k)
if v ~= nil and not rawequal(v, NotExist) then
rawset(t, k, v)
return v
end
super = rawget(super, "Super")
end
local p = mt[k]
if p ~= nil then
if type(p) == "userdata" then
return GetUProperty(t, p)
elseif type(p) == "function" then
rawset(t, k, p)
elseif rawequal(p, NotExist) then
return nil
end
else
rawset(mt, k, NotExist)
end
return p
end
local function NewIndex(t, k, v)
local mt = getmetatable(t)
local p = mt[k]
if type(p) == "userdata" then
return SetUProperty(t, p, v)
end
rawset(t, k, v)
end
local function Class(super)
local new_class = {}
local super_class = nil
if type(super) == "table" then --lua class
for k,v in pairs(super) do
new_class[k] = v
end
elseif super ~= nil then -- c++ class
super_class = require(super)
end
new_class.__index = Index
new_class.__newindex = NewIndex
new_class.Super = super_class
return new_class
end
_G.import = import
UnLua.Class = Class