243 lines
8.5 KiB
Lua
243 lines
8.5 KiB
Lua
|
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
|