源战役客户端
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
 
 
 
 
 

64 行
1.4 KiB

--[[
@实体对象桥接类
--]]
BridgeClass = BridgeClass or BaseClass()
local BridgeClass = BridgeClass
function BridgeClass:__init(obj)
self.obj = obj
self.base = {}
--print("BridgeClass:__init()",self._class_type._source)
for k, v in pairs(self._class_type) do
if k ~= "__init" and k ~= "__delete" and k ~= "New" then
if type(v) == "function" and self.obj[k] then
--print("BridgeClass:__init() 替换",k)
self.base[k] = self.obj[k]
self.obj[k] = function(obj,...)
return self[k](self,...)
end
end
end
end
local function obj_get(t, k)
return self.obj[k]
end
local function obj_set(t, k, v)
self.obj[k] = v
end
setmetatable(self.base, {__index = obj_get,__newindex = obj_set})
local function base_get(t, k)
local ret = self._class_type[k]
if ret == nil then
--print("base_get base",k)
ret = self.base[k]
end
return ret
end
local function base_set(t, k, v)
if self.base[k] ~= nil then
--print("base_set base",k,v)
self.base[k] = v
else
--print("base_set self",k,v)
rawset(self,k,v)
end
end
setmetatable(self, {__index = base_get,__newindex = base_set})
end
function BridgeClass:__delete()
if self.obj and not self.obj._use_delete_method then
for k, v in pairs(self.base) do
if k ~= "__init" and k ~= "__delete" and k ~= "New" then
if self._class_type[k] and self.obj[k] then
self.obj[k] = v
--print("BridgeClass:__delete() 还原",k)
end
end
end
end
end