local UIChangeHeadView = require("UIRoleMessage/UIChangeHeadView_Generate")
function UIChangeHeadView:OnAwake(data)
self.controller = require("UIRoleMessage/UIChangeHeadCtr")
self.controller:Init(self)
self.controller:SetData(data)
end
function UIChangeHeadView:AddEventListener()
ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.USER_HEADPROTRAIT_CHANGED, self, self.OnChangeHeadEvent)
ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.USER_HEADPROTRAIT_DATA_CHANGED, self, self.OnHeadDataChanged)
end
function UIChangeHeadView:FillContent(data, uiBase)
self.uiBase = uiBase
local gameObject = self.uiBase:GetRoot()
if gameObject ~= nil then
self.gameObject = gameObject
self.transform = gameObject.transform
end
self:InitGenerate(self.transform, data)
self:Init()
end
function UIChangeHeadView:Init()
self.conditionTxts = { self.conditionTxt }
--self:RefreshHeadIcon()
self:OpenChangeHead()
end
function UIChangeHeadView:RemoveEventListener()
ManagerContainer.LuaEventMgr:Unregister(self.uiData.name)
end
function UIChangeHeadView:AddUIEventListener()
ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name)
self.uiBase:AddButtonEventListener(self.btnClose.button, self, self.OnClickCloseChangeHead)
--self.uiBase:AddButtonEventListener(self.alpha.button, self, self.OnClickCloseChangeHead)
self.uiBase:AddButtonEventListener(self.unlockBtn.button, self, self.OnClickChangeHeadUnlock)
self.uiBase:AddButtonEventListener(self.usedBtn.button, self, self.OnClickChangeHeadUse)
self.uiBase:AddButtonEventListener(self.AnyBtn.button, self, self.OnClickCloseChangeHead)
end
function UIChangeHeadView:OnHide()
end
function UIChangeHeadView:OnShow(data)
self.controller:SetData(data)
self:Init()
end
function UIChangeHeadView:OnClose()
end
function UIChangeHeadView:OnDispose()
self.changeList.loopVerticalScrollRect:ClearCells()
if self.conditionTxts then
for _, value in pairs(self.conditionTxts) do
-- self.changeHead.conditionTxt其它地方有释放,这里可处理,也可不处理,目前不处理
if value ~= self.conditionTxt then
if tolua.getpeer(value) then
tolua.setpeer(value, nil)
end
end
end
end
end
----Custom start----
function UIChangeHeadView:OnChangeHeadEvent()
--self:RefreshHeadIcon()
self.controller:RefreshHeadPortraitsSort()
self:RefreshGridView()
self:RefreshContent()
end
function UIChangeHeadView:OnHeadDataChanged()
self:RefreshContent();
end
function UIChangeHeadView:OnHeadDataEvent(isInit)
self.controller:RefreshHeadPortraitsSort()
if isInit then
self:OpenChangeHead()
else
self:RefreshChangeHead()
end
end
function UIChangeHeadView:OpenChangeHead()
--[[
if not ManagerContainer.DataMgr.HeadProtraitData:IsVaild() then
ManagerContainer.DataMgr.HeadProtraitData:SendGetHeadInfo()
return
end
]]--
-- 获得可换头像列表
local datas = self.controller:GetHeadPortraits()
self.curSelectHeadId = ManagerContainer.DataMgr.UserData:GetUserHeadPortraitId() or datas[1].cfgId
self:RefreshContent()
CommonUtil.LoopGridViewEleCreate(self,
self.changeList.loopVerticalScrollRect,
self.content.gridLayoutGroup,
datas,
0,
function(itemlua, idx)
local data = datas[idx + 1]
data.selected = (self.curSelectHeadId == data.cfgId)
CommonUtil.UpdateItemPrefab(self, itemlua, data, nil, self, self.OnClickHeadItem)
end)
end
--[[
function UIChangeHeadView:RefreshHeadData(isInit)
if isInit then
self:OpenChangeHead()
else
self:RefreshChangeHead()
end
end
]]--
function UIChangeHeadView:RefreshChangeHead()
self:RefreshGridView()
self:RefreshContent()
end
function UIChangeHeadView:OnClickHeadItem(btn, params)
local cfgData = params[0]
self.curSelectHeadId = cfgData.cfgId
self:RefreshChangeHead()
end
function UIChangeHeadView:RefreshGridView()
self.changeList.loopVerticalScrollRect:RefreshCells()
end
function UIChangeHeadView:RefreshContent()
local HeadProtraitData = ManagerContainer.DataMgr.HeadProtraitData
local state = HeadProtraitData:GetState(self.curSelectHeadId)
local canUnlock = (state == Enum.TaskStateType.CompletedAndNoReceive)
local unlocked = (state == Enum.TaskStateType.Received)
local used = (ManagerContainer.DataMgr.UserData:GetUserHeadPortraitId() == self.curSelectHeadId)
self.usedBtn.gameObject:SetActive(unlocked);
self.unlockBtn.gameObject:SetActive(not unlocked);
if unlocked then
self.unlockConditions:SetActive(false)
self.usedBtn.button.interactable = (not used);
if used then
self.text.text.text = I18N.T("BtnUsing"); --使用中
else
self.text.text.text = I18N.T("BtnChange"); --更换
end
else
self.unlockConditions:SetActive(true)
self.unlockBtn.button.interactable = canUnlock;
local cfgData = ManagerContainer.CfgMgr:GetHeadPortraitDataById(self.curSelectHeadId)
local conditions = nil
local conditionId = nil
if cfgData then
conditionId = cfgData.UnlockCondition
local unlockCondCfgData = ManagerContainer.CfgMgr:GetCondDataById(cfgData.UnlockCondition)
if unlockCondCfgData then
local condition = unlockCondCfgData.Condition
if type(condition[1]) == 'table' then
conditions = condition
else
conditions = {condition}
end
end
end
local count = #self.conditionTxts
local vaildNum = conditions and #conditions or 0
for i = 1, vaildNum do
local txt = self.conditionTxts[i]
if not txt then
txt = UnityEngine.GameObject.Instantiate(self.conditionTxt)
txt.transform.parent = self.conditionTxt.transform.parent
txt.transform.localPosition = Vector3.zero
txt.transform.localRotation = Quaternion.identity
txt.transform.localScale = Vector3.one
if tolua.getpeer(txt) == nil then
tolua.setpeer(txt, {})
end
txt.text = txt:GetComponent(Enum.TypeInfo.Text)
self.conditionTxts[i] = txt
end
local condition = conditions[i]
local max = condition[3]
local str
local progress = HeadProtraitData:GetProgress(self.curSelectHeadId, conditionId, condition[1])
if progress >= max or canUnlock then
str = ' (' .. progress .. '/' .. max .. ')'
else
str = ' (' .. progress .. '/' .. max .. ')'
end
txt.text.text = CommonUtil.TaskDescParse(condition) .. str
txt:SetActive(true)
end
-- 隐藏多余显示
for i = vaildNum + 1, count do
local txt = self.conditionTxts[i]
if txt then
txt:SetActive(false)
end
end
end
end
function UIChangeHeadView:OnClickCloseChangeHead()
ManagerContainer.LuaUIMgr:ClosePage(Enum.UIPageName.UIChangeHead);
end
function UIChangeHeadView:OnClickChangeHeadUnlock()
local errorCode = self.controller:GetActiveHeadProtraitError(self.curSelectHeadId)
if errorCode == 0 then
ManagerContainer.DataMgr.HeadProtraitData:SendActiveHead(self.curSelectHeadId)
else
ManagerContainer.LuaUIMgr:ErrorNoticeDisplay(errorCode)
end
end
function UIChangeHeadView:OnClickChangeHeadUse()
local errorCode = self.controller:GetSetHeadProtraitError(self.curSelectHeadId)
if errorCode == 0 then
ManagerContainer.DataMgr.HeadProtraitData:SendSetHead(self.curSelectHeadId)
else
ManagerContainer.LuaUIMgr:ErrorNoticeDisplay(errorCode)
end
end
return UIChangeHeadView