PGRData/Script/matrix/xui/xuipassport/uplevel/XUiPassportUpLevel.lua

243 lines
No EOL
8.5 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

local XUiPassportUpLevelGrid = require("XUi/XUiPassport/UpLevel/XUiPassportUpLevelGrid")
local XUiPassportUpLevel = XLuaUiManager.Register(XLuaUi, "UiPassportUpLevel")
local MinSelectCount = 1
local CSXTextManagerGetText = CS.XTextManager.GetText
local tableInsert = table.insert
local mathMax = math.max
local mathFloor = math.floor
--购买等级
function XUiPassportUpLevel:OnAwake()
self.SpendBuyCount = 0 --花费多少
self.SpendBuyExp = 0 --购买多少经验
self.LevelAfter = 0 --购买后提升至多少级
self.CurLevelIdListCount = 0 --当前滑动列表显示的数量
self.IsShowGridEffect = false --滑动列表中新出现的格子显示特效
end
function XUiPassportUpLevel:OnStart()
self.AssetPanel = XUiPanelAsset.New(self, self.PanelAsset, XDataCenter.ItemManager.ItemId.FreeGem)
self:RegisterButtonEvent()
self:SetSelectCount(1)
self.PassportBaseInfo = XDataCenter.PassportManager.GetPassportBaseInfo()
self.MaxLevel = XPassportConfigs.GetPassportMaxLevel()
local maxBuyableLevel = XPassportConfigs.GetPassportMaxBuyableLevel()
self.MaxSelectCount = maxBuyableLevel - self.PassportBaseInfo:GetLevel()
local expItemIcon = XItemConfigs.GetItemIconById(XDataCenter.ItemManager.ItemId.PassportExp)
self.RImgIconBuy:SetRawImage(expItemIcon)
self.DynamicTable = XDynamicTableNormal.New(self.PanelRewardList.transform)
self.DynamicTable:SetProxy(XUiPassportUpLevelGrid)
self.DynamicTable:SetDelegate(self)
self.GridStage.gameObject:SetActive(false)
end
function XUiPassportUpLevel:OnEnable()
XEventManager.AddEventListener(XEventId.EVENT_NOTIFY_PASSPORT_BASE_INFO, self.Refresh, self)
self.TxtLevelNow.text = self.PassportBaseInfo:GetLevel()
self:Refresh()
end
function XUiPassportUpLevel:OnDisable()
XEventManager.RemoveEventListener(XEventId.EVENT_NOTIFY_PASSPORT_BASE_INFO, self.Refresh, self)
end
function XUiPassportUpLevel:RegisterButtonEvent()
self:RegisterClickEvent(self.BtnCancel, self.Close)
self:RegisterClickEvent(self.BtnTanchuangClose, self.Close)
self:RegisterClickEvent(self.BtnConfirm, self.OnBtnConfirmClick)
self.BtnAddSelect.CallBack = handler(self, self.OnBtnAddClick)
self.BtnMinusSelect.CallBack = handler(self, self.OnBtnReduceClick)
self.WidgetBtnMinusLongClick = XUiButtonLongClick.New(self.WidgetBtnMinusSelect, 100, self, nil, self.BtnMinusSelectLongClickCallback, nil, true)
self.WidgetBtnAddMinusLongClick = XUiButtonLongClick.New(self.WidgetBtnAddSelect, 100, self, nil, self.BtnAddSelectLongClickCallback, nil, true)
self.TxtSelect.onValueChanged:AddListener(function() self:OnInputFieldTextChanged() end)
end
function XUiPassportUpLevel:Refresh()
self:UpdateTextSelectCount()
self:UpdateBtnSelectState()
end
function XUiPassportUpLevel:UpdateBtnSelectState()
local isDisable = self.SelectCount <= MinSelectCount
self.BtnMinusSelect:SetDisable(isDisable, not isDisable)
local maxSelectCount = self:GetMaxSelectCount()
isDisable = self.SelectCount >= maxSelectCount
self.BtnAddSelect:SetDisable(isDisable, not isDisable)
end
function XUiPassportUpLevel:UpdateTextSelectCount()
local selectCount = self:GetSelectCount()
local currLevel = self.PassportBaseInfo:GetLevel()
local maxSelectCount = self:GetMaxSelectCount()
local levelAfter = math.min(self.MaxLevel, currLevel + selectCount)
self.TxtLevelAfter.text = levelAfter
self.TxtSelect.text = selectCount
local spendBuyCount = 0 --花费多少
local levelId
local costItemId = XPassportConfigs.GetBuyLevelCostItemId()
local costItemIcon = XItemConfigs.GetItemIconById(costItemId)
local costItemCount
local curLevelExpCfg = XPassportConfigs.GetPassportLevelTotalExpByLevel(currLevel) --当前等级配置的总经验
local spendBuyExpCfg = XPassportConfigs.GetPassportLevelTotalExpByLevel(levelAfter) --购买的等级对应的总经验
local spendBuyExp = spendBuyExpCfg - curLevelExpCfg --购买的经验值
local expCfg
local levelIdList = {} --要购买的等级Id列表无预计可领取奖励的不添加
local unLockPassportRewardIdList
local level
for i = currLevel + 1, levelAfter do
levelId = XPassportConfigs.GetPassportLevelId(i)
costItemCount = levelId and XPassportConfigs.GetPassportLevelCostItemCount(levelId) or 0
spendBuyCount = spendBuyCount + costItemCount
expCfg = levelId and XPassportConfigs.GetPassportLevelTotalExp(levelId) or 0
if levelId then
level = XPassportConfigs.GetPassportLevel(levelId)
unLockPassportRewardIdList = XPassportConfigs.GetUnLockPassportRewardIdListByLevel(level)
if not XTool.IsTableEmpty(unLockPassportRewardIdList) then
tableInsert(levelIdList, levelId)
end
end
end
self.RImgIconSpend:SetRawImage(costItemIcon)
self.TxtTips.text = CSXTextManagerGetText("PassportSpendBuyDesc", spendBuyCount)
self.TxtBuy.text = spendBuyExp
self.TxtLevel.text = CSXTextManagerGetText("PassportBuyLevelUpDesc", levelAfter)
self:SetSpendBuyExp(spendBuyExp)
self:SetSpendBuyCount(spendBuyCount)
self:SetLevelAfter(levelAfter)
self:UpdateDynamicTable(levelIdList)
end
function XUiPassportUpLevel:UpdateDynamicTable(levelIdList)
self.IsShowGridEffect = #levelIdList > self.CurLevelIdListCount
self.CurLevelIdListCount = #levelIdList
self.LevelIdList = XTool.ReverseList(levelIdList)
self.DynamicTable:SetDataSource(levelIdList)
self.DynamicTable:ReloadDataSync(1)
end
function XUiPassportUpLevel:OnDynamicTableEvent(event, index, grid)
if event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_INIT then
grid:Init(self)
elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_ATINDEX then
local levelId = self.LevelIdList[index]
grid:Refresh(levelId)
elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_RELOAD_COMPLETED then
if not self.IsShowGridEffect then
return
end
local grid = self.DynamicTable:GetGridByIndex(1)
if grid then
grid:ShowEffect()
end
end
end
function XUiPassportUpLevel:OnBtnReduceClick()
self:SetSelectCount(self.SelectCount - 1)
self:Refresh()
end
function XUiPassportUpLevel:OnBtnAddClick()
self:SetSelectCount(self.SelectCount + 1)
self:Refresh()
end
function XUiPassportUpLevel:BtnMinusSelectLongClickCallback(time)
if self.SelectCount == MinSelectCount then
return
end
local delta = mathMax(0, mathFloor(time / 150))
local count = self.SelectCount - delta
if count <= MinSelectCount then
count = MinSelectCount
end
self:SetSelectCount(count)
self:Refresh()
end
function XUiPassportUpLevel:BtnAddSelectLongClickCallback(time)
local maxCount = self:GetMaxSelectCount()
if maxCount and self.SelectCount >= maxCount then
return
end
local delta = mathMax(0, mathFloor(time / 150))
local count = self.SelectCount + delta
if maxCount and count >= maxCount then
count = maxCount
end
self:SetSelectCount(count)
self:Refresh()
end
function XUiPassportUpLevel:OnBtnConfirmClick()
local spendBuyCount = self:GetSpendBuyCount()
local spendBuyExp = self:GetSpendBuyExp()
local levelAfter = self:GetLevelAfter()
local buyCb = handler(self, self.Close)
XLuaUiManager.Open("UiPassportReward", levelAfter, spendBuyCount, spendBuyExp, buyCb, self.LevelIdList)
end
function XUiPassportUpLevel:OnInputFieldTextChanged()
local selectCount = tonumber(self.TxtSelect.text) or 0
if selectCount == self.SelectCount then
return
end
local maxCount = self:GetMaxSelectCount()
selectCount = math.max(MinSelectCount, selectCount)
selectCount = math.min(maxCount, selectCount)
self:SetSelectCount(selectCount)
self:Refresh()
end
function XUiPassportUpLevel:SetLevelAfter(levelAfter)
self.LevelAfter = levelAfter
end
function XUiPassportUpLevel:GetLevelAfter()
return self.LevelAfter
end
function XUiPassportUpLevel:SetSpendBuyExp(spendBuyExp)
self.SpendBuyExp = spendBuyExp
end
function XUiPassportUpLevel:GetSpendBuyExp()
return self.SpendBuyExp
end
function XUiPassportUpLevel:SetSpendBuyCount(spendBuyCount)
self.SpendBuyCount = spendBuyCount
end
function XUiPassportUpLevel:GetSpendBuyCount()
return self.SpendBuyCount
end
function XUiPassportUpLevel:SetSelectCount(selectCount)
self.SelectCount = selectCount
end
function XUiPassportUpLevel:GetSelectCount()
return self.SelectCount
end
function XUiPassportUpLevel:GetMaxSelectCount()
return self.MaxSelectCount
end