2023-07-14 19:35:33 +00:00
|
|
|
local XUiBagItemInfoPanel = XLuaUiManager.Register(XLuaUi, "UiBagItemInfoPanel")
|
|
|
|
|
|
|
|
local MIN_SELET_COUNT = 1
|
|
|
|
local IsLockBtnAdd = false
|
|
|
|
local IsLockBtnUse = false
|
|
|
|
function XUiBagItemInfoPanel:OnAwake()
|
|
|
|
XTool.InitUiObject(self)
|
|
|
|
self:InitAutoScript()
|
|
|
|
end
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
function XUiBagItemInfoPanel:OnStart(itemData, useCb, isShowUse, closeCb)
|
2023-07-14 19:35:33 +00:00
|
|
|
self:CheckChangeBtnUseListener(useCb)
|
|
|
|
|
|
|
|
self.SelectCount = 0
|
|
|
|
self.DefaultMinSelectCount = 0
|
|
|
|
|
|
|
|
self.WgtBtnAddSelect = self.BtnAddSelect.gameObject:GetComponent("XUiPointer")
|
|
|
|
self.WgtBtnMinusSelect = self.BtnMinusSelect.gameObject:GetComponent("XUiPointer")
|
|
|
|
|
|
|
|
XUiButtonLongClick.New(self.WgtBtnMinusSelect, 100, self, nil, self.BtnMinusSelectLongClickCallback, nil, true)
|
|
|
|
XUiButtonLongClick.New(self.WgtBtnAddSelect, 100, self, nil, self.BtnAddSelectLongClickCallback, nil, true)
|
|
|
|
|
|
|
|
self.ItemData = itemData.Data
|
|
|
|
self.GridIndex = itemData.GridIndex
|
|
|
|
self.RecycleBatch = itemData.RecycleBatch
|
|
|
|
|
|
|
|
local id = self.ItemData.TemplateId and self.ItemData.TemplateId or self.ItemData.Id
|
|
|
|
if not id then
|
|
|
|
XLog.Error("XUiBagItem:RefreshSelf 函数错误: 参数itemData的TemplateId字段和Id字段不能全部为空..")
|
|
|
|
return
|
|
|
|
end
|
|
|
|
self.IsUseable = isShowUse or XDataCenter.ItemManager.IsUseable(id)
|
|
|
|
self:SetupContent()
|
|
|
|
self:SetBtnShowOfActionPointOverLimit()
|
2024-09-01 20:49:41 +00:00
|
|
|
self.CloseCb = closeCb
|
2023-07-14 19:35:33 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
function XUiBagItemInfoPanel:SetupContent()
|
|
|
|
if not self.ItemData then
|
|
|
|
return
|
|
|
|
end
|
|
|
|
|
|
|
|
self:SetupOperation()
|
|
|
|
self:SetupBaseInfo()
|
|
|
|
end
|
|
|
|
|
|
|
|
function XUiBagItemInfoPanel:CheckChangeBtnUseListener(useCb)
|
|
|
|
if useCb then
|
|
|
|
self:RegisterClickEvent(self.BtnUse, function() useCb(self.ItemData.Id, self.SelectCount) end)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
function XUiBagItemInfoPanel:OnEnable()
|
|
|
|
end
|
|
|
|
|
|
|
|
-- auto
|
|
|
|
-- Automatic generation of code, forbid to edit
|
|
|
|
function XUiBagItemInfoPanel:InitAutoScript()
|
|
|
|
self:AutoAddListener()
|
|
|
|
end
|
|
|
|
|
|
|
|
function XUiBagItemInfoPanel:AutoAddListener()
|
|
|
|
self:RegisterClickEvent(self.BtnClose, self.OnBtnCloseClick)
|
|
|
|
self:RegisterClickEvent(self.BtnGet, self.OnBtnGetClick)
|
|
|
|
self:RegisterClickEvent(self.BtnAddSelect, self.OnBtnAddSelectClick)
|
|
|
|
self:RegisterClickEvent(self.BtnMinusSelect, self.OnBtnMinusSelectClick)
|
|
|
|
self:RegisterClickEvent(self.BtnUse, self.OnBtnUseClick)
|
|
|
|
self:RegisterClickEvent(self.BtnMax, self.OnBtnMaxClick)
|
|
|
|
end
|
|
|
|
-- auto
|
|
|
|
function XUiBagItemInfoPanel:OnBtnAddSelectClick()
|
|
|
|
if self.SelectCount <= 0 or self.SelectCount >= self:GetGridCount() then
|
|
|
|
return
|
|
|
|
end
|
|
|
|
if IsLockBtnAdd then
|
|
|
|
XUiManager.TipMsg(CS.XTextManager.GetText("OverLimitCanNotUse"))
|
|
|
|
return
|
|
|
|
end
|
|
|
|
self:SetSelectCount(self.SelectCount + 1)
|
|
|
|
self:SetBtnShowOfActionPointOverLimit()
|
|
|
|
end
|
|
|
|
|
|
|
|
function XUiBagItemInfoPanel:OnBtnMinusSelectClick()
|
|
|
|
if self.SelectCount <= 0 then
|
|
|
|
return
|
|
|
|
end
|
|
|
|
|
|
|
|
self:SetSelectCount(self.SelectCount - 1)
|
|
|
|
self:SetBtnShowOfActionPointOverLimit()
|
|
|
|
end
|
|
|
|
|
|
|
|
function XUiBagItemInfoPanel:OnBtnCloseClick()
|
|
|
|
self:Close()
|
2024-09-01 20:49:41 +00:00
|
|
|
if self.CloseCb then
|
|
|
|
self.CloseCb()
|
|
|
|
end
|
2023-07-14 19:35:33 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
function XUiBagItemInfoPanel:OnBtnGetClick()
|
|
|
|
XLuaUiManager.Open("UiSkip", self.ItemData.Template.Id)
|
|
|
|
end
|
|
|
|
|
|
|
|
function XUiBagItemInfoPanel:BtnMinusSelectLongClickCallback(time)
|
|
|
|
if self.SelectCount == 0 then
|
|
|
|
return
|
|
|
|
end
|
|
|
|
|
|
|
|
local delta = math.max(0, math.floor(time / 150))
|
|
|
|
local count = self.SelectCount - delta
|
|
|
|
if count <= 0 then
|
|
|
|
count = 0
|
|
|
|
end
|
|
|
|
self:SetSelectCount(count)
|
|
|
|
self:SetBtnShowOfActionPointOverLimit()
|
|
|
|
end
|
|
|
|
|
|
|
|
function XUiBagItemInfoPanel:BtnAddSelectLongClickCallback(time)
|
|
|
|
local maxCount = self:GetGridCount()
|
|
|
|
if maxCount and self.SelectCount >= maxCount then
|
|
|
|
return
|
|
|
|
end
|
|
|
|
if IsLockBtnAdd then
|
|
|
|
XUiManager.TipMsg(CS.XTextManager.GetText("OverLimitCanNotUse"))
|
|
|
|
return
|
|
|
|
end
|
|
|
|
local delta = math.max(0, math.floor(time / 150))
|
|
|
|
local count = self.SelectCount + delta
|
|
|
|
if maxCount and count >= maxCount then
|
|
|
|
count = maxCount
|
|
|
|
end
|
|
|
|
|
|
|
|
self:SetSelectCount(count)
|
|
|
|
self:SetBtnShowOfActionPointOverLimit()
|
|
|
|
end
|
|
|
|
|
|
|
|
function XUiBagItemInfoPanel:SetSelectCount(newCount)
|
|
|
|
self.SelectCount = math.max(newCount, self.DefaultMinSelectCount)
|
|
|
|
if self.BtnUse then
|
|
|
|
self.BtnUse.interactable = newCount > 0
|
|
|
|
end
|
|
|
|
|
|
|
|
self.TxtSelect.text = tostring(self.SelectCount)
|
|
|
|
end
|
|
|
|
|
|
|
|
--设置操作
|
|
|
|
function XUiBagItemInfoPanel:SetupOperation()
|
|
|
|
local isUseable = self.IsUseable
|
|
|
|
if isUseable then
|
|
|
|
self.DefaultMinSelectCount = MIN_SELET_COUNT
|
|
|
|
self.SelectCount = self.DefaultMinSelectCount
|
|
|
|
self.TxtSelect.text = tostring(MIN_SELET_COUNT)
|
|
|
|
end
|
|
|
|
self.BtnMax.gameObject:SetActive(isUseable)
|
|
|
|
self.BtnMinusSelect.gameObject:SetActive(isUseable)
|
|
|
|
self.BtnAddSelect.gameObject:SetActive(isUseable)
|
|
|
|
self.TxtSelect.gameObject:SetActive(isUseable)
|
|
|
|
end
|
|
|
|
|
|
|
|
--获取当前道具的数量包括堆叠显示
|
|
|
|
function XUiBagItemInfoPanel:GetGridCount()
|
|
|
|
if self.RecycleBatch then
|
|
|
|
return self.RecycleBatch.RecycleCount
|
|
|
|
end
|
|
|
|
|
|
|
|
if self.ItemData.Template.GridCount <= 0 then
|
|
|
|
return self.Data.Count
|
|
|
|
else
|
|
|
|
if self.GridIndex then
|
|
|
|
return math.min(self.ItemData.Count - (self.GridIndex - 1) * self.ItemData.Template.GridCount, self.ItemData.Template.GridCount)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
return self.ItemData.Count
|
|
|
|
end
|
|
|
|
|
|
|
|
function XUiBagItemInfoPanel:OnBtnUseClick()
|
|
|
|
if self.SelectCount <= 0 then
|
|
|
|
return
|
|
|
|
end
|
|
|
|
if IsLockBtnUse then
|
|
|
|
XUiManager.TipMsg(CS.XTextManager.GetText("OverLimitCanNotUse"))
|
|
|
|
return
|
|
|
|
end
|
|
|
|
|
|
|
|
local itemId = self.ItemData.Id
|
|
|
|
local callback = function(rewardGoodsList)
|
|
|
|
if not XDataCenter.ItemManager.IsRedEnvelope(itemId) then
|
|
|
|
XUiManager.OpenUiObtain(rewardGoodsList)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
XDataCenter.ItemManager.Use(self.ItemData.Id, self.RecycleBatch and self.RecycleBatch.RecycleTime, self.SelectCount, callback)
|
|
|
|
|
|
|
|
self:OnBtnCloseClick()
|
|
|
|
self:SetBtnShowOfActionPointOverLimit()
|
|
|
|
end
|
|
|
|
|
|
|
|
function XUiBagItemInfoPanel:SetBtnShowOfActionPointOverLimit()
|
|
|
|
IsLockBtnUse = false
|
|
|
|
IsLockBtnAdd = false
|
|
|
|
local GoodsNum = 1
|
|
|
|
local RewardIndex = 2
|
|
|
|
local ActionPoint = XDataCenter.ItemManager.GetItem(XDataCenter.ItemManager.ItemId.ActionPoint)
|
|
|
|
for _, v in pairs(XDataCenter.ItemManager.GetCurBatterys()) do
|
|
|
|
if self.ItemData.Id == v.Data.Id then
|
|
|
|
local goodsList = XRewardManager.GetRewardList(v.Data.Template.SubTypeParams[RewardIndex])
|
|
|
|
if goodsList[GoodsNum].Count * self.SelectCount + ActionPoint:GetCount() > ActionPoint.Template.MaxCount then
|
|
|
|
IsLockBtnUse = true
|
|
|
|
end
|
|
|
|
if goodsList[GoodsNum].Count * (self.SelectCount + 1) + ActionPoint:GetCount() > ActionPoint.Template.MaxCount then
|
|
|
|
IsLockBtnAdd = true
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
function XUiBagItemInfoPanel:GetMaxCount()
|
|
|
|
local maxCount = self:GetGridCount() or 0
|
|
|
|
if maxCount == 0 then
|
|
|
|
return maxCount
|
|
|
|
end
|
|
|
|
local tmpMaxCount = 1
|
|
|
|
local GoodsNum = 1
|
|
|
|
local RewardIndex = 2
|
|
|
|
local ActionPoint = XDataCenter.ItemManager.GetItem(XDataCenter.ItemManager.ItemId.ActionPoint)
|
|
|
|
for _, v in pairs(XDataCenter.ItemManager.GetCurBatterys()) do
|
|
|
|
if self.ItemData.Id == v.Data.Id then
|
|
|
|
while (true) do
|
|
|
|
local goodsList = XRewardManager.GetRewardList(v.Data.Template.SubTypeParams[RewardIndex])
|
|
|
|
if tmpMaxCount == maxCount then
|
|
|
|
break
|
|
|
|
end
|
|
|
|
if goodsList[GoodsNum].Count * (tmpMaxCount + 1) + ActionPoint:GetCount() <= ActionPoint.Template.MaxCount then
|
|
|
|
tmpMaxCount = tmpMaxCount + 1
|
|
|
|
else
|
|
|
|
maxCount = tmpMaxCount
|
|
|
|
break
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
return maxCount
|
|
|
|
end
|
|
|
|
|
|
|
|
function XUiBagItemInfoPanel:OnBtnMaxClick()
|
|
|
|
local maxCount = self:GetMaxCount()
|
|
|
|
if maxCount and self.SelectCount >= maxCount then
|
|
|
|
return
|
|
|
|
end
|
|
|
|
|
|
|
|
self:SetSelectCount(maxCount)
|
|
|
|
self:SetBtnShowOfActionPointOverLimit()
|
|
|
|
end
|
|
|
|
|
|
|
|
function XUiBagItemInfoPanel:SetupBaseInfo()
|
|
|
|
self.BtnUse.gameObject:SetActive(self.IsUseable)
|
|
|
|
self.BtnUse.interactable = self.SelectCount > 0
|
|
|
|
|
|
|
|
local template = self.ItemData.Template
|
|
|
|
self.TxtName.text = template.Name
|
|
|
|
self.TxtDescription.text = template.Description
|
|
|
|
XDataCenter.ItemManager.GetItemWorldDesc(self.ItemData.Id);
|
|
|
|
if template.WorldDesc then
|
|
|
|
self.TxtWorldDesc.text = string.gsub(template.WorldDesc, "\\n", "\n")
|
|
|
|
else
|
|
|
|
self.TxtWorldDesc.text = "";
|
|
|
|
end
|
|
|
|
local count = self:GetGridCount()
|
|
|
|
self.TxtCount.text = tostring(count)
|
|
|
|
self.RImgIcon:SetRawImage(template.BigIcon)
|
|
|
|
if XDataCenter.ItemManager.IsTimeLimit(self.ItemData.Id) then
|
|
|
|
local leftTime
|
|
|
|
if self.RecycleBatch then
|
|
|
|
leftTime = self.RecycleBatch.RecycleTime - XTime.GetServerNowTimestamp()
|
|
|
|
else
|
|
|
|
leftTime = XDataCenter.ItemManager.GetRecycleLeftTime(self.ItemData.Id)
|
|
|
|
end
|
|
|
|
local deadlineStr = XUiHelper.GetTimeDesc(leftTime, 2)
|
|
|
|
self.TxtDeadLine.text = leftTime <= 0 and "(" .. deadlineStr .. ")" or CS.XTextManager.GetText("ItemDeadLine", deadlineStr)
|
|
|
|
self.TxtDeadLine.gameObject:SetActive(true)
|
|
|
|
else
|
|
|
|
self.TxtDeadLine.gameObject:SetActive(false)
|
|
|
|
end
|
|
|
|
|
|
|
|
--获取途径按钮
|
|
|
|
local skipIdParams = XGoodsCommonManager.GetGoodsSkipIdParams(self.ItemData.Id)
|
|
|
|
if skipIdParams and #skipIdParams > 0 then
|
|
|
|
self.BtnGet.gameObject:SetActive(true)
|
|
|
|
else
|
|
|
|
self.BtnGet.gameObject:SetActive(false)
|
|
|
|
end
|
|
|
|
|
|
|
|
self:SetUiSprite(self.ImgIconBg, XArrangeConfigs.GeQualityBgPath(template.Quality))
|
|
|
|
end
|