ro-webgl/Assets/Lua/UI/Common/RuneShopRewardsItemCtr.lua
2025-02-26 15:05:04 +08:00

427 lines
17 KiB
Lua

local RuneShopRewardsItemCtr = {}
--战令悬赏每级
function RuneShopRewardsItemCtr:SetData(wnd, itemlua, logicData1, enterType, onClickOwner, onClickCB, params)
if logicData1 == nil then return end
self:SetIconDatatt(wnd, itemlua.rewardsLeft.iconItem, logicData1, enterType, onClickOwner, self.ShowItemTips, params,false)
self:SetIconDatatt(wnd, itemlua.rewardsRight.iconItem, logicData1, enterType, onClickOwner, self.ShowCashItemTips, params,true)
end
local function GetPath(path, isSmall)
return isSmall and path.."_s" or path
end
function RuneShopRewardsItemCtr:ShowItemTips(button, params)
local data = clone(params[0])
--LogError("进入了图标tips"..Inspect(data))
--data.displayBtn = true
local _extData = {_id = data.cfgData.ID, cfgId = data.cfgId}
local tipsdara = {}
tipsdara.cfgId = data.cfgData.Reward[1][1]
tipsdara.num = data.cfgData.Reward[1][2]
local itemCfgData = ManagerContainer.CfgMgr:GetItemById(data.cfgId)
if itemCfgData and itemCfgData.SkipInterface > 0 then
if data.state == nil then data.state = 0 end
data.state = Bit.bor(data.state, Bit.lshift(1, Enum.TipsEnterType.BtnGoto)) --data.state + CommonUtil.Get2Powers(Enum.TipsEnterType.BtnGoto)
end
if data.isReward == 2 then
ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_EXPLORE_REWARD_REQ,{level = data.cfgData.Lv, reward_type = 1})
--LogError("领取普通奖励"..data.cfgData.Lv)
else
ManagerContainer.LuaUIMgr:OpenTips(tipsdara, _extData)
end
end
function RuneShopRewardsItemCtr:ShowCashItemTips(button, params)
local data = clone(params[0])
--LogError("进入了图标tips"..Inspect(data))
--data.displayBtn = true
local _extData = {_id = data.cfgData.ID, cfgId = data.cfgId}
local tipsdara = {}
tipsdara.cfgId = data.cfgData.CashReward[1][1]
tipsdara.num = data.cfgData.CashReward[1][2]
local itemCfgData = ManagerContainer.CfgMgr:GetItemById(data.cfgId)
if itemCfgData and itemCfgData.SkipInterface > 0 then
if data.state == nil then data.state = 0 end
data.state = Bit.bor(data.state, Bit.lshift(1, Enum.TipsEnterType.BtnGoto)) --data.state + CommonUtil.Get2Powers(Enum.TipsEnterType.BtnGoto)
end
if data.isCashReward == 2 then
ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_EXPLORE_REWARD_REQ,{level= data.cfgData.Lv,reward_type= 2})
--LogError("领取了高级奖励"..data.cfgData.Lv)
elseif data.isCashReward == 1 then
ManagerContainer.LuaUIMgr:OpenTips(tipsdara, _extData)
else
if ManagerContainer.DataMgr.RuneShopDataMgr:GetRewardsData():GetRewardsIsCash() == 0 then
ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIRewardsBuyTips, {runeShopType, nil, 0})
else
ManagerContainer.LuaUIMgr:OpenTips(tipsdara, _extData)
end
end
end
function RuneShopRewardsItemCtr:SetIconDatatt(wnd, itemlua, logicData, enterType, onClickOwner, onClickCB, params , isAnvanced)
--LogError("bbb"..Inspect(logicData))
local cfgdatat
local redpointState = false
local baseData = ManagerContainer.DataMgr.RuneShopDataMgr:GetShopData(Enum.RuneShopType.Rewards,nil,false)
if isAnvanced then
cfgdatat = logicData.cfgData.CashReward
-- if logicData.isCashReward == 0 and baseData:GetRewardsIsCash() == 1 then
-- local curlv = baseData:GetShowRewardCurLv()
-- if logicData.cfgData.lv < curlv or logicData.cfgData.lv == curlv then
-- redpointState = true
-- end
-- end
if logicData.isCashReward == 2 then
redpointState = true
end
--logicData.cfgData.isCash = 1
else
cfgdatat = logicData.cfgData.Reward
-- if logicData.isReward == 0 and baseData:GetRewardsIsCash() == 1 then
-- local curlv = baseData:GetShowRewardCurLv()
-- if logicData.cfgData.lv < curlv or logicData.cfgData.lv == curlv then
-- redpointState = true
-- end
-- end
if logicData.isReward == 2 then
redpointState = true
end
--logicData.cfgData.isCash = 0
end
if redpointState then
ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.RED_POINT_MGR_NOTICE, Enum.RPNotifyType.RuneShopRewards, true)
end
local cfgId = cfgdatat[1][1]
local num = cfgdatat[1][2] or 0
local vip = cfgdatat.vip or 0
local strengthLevel = logicData.strengthLevel or 0
local advLv = logicData.advanceLevel or 0
local gridViewItem = itemlua.gameObject:GetComponent(Enum.TypeInfo.UIGridViewMark)
local isSmall = gridViewItem.OriName == "IconSmallItem"
itemlua.icon.image.sprite = nil
itemlua.conertips.gameObject:SetActive(logicData.cornerType and logicData.cornerType > 0);
if logicData.cornerType == Enum.FromType.Extrra then
itemlua.text.text.text = I18N.T("SignInTips2"); --额外
--TODO:将来判定是否要改变角标图片
end
local itemCfgData, cfgData, iconType, quality
if enterType == Enum.ItemIEnterType.Partner then
itemCfgData = ManagerContainer.CfgMgr:GetPartnerMapItemDataById(cfgId)
if itemCfgData == nil then
LogError(cfgId.. " partner isnt exist in ItemCfg")
return
end
iconType = Enum.ItemType.Parter
cfgData = ManagerContainer.CfgMgr:GetPartnerDataById(cfgId)
if cfgData == nil then
LogError(cfgId.. " isnt exist in PartnerCfg")
return
end
else
itemCfgData = ManagerContainer.CfgMgr:GetItemById(cfgId)
if itemCfgData == nil then
LogError(cfgId.. " isnt exist in ItemCfg")
return
end
iconType = itemCfgData.ResType
cfgData = itemCfgData
if iconType == Enum.ItemType.Equip then
cfgData = ManagerContainer.CfgMgr:GetEquipById(cfgId)
if cfgData == nil then
LogError(cfgId.. " isnt exist in EquipCfg")
return
end
elseif iconType == Enum.ItemType.Card then
cfgData = ManagerContainer.CfgMgr:GetCardDataById(cfgId)
if cfgData == nil then
LogError(cfgId.. " isnt exist in CardCfg")
return
end
elseif iconType == Enum.ItemType.FashionPaper then
cfgData = ManagerContainer.CfgMgr:GetFashionPaperById(cfgId)
if cfgData == nil then
LogError(cfgId.. " isnt exist in FashionPaperCfg")
return
end
elseif iconType == Enum.ItemType.Parter then
if cfgData == nil then
LogError(cfgId.. " isnt exist in PartnerCfg")
return
end
elseif iconType == Enum.ItemType.Pet then
cfgData = ManagerContainer.CfgMgr:GetPetDataById(cfgId)
if cfgData == nil then
LogError(cfgId.. " isnt exist in PetCfg")
return
end
if itemCfgData.Quality == 0 then
itemCfgData.Quality = cfgData.Fame
end
if itemCfgData.Icon == "" then
itemCfgData.Icon = cfgData.Icon
end
end
end
quality = itemCfgData.Quality
local qualityFxName = nil
local frameIcon = Constant.Quality_Frame_Icons[quality]
if quality >= Enum.QualityType.Purple then
qualityFxName = Constant.Quality_FX[quality - Enum.QualityType.Blue]
end
if iconType == Enum.ItemType.Compose and itemCfgData.DebrisShow == 2 then
iconType = Enum.ItemType.Pet
end
if iconType == Enum.ItemType.Equip or iconType == Enum.ItemType.Card then
frameIcon = Constant.Quality_CardBg_Icons[quality]
elseif iconType == Enum.ItemType.Pet then
frameIcon = Constant.Quality_HeadFrame_Icons[quality]
elseif iconType == Enum.ItemType.Parter then
frameIcon = strengthLevel == 0 and Constant.Quality_White_Head_Frame_Icon or Constant.Quality_HeadFrame_Icons[math.min(strengthLevel, #Constant.Quality_HeadFrame_Icons)]
elseif iconType == Enum.ItemType.FashionPaper then
frameIcon = Constant.Quality_Frame_Icons[quality]
end
if itemlua.uiParticle ~= nil and itemlua.uiParticle.EffectName ~= qualityFxName then
wnd:RemoveEffect(itemlua,itemlua.uiParticle.EffectName,itemlua.uiParticle.fxGo)
ManagerContainer.ResMgr:RecycleGO(Constants.EffectPath,itemlua.uiParticle.EffectName,itemlua.uiParticle.fxGo)
itemlua.uiParticle = nil
end
if quality >= 5 then
if qualityFxName == nil then
itemlua.qualityFX:SetActive(false)
else
if itemlua.uiParticle == nil then
AW.async(function()
local fxGo = AW.await(ManagerContainer.ResMgr:LuaGetGoFromPoolAsync(Constants.EffectPath,qualityFxName))
if fxGo~= nil then
fxGo.transform:SetParent(itemlua.qualityFX.transform)
fxGo.transform.localPosition = Vector3.zero
fxGo.transform.localRotation = Quaternion.identity
fxGo.transform.localScale = Vector3.one
--if tolua.getpeer(fxGo) == nil then
-- tolua.setpeer(fxGo, {})
--end
itemlua.uiParticle = {}
itemlua.uiParticle.fxGo = fxGo
itemlua.uiParticle.EffectName = qualityFxName
local sizeX = itemlua.rectTransform.rect.width
--判断是否父节点为grid
if itemlua.transform.parent then
local parent = itemlua.transform.parent
local parentScale = parent.localScale.x
local grid = parent:GetComponent(Enum.TypeInfo.GridLayoutGroup)
local width = sizeX
if grid then
width = grid.cellSize.x
end
sizeX = width * parentScale
end
local scaleX = sizeX/160
--local sizeY = itemlua.layoutElement.preferredHeight
--local scaleY = sizeY/160
local uiParticle = fxGo:GetComponent(Enum.TypeInfo.UIParticle)
if uiParticle then
uiParticle.scale = scaleX
end
wnd:AddNewEffect(itemlua,qualityFxName,fxGo)
itemlua.qualityFX:SetActive(true)
end
end)
end
end
end
local _iconPath = itemCfgData.Icon
if logicData.isLeader then _iconPath = logicData.leaderIcon end
CommonUtil.SetTotalChildrenGray(itemlua.icon, false)
CommonUtil.LoadIcon(wnd, _iconPath, function (sprite)
itemlua.icon.image.sprite = sprite
end, itemlua, 'IconIcon')
CommonUtil.LoadIcon(wnd, GetPath(frameIcon, isSmall), function (sprite)
itemlua.frame.image.sprite = sprite
end, itemlua, 'IconFrame')
itemlua.frame.image.material = quality >= 3 and ManagerContainer.ResMgr:GetFrameQualityMat() or nil
local needLevel = iconType == Enum.ItemType.Equip or iconType == Enum.ItemType.Card
itemlua.level:SetActive(needLevel)
if needLevel then
local level = 1
if iconType == Enum.ItemType.Equip then
local divide = Constant.Quality_Equip_Divide[cfgData.EquipLevel]
level = divide[2]
elseif iconType == Enum.ItemType.Card then
level = cfgData.CardLevel
end
CommonUtil.LoadIcon(wnd, Constant.Quality_Equip_LV_Icons[level], function (sprite)
itemlua.level.image.sprite = sprite
end, itemlua, 'IconLevel')
end
itemlua.cardLabel:SetActive(iconType == Enum.ItemType.Card)
if iconType == Enum.ItemType.Card then
CommonUtil.LoadIcon(wnd, Constant.Quality_CardType_Icons[cfgData.CardType], function (sprite)
itemlua.cardLabel.image.sprite = sprite
end, itemlua, 'IconType')
end
local needJob = iconType == Enum.ItemType.Parter or iconType == Enum.ItemType.Pet
itemlua.job:SetActive(needJob)
if needJob then
local jobIcon = cfgData.JobIcon
if iconType == Enum.ItemType.Pet then
jobIcon = Constant.Natural_Icons..itemCfgData.NatureType
end
CommonUtil.LoadIcon(wnd, jobIcon, function (sprite)
itemlua.job.image.sprite = sprite
end, itemlua, 'IconJob')
end
local sexLabelVisible = false
if iconType == Enum.ItemType.FashionPaper then
local fashionCfgData = ManagerContainer.CfgMgr:GetFashionById(cfgData.FashionId)
if fashionCfgData and fashionCfgData.FashionSex and fashionCfgData.FashionSex > 0 then
sexLabelVisible = true
CommonUtil.LoadIcon(wnd, Constant.Paper_Sex_Icons[fashionCfgData.FashionSex], function (sprite)
itemlua.sexLabel.image.sprite = sprite
end, itemlua, 'IconSex')
end
end
itemlua.sexLabel:SetActive(sexLabelVisible)
if iconType ~= Enum.ItemType.Parter then
if num >= 10000 then
if iconType < 100 then
itemlua.num.text.text = CommonUtil.FormatNumber(num)
else
itemlua.num.text.text = CommonUtil.GetPreciseDecimalFloor(num/10000, 1) .. "w"
end
else
itemlua.num.text.text = tostring(num)
end
else
itemlua.num.text.text = "Lv."..tostring(num)
end
itemlua.redPoint:SetActive(redpointState)
--if enterType == Enum.ItemIEnterType.Bag and num > 1 then
-- itemlua.num:SetActive(true)
--else
-- itemlua.num:SetActive(false)
--end
itemlua.num:SetActive(num > 1)
itemlua.refineLv:SetActive(enterType == Enum.ItemIEnterType.EquipTips and num > 0)
itemlua.refineLv.text.text = "+"..num
itemlua.limited:SetActive(itemCfgData and itemCfgData.ItemTime > 0)
--itemlua.advence:SetActive(iconType == Enum.ItemType.Pet and advLv > 0)
--itemlua.advenceLv.text.text = "+"..advLv
--vip
itemlua.vip:SetActive(vip > 0)
if vip > 0 then
local vipCfgData = ManagerContainer.CfgMgr:GetVipCfgById(vip)
if vipCfgData then
CommonUtil.LoadIcon(wnd, vipCfgData.VipMarkIcon, function (sprite)
itemlua.label.image.sprite = sprite
end, itemlua, 'IconVip')
end
end
self:DebrisShow(wnd, itemCfgData, itemlua)
itemlua.repeatSign:SetActive(false)
if itemCfgData.ActivationItem > 0 then
local isRepeated = ManagerContainer.DataMgr.KeepSakeBookData:IsKeepSakeMaxLv(itemCfgData.ActivationItem)
itemlua.repeatSign:SetActive(isRepeated)
end
if onClickOwner and onClickCB then
itemlua.bg.button.enabled = true
onClickOwner.uiBase:AddButtonUniqueEventListener(itemlua.bg.button, onClickOwner, onClickCB, logicData, itemlua, params)
else
itemlua.bg.button.enabled = false
end
return itemCfgData
end
function RuneShopRewardsItemCtr:DebrisShow(wnd, itemCfgData, itemlua)
itemlua.piece:SetActive(itemCfgData.DebrisShow == 2 or itemCfgData.DebrisShow == 4)
if itemCfgData.DebrisShow == 3 or itemCfgData.DebrisShow == 4 then
if not itemlua.cardLabel.activeSelf then
itemlua.cardLabel:SetActive(true)
end
CommonUtil.LoadIcon(wnd, Constant.Quality_Card_Icons[itemCfgData.Quality], function (sprite)
itemlua.cardLabel.image.sprite = sprite
end, itemlua, 'IconType')
elseif itemCfgData.DebrisShow == 1 or itemCfgData.DebrisShow == 2 then
itemlua.cardLabel:SetActive(false)
end
if itemCfgData.DebrisShow == 1 then
--通用宠物碎片
CommonUtil.SetTotalChildrenGray(itemlua.icon, false)
elseif itemCfgData.DebrisShow == 2 then
--通用定向宠物碎片
CommonUtil.SetTotalChildrenGray(itemlua.icon, true)
local iconPath = Constant.Pet_Debries_Icons[itemCfgData.Quality]
CommonUtil.LoadIcon(wnd, iconPath, function (sprite)
itemlua.piece.image.sprite = sprite
end, itemlua, 'piece')
elseif itemCfgData.DebrisShow == 3 then
--通用卡片碎片
CommonUtil.SetTotalChildrenGray(itemlua.icon, false)
elseif itemCfgData.DebrisShow == 4 then
--通用定向卡片碎片
CommonUtil.SetTotalChildrenGray(itemlua.icon, true)
local iconPath = Constant.Card_Debries_Icons[itemCfgData.Quality]
CommonUtil.LoadIcon(wnd, iconPath, function (sprite)
itemlua.piece.image.sprite = sprite
end, itemlua, 'piece')
end
end
return RuneShopRewardsItemCtr