PGRData/Script/matrix/xui/xuiplayer/XUiPanelSetHeadPortrait.lua

354 lines
No EOL
15 KiB
Lua

local XUiPanelSetHeadPortrait = XClass(nil, "XUiPanelSetHeadPortrait")
local XUiGridHeadPortrait = require("XUi/XUiPlayer/XUiGridHeadPortrait")
local XUiGridHeadFrame = require("XUi/XUiPlayer/XUiGridHeadFrame")
function XUiPanelSetHeadPortrait:Ctor(ui, base)
self.GameObject = ui.gameObject
self.Transform = ui.transform
self.Base = base
XTool.InitUiObject(self)
self.TempHeadPortraitId = 0
self.TempHeadFrameId = 0
self.CurrHeadPortraitId = 0
self.CurrHeadFrameId = 0
self.OldPortraitSelectGrig = {}
self.OldFrameSelectGrig = {}
self.PanelHeadPortraitInfo = {}
self.PanelHeadFrameInfo = {}
self.PanelNoSelectInfo = {}
self:InitHeadInfoObj(self.PanelHeadPortraitInfo, self.PanelHeadPortraitInfoObj)
self:InitHeadInfoObj(self.PanelHeadFrameInfo, self.PanelHeadFrameInfoObj)
self:InitHeadInfoObj(self.PanelNoSelectInfo, self.PanelNoSelectInfoObj)
self:AutoAddListener()
self:InitHeadPortraitDynamicTable()
self:InitHeadFrameDynamicTable()
self:BtnGroupInit()
end
function XUiPanelSetHeadPortrait:InitHeadInfoObj(info, obj)
info.GameObject = obj.gameObject
info.Transform = obj.transform
XTool.InitUiObject(info)
end
function XUiPanelSetHeadPortrait:Reset()
self.CurType = XHeadPortraitConfigs.HeadType.HeadPortrait
self.TempHeadFrameId = 0
self.PanelTouxiangGroup:SelectIndex(self.CurType)
self:ShowHeadPortraitRedPoint()
self:ShowHeadFrameRedPoint()
XEventManager.AddEventListener(XEventId.EVENT_HEAD_PORTRAIT_TIMEOUT, self.TimeOutRefresh, self)
end
function XUiPanelSetHeadPortrait:TimeOutRefresh()
self.TempHeadFrameId = 0
self.PanelTouxiangGroup:SelectIndex(self.CurType)
self:ShowHeadPortraitRedPoint()
self:ShowHeadFrameRedPoint()
end
function XUiPanelSetHeadPortrait:BtnGroupInit()
self.CurType = XHeadPortraitConfigs.HeadType.HeadPortrait
self.BtnList = {self.BtnTouxiang, self.BtnTouxiangKuang}
self.PanelTouxiangGroup:Init(self.BtnList, function(index) self:SelectType(index) end)
end
function XUiPanelSetHeadPortrait:SelectType(index)
self.CurType = index
local IsTrueHeadPortrait = self:ShowPreviewHeadPortrait()
local IsTrueHeadFrame = self:ShowPreviewHeadFrame()
if self.CurType == XHeadPortraitConfigs.HeadType.HeadPortrait then
self:ShowHeadPortraitPanel(IsTrueHeadPortrait)
self:SetupHeadPortraitDynamicTable(XDataCenter.HeadPortraitManager.GetHeadPortraitNumById(self.CurrHeadPortraitId, self.CurType))
self.Base:PlayAnimation("PortraitInfoEnable")
elseif self.CurType == XHeadPortraitConfigs.HeadType.HeadFrame then
self:ShowHeadFramePanel(IsTrueHeadFrame)
self:SetupHeadFrameDynamicTable(XDataCenter.HeadPortraitManager.GetHeadPortraitNumById(self.CurrHeadFrameId, self.CurType))
self.Base:PlayAnimation("FrameInfoEnable")
end
end
function XUiPanelSetHeadPortrait:AutoAddListener()
self.PanelHeadPortraitInfo.BtnHeadSure.CallBack = function()
self:OnBtnHeadPortraitSureClick()
end
self.PanelHeadPortraitInfo.BtnHeadCancel.CallBack = function()
self:OnBtnCancelClick()
end
self.PanelHeadFrameInfo.BtnHeadSure.CallBack = function()
self:OnBtnHeadFrameSureClick()
end
self.PanelHeadFrameInfo.BtnHeadCancel.CallBack = function()
self:OnBtnCancelClick()
end
self.BtnClose.CallBack = function()
self:OnBtnCancelClick()
end
end
function XUiPanelSetHeadPortrait:OnBtnCancelClick()
self.TempHeadFrameId = XPlayer.CurrHeadFrameId or 0
self.TempHeadPortraitId = XPlayer.CurrHeadPortraitId or 0
self.Base:HidePanelSetHeadPortrait()
XEventManager.DispatchEvent(XEventId.EVENT_HEAD_PORTRAIT_RESETINFO)
XEventManager.RemoveEventListener(XEventId.EVENT_HEAD_PORTRAIT_TIMEOUT, self.TimeOutRefresh, self)
end
------------------------------------HeadPortrait-----------------------------------------------
function XUiPanelSetHeadPortrait:InitHeadPortraitDynamicTable()
self.HeadPortraitDynamicTable = XDynamicTableNormal.New(self.HeadPortraitScrollView)
self.HeadPortraitDynamicTable:SetProxy(XUiGridHeadPortrait)
self.HeadPortraitDynamicTable:SetDelegate(self)
self.HeadPortraitDynamicTable:SetDynamicEventDelegate(function(event, index, grid)
self:OnHeadPortraitDynamicTableEvent(event, index, grid)
end)
self.GridHeadPortrait.gameObject:SetActiveEx(false)
end
function XUiPanelSetHeadPortrait:SetupHeadPortraitDynamicTable(index)
self.PageDatas = XDataCenter.HeadPortraitManager.GetUnlockedHeadPortraitIds(XHeadPortraitConfigs.HeadType.HeadPortrait)
self.HeadPortraitDynamicTable:SetDataSource(self.PageDatas)
self.HeadPortraitDynamicTable:ReloadDataSync(index and index or 1)
end
function XUiPanelSetHeadPortrait:RefreshHeadPortraitDynamicTable()
self.CurrHeadPortraitId = XPlayer.CurrHeadPortraitId or 0
self.HeadPortraitDynamicTable:ReloadDataSync()
end
function XUiPanelSetHeadPortrait:OnHeadPortraitDynamicTableEvent(event, index, grid)
if event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_ATINDEX then
grid:UpdateGrid(self.PageDatas[index], self)
self:SetHeadPortraitRedPoint(grid)
end
end
function XUiPanelSetHeadPortrait:SetHeadPortraitRedPoint(grid)
grid:ShowRedPoint(XDataCenter.HeadPortraitManager.CheckIsNewHeadPortraitById(grid.HeadPortraitId), false)
end
function XUiPanelSetHeadPortrait:OnBtnHeadPortraitSureClick()
if self.PanelHeadPortraitInfo.BtnHeadSure.ButtonState == CS.UiButtonState.Disable then
return
end
if self.TempHeadPortraitId ~= nil then
if self.TempHeadPortraitId == XPlayer.CurrHeadPortraitId then
return
end
XDataCenter.HeadPortraitManager.ChangeHeadPortrait(self.TempHeadPortraitId, function()
self:RefreshHeadPortraitDynamicTable()
self:SetHeadPortraitImgRole(self.TempHeadPortraitId)
XUiManager.TipText("HeadPortraitUsecomplete")
end)
end
XEventManager.DispatchEvent(XEventId.EVENT_HEAD_PORTRAIT_RESETINFO)
end
function XUiPanelSetHeadPortrait:ShowPreviewHeadPortrait()
self.CurrHeadPortraitId = XPlayer.CurrHeadPortraitId or 0
self.OldPortraitSelectGrig = nil
local IsTrueHeadPortrait = self:SetHeadPortraitImgRole(self.TempHeadPortraitId ~= 0 and self.TempHeadPortraitId or self.CurrHeadPortraitId)
return IsTrueHeadPortrait
end
function XUiPanelSetHeadPortrait:ShowHeadPortraitPanel(IsTrueHeadPortrait)
self.HeadFrameScrollView.gameObject:SetActiveEx(false)
self.PanelHeadFrameInfo.GameObject:SetActiveEx(false)
self.HeadPortraitScrollView.gameObject:SetActiveEx(true)
self.PanelHeadPortraitInfo.GameObject:SetActiveEx(IsTrueHeadPortrait)
self.PanelNoSelectInfo.GameObject:SetActiveEx(not IsTrueHeadPortrait)
self.PanelNoSelectInfo.TxtHeadName.text = CS.XTextManager.GetText("HeadFrameNoSelectTitle")
self.PanelNoSelectInfo.TxtDecs.text = CS.XTextManager.GetText("HeadPortraitNoSelectHint")
end
function XUiPanelSetHeadPortrait:SetHeadPortraitImgRole(headId)
local info = XPlayerManager.GetHeadPortraitInfoById(headId)
XUiPLayerHead.InitPortrait(headId, nil, self.Head)
if (info ~= nil) then
self.TempHeadPortraitId = headId
if self.CurType == XHeadPortraitConfigs.HeadType.HeadPortrait then
self:SetHeadTime(info, self.PanelHeadPortraitInfo, headId)
self:SetHeadPortraitDesc(info, self.PanelHeadPortraitInfo, headId, self.CurrHeadPortraitId)
end
return true
else
return false
end
end
function XUiPanelSetHeadPortrait:SetHeadPortraitDesc(info, panel, Id ,curId)
local isValid = XDataCenter.HeadPortraitManager.IsHeadPortraitValid(Id)
panel.TxtHeadName.text = info.Name
panel.TxtDecs.text = info.WorldDesc
panel.TxtCondition.text = info.LockDesc
self.TxetTitle.text = CS.XTextManager.GetText("HeadPortraitSelect")
if Id == curId then
panel.TxtCondition.gameObject:SetActiveEx(false)
panel.BtnHeadSure:SetButtonState(CS.UiButtonState.Disable)
panel.BtnIsUsing.gameObject:SetActiveEx(true)
panel.BtnIsNotHave.gameObject:SetActiveEx(false)
elseif not isValid then
panel.BtnHeadSure:SetButtonState(CS.UiButtonState.Disable)
panel.BtnIsUsing.gameObject:SetActiveEx(false)
panel.BtnIsNotHave.gameObject:SetActiveEx(true)
panel.TxtCondition.gameObject:SetActiveEx(true)
else
panel.BtnHeadSure:SetButtonState(CS.UiButtonState.Normal)
panel.TxtCondition.gameObject:SetActiveEx(false)
end
end
------------------------------------HeadPortrait-----------------------------------------------
------------------------------------HeadFrame-----------------------------------------------
function XUiPanelSetHeadPortrait:InitHeadFrameDynamicTable()
self.HeadFrameDynamicTable = XDynamicTableNormal.New(self.HeadFrameScrollView)
self.HeadFrameDynamicTable:SetProxy(XUiGridHeadFrame)
self.HeadFrameDynamicTable:SetDelegate(self)
self.HeadFrameDynamicTable:SetDynamicEventDelegate(function(event, index, grid)
self:OnHeadFrameDynamicTableEvent(event, index, grid)
end)
self.GridHeadFrame.gameObject:SetActiveEx(false)
end
function XUiPanelSetHeadPortrait:SetupHeadFrameDynamicTable(index)
self.PageDatas = XDataCenter.HeadPortraitManager.GetUnlockedHeadPortraitIds(XHeadPortraitConfigs.HeadType.HeadFrame)
self.HeadFrameDynamicTable:SetDataSource(self.PageDatas)
self.HeadFrameDynamicTable:ReloadDataSync(index and index or 1)
end
function XUiPanelSetHeadPortrait:RefreshHeadFrameDynamicTable()
self.CurrHeadFrameId = XPlayer.CurrHeadFrameId or 0
self.HeadFrameDynamicTable:ReloadDataSync()
end
function XUiPanelSetHeadPortrait:OnHeadFrameDynamicTableEvent(event, index, grid)
if event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_ATINDEX then
grid:UpdateGrid(self.PageDatas[index], self)
self:SetHeadFrameRedPoint(grid)
end
end
function XUiPanelSetHeadPortrait:SetHeadFrameRedPoint(grid)
grid:ShowRedPoint(XDataCenter.HeadPortraitManager.CheckIsNewHeadPortraitById(grid.HeadFrameId), false)
end
function XUiPanelSetHeadPortrait:OnBtnHeadFrameSureClick()
if self.PanelHeadFrameInfo.BtnHeadSure.ButtonState == CS.UiButtonState.Disable then
return
end
if self.TempHeadFrameId ~= nil then
local id = 0
if self.PanelHeadFrameInfo.BtnType == XHeadPortraitConfigs.BtnState.Use then
id = self.TempHeadFrameId
end
XDataCenter.HeadPortraitManager.ChangeHeadFrame(id, function()
if id == 0 then
XUiManager.TipText("HeadFrameNonUsecomplete")
else
XUiManager.TipText("HeadFrameUsecomplete")
end
self:RefreshHeadFrameDynamicTable()
self:SetHeadFrameImgRole(self.TempHeadFrameId)
end)
end
XEventManager.DispatchEvent(XEventId.EVENT_HEAD_PORTRAIT_RESETINFO)
end
function XUiPanelSetHeadPortrait:ShowPreviewHeadFrame()
self.CurrHeadFrameId = XPlayer.CurrHeadFrameId or 0
self.OldFrameSelectGrig = nil
local IsTrueHeadFrame =self:SetHeadFrameImgRole(self.TempHeadFrameId ~= 0 and self.TempHeadFrameId or self.CurrHeadFrameId)
return IsTrueHeadFrame
end
function XUiPanelSetHeadPortrait:ShowHeadFramePanel(IsTrueHeadFrame)
self.HeadPortraitScrollView.gameObject:SetActiveEx(false)
self.PanelHeadPortraitInfo.GameObject:SetActiveEx(false)
self.HeadFrameScrollView.gameObject:SetActiveEx(true)
self.PanelHeadFrameInfo.GameObject:SetActiveEx(IsTrueHeadFrame)
self.PanelNoSelectInfo.GameObject:SetActiveEx(not IsTrueHeadFrame)
self.PanelNoSelectInfo.TxtHeadName.text = CS.XTextManager.GetText("HeadFrameNoSelectTitle")
self.PanelNoSelectInfo.TxtDecs.text = CS.XTextManager.GetText("HeadFrameNoSelectHint")
end
function XUiPanelSetHeadPortrait:SetHeadFrameImgRole(headId)
local info = XPlayerManager.GetHeadPortraitInfoById(headId)
XUiPLayerHead.InitPortrait(nil, headId, self.Head)
if (info ~= nil) then
self.TempHeadFrameId = headId
if self.CurType == XHeadPortraitConfigs.HeadType.HeadFrame then
self:SetHeadTime(info,self.PanelHeadFrameInfo, headId)
self:SetHeadFrameDesc(info, self.PanelHeadFrameInfo, headId, self.CurrHeadFrameId)
end
return true
else
return false
end
end
function XUiPanelSetHeadPortrait:SetHeadFrameDesc(info, panel, Id ,curId)
local isValid = XDataCenter.HeadPortraitManager.IsHeadPortraitValid(Id)
panel.TxtHeadName.text = info.Name
panel.TxtDecs.text = info.WorldDesc
panel.TxtCondition.text = info.LockDesc
self.TxetTitle.text = CS.XTextManager.GetText("HeadFrameSelect")
if Id == curId then
panel.TxtCondition.gameObject:SetActiveEx(false)
panel.BtnHeadSure:SetButtonState(CS.UiButtonState.Normal)
panel.BtnHeadSure:SetName(CS.XTextManager.GetText("HeadFrameNonUse"))
panel.BtnType = XHeadPortraitConfigs.BtnState.NonUse
elseif not isValid then
panel.BtnHeadSure:SetButtonState(CS.UiButtonState.Disable)
panel.BtnIsUsing.gameObject:SetActiveEx(false)
panel.BtnIsNotHave.gameObject:SetActiveEx(true)
panel.TxtCondition.gameObject:SetActiveEx(true)
else
panel.BtnHeadSure:SetButtonState(CS.UiButtonState.Normal)
panel.TxtCondition.gameObject:SetActiveEx(false)
panel.BtnHeadSure:SetName(CS.XTextManager.GetText("HeadFrameUse"))
panel.BtnType = XHeadPortraitConfigs.BtnState.Use
end
end
------------------------------------HeadFrame-----------------------------------------------
function XUiPanelSetHeadPortrait:SetHeadTime(info, panel, headId)
if info.LimitType == XHeadPortraitConfigs.HeadTimeLimitType.FixedTime then
local beginTime = XDataCenter.HeadPortraitManager.GetBeginTimestamp(headId)
local endTime = XDataCenter.HeadPortraitManager.GetEndTimestamp(headId)
panel.PanelTime.gameObject:SetActiveEx(true)
panel.TxtTime.text = XTime.TimestampToGameDateTimeString(beginTime, "yyyy/MM/dd") .. "-" .. XTime.TimestampToGameDateTimeString(endTime, "yyyy/MM/dd")
elseif info.LimitType == XHeadPortraitConfigs.HeadTimeLimitType.Duration then
panel.PanelTime.gameObject:SetActiveEx(true)
if XDataCenter.HeadPortraitManager.IsHeadPortraitValid(headId) then
panel.TxtTime.text = XDataCenter.HeadPortraitManager.GetHeadLeftTime(headId)
else
panel.TxtTime.text = XDataCenter.HeadPortraitManager.GetHeadValidDuration(headId)
end
else
panel.PanelTime.gameObject:SetActiveEx(false)
end
end
function XUiPanelSetHeadPortrait:ShowHeadPortraitRedPoint()
local IsShowRed = XDataCenter.HeadPortraitManager.CheckIsNewHeadPortrait(XHeadPortraitConfigs.HeadType.HeadPortrait)
self.BtnTouxiang:ShowReddot(IsShowRed)
end
function XUiPanelSetHeadPortrait:ShowHeadFrameRedPoint()
local IsShowRed = XDataCenter.HeadPortraitManager.CheckIsNewHeadPortrait(XHeadPortraitConfigs.HeadType.HeadFrame)
self.BtnTouxiangKuang:ShowReddot(IsShowRed)
end
function XUiPanelSetHeadPortrait:Release()
end
return XUiPanelSetHeadPortrait