192 lines
5.8 KiB
Lua
192 lines
5.8 KiB
Lua
|
|
||
|
XUiGridLikeSendGiftItem = XClass(nil, "XUiGridLikeSendGiftItem")
|
||
|
|
||
|
local mathFloor = math.floor
|
||
|
local XMathClamp = XMath.Clamp
|
||
|
local stringFormat = string.format
|
||
|
|
||
|
local LongClickIntervel = 100
|
||
|
local AddCountPerPressTime = 1 / 150
|
||
|
|
||
|
function XUiGridLikeSendGiftItem:Ctor(ui)
|
||
|
self.GameObject = ui.gameObject
|
||
|
self.Transform = ui.transform
|
||
|
XTool.InitUiObject(self)
|
||
|
|
||
|
self.BtnMax.CallBack = function() self:OnClickBtnMax() end
|
||
|
self.BtnMinus.CallBack = function() self:OnClickBtnMinus() end
|
||
|
self.BtnAdd.CallBack = function() self:OnClickBtnAdd() end
|
||
|
XUiButtonLongClick.New(self.PointerAdd, LongClickIntervel, self, nil, self.OnLongClickBtnAdd, nil, true)
|
||
|
XUiButtonLongClick.New(self.PointerMinus, LongClickIntervel, self, nil, self.OnLongClickBtnMinus, nil, true)
|
||
|
self.SelectCount = 0
|
||
|
self.BtnMax.gameObject:SetActiveEx(false)
|
||
|
|
||
|
end
|
||
|
|
||
|
function XUiGridLikeSendGiftItem:Init(uiRoot,checkCall,changeCall,preCheck)
|
||
|
self.UiRoot = uiRoot
|
||
|
self.AddCountCheckCb= checkCall
|
||
|
self.AddCountCb = changeCall
|
||
|
self.PreCheck = preCheck
|
||
|
end
|
||
|
|
||
|
function XUiGridLikeSendGiftItem:ResetSelect()
|
||
|
self:OnSelect(false)
|
||
|
end
|
||
|
|
||
|
function XUiGridLikeSendGiftItem:OnRefresh(trustItemData,count)
|
||
|
self.SelectCount = count or 0
|
||
|
self.TrustItem = trustItemData
|
||
|
self.ItemId = trustItemData.Id
|
||
|
local characterId = self.UiRoot:GetCurrFavorabilityCharacter()
|
||
|
self.RImgIcon:SetRawImage(XDataCenter.ItemManager.GetItemIcon(trustItemData.Id))
|
||
|
self.ImgFlag.gameObject:SetActive(self:IsContains(trustItemData.FavorCharacterId, characterId))
|
||
|
local giftQuality = XDataCenter.ItemManager.GetItemQuality(trustItemData.Id)
|
||
|
self.UiRoot:SetUiSprite(self.ImgIconBg, XFavorabilityConfigs.GetQualityIconByQuality(giftQuality))
|
||
|
self.ItemCount = XDataCenter.ItemManager.GetCount(trustItemData.Id)
|
||
|
self.TxtCount.text = self.ItemCount
|
||
|
self.TxtName.text = XDataCenter.ItemManager.GetItemName(self.ItemId)
|
||
|
|
||
|
self:OnSelectCountChange(self.SelectCount)
|
||
|
|
||
|
end
|
||
|
|
||
|
function XUiGridLikeSendGiftItem:IsContains(container, item)
|
||
|
for _, v in pairs(container or {}) do
|
||
|
if v == item then
|
||
|
return true
|
||
|
end
|
||
|
end
|
||
|
return false
|
||
|
end
|
||
|
|
||
|
-- checkCount小于等于拥有数量时返回true
|
||
|
function XUiGridLikeSendGiftItem:CheckItemCount(checkCount)
|
||
|
local isCountEnough = checkCount >= 0 and checkCount <= self.ItemCount
|
||
|
if not isCountEnough then
|
||
|
return false
|
||
|
end
|
||
|
local config = XFavorabilityConfigs.GetLikeTrustItemCfg(self.ItemId)
|
||
|
if config and config.TrustItemType == XFavorabilityConfigs.TrustItemType.Communication and checkCount > 1 then
|
||
|
XUiManager.TipText("SelectMultiSpecialGiftText")
|
||
|
return false
|
||
|
end
|
||
|
return true
|
||
|
end
|
||
|
|
||
|
function XUiGridLikeSendGiftItem:OnSelectCountChange(newCount)
|
||
|
self.SelectCount = newCount
|
||
|
if newCount > 0 then
|
||
|
self.TxtSelectNum.text = stringFormat("x%d", newCount)
|
||
|
self.ImgSelect.gameObject:SetActiveEx(true)
|
||
|
self.BtnMinus.gameObject:SetActiveEx(true)
|
||
|
self.BtnMax.gameObject:SetActiveEx(true)
|
||
|
else
|
||
|
self.ImgSelect.gameObject:SetActiveEx(false)
|
||
|
self.BtnMinus.gameObject:SetActiveEx(false)
|
||
|
self.BtnMax.gameObject:SetActiveEx(false)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XUiGridLikeSendGiftItem:OnClickBtnAdd()
|
||
|
local addCount = 1
|
||
|
local newCount = self.SelectCount + addCount
|
||
|
local itemId = self.ItemId
|
||
|
|
||
|
if not self.PreCheck(itemId) then
|
||
|
return
|
||
|
end
|
||
|
|
||
|
if not self:CheckItemCount(newCount) then
|
||
|
XUiManager.TipMsg(CS.XTextManager.GetText("FavorabilityMaxGiftNum"))
|
||
|
return
|
||
|
end
|
||
|
|
||
|
if not self.AddCountCheckCb(itemId, addCount) and itemId ~= 40801 then
|
||
|
return
|
||
|
end
|
||
|
|
||
|
self:OnSelectCountChange(newCount)
|
||
|
self.AddCountCb(itemId, addCount)
|
||
|
end
|
||
|
|
||
|
function XUiGridLikeSendGiftItem:OnLongClickBtnAdd(pressingTime)
|
||
|
local addCount = 1
|
||
|
local totalCount = XMathClamp(mathFloor(pressingTime * AddCountPerPressTime), 0, self.ItemCount)
|
||
|
local newCount = self.SelectCount
|
||
|
local itemId = self.ItemId
|
||
|
|
||
|
if not self.PreCheck(itemId) then
|
||
|
return
|
||
|
end
|
||
|
|
||
|
for _ = 1, totalCount do
|
||
|
if not self.AddCountCheckCb(itemId, addCount) then
|
||
|
break
|
||
|
end
|
||
|
|
||
|
newCount = newCount + addCount
|
||
|
if not self:CheckItemCount(newCount) then
|
||
|
XUiManager.TipMsg(CS.XTextManager.GetText("FavorabilityMaxGiftNum"))
|
||
|
newCount = newCount - addCount
|
||
|
break
|
||
|
end
|
||
|
|
||
|
self.AddCountCb(itemId, addCount)
|
||
|
end
|
||
|
|
||
|
self:OnSelectCountChange(newCount)
|
||
|
end
|
||
|
|
||
|
function XUiGridLikeSendGiftItem:OnClickBtnMinus()
|
||
|
local addCount = -1
|
||
|
addCount = addCount + self.SelectCount < 0 and -self.SelectCount or addCount
|
||
|
local newCount = self.SelectCount + addCount
|
||
|
local itemId = self.ItemId
|
||
|
|
||
|
self:OnSelectCountChange(newCount)
|
||
|
self.AddCountCb(itemId, addCount)
|
||
|
end
|
||
|
|
||
|
function XUiGridLikeSendGiftItem:OnLongClickBtnMinus(pressingTime)
|
||
|
local addCount = -mathFloor(pressingTime * AddCountPerPressTime)
|
||
|
addCount = addCount + self.SelectCount < 0 and -self.SelectCount or addCount
|
||
|
local newCount = self.SelectCount + addCount
|
||
|
local itemId = self.ItemId
|
||
|
|
||
|
self:OnSelectCountChange(newCount)
|
||
|
self.AddCountCb(itemId, addCount)
|
||
|
end
|
||
|
|
||
|
function XUiGridLikeSendGiftItem:OnClickBtnMax()
|
||
|
local addCount = 1
|
||
|
local totalCount = self.ItemCount
|
||
|
local newCount = self.SelectCount
|
||
|
local itemId = self.ItemId
|
||
|
|
||
|
if not self.PreCheck(itemId) then
|
||
|
return
|
||
|
end
|
||
|
|
||
|
for _ = 1, totalCount do
|
||
|
if not self.AddCountCheckCb(itemId, addCount) then
|
||
|
break
|
||
|
end
|
||
|
|
||
|
local total = newCount + addCount
|
||
|
|
||
|
|
||
|
if not self:CheckItemCount(total) then
|
||
|
break
|
||
|
end
|
||
|
|
||
|
newCount = total
|
||
|
|
||
|
self.AddCountCb(itemId, addCount)
|
||
|
end
|
||
|
|
||
|
self:OnSelectCountChange(newCount)
|
||
|
end
|
||
|
|
||
|
|
||
|
return XUiGridLikeSendGiftItem
|