源战役客户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

63 lines
1.4 KiB

  1. --[[
  2. @
  3. --]]
  4. BridgeClass = BridgeClass or BaseClass()
  5. local BridgeClass = BridgeClass
  6. function BridgeClass:__init(obj)
  7. self.obj = obj
  8. self.base = {}
  9. --print("BridgeClass:__init()",self._class_type._source)
  10. for k, v in pairs(self._class_type) do
  11. if k ~= "__init" and k ~= "__delete" and k ~= "New" then
  12. if type(v) == "function" and self.obj[k] then
  13. --print("BridgeClass:__init() 替换",k)
  14. self.base[k] = self.obj[k]
  15. self.obj[k] = function(obj,...)
  16. return self[k](self,...)
  17. end
  18. end
  19. end
  20. end
  21. local function obj_get(t, k)
  22. return self.obj[k]
  23. end
  24. local function obj_set(t, k, v)
  25. self.obj[k] = v
  26. end
  27. setmetatable(self.base, {__index = obj_get,__newindex = obj_set})
  28. local function base_get(t, k)
  29. local ret = self._class_type[k]
  30. if ret == nil then
  31. --print("base_get base",k)
  32. ret = self.base[k]
  33. end
  34. return ret
  35. end
  36. local function base_set(t, k, v)
  37. if self.base[k] ~= nil then
  38. --print("base_set base",k,v)
  39. self.base[k] = v
  40. else
  41. --print("base_set self",k,v)
  42. rawset(self,k,v)
  43. end
  44. end
  45. setmetatable(self, {__index = base_get,__newindex = base_set})
  46. end
  47. function BridgeClass:__delete()
  48. if self.obj and not self.obj._use_delete_method then
  49. for k, v in pairs(self.base) do
  50. if k ~= "__init" and k ~= "__delete" and k ~= "New" then
  51. if self._class_type[k] and self.obj[k] then
  52. self.obj[k] = v
  53. --print("BridgeClass:__delete() 还原",k)
  54. end
  55. end
  56. end
  57. end
  58. end