| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- local HeadProtraitData = class('HeadProtraitData', require('DataBase'))
- function HeadProtraitData:ctor()
- self.data = {}
- end
- function HeadProtraitData:Clear()
- self.data = {}
- end
- function HeadProtraitData:Destroy()
- if self.Clear then
- self:Clear()
- end
- self:UnRegisterNetEvents()
- end
- function HeadProtraitData:RegisterNetEvents()
- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_HEAD_INFO_ACK, self.OnHeadInfoAck, self)
- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_ACTIVE_HEAD_ACK, self.OnActiveHeadAck, self)
- end
- function HeadProtraitData:UnRegisterNetEvents()
- ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_HEAD_INFO_ACK)
- ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_ACTIVE_HEAD_ACK)
- end
- function HeadProtraitData:OnHeadInfoAck(data)
- --LogError("[Wboy] SC_HEAD_INFO_ACK " .. Inspect(data))
- if not data then return end
- local headMap = {}
- local condData = data.head_Info
- if condData then
- local conditions = condData.conditions
- if conditions then
- for i = 1, #conditions do
- local condition = conditions[i]
- local cfgId = condition.head_id
- local taskData = ProtocalDataNormal.ParseTaskDataList(condition.task_list)
- local itemData = headMap[cfgId]
- if not itemData then
- itemData = {}
- headMap[cfgId] = itemData
- end
- itemData.cfgId = cfgId
- itemData.taskData = taskData
- itemData.state = self:CheckState(taskData)
- end
- end
- end
- local activeds = data.head_list
- if activeds then
- for i = 1, #activeds do
- local cfgId = activeds[i]
- local itemData = headMap[cfgId]
- if not itemData then
- itemData = {}
- headMap[cfgId] = itemData
- end
- itemData.cfgId = cfgId
- itemData.state = Enum.TaskStateType.Received
- end
- end
- self.data.headMap = headMap
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.USER_HEADPROTRAIT_DATA_TIDY)
- end
- function HeadProtraitData:OnActiveHeadAck(data)
- local cfgId = data.head_id
- local itemData = self.data.headMap[cfgId]
- if not itemData then
- itemData = {}
- self.data.headMap[cfgId] = itemData
- end
- itemData.cfgId = cfgId
- if itemData.state == Enum.TaskStateType.Received then return end
- itemData.state = Enum.TaskStateType.Received
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.USER_HEADPROTRAIT_DATA_CHANGED)
- end
- function HeadProtraitData:IsVaild()
- return self.data.headMap ~= nil
- end
- function HeadProtraitData:SetVaild()
- self.data.headMap = nil
- end
- function HeadProtraitData:SendGetHeadInfo()
- ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_HEAD_INFO_REQ, {})
- end
- function HeadProtraitData:SendActiveHead(cfgId)
- ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_ACTIVE_HEAD_REQ, { head_id = cfgId })
- end
- function HeadProtraitData:SendSetHead(cfgId)
- ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_SET_HEAD_ID_REQ, { head_id = cfgId })
- end
- function HeadProtraitData:GetDataByCfgId(cfgId)
- return self.data.headMap[cfgId]
- end
- function HeadProtraitData:Contains(cfgId)
- return self.data.headMap[cfgId] ~= nil
- end
- function HeadProtraitData:GetState(cfgId)
- local itemData = self.data.headMap[cfgId]
- if itemData then
- return itemData.state
- end
- return Enum.TaskStateType.NoCompeleted
- end
- function HeadProtraitData:GetProgress(cfgId, conditionId, conditionTypeId)
- local itemData = self.data.headMap[cfgId]
- if itemData then
- local conditionData = itemData.taskData[conditionId]
- if conditionData then
- for _, value in pairs(conditionData.progress) do
- if value.key == conditionTypeId then
- return value.value
- end
- end
- end
- end
- return 0
- end
- function HeadProtraitData:CheckState(taskData)
- for key, value in pairs(taskData) do
- local condCfgData = ManagerContainer.CfgMgr:GetCondDataById(key)
- if condCfgData then
- if value.state == Enum.TaskStateType.NoCompeleted then
- return Enum.TaskStateType.NoCompeleted
- end
- else
- taskData[key] = nil
- LogError("ConditionCfg not has id : " .. key)
- return Enum.TaskStateType.NoCompeleted
- end
- end
- return Enum.TaskStateType.CompletedAndNoReceive
- end
- return HeadProtraitData
|