ConditionTable.lua 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. --- 条件注册,触发
  2. ---条件注册
  3. ConditionTable = {}
  4. ConditionTable.__index = ConditionTable
  5. --- 创建一个条件监听容器
  6. function ConditionTable.new()
  7. return setmetatable({}, ConditionTable)
  8. end
  9. --- 获取条件容器
  10. ---@param conditionId any 条件类型
  11. function ConditionTable:cMap(conditionId)
  12. conditionId = tostring(conditionId)
  13. if not self[conditionId] then
  14. self[conditionId] = {}
  15. end
  16. return self[conditionId]
  17. end
  18. --- 注册条件
  19. ---@param conditionId number 条件类型
  20. ---@param cName string 条件名称
  21. ---@param cFun function 条件回调函数
  22. function ConditionTable:register(conditionId, cName, cFun)
  23. local em = self:cMap(conditionId)
  24. if not table.isNullOrEmpty(em) then
  25. gameDebug.error("存在相同的条件【" .. cName .. "】注册 id为【" .. conditionId .. "】")
  26. end
  27. em[cName] = cFun
  28. --gameDebug.printType(_VERSION, "注册条件:", self, em, conditionId, cName)
  29. end
  30. --- 触发条件
  31. ---@param conditionId number 条件类型
  32. ---@param name string 条件名称
  33. ---@param ... any 条件参数
  34. function ConditionTable:triggerCheck(conditionId, ...)
  35. local em = self:cMap(conditionId)
  36. if em then
  37. for k, v in pairs(em) do
  38. local s, e = xpcall(v, debug.traceback, ...)
  39. gameDebug.assertPrintTrace(s, "触发条件", k, "调用异常", ..., e)
  40. return e
  41. end
  42. end
  43. end
  44. --- 条件处理器
  45. ConditionHandler = ConditionTable.new()