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

479 lines
15 KiB
Lua
Raw Normal View History

2024-09-01 20:49:41 +00:00
---@class XUiMail : XLuaUi
---@field _Control XMailControl
local XUiMail = XLuaUiManager.Register(XLuaUi, "UiMail")
2024-09-01 20:49:41 +00:00
local XUiGridTitle = require("XUi/XUiMail/XUiGridTitle") --XUiGridTitle,
--local XUiGridItem = require("XUi/XUiMail/XUiGridItem") --XUiGridItem,
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)
2024-09-01 20:49:41 +00:00
XRedPointManager.AddRedPointEvent(self.RedCollection, self.OnCheckCollectionBoxView, self, { XRedPointConditions.Types.CONDITION_MAIL_FAVORITE_BOX })
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()
2024-09-01 20:49:41 +00:00
self.CollectionEffect.gameObject:SetActiveEx(false)--解决UI启动时特效重复播放问题
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
2024-09-01 20:49:41 +00:00
self.PageDatas = self._Control: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
2024-09-01 20:49:41 +00:00
self.BtnCollection.CallBack = function()
self:OnBtnCollectionClick()
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()
2024-09-01 20:49:41 +00:00
if self.CurMailInfo.MailType == XEnumConst.MailType.Normal then
self:SetRewardBtnStatusNormal(self.CurMailInfo.Id)
self:InitRewardListNormal(self.CurMailInfo)
elseif self.CurMailInfo.MailType == XEnumConst.MailType.FavoriteMail then
self:SetRewardBtnStatusFavorite(self.CurMailInfo.Id)
self:InitRewardListFavorite(self.CurMailInfo)
end
end
end
2024-09-01 20:49:41 +00:00
--更新邮件列表
function XUiMail:UpdateMailList()
self.PanelUnGet.gameObject:SetActive(false)
self.TxtMailCount.text = CSGetText("MailCountText",#self.PageDatas,MailMaxCount)
if #self.PageDatas == 0 then
2024-09-01 20:49:41 +00:00
self:ClickMailGrid(nil)
return
end
end
2024-09-01 20:49:41 +00:00
--=========点击邮件 更新内容显示==========
function XUiMail:ClickMailGrid(mailInfo,IsPlayAnim)
if mailInfo == nil then
self:ShowMailInfoNone()
return
end
if mailInfo.MailType == XEnumConst.MailType.Normal then
self:ClickMailGridNormal(mailInfo,IsPlayAnim)
elseif mailInfo.MailType == XEnumConst.MailType.FavoriteMail then
self:ClickMailGridFavorite(mailInfo,IsPlayAnim)
end
end
--更新普通邮件视图
function XUiMail:ClickMailGridNormal(mailInfo,IsPlayAnim)
--self.ImgBgUn.gameObject:SetActive(false)
self._Control:ReadMail(mailInfo.Id)
self:ShowMailInfoNormal(mailInfo)
self:SetRewardBtnStatusNormal(mailInfo.Id)
self:InitRewardListNormal(mailInfo)
if IsPlayAnim then
self:PlayAnimation("AnimYouJianEnable")
end
end
--更新收藏角色好感邮件视图
function XUiMail:ClickMailGridFavorite(mailInfo,IsPlayAnim)
self._Control:ReadFavoriteMail(mailInfo.Id)
self:ShowMailInfoFavorite(mailInfo)
self:SetRewardBtnStatusFavorite(mailInfo.Id)
self:InitRewardListFavorite(mailInfo)
if IsPlayAnim then
self:PlayAnimation("AnimYouJianEnable")
end
end
--=========点击邮件 更新内容显示==========
2024-09-01 20:49:41 +00:00
--=========更新邮件内容===========
--显示无邮件内容
function XUiMail:ShowMailInfoNone()
self.PanelUnGet.gameObject:SetActive(true)
self.PanelMailContent.gameObject:SetActive(false)
end
--显示普通邮件内容
function XUiMail:ShowMailInfoNormal(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
2024-09-01 20:49:41 +00:00
--显示收藏角色好感邮件内容
function XUiMail:ShowMailInfoFavorite(mailInfo)
local mailData = mailInfo.MailData
self.TxtContentTitle.text = mailData.Title
local content = mailData.Content or ""
local sendName = mailData.SendName or ""
self.HtmlText.text = XUiHelper.ConvertLineBreakSymbol(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(true)
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
2024-09-01 20:49:41 +00:00
if refreshFunc then
refreshFunc()
else
return
end
2024-09-01 20:49:41 +00:00
self.Timer = XScheduleManager.ScheduleForever(function()
if not refreshFunc then
self:RemoveTimer()
return
end
if refreshFunc then
refreshFunc()
end
end, 1000)
end
2024-09-01 20:49:41 +00:00
--=========更新邮件内容===========
2024-09-01 20:49:41 +00:00
--=========更新邮件奖励列表===========
--显示普通邮件奖励内容
function XUiMail:InitRewardListNormal(mailInfo)
local mailId = mailInfo.Id
local baseItem = self.GridItem
baseItem.gameObject:SetActive(false)
self.PanelItemContent.gameObject:SetActive(false)
2024-09-01 20:49:41 +00:00
if not self._Control:HasMailReward(mailId) then
return
end
for _, grid in pairs(self.RewardGrids) do
grid:Refresh()
end
2024-09-01 20:49:41 +00:00
---@type XMailAgency
local mailAgency = XMVCA:GetAgency(ModuleId.XMail)
local mail = self._Control:GetMailCache(mailId)
local isGetReward = mailAgency.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
2024-09-01 20:49:41 +00:00
--显示收藏角色好感邮件内容
function XUiMail:InitRewardListFavorite(mailInfo)
local mailData = mailInfo.MailData
local baseItem = self.GridItem
baseItem.gameObject:SetActive(false)
self.PanelItemContent.gameObject:SetActive(false)
if #mailData.RewardIds == 0 then return end
for _, grid in pairs(self.RewardGrids) do
grid:Refresh()
end
local isGetReward = not (self._Control:HasFavoriteMail(mailInfo.Id) == false)
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 rewardList = {}
for _,v in pairs(mailData.RewardIds) do
local rDatas = XRewardManager.GetRewardList(v)
for _,reward in pairs(rDatas) do
table.insert(rewardList,reward)
end
end
for i = 1, #rewardList do
refreshReward(rewardList[i])
end
self.PanelItemContent.gameObject:SetActive(true)
end
--=========更新邮件奖励列表===========
--=========更新领取按钮状态===========
function XUiMail:SetRewardBtnStatusNormal(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 = self._Control:GetMailCache(mailId)
if mail and self._Control:HasMailReward(mailId) then
---@type XMailAgency
local mailAgency = XMVCA:GetAgency(ModuleId.XMail)
if not mailAgency.IsGetReward(mail.Status) then
self.BtnGetReward.gameObject:SetActive(true)
else
self.ImgGetReward.gameObject:SetActive(true)
end
end
end
function XUiMail:SetRewardBtnStatusFavorite(mailId)
self.BtnGetReward.gameObject:SetActive(true)
self.ImgGetReward.gameObject:SetActive(false)
end
--=========更新领取按钮状态===========
--更新收藏盒红点状态
function XUiMail:OnCheckCollectionBoxView(count)
self.RedCollection.gameObject:SetActiveEx(count > 0)
end
function XUiMail:OnBtnDeleteClick()
2024-09-01 20:49:41 +00:00
self._Control:DeleteMail(function()
self:ResetReward()
self:ReLoadMailData(false)
if self.TxtForbidDelete.gameObject.activeSelf then
XUiManager.TipMsg(CsXTextManagerGetText("MailCantManulDelete"))
end
end)
end
function XUiMail:OnBtnGetClick()
2024-09-01 20:49:41 +00:00
self._Control:GetAllMailReward(function(result)
self:ResetReward()
self:ReLoadMailData(false)
if #result.CollectBoxMail > 0 then
self:PlayAnimationWithMask("ImgMail2Enable")
end
end)
end
2024-09-01 20:49:41 +00:00
--领取奖励按钮响应
function XUiMail:OnBtnGetRewardClick()
if self.CurMailInfo then
2024-09-01 20:49:41 +00:00
if self.CurMailInfo.MailType == XEnumConst.MailType.Normal then
self._Control:GetMailReward(self.CurMailInfo.Id, function()
self:ResetReward()
if self.GetItemCallBack then
self.GetItemCallBack()
end
self:ClickMailGrid(self.CurMailInfo,true)
end)
2024-09-01 20:49:41 +00:00
elseif self.CurMailInfo.MailType == XEnumConst.MailType.FavoriteMail then
self._Control:RequestReceivedFavoriteMails({ self.CurMailInfo.Id},function(success)
self:ReLoadMailData(false)
if success then
self:PlayAnimationWithMask("ImgMail2Enable")
end
end)
end
end
end
function XUiMail:OnBtnBackClick()
2024-09-01 20:49:41 +00:00
self._Control:SyncMailEvent()
self:Close()
end
function XUiMail:OnBtnMainUiClick()
XLuaUiManager.RunMain()
end
2024-09-01 20:49:41 +00:00
function XUiMail:OnBtnCollectionClick()
XLuaUiManager.Open("UiFavoriteMailTag")
end
function XUiMail:SetRewardStatus(mailId)
mailId = mailId and mailId or self.CurMailInfo.Id
if not mailId then
return
end
2024-09-01 20:49:41 +00:00
if self._Control:HasMailReward(mailId) then
self.PanelItemContent.gameObject:SetActive(true)
2024-09-01 20:49:41 +00:00
local isGetReward = self._Control:IsMailGetReward(mailId)
for _, grid in pairs(self.RewardGrids) do
grid:SetReceived(isGetReward)
end
end
end
function XUiMail:ClickLink(url)
2024-09-01 20:49:41 +00:00
if string.find(url, "pgr3rd") ~= nil then -- 日服H5拉人活动
--local uid = XLoginManager.GetUserId()
local uid = XPlayer.Id
if uid and uid ~= "" then
CS.UnityEngine.Application.OpenURL(url.."?uid="..uid)
return
end
end
CS.UnityEngine.Application.OpenURL(url)
2024-09-01 20:49:41 +00:00
end
function XUiMail:RemoveTimer()
if self.Timer then
XScheduleManager.UnSchedule(self.Timer)
self.Timer = nil
end
end