2025-06-04 05:02:57 +08:00

321 lines
9.1 KiB
Plaintext

CardDecomposeView = class("CardDecomposeView", ContainerView)
CardDecomposeView.ViewType = UIViewType.NormalLayer
local zeroVector3 = LuaVector3.zero
local skipType = SKIPTYPE.CardDecompose
function CardDecomposeView:Init()
self:FindObjs()
self:AddEvts()
self:AddViewEvts()
self:InitShow()
end
function CardDecomposeView:FindObjs()
self.addItemBtn = self:FindGO("AddItemBtn")
self.itemRoot = self:FindGO("ItemRoot")
self.materialRoot = self:FindGO("MaterialRoot")
self.materialNum = self:FindGO("MaterialNum"):GetComponent(UILabel)
self.targetRoot = self:FindGO("TargetRoot")
self.itemName = self:FindGO("ItemName"):GetComponent(UILabel)
self.totalCost = self:FindGO("TotalCost"):GetComponent(UILabel)
self.chooseBord = self:FindGO("ChooseBord")
self.filter = self:FindGO("Filter"):GetComponent(UIPopupList)
self.skipBtn = self:FindGO("SkipBtn"):GetComponent(UISprite)
end
function CardDecomposeView:AddEvts()
local closeButton = self:FindGO("CloseButton")
self:AddClickEvent(closeButton,function ()
SceneUIManager.Instance:PlayerSpeak(self.npcId, ZhString.CardMark_EndDialog)
self:CloseSelf()
end)
self:AddClickEvent(self.addItemBtn, function ()
local data = CardMakeProxy.Instance:GetDecomposeCard()
--儲存所有卡片
self.AllCardData = CardMakeProxy.Instance:GetDecomposeCard()
if #data > 0 then
self.chooseBord:SetActive(true)
--decomposeAllBtn:SetActive(true)
else
MsgManager.ShowMsgByID(391)
self.chooseBord:SetActive(false)
end
end)
local closeBtn = self:FindGO("CloseBtn")
self:AddClickEvent(closeBtn, function ()
self.chooseBord:SetActive(false)
end)
EventDelegate.Add(self.filter.onChange, function()
if self.filter.data == nil then
return
end
if self.filterData ~= self.filter.data then
self.filterData = self.filter.data
self:ResetCard()
end
end)
self:AddClickEvent(self.skipBtn.gameObject, function ()
self:Skip()
end)
self:AddClickEvent(self.targetRoot, function ()
self.tipData.itemdata = self.targetCell.data
self:ShowItemTip(self.tipData, self.targetCell.icon, NGUIUtil.AnchorSide.Left, {-220,0})
end)
self:AddClickEvent(self.materialRoot, function ()
self.tipData.itemdata = self.materialCell.data
self:ShowItemTip(self.tipData, self.materialCell.icon, NGUIUtil.AnchorSide.Left, {-220,0})
end)
local decomposeBtn = self:FindGO("DecomposeBtn")
self:AddClickEvent(decomposeBtn, function ()
self:Decompose()
end)
local decomposeAllBtn = self:FindGO("DecomposeAllBtn")
self:AddClickEvent(decomposeAllBtn, function ()
self:AllDecompose()
end)
self:AddHelpButtonEvent()
end
function CardDecomposeView:AddViewEvts()
self:AddListenEvt(MyselfEvent.MyDataChange, self.UpdateTotalCost)
self:AddListenEvt(ItemEvent.ItemUpdate, self.HandleItemUpdate)
self:AddListenEvt(ServiceEvent.ItemExchangeCardItemCmd, self.HandleExchangeCardItem)
end
function CardDecomposeView:InitShow()
self.tipData = {}
self.tipData.funcConfig = {}
self.npcId = self.viewdata.viewdata.npcdata.data.id
local wrapConfig = ReusableTable.CreateTable()
wrapConfig.wrapObj = self:FindGO("Container")
wrapConfig.pfbNum = 6
wrapConfig.cellName = "EquipChooseCell"
wrapConfig.control = EquipChooseCell
wrapConfig.dir = 1
self.wrapHelper = WrapCellHelper.new(wrapConfig)
self.wrapHelper:AddEventListener(MouseEvent.MouseClick, self.ClickItem, self)
self.wrapHelper:AddEventListener(EquipChooseCellEvent.ClickItemIcon, self.ClickItemIcon, self)
ReusableTable.DestroyAndClearTable(wrapConfig)
local obj = self:LoadPreferb("cell/ItemCell", self.targetRoot)
obj.transform.localPosition = zeroVector3
self.targetCell = ItemCell.new(obj)
self.targetCell:AddEventListener(MouseEvent.MouseClick, self.ClickTargetCell, self)
local material = self:LoadPreferb("cell/ItemCell", self.materialRoot)
material.transform.localPosition = zeroVector3
self.materialCell = ItemCell.new(material)
local _CardConfig = GameConfig.Card
local moneyIcon = self:FindGO("Sprite", self.totalCost.gameObject):GetComponent(UISprite)
local money = Table_Item[_CardConfig.decompose_price_id]
if money then
IconManager:SetItemIcon(money.Icon, moneyIcon)
end
self:UpdateTotalCost()
CardMakeProxy.Instance:InitDecomposeCard()
self:InitFilter()
self:InitMaterial()
self:UpdateCard()
self:UpdateSkip()
end
function CardDecomposeView:InitFilter()
self.filter:Clear()
local decomposeFilter = GameConfig.CardMake.DecomposeFilter
local rangeList = CardMakeProxy.Instance:GetFilter(decomposeFilter)
for i=1,#rangeList do
local rangeData = decomposeFilter[rangeList[i]]
self.filter:AddItem(rangeData , rangeList[i])
end
if #rangeList > 0 then
local range = rangeList[1]
self.filterData = range
local rangeData = decomposeFilter[range]
self.filter.value = rangeData
end
end
function CardDecomposeView:InitMaterial()
self.materialCell:SetData(CardMakeProxy.Instance:GetDecomposeMaterialItemData())
end
function CardDecomposeView:UpdateCard()
local data = CardMakeProxy.Instance:FilterDecomposeCard(self.filterData)
self.AllCardData = CardMakeProxy.Instance:FilterDecomposeCard(self.filterData)
if data then
self.wrapHelper:UpdateInfo(data)
end
end
function CardDecomposeView:UpdateSkip()
local isShow = FunctionFirstTime.me:IsFirstTime(FunctionFirstTime.DecomposeCard)
self.skipBtn.gameObject:SetActive(not isShow)
end
function CardDecomposeView:UpdateMaterial(data)
local num = 0
if data ~= nil then
num = GameConfig.Card.decompose_base[data.staticData.Quality] or 0
end
self.materialNum.text = string.format(ZhString.CardDecompose_Material, num)
end
function CardDecomposeView:UpdateTotalCost()
self.totalCost.text = StringUtil.NumThousandFormat(GameConfig.Card.decompose_price_count)
if self:CheckEnoughMoney() then
ColorUtil.DeepGrayUIWidget(self.totalCost)
else
ColorUtil.RedLabel(self.totalCost)
end
end
function CardDecomposeView:ResetCard()
self:UpdateCard()
self.wrapHelper:ResetPosition()
end
function CardDecomposeView:ClickTargetCell(cell)
local data = cell.data
if data ~= nil then
self.tipData.itemdata = data
self:ShowItemTip(self.tipData, cell.icon, NGUIUtil.AnchorSide.Left, {-220,0})
end
end
function CardDecomposeView:ClickItem(cell)
local data = cell.data
if data ~= nil then
self.addItemBtn:SetActive(false)
self.itemRoot:SetActive(true)
self.targetCell:SetData(data)
self.targetCell.numLab.gameObject:SetActive(false)
self.itemName.text = data:GetName()
self:UpdateMaterial(data)
end
end
function CardDecomposeView:ClickItemIcon(cell)
local data = cell.data
if data ~= nil then
self.tipData.itemdata = data
self:ShowItemTip(self.tipData, cell.icon, NGUIUtil.AnchorSide.Right, {220,0})
end
end
function CardDecomposeView:Skip()
TipManager.Instance:ShowSkipAnimationTip(skipType, self.skipBtn , NGUIUtil.AnchorSide.Right, {150,0})
end
function CardDecomposeView:Decompose()
if not self:CheckEnoughMoney() then
MsgManager.ShowMsgByID(1)
return
end
if self:CheckConfirm(self.targetCell.data) then
local id = 1151
local dont = LocalSaveProxy.Instance:GetDontShowAgain(id)
if dont == nil then
MsgManager.DontAgainConfirmMsgByID(id, function ()
self:CallDecompose()
end)
else
self:CallDecompose()
end
else
self:CallDecompose()
end
end
function CardDecomposeView:AllDecompose()
if not self:CheckEnoughMoney() then
MsgManager.ShowMsgByID(1)
return
end
--全部分解卡片的提示
local id = 1152
local dont = LocalSaveProxy.Instance:GetDontShowAgain(id)
if dont == nil then
MsgManager.DontAgainConfirmMsgByID(id, function ()
self:CallAllDecompose()
end)
else
self:CallAllDecompose()
end
end
function CardDecomposeView:CallDecompose()
local skipValue = CardMakeProxy.Instance:IsSkipGetEffect(skipType)
local material = ReusableTable.CreateArray()
material[1] = self.targetCell.data.id
ServiceItemProxy.Instance:CallExchangeCardItemCmd(CardMakeProxy.MakeType.Decompose, self.npcId, material, nil, nil, skipValue)
ReusableTable.DestroyAndClearArray(material)
end
function CardDecomposeView:CallAllDecompose()
local skipValue = CardMakeProxy.Instance:IsSkipGetEffect(skipType)
local material = ReusableTable.CreateArray()
--material[1] = self.targetCell.data.id
for i = 1, self.targetCell.data.num do
material[i] = self.targetCell.data.id
end
ServiceItemProxy.Instance:CallExchangeCardItemCmd(CardMakeProxy.MakeType.Decompose, self.npcId, material, nil, nil, skipValue)
ReusableTable.DestroyAndClearArray(material)
end
function CardDecomposeView:CheckEnoughMoney()
local _CardConfig = GameConfig.Card
local priceId = _CardConfig.decompose_price_id
local money = HappyShopProxy.Instance:GetItemNum(priceId)
if money >= _CardConfig.decompose_price_count then
return true
end
return false
end
function CardDecomposeView:CheckConfirm(data)
local quality = data.staticData.Quality
local config = GameConfig.Card.confirm_quality
for i=1,#config do
if quality == config[i] then
return true
end
end
return false
end
function CardDecomposeView:HandleItemUpdate()
CardMakeProxy.Instance:InitDecomposeCard()
self:ResetCard()
end
function CardDecomposeView:HandleExchangeCardItem(note)
local data = note.body
if data ~= nil then
if data.charid == Game.Myself.data.id then
self:CloseSelf()
end
end
end