PGRData/Script/matrix/xui/xuimail/XUiMail.lua

296 lines
No EOL
8.2 KiB
Lua

local XUiMail = XLuaUiManager.Register(XLuaUi, "UiMail")
local MailMaxCount = CS.XGame.Config:GetInt("MailCountLimit")
local CSGetText = CS.XTextManager.GetText
function XUiMail:OnAwake()
self:InitAutoScript()
self.DynamicTable = XDynamicTableNormal.New(self.PanelTitleList)
self.DynamicTable:SetProxy(XUiGridTitle)
self.DynamicTable:SetDelegate(self)
self.GridTitle.gameObject:SetActive(false)
end
function XUiMail:OnStart()
self.CurMailInfo = nil
self.SelectTitle = nil
self.RewardGrids = {}
self.HtmlText = self.GridContent:GetComponent("XHtmlText")
self.HtmlText.HrefListener = function(link)
self:ClickLink(link)
end
self:Reset()
self.AssetPanel = XUiPanelAsset.New(self, self.PanelAsset, XDataCenter.ItemManager.ItemId.FreeGem, XDataCenter.ItemManager.ItemId.ActionPoint, XDataCenter.ItemManager.ItemId.Coin)
-- local musicKey = self:GetAutoKey(self.BtnBack, "onClick")
-- self.SpecialSoundMap[musicKey] = XSoundManager.UiBasicsMusic.Return
end
function XUiMail:OnEnable()
self:ReLoadMailData(false)
end
function XUiMail:OnDisable()
self:RemoveTimer()
end
-- auto
-- Automatic generation of code, forbid to edit
function XUiMail:InitAutoScript()
self:AutoAddListener()
end
--动态列表事件
function XUiMail:OnDynamicTableEvent(event, index, grid)
if event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_ATINDEX then
grid:UpdateMailGrid(self,self.PageDatas[index])
end
end
function XUiMail:SetupDynamicTable(IsNotSync)
if not IsNotSync then
self.PageDatas = XDataCenter.MailManager.GetMailList()
end
self.CurMailInfo = self.PageDatas[1]
self.DynamicTable:SetDataSource(self.PageDatas)
self.DynamicTable:ReloadDataSync(1)
end
function XUiMail:AutoAddListener()
self.BtnDelete.CallBack = function()
self:OnBtnDeleteClick()
end
self.BtnGet.CallBack = function()
self:OnBtnGetClick()
end
self.BtnGetReward.CallBack = function()
self:OnBtnGetRewardClick()
end
self.BtnMainUi.CallBack = function()
self:OnBtnMainUiClick()
end
self.BtnBack.CallBack = function()
self:OnBtnBackClick()
end
end
-- auto
function XUiMail:Reset()
self.PanelMailContent.gameObject:SetActive(false)
--self.ImgBgUn.gameObject:SetActive(true)
self.BtnGetReward.gameObject:SetActive(false)
self.ImgGetReward.gameObject:SetActive(false)
self.PanelItemContent.gameObject:SetActive(false)
end
function XUiMail:ReLoadMailData(IsNotSync)
self:SetupDynamicTable(IsNotSync)
self:UpdateMailList()
end
function XUiMail:ResetReward()
if self.CurMailInfo and self.CurMailInfo.Id then
self:Reset()
self:SetRewardBtnStatus(self.CurMailInfo.Id)
self:InitRewardList(self.CurMailInfo.Id)
end
end
function XUiMail:UpdateMailList()
self.PanelUnGet.gameObject:SetActive(false)
self.TxtMailCount.text = CSGetText("MailCountText",#self.PageDatas,MailMaxCount)
if #self.PageDatas == 0 then
self.PanelUnGet.gameObject:SetActive(true)
return
end
end
function XUiMail:ShowMailInfo(mailInfo)
self.TxtContentTitle.text = mailInfo.Title
local content = mailInfo.Content or ""
local sendName = mailInfo.SendName or ""
self.HtmlText.text = content .. "\n\n" .. CSGetText("ComeFrom") .. ": " .. sendName .. "\n"
self.PanelMailContent.gameObject:SetActive(true)
self:RemoveTimer()
if not mailInfo.ExpireTime then
self.TxtContentDateNum.gameObject:SetActive(false)
return
end
self.TxtForbidDelete.gameObject:SetActiveEx(mailInfo.IsForbidDelete)
local refreshFunc
local restTime = mailInfo.ExpireTime - XTime.GetServerNowTimestamp()
if restTime and restTime > 0 then
refreshFunc = function ()
local dataTime = XUiHelper.GetTime(restTime)
if XTool.UObjIsNil(self.TxtContentDateNum) then
return
end
self.TxtContentDateNum.text = CSGetText("EmailExpireTime",dataTime)
restTime = restTime - 1
if restTime < 0 then
refreshFunc = nil
end
end
else
if mailInfo.ExpireTime == 0 then
self.TxtContentDateNum.text = CSGetText("EmailForever")
else
self.TxtContentDateNum.text = CSGetText("EmailExpireTime",XUiHelper.GetTime(0))
end
end
if refreshFunc then
refreshFunc()
else
return
end
self.Timer = XScheduleManager.ScheduleForever(function()
if not refreshFunc then
self:RemoveTimer()
return
end
if refreshFunc then
refreshFunc()
end
end, 1000)
end
function XUiMail:RemoveTimer()
if self.Timer then
XScheduleManager.UnSchedule(self.Timer)
self.Timer = nil
end
end
function XUiMail:ClickMailGrid(mailInfo,IsPlayAnim)
--self.ImgBgUn.gameObject:SetActive(false)
XDataCenter.MailManager.ReadMail(mailInfo.Id)
self:ShowMailInfo(mailInfo)
self:SetRewardBtnStatus(mailInfo.Id)
self:InitRewardList(mailInfo.Id)
if IsPlayAnim then
self:PlayAnimation("AnimYouJianEnable")
end
end
function XUiMail:InitRewardList(mailId)
local baseItem = self.GridItem
baseItem.gameObject:SetActive(false)
self.PanelItemContent.gameObject:SetActive(false)
if not XDataCenter.MailManager.HasMailReward(mailId) then
return
end
for _, grid in pairs(self.RewardGrids) do
grid:Refresh()
end
local mail = XDataCenter.MailManager.GetMailCache(mailId)
local isGetReward = XDataCenter.MailManager.IsGetReward(mail.Status)
local index = 1
local function refreshReward(value)
if not self.RewardGrids[index] then
local item = CS.UnityEngine.Object.Instantiate(baseItem)
local grid = XUiGridCommon.New(self, item)
grid.Transform:SetParent(self.PanelItemContent, false)
self.RewardGrids[index] = grid
end
self.RewardGrids[index]:Refresh(value, { ["ShowReceived"] = isGetReward })
index = index + 1
end
local rewards = XRewardManager.MergeAndSortRewardGoodsList(mail.RewardGoodsList)
for i = 1, #rewards do
refreshReward(rewards[i])
end
self.PanelItemContent.gameObject:SetActive(true)
end
function XUiMail:OnBtnDeleteClick()
XDataCenter.MailManager.DeleteMail(function()
self:ResetReward()
self:ReLoadMailData(false)
end)
end
function XUiMail:OnBtnGetClick()
XDataCenter.MailManager.GetAllMailReward(function()
self:ResetReward()
self:ReLoadMailData(true)
end)
end
function XUiMail:OnBtnGetRewardClick()
if self.CurMailInfo then
XDataCenter.MailManager.GetMailReward(self.CurMailInfo.Id, function()
self:ResetReward()
if self.GetItemCallBack then
self.GetItemCallBack()
end
self:ClickMailGrid(self.CurMailInfo,true)
end)
end
end
function XUiMail:OnBtnBackClick()
self:Close()
XDataCenter.MailManager.SyncMailEvent()
end
function XUiMail:OnBtnMainUiClick()
XLuaUiManager.RunMain()
end
function XUiMail:SetRewardBtnStatus(mailId)
mailId = mailId and mailId or self.CurMailInfo.Id
self.BtnGetReward.gameObject:SetActive(false)
self.ImgGetReward.gameObject:SetActive(false)
if not mailId then
return
end
local mail = XDataCenter.MailManager.GetMailCache(mailId)
if mail and XDataCenter.MailManager.HasMailReward(mailId) then
if not XDataCenter.MailManager.IsGetReward(mail.Status) then
self.BtnGetReward.gameObject:SetActive(true)
else
self.ImgGetReward.gameObject:SetActive(true)
end
end
end
function XUiMail:SetRewardStatus(mailId)
mailId = mailId and mailId or self.CurMailInfo.Id
if not mailId then
return
end
if XDataCenter.MailManager.HasMailReward(mailId) then
self.PanelItemContent.gameObject:SetActive(true)
local isGetReward = XDataCenter.MailManager.IsMailGetReward(mailId)
for _, grid in pairs(self.RewardGrids) do
grid:SetReceived(isGetReward)
end
end
end
function XUiMail:ClickLink(url)
CS.UnityEngine.Application.OpenURL(url)
end