477 lines
No EOL
16 KiB
Lua
477 lines
No EOL
16 KiB
Lua
XUiPanelLikeGiveGift = XClass(nil, "XUiPanelLikeGiveGift")
|
||
|
||
local Default_Min_Num = 1
|
||
local CSTextManagerGetText = CS.XTextManager.GetText
|
||
local CommunicationGiftMaxCount = CS.XGame.ClientConfig:GetInt("CommunicationGiftMaxCount")
|
||
|
||
function XUiPanelLikeGiveGift:Ctor(ui, uiRoot, parentUi)
|
||
self.GameObject = ui.gameObject
|
||
self.Transform = ui.transform
|
||
self.UiRoot = uiRoot
|
||
self.ParentUi = parentUi
|
||
XTool.InitUiObject(self)
|
||
self:InitUiAfterAuto()
|
||
self.GridGiftItem.gameObject:SetActiveEx(false)
|
||
|
||
end
|
||
|
||
function XUiPanelLikeGiveGift:InitUiAfterAuto()
|
||
|
||
--self:InitBtnLongClicks()
|
||
--self.BtnIncrease.CallBack = function() self:OnBtnIncreaseClick() end
|
||
--self.BtnDecrease.CallBack = function() self:OnBtnDecreaseClick() end
|
||
--self.BtnMax.CallBack = function() self:OnBtnMaxClick() end
|
||
self.BtnUse.CallBack = function() self:OnBtnUseClick() end
|
||
self.BtnGo.CallBack = function() self:OnBtnGoClick() end
|
||
|
||
end
|
||
|
||
|
||
function XUiPanelLikeGiveGift:OnRefresh()
|
||
self:RefreshDatas()
|
||
end
|
||
|
||
function XUiPanelLikeGiveGift:RefreshDatas()
|
||
self.CurTrustItem = nil
|
||
self.SelectedGifts = {}
|
||
self.SelectGiftItemList = {}
|
||
local trustItems = self:FilterTrustItems(XFavorabilityConfigs.GetAllCharacterSendGift())
|
||
|
||
|
||
table.sort(trustItems, XDataCenter.FavorabilityManager.SortTrustItems)
|
||
self:UpdateTrustItemList(trustItems)
|
||
|
||
-- self:UpdateBottomByClickItem()
|
||
-- self:UpdateTextCount(0)
|
||
end
|
||
|
||
function XUiPanelLikeGiveGift:FilterTrustItems(items)
|
||
|
||
local characterId = self.UiRoot:GetCurrFavorabilityCharacter()
|
||
--联动角色类型(0则不是联动角色)
|
||
local linkageType = XCharacterConfigs.GetCharacterLinkageType(characterId)
|
||
|
||
local filterFunc = function(item)
|
||
local count = XDataCenter.ItemManager.GetCount(item.Id)
|
||
if count <= 0 then
|
||
return false
|
||
end
|
||
local typeDict = item.LimitLinkageTypeDict
|
||
if typeDict and typeDict[linkageType] then
|
||
return false
|
||
end
|
||
return true
|
||
end
|
||
|
||
local trustItems = {}
|
||
for _, v in pairs(items) do
|
||
if filterFunc(v) then
|
||
v.IsFavourWeight = self:IsContains(v.FavorCharacterId, characterId) and 1 or 0
|
||
v.TrustItemQuality = XDataCenter.ItemManager.GetItemQuality(v.Id)
|
||
table.insert(trustItems, v)
|
||
end
|
||
end
|
||
return trustItems
|
||
end
|
||
|
||
function XUiPanelLikeGiveGift:ResetSelectStatus()
|
||
for _, v in pairs(self.TrustItemList or {}) do
|
||
v.IsSelect = false
|
||
end
|
||
end
|
||
|
||
-- [刷先礼物ListView]
|
||
function XUiPanelLikeGiveGift:UpdateTrustItemList(trustItemList)
|
||
if not trustItemList then
|
||
XLog.Warning("XUiPanelLikeGiveGift:UpdateTrustItemList 函数错误: 参数trustItemList不能为空")
|
||
end
|
||
|
||
self.TrustItemList = trustItemList
|
||
self:ResetSelectStatus()
|
||
|
||
if not self.DynamicTableTrustItem then
|
||
self.DynamicTableTrustItem = XDynamicTableNormal.New(self.SViewGiftList.gameObject)
|
||
self.DynamicTableTrustItem:SetProxy(XUiGridLikeSendGiftItem)
|
||
self.DynamicTableTrustItem:SetDelegate(self)
|
||
end
|
||
|
||
local isZero = self:IsZeroGift(self.TrustItemList)
|
||
self.SViewGiftList.gameObject:SetActive(not isZero)
|
||
self.PanelEmpty.gameObject:SetActive(isZero)
|
||
self.BtnUse.gameObject:SetActiveEx(not isZero)
|
||
|
||
if not isZero then
|
||
self.DynamicTableTrustItem:SetDataSource(self.TrustItemList)
|
||
self.DynamicTableTrustItem:ReloadDataASync()
|
||
|
||
end
|
||
end
|
||
|
||
function XUiPanelLikeGiveGift:IsZeroGift(itemList)
|
||
for _, itemData in pairs(itemList or {}) do
|
||
local itemNum = XDataCenter.ItemManager.GetCount(itemData.Id)
|
||
if itemNum > 0 then
|
||
return false
|
||
end
|
||
end
|
||
return true
|
||
end
|
||
|
||
-- [监听动态列表事件]
|
||
function XUiPanelLikeGiveGift:OnDynamicTableEvent(event, index, grid)
|
||
if event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_INIT then
|
||
grid:Init(self.UiRoot, handler(self, self.Check), handler(self, self.OnGiftChangeCallBack), handler(self, self.PreCheck))
|
||
elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_ATINDEX then
|
||
local data = self.TrustItemList[index]
|
||
if not data then return end
|
||
local id = data.Id
|
||
local count = self.SelectedGifts[id]
|
||
grid:OnRefresh(data, count)
|
||
|
||
elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_TOUCHED then
|
||
--if self:ChekMaxFavorability(self.TrustItemList[index].TrustItemType) then return end
|
||
self.CurTrustItem = self.TrustItemList[index]
|
||
end
|
||
end
|
||
|
||
function XUiPanelLikeGiveGift:PreCheck(itemId)
|
||
local characterId = self.UiRoot:GetCurrFavorabilityCharacter()
|
||
local config = XFavorabilityConfigs.GetLikeTrustItemCfg(itemId)
|
||
local isCommunication = config and config.TrustItemType == XFavorabilityConfigs.TrustItemType.Communication
|
||
local isMax = XDataCenter.FavorabilityManager.IsMaxFavorabilityLevel(characterId)
|
||
if isMax and not isCommunication then
|
||
XUiManager.TipMsg(CS.XTextManager.GetText("FavorabilityMaxLevel"))
|
||
return false
|
||
end
|
||
|
||
local curExp = tonumber(XDataCenter.FavorabilityManager.GetCurrCharacterExp(characterId))
|
||
local startLevel = XDataCenter.FavorabilityManager.GetCurrCharacterFavorabilityLevel(characterId)
|
||
|
||
local addExp = 0
|
||
for i, var in ipairs(self.SelectGiftItemList) do
|
||
local favorExp = var.TrustItem.Exp
|
||
for _, v in pairs(var.TrustItem.FavorCharacterId) do
|
||
if v == characterId then
|
||
favorExp = var.TrustItem.FavorExp
|
||
break
|
||
end
|
||
end
|
||
addExp = addExp + favorExp * var.Count
|
||
end
|
||
|
||
local totalExp = addExp + curExp
|
||
local trustLv, leftExp, levelExp = XFavorabilityConfigs.GetFavorabilityLevel(characterId, totalExp, startLevel)
|
||
|
||
local maxLevel = XFavorabilityConfigs.GetMaxFavorabilityLevel(characterId)
|
||
if maxLevel == trustLv and not isCommunication then
|
||
XUiManager.TipMsg(CS.XTextManager.GetText("FavorabilityMaxLevel"))
|
||
return false
|
||
end
|
||
|
||
return true
|
||
end
|
||
|
||
|
||
function XUiPanelLikeGiveGift:Check(itemId, addCount)
|
||
local characterId = self.UiRoot:GetCurrFavorabilityCharacter()
|
||
|
||
local curExp = tonumber(XDataCenter.FavorabilityManager.GetCurrCharacterExp(characterId))
|
||
local startLevel = XDataCenter.FavorabilityManager.GetCurrCharacterFavorabilityLevel(characterId)
|
||
|
||
local addExp = 0
|
||
for i, var in ipairs(self.SelectGiftItemList) do
|
||
local favorExp = var.TrustItem.Exp
|
||
for _, v in pairs(var.TrustItem.FavorCharacterId) do
|
||
if v == characterId then
|
||
favorExp = var.TrustItem.FavorExp
|
||
break
|
||
end
|
||
end
|
||
addExp = addExp + favorExp * var.Count
|
||
end
|
||
|
||
local totalExp = addExp + curExp
|
||
local trustLv, leftExp, levelExp = XFavorabilityConfigs.GetFavorabilityLevel(characterId, totalExp, startLevel)
|
||
|
||
local config = XFavorabilityConfigs.GetLikeTrustItemCfg(itemId)
|
||
local isCommunication = config and config.TrustItemType == XFavorabilityConfigs.TrustItemType.Communication
|
||
|
||
local maxLevel = XFavorabilityConfigs.GetMaxFavorabilityLevel(characterId)
|
||
if maxLevel == trustLv and not isCommunication then
|
||
return false
|
||
end
|
||
|
||
return true
|
||
end
|
||
|
||
|
||
function XUiPanelLikeGiveGift:OnGiftChangeCallBack(itemId, addCount)
|
||
|
||
local selectedGifts = self.SelectedGifts[itemId]
|
||
if not selectedGifts then
|
||
selectedGifts = 0
|
||
end
|
||
|
||
self.SelectedGifts[itemId] = selectedGifts + addCount
|
||
self.SelectGiftItemList = {}
|
||
|
||
for _, v in ipairs(self.TrustItemList) do
|
||
local count = self.SelectedGifts[v.Id]
|
||
if count and count > 0 then
|
||
local gift = {}
|
||
gift.TrustItem = v
|
||
gift.Count = count
|
||
table.insert(self.SelectGiftItemList, gift)
|
||
else
|
||
self.SelectedGifts[v.Id] = nil
|
||
end
|
||
|
||
end
|
||
CsXGameEventManager.Instance:Notify(XEventId.EVENT_FAVORABILITY_ON_GIFT_CHANGED, self.SelectGiftItemList)
|
||
end
|
||
|
||
function XUiPanelLikeGiveGift:UpdateSelectStatus(index)
|
||
for i = 1, #self.TrustItemList do
|
||
local item = self.TrustItemList[i]
|
||
if i == index then
|
||
item.IsSelect = not item.IsSelect
|
||
else
|
||
item.IsSelect = false
|
||
end
|
||
local grid = self.DynamicTableTrustItem:GetGridByIndex(i)
|
||
if grid then
|
||
grid:OnRefresh(item, i)
|
||
end
|
||
end
|
||
end
|
||
|
||
|
||
function XUiPanelLikeGiveGift:UpdateBottomByClickItem()
|
||
if not self.CurTrustItem then
|
||
self:HideNumBtns()
|
||
self:UpdateTextCount(0)
|
||
return
|
||
end
|
||
local playerCount = XDataCenter.ItemManager.GetCount(self.CurTrustItem.Id)
|
||
if playerCount < Default_Min_Num or (not self.CurTrustItem.IsSelect) then
|
||
self:HideNumBtns()
|
||
self:UpdateTextCount(0)
|
||
else
|
||
self:ShowNumBtns()
|
||
self:UpdateTextCount(Default_Min_Num)
|
||
end
|
||
end
|
||
|
||
function XUiPanelLikeGiveGift:UpdateTextCount(count)
|
||
self.CurrentCount = count
|
||
self.TxtNum.text = self.CurrentCount
|
||
CsXGameEventManager.Instance:Notify(XEventId.EVENT_FAVORABILITY_ON_GIFT_CHANGED, self.CurTrustItem, self.CurrentCount)
|
||
end
|
||
|
||
|
||
function XUiPanelLikeGiveGift:OnBtnUseClick()
|
||
|
||
if not self.SelectedGifts or next(self.SelectedGifts) == nil then
|
||
XUiManager.TipMsg(CS.XTextManager.GetText("FavorabilityChooseAGift"))
|
||
return
|
||
end
|
||
|
||
|
||
local characterId = self.UiRoot:GetCurrFavorabilityCharacter()
|
||
local characterName = XCharacterConfigs.GetCharacterName(characterId)
|
||
local trustLv = XDataCenter.FavorabilityManager.GetCurrCharacterFavorabilityLevel(characterId)
|
||
local curExp = tonumber(XDataCenter.FavorabilityManager.GetCurrCharacterExp(characterId))
|
||
local IsDoCommunication = false
|
||
local IsGivenItem = XDataCenter.FavorabilityManager.IsInGivenItemCharacterIdList(characterId)
|
||
local args = {}
|
||
|
||
args.CharacterId = characterId
|
||
args.CharacterName = characterName
|
||
args.GiftItems = self.SelectedGifts
|
||
local addExp = 0
|
||
|
||
for i, var in ipairs(self.SelectGiftItemList) do
|
||
local exp = var.TrustItem.Exp
|
||
|
||
for _, v in pairs(var.TrustItem.FavorCharacterId) do
|
||
if v == characterId then
|
||
exp = var.TrustItem.FavorExp
|
||
break
|
||
end
|
||
end
|
||
|
||
if var.TrustItem.TrustItemType == XFavorabilityConfigs.TrustItemType.Communication then
|
||
IsDoCommunication = true
|
||
end
|
||
|
||
addExp = addExp + exp * var.Count
|
||
end
|
||
|
||
|
||
if addExp == 0 then
|
||
return
|
||
end
|
||
|
||
local IsOpen = XDataCenter.FavorabilityManager.IsDuringOfFestivalMail()
|
||
|
||
|
||
local fun = function()
|
||
XDataCenter.FavorabilityManager.OnSendCharacterGift(args, function()
|
||
self.ParentUi:DoFillAmountTween(trustLv, curExp, addExp)
|
||
self:RefreshDatas()
|
||
if IsOpen and IsDoCommunication and not IsGivenItem then
|
||
XDataCenter.CommunicationManager.ShowItemCommunication(args.CharacterId)
|
||
XDataCenter.FavorabilityManager.AddGivenItemCharacterId(args.CharacterId)
|
||
end
|
||
local text
|
||
if self:ChekCharacterIsMaxLevel() then
|
||
text = CS.XTextManager.GetText("GiftGiven")
|
||
else
|
||
text = CS.XTextManager.GetText("FavorabilityAddExp", tostring(args.CharacterName), addExp)
|
||
end
|
||
XUiManager.TipMsg(text)
|
||
end)
|
||
end
|
||
|
||
local isMaxLevel = self:ChekCharacterIsMaxLevel()
|
||
|
||
if IsDoCommunication and IsOpen then
|
||
if IsGivenItem and isMaxLevel then
|
||
XUiManager.TipText("GivenAndOverGiftText")
|
||
return
|
||
elseif IsGivenItem then
|
||
self:TipDialog(nil, fun, "GivenGiftText")
|
||
elseif isMaxLevel then
|
||
self:TipDialog(nil, fun, "ExFullGiftText")
|
||
else
|
||
--if addExp > 1 then
|
||
-- self:TipDialog(nil, fun, "OverGiftText")
|
||
--else
|
||
-- fun()
|
||
--end
|
||
fun()
|
||
end
|
||
else
|
||
if isMaxLevel then
|
||
self:TipDialog(nil, fun, "ExFullGiftText")
|
||
else
|
||
fun()
|
||
end
|
||
end
|
||
end
|
||
|
||
|
||
|
||
function XUiPanelLikeGiveGift:TipDialog(cancelCb, confirmCb, TextKey)
|
||
local tipTitle = CSTextManagerGetText("TipTitle")
|
||
local content = CSTextManagerGetText(TextKey)
|
||
|
||
XLuaUiManager.Open("UiDialog", tipTitle, content, XUiManager.DialogType.Normal, cancelCb, confirmCb)
|
||
end
|
||
|
||
function XUiPanelLikeGiveGift:OnBtnGoClick()
|
||
XLuaUiManager.Open("UiEquipStrengthenSkip", XDataCenter.FavorabilityManager.GetFavorabilitySkipIds())
|
||
end
|
||
|
||
function XUiPanelLikeGiveGift:IsContains(container, item)
|
||
for _, v in pairs(container or {}) do
|
||
if v == item then
|
||
return true
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
|
||
function XUiPanelLikeGiveGift:GetMaxCountByItem(trustItem)
|
||
if trustItem.TrustItemType == XFavorabilityConfigs.TrustItemType.Communication then
|
||
return CommunicationGiftMaxCount
|
||
end
|
||
|
||
local characterId = self.UiRoot:GetCurrFavorabilityCharacter()
|
||
local isFavor = self:IsContains(trustItem.FavorCharacterId, characterId)
|
||
local favorExp = isFavor and trustItem.FavorExp or trustItem.Exp
|
||
local curExp = tonumber(XDataCenter.FavorabilityManager.GetCurrCharacterExp(characterId))
|
||
local trustLv = XDataCenter.FavorabilityManager.GetCurrCharacterFavorabilityLevel(characterId)
|
||
local maxTrustLv = XFavorabilityConfigs.GetMaxFavorabilityLevel(characterId)
|
||
local levelUpDatas = XFavorabilityConfigs.GetTrustExpById(characterId)
|
||
|
||
if trustLv >= maxTrustLv then return 0 end
|
||
local totalNeedExp = 0
|
||
for i = trustLv, maxTrustLv - 1 do
|
||
if i == trustLv then
|
||
totalNeedExp = totalNeedExp + levelUpDatas[i].Exp - curExp
|
||
else
|
||
totalNeedExp = totalNeedExp + levelUpDatas[i].Exp
|
||
end
|
||
end
|
||
|
||
local count = math.modf(totalNeedExp / favorExp)
|
||
count = (totalNeedExp % favorExp == 0) and count or count + 1
|
||
return count
|
||
end
|
||
|
||
function XUiPanelLikeGiveGift:OnBtnMaxClick()
|
||
if not self.CurTrustItem then
|
||
XUiManager.TipMsg(CS.XTextManager.GetText("FavorabilityChooseAGift"))
|
||
return
|
||
end
|
||
|
||
local playerCount = XDataCenter.ItemManager.GetCount(self.CurTrustItem.Id)
|
||
local count = self:GetMaxCountByItem(self.CurTrustItem)
|
||
if self.CurrentCount >= count then
|
||
XUiManager.TipMsg(CS.XTextManager.GetText("FavorabilityMaxGiftNum"))
|
||
return
|
||
end
|
||
playerCount = (playerCount > count) and count or playerCount
|
||
|
||
self:UpdateTextCount(playerCount)
|
||
end
|
||
|
||
function XUiPanelLikeGiveGift:HideNumBtns()
|
||
--self.TxtNum.gameObject:SetActive(false)
|
||
self.BtnIncrease.gameObject:SetActive(false)
|
||
self.BtnDecrease.gameObject:SetActive(false)
|
||
self.BtnMax.gameObject:SetActive(false)
|
||
self.BtnUse.gameObject:SetActive(false)
|
||
end
|
||
|
||
function XUiPanelLikeGiveGift:ShowNumBtns()
|
||
-- self.TxtNum.gameObject:SetActive(true)
|
||
self.BtnIncrease.gameObject:SetActive(true)
|
||
self.BtnDecrease.gameObject:SetActive(true)
|
||
self.BtnMax.gameObject:SetActive(true)
|
||
self.BtnUse.gameObject:SetActive(true)
|
||
end
|
||
|
||
function XUiPanelLikeGiveGift:SetViewActive(isActive)
|
||
self.GameObject:SetActive(isActive)
|
||
if isActive then
|
||
self:RefreshDatas()
|
||
end
|
||
end
|
||
|
||
function XUiPanelLikeGiveGift:ChekMaxFavorability(itemType)
|
||
local isMax = self:ChekCharacterIsMaxLevel()
|
||
local IsCommunicationItem = itemType == XFavorabilityConfigs.TrustItemType.Communication
|
||
if isMax and not IsCommunicationItem then
|
||
XUiManager.TipMsg(CS.XTextManager.GetText("FavorabilityMaxLevel"))
|
||
return true
|
||
end
|
||
return false
|
||
end
|
||
|
||
function XUiPanelLikeGiveGift:ChekCharacterIsMaxLevel()
|
||
local characterId = self.UiRoot:GetCurrFavorabilityCharacter()
|
||
local isMax = XDataCenter.FavorabilityManager.IsMaxFavorabilityLevel(characterId)
|
||
return isMax
|
||
end
|
||
|
||
|
||
function XUiPanelLikeGiveGift:OnSelected(isSelected)
|
||
self.GameObject:SetActive(isSelected)
|
||
if isSelected then
|
||
self:RefreshDatas()
|
||
end
|
||
end
|
||
|
||
return XUiPanelLikeGiveGift |