源战役客户端
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

138 рядки
2.9 KiB

4 тижднів тому
  1. local setmetatable = setmetatable
  2. local xpcall = xpcall
  3. local pcall = pcall
  4. local assert = assert
  5. local rawget = rawget
  6. local error = error
  7. local print = print
  8. local traceback = traceback
  9. -- local ilist = ilist
  10. -- local _xpcall = {}
  11. -- setmetatable(_xpcall, _xpcall)
  12. -- _xpcall.__call = function(self, ...)
  13. -- local flag = true
  14. -- local msg = nil
  15. -- if jit then
  16. -- if nil == self.obj then
  17. -- flag, msg = xpcall(self.func, traceback, ...)
  18. -- else
  19. -- flag, msg = xpcall(self.func, traceback, self.obj, ...)
  20. -- end
  21. -- else
  22. -- local args = {...}
  23. -- if nil == self.obj then
  24. -- local func = function() self.func(unpack(args)) end
  25. -- flag, msg = xpcall(func, traceback)
  26. -- else
  27. -- local func = function() self.func(self.obj, unpack(args)) end
  28. -- flag, msg = xpcall(func, traceback)
  29. -- end
  30. -- end
  31. -- return flag, msg
  32. -- end
  33. -- _xpcall.__eq = function(lhs, rhs)
  34. -- return lhs.func == rhs.func and lhs.obj == rhs.obj
  35. -- end
  36. -- local function xfunctor(func, obj)
  37. -- local st = {func = func, obj = obj}
  38. -- setmetatable(st, _xpcall)
  39. -- return st
  40. -- end
  41. -- local _pcall = {}
  42. -- _pcall.__call = function(self, ...)
  43. -- local flag = true
  44. -- local msg = nil
  45. -- if nil == self.obj then
  46. -- flag, msg = pcall(self.func, ...)
  47. -- else
  48. -- flag, msg = pcall(self.func, self.obj, ...)
  49. -- end
  50. -- return flag, msg
  51. -- end
  52. -- _pcall.__eq = function(lhs, rhs)
  53. -- return lhs.func == rhs.func and lhs.obj == rhs.obj
  54. -- end
  55. -- local function functor(func, obj)
  56. -- local st = {func = func, obj = obj}
  57. -- setmetatable(st, _pcall)
  58. -- return st
  59. -- end
  60. -- setmetatable(_event, _event)
  61. local function event()
  62. local _event = {callback_list = {}}
  63. function _event:Add(func, obj)
  64. obj = obj or false
  65. _event.callback_list[func] = obj
  66. end
  67. function _event:Remove(func, obj)
  68. _event.callback_list[func] = nil
  69. end
  70. -- function _event:Count()
  71. -- return _event.callback_list.length
  72. -- end
  73. -- function _event:Clear()
  74. -- _event.callback_list:clear()
  75. -- end
  76. function _event:CallFunc(...)
  77. local callback_list = _event.callback_list
  78. for func, obj in pairs(callback_list) do
  79. func(obj, ...)
  80. end
  81. end
  82. return _event
  83. end
  84. UpdateBeat = event()
  85. LateUpdateBeat = event()
  86. FixedUpdateBeat = event()
  87. -- CoUpdateBeat = event("CoUpdate") --只在协同使用
  88. local Time = Time
  89. local UpdateBeat = UpdateBeat
  90. local LateUpdateBeat = LateUpdateBeat
  91. local FixedUpdateBeat = FixedUpdateBeat
  92. -- local CoUpdateBeat = CoUpdateBeat
  93. --逻辑update
  94. function Update(deltaTime, unscaledDeltaTime)
  95. Time:SetDeltaTime(deltaTime, unscaledDeltaTime)
  96. UpdateBeat:CallFunc()
  97. end
  98. function LateUpdate()
  99. LateUpdateBeat:CallFunc()
  100. -- CoUpdateBeat()
  101. Time:SetFrameCount()
  102. end
  103. --物理update
  104. function FixedUpdate(fixedDeltaTime)
  105. Time:SetFixedDelta(fixedDeltaTime)
  106. -- FixedUpdateBeat:CallFunc()
  107. end
  108. function PrintEvents()
  109. UpdateBeat:Dump()
  110. FixedUpdateBeat:Dump()
  111. end