HeadProtraitData.lua 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. local HeadProtraitData = class('HeadProtraitData', require('DataBase'))
  2. function HeadProtraitData:ctor()
  3. self.data = {}
  4. end
  5. function HeadProtraitData:Clear()
  6. self.data = {}
  7. end
  8. function HeadProtraitData:Destroy()
  9. if self.Clear then
  10. self:Clear()
  11. end
  12. self:UnRegisterNetEvents()
  13. end
  14. function HeadProtraitData:RegisterNetEvents()
  15. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_HEAD_INFO_ACK, self.OnHeadInfoAck, self)
  16. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_ACTIVE_HEAD_ACK, self.OnActiveHeadAck, self)
  17. end
  18. function HeadProtraitData:UnRegisterNetEvents()
  19. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_HEAD_INFO_ACK)
  20. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_ACTIVE_HEAD_ACK)
  21. end
  22. function HeadProtraitData:OnHeadInfoAck(data)
  23. --LogError("[Wboy] SC_HEAD_INFO_ACK " .. Inspect(data))
  24. if not data then return end
  25. local headMap = {}
  26. local condData = data.head_Info
  27. if condData then
  28. local conditions = condData.conditions
  29. if conditions then
  30. for i = 1, #conditions do
  31. local condition = conditions[i]
  32. local cfgId = condition.head_id
  33. local taskData = ProtocalDataNormal.ParseTaskDataList(condition.task_list)
  34. local itemData = headMap[cfgId]
  35. if not itemData then
  36. itemData = {}
  37. headMap[cfgId] = itemData
  38. end
  39. itemData.cfgId = cfgId
  40. itemData.taskData = taskData
  41. itemData.state = self:CheckState(taskData)
  42. end
  43. end
  44. end
  45. local activeds = data.head_list
  46. if activeds then
  47. for i = 1, #activeds do
  48. local cfgId = activeds[i]
  49. local itemData = headMap[cfgId]
  50. if not itemData then
  51. itemData = {}
  52. headMap[cfgId] = itemData
  53. end
  54. itemData.cfgId = cfgId
  55. itemData.state = Enum.TaskStateType.Received
  56. end
  57. end
  58. self.data.headMap = headMap
  59. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.USER_HEADPROTRAIT_DATA_TIDY)
  60. end
  61. function HeadProtraitData:OnActiveHeadAck(data)
  62. local cfgId = data.head_id
  63. local itemData = self.data.headMap[cfgId]
  64. if not itemData then
  65. itemData = {}
  66. self.data.headMap[cfgId] = itemData
  67. end
  68. itemData.cfgId = cfgId
  69. if itemData.state == Enum.TaskStateType.Received then return end
  70. itemData.state = Enum.TaskStateType.Received
  71. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.USER_HEADPROTRAIT_DATA_CHANGED)
  72. end
  73. function HeadProtraitData:IsVaild()
  74. return self.data.headMap ~= nil
  75. end
  76. function HeadProtraitData:SetVaild()
  77. self.data.headMap = nil
  78. end
  79. function HeadProtraitData:SendGetHeadInfo()
  80. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_HEAD_INFO_REQ, {})
  81. end
  82. function HeadProtraitData:SendActiveHead(cfgId)
  83. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_ACTIVE_HEAD_REQ, { head_id = cfgId })
  84. end
  85. function HeadProtraitData:SendSetHead(cfgId)
  86. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_SET_HEAD_ID_REQ, { head_id = cfgId })
  87. end
  88. function HeadProtraitData:GetDataByCfgId(cfgId)
  89. return self.data.headMap[cfgId]
  90. end
  91. function HeadProtraitData:Contains(cfgId)
  92. return self.data.headMap[cfgId] ~= nil
  93. end
  94. function HeadProtraitData:GetState(cfgId)
  95. local itemData = self.data.headMap[cfgId]
  96. if itemData then
  97. return itemData.state
  98. end
  99. return Enum.TaskStateType.NoCompeleted
  100. end
  101. function HeadProtraitData:GetProgress(cfgId, conditionId, conditionTypeId)
  102. local itemData = self.data.headMap[cfgId]
  103. if itemData then
  104. local conditionData = itemData.taskData[conditionId]
  105. if conditionData then
  106. for _, value in pairs(conditionData.progress) do
  107. if value.key == conditionTypeId then
  108. return value.value
  109. end
  110. end
  111. end
  112. end
  113. return 0
  114. end
  115. function HeadProtraitData:CheckState(taskData)
  116. for key, value in pairs(taskData) do
  117. local condCfgData = ManagerContainer.CfgMgr:GetCondDataById(key)
  118. if condCfgData then
  119. if value.state == Enum.TaskStateType.NoCompeleted then
  120. return Enum.TaskStateType.NoCompeleted
  121. end
  122. else
  123. taskData[key] = nil
  124. LogError("ConditionCfg not has id : " .. key)
  125. return Enum.TaskStateType.NoCompeleted
  126. end
  127. end
  128. return Enum.TaskStateType.CompletedAndNoReceive
  129. end
  130. return HeadProtraitData