local setmetatable = setmetatable local xpcall = xpcall local pcall = pcall local assert = assert local rawget = rawget local error = error local print = print local traceback = traceback -- local ilist = ilist -- local _xpcall = {} -- setmetatable(_xpcall, _xpcall) -- _xpcall.__call = function(self, ...) -- local flag = true -- local msg = nil -- if jit then -- if nil == self.obj then -- flag, msg = xpcall(self.func, traceback, ...) -- else -- flag, msg = xpcall(self.func, traceback, self.obj, ...) -- end -- else -- local args = {...} -- if nil == self.obj then -- local func = function() self.func(unpack(args)) end -- flag, msg = xpcall(func, traceback) -- else -- local func = function() self.func(self.obj, unpack(args)) end -- flag, msg = xpcall(func, traceback) -- end -- end -- return flag, msg -- end -- _xpcall.__eq = function(lhs, rhs) -- return lhs.func == rhs.func and lhs.obj == rhs.obj -- end -- local function xfunctor(func, obj) -- local st = {func = func, obj = obj} -- setmetatable(st, _xpcall) -- return st -- end -- local _pcall = {} -- _pcall.__call = function(self, ...) -- local flag = true -- local msg = nil -- if nil == self.obj then -- flag, msg = pcall(self.func, ...) -- else -- flag, msg = pcall(self.func, self.obj, ...) -- end -- return flag, msg -- end -- _pcall.__eq = function(lhs, rhs) -- return lhs.func == rhs.func and lhs.obj == rhs.obj -- end -- local function functor(func, obj) -- local st = {func = func, obj = obj} -- setmetatable(st, _pcall) -- return st -- end -- setmetatable(_event, _event) local function event() local _event = {callback_list = {}} function _event:Add(func, obj) obj = obj or false _event.callback_list[func] = obj end function _event:Remove(func, obj) _event.callback_list[func] = nil end -- function _event:Count() -- return _event.callback_list.length -- end -- function _event:Clear() -- _event.callback_list:clear() -- end function _event:CallFunc(...) local callback_list = _event.callback_list for func, obj in pairs(callback_list) do func(obj, ...) end end return _event end UpdateBeat = event() LateUpdateBeat = event() FixedUpdateBeat = event() -- CoUpdateBeat = event("CoUpdate") --只在协同使用 local Time = Time local UpdateBeat = UpdateBeat local LateUpdateBeat = LateUpdateBeat local FixedUpdateBeat = FixedUpdateBeat -- local CoUpdateBeat = CoUpdateBeat --逻辑update function Update(deltaTime, unscaledDeltaTime) Time:SetDeltaTime(deltaTime, unscaledDeltaTime) UpdateBeat:CallFunc() end function LateUpdate() LateUpdateBeat:CallFunc() -- CoUpdateBeat() Time:SetFrameCount() end --物理update function FixedUpdate(fixedDeltaTime) Time:SetFixedDelta(fixedDeltaTime) -- FixedUpdateBeat:CallFunc() end function PrintEvents() UpdateBeat:Dump() FixedUpdateBeat:Dump() end