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

310 lines
8.1 KiB
Plaintext

autoImport("CardNCell")
autoImport("CardMakeCell")
autoImport("CardMakeMaterialCell")
CardMakeView = class("CardMakeView", ContainerView)
CardMakeView.ViewType = UIViewType.NormalLayer
CardMakeView.CardNCellResPath = ResourcePathHelper.UICell("CardNCell")
local tempVector3 = LuaVector3.zero
local skipType = SKIPTYPE.CardMake
function CardMakeView:OnExit()
self:ClearChooseData()
CardMakeProxy.Instance:SetChoose(nil)
CardMakeView.super.OnExit(self)
end
function CardMakeView:Init()
self:FindObjs()
self:AddEvts()
self:AddViewEvts()
self:InitShow()
end
function CardMakeView:FindObjs()
self.filter = self:FindGO("Filter"):GetComponent(UIPopupList)
self.targetName = self:FindGO("TargetName"):GetComponent(UILabel)
self.tip = self:FindGO("Tip"):GetComponent(UILabel)
self.tipIcon = self:FindGO("TipIcon"):GetComponent(UISprite)
self.confirmButton = self:FindGO("ConfirmButton"):GetComponent(UIMultiSprite)
self.confirmLabel = self:FindGO("Label", self.confirmButton.gameObject):GetComponent(UILabel)
self.cost = self:FindGO("Cost"):GetComponent(UILabel)
self.skipBtn = self:FindGO("SkipBtn"):GetComponent(UISprite)
end
function CardMakeView:AddEvts()
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()
self:SelectFirst()
end
end)
self:AddClickEvent(self.confirmButton.gameObject,function ()
self:Confirm()
end)
local closeButton = self:FindGO("CloseButton")
self:AddClickEvent(closeButton,function ()
SceneUIManager.Instance:PlayerSpeak(self.npcId, ZhString.CardMark_EndDialog)
self:CloseSelf()
end)
self:AddClickEvent(self.skipBtn.gameObject, function ()
self:Skip()
end)
end
function CardMakeView:AddViewEvts()
self:AddListenEvt(ItemEvent.ItemUpdate, self.HandleItemUpdate)
self:AddListenEvt(ServiceEvent.ItemExchangeCardItemCmd, self.HandleExchangeCardItem)
self:AddListenEvt(SceneUserEvent.SceneRemoveNpcs, self.HandleRemoveNpc)
self:AddListenEvt(LoadSceneEvent.FinishLoad, self.CloseSelf)
end
function CardMakeView:InitShow()
self.tipData = {}
self.tipData.funcConfig = {}
self.canMake = false
self.npcId = self.viewdata.viewdata.npcdata.data.id
local container = self:FindGO("CardContainer")
local wrapConfig = {
wrapObj = container,
pfbNum = 6,
cellName = "CardMakeCell",
control = CardMakeCell,
dir = 1,
}
self.wrapHelper = WrapCellHelper.new(wrapConfig)
self.wrapHelper:AddEventListener(MouseEvent.MouseClick, self.HandleClickCell, self)
self.wrapHelper:AddEventListener(CardMakeEvent.Select, self.HandleSelect, self)
local materialGrid = self:FindGO("MaterialGrid"):GetComponent(UIGrid)
self.materialCtl = UIGridListCtrl.new(materialGrid, CardMakeMaterialCell, "CardMakeMaterialCell")
self.materialCtl:AddEventListener(MouseEvent.MouseClick, self.HandleMaterialTip, self)
local targetCard = self:FindGO("TargetCard")
obj = Game.AssetManager_UI:CreateAsset(CardMakeView.CardNCellResPath, targetCard)
tempVector3:Set(0,0,0)
obj.transform.localPosition = tempVector3
tempVector3:Set(1,1,1)
obj.transform.localScale = tempVector3
self.targetCardCell = CardNCell.new(obj)
self.targetCardCell:Hide(self.targetCardCell.useButton.gameObject)
self:InitFilter()
self:UpdateCard()
self:UpdateSkip()
--預設選中第一個
self:SelectFirst()
end
function CardMakeView:InitFilter()
self.filter:Clear()
local makeFilter = GameConfig.CardMake.MakeFilter
local rangeList = CardMakeProxy.Instance:GetFilter(makeFilter)
for i=1,#rangeList do
local rangeData = makeFilter[rangeList[i]]
self.filter:AddItem(rangeData , rangeList[i])
end
if #rangeList > 0 then
local range = rangeList[1]
self.filterData = range
local rangeData = makeFilter[range]
self.filter.value = rangeData
end
end
function CardMakeView:SelectFirst()
local first = self.wrapHelper:GetCellCtls()[1]
if first then
self:HandleClickCell(first)
end
end
function CardMakeView:HandleClickCell(cell)
local data = cell.data
if data then
local _CardMakeProxy = CardMakeProxy.Instance
local chooseData = _CardMakeProxy:GetChoose()
if chooseData and chooseData.id == data.id then
return
end
self:ClearChooseCard()
self:ClearChooseData()
cell:SetChoose(true)
_CardMakeProxy:SetChoose(cell.data)
self.targetName.text = data.itemData.staticData.NameZh
self.targetCardCell:SetData(data.itemData)
self:UpdateMaterial(data)
local isLock = data:IsLock()
self.tip.gameObject:SetActive(isLock)
local composeData = Table_Compose[data.id]
if isLock then
self.tip.text = composeData.MenuDes or ""
self.tipIcon:UpdateAnchors()
end
self.cost.text = StringUtil.NumThousandFormat(composeData.ROB)
self:UpdateConfirmBtn()
end
end
function CardMakeView:HandleSelect(cell)
local data = cell.data
if data then
self.tipData.itemdata = data.itemData
self:ShowItemTip(self.tipData, cell.icon, NGUIUtil.AnchorSide.Right, {220,0})
end
end
function CardMakeView:HandleMaterialTip(cell)
local data = cell.data
if data then
self.tipData.itemdata = data.itemData
self:ShowItemTip(self.tipData, cell.icon, NGUIUtil.AnchorSide.Left, {-220,0})
end
end
function CardMakeView:HandleItemUpdate()
local chooseData = CardMakeProxy.Instance:GetChoose()
if chooseData then
self:UpdateMaterial(chooseData)
self:UpdateConfirmBtn()
end
end
function CardMakeView:HandleExchangeCardItem(note)
local data = note.body
if data then
if data.charid == Game.Myself.data.id then
self:CloseSelf()
end
end
end
function CardMakeView:HandleRemoveNpc(note)
local data = note.body
if data and #data > 0 then
for i=1,#data do
if self.npcId == data[i] then
self:CloseSelf()
break
end
end
end
end
function CardMakeView:UpdateCard()
local data = CardMakeProxy.Instance:FilterCard(self.filterData)
if data then
self.wrapHelper:UpdateInfo(data)
end
end
function CardMakeView:UpdateMaterial(data)
if data then
data:ClearCount()
self.materialCtl:ResetDatas(data.materialItems)
end
end
function CardMakeView:ResetCard()
self:UpdateCard()
self.wrapHelper:ResetPosition()
end
function CardMakeView:UpdateConfirmBtn()
self.canMake = CardMakeProxy.Instance:CanMake()
self:SetConfirm(not self.canMake)
end
function CardMakeView:UpdateSkip()
local isShow = FunctionFirstTime.me:IsFirstTime(FunctionFirstTime.ComposeCard)
self.skipBtn.gameObject:SetActive(not isShow)
end
function CardMakeView:Confirm()
if self.canMake then
local chooseData = CardMakeProxy.Instance:GetChoose()
local data = Table_Compose[chooseData.id]
if MyselfProxy.Instance:GetROB() < data.ROB then
MsgManager.ShowMsgByID(1)
return
end
if CardMakeProxy.Instance:IsCostGreatCard(chooseData.id) then
MsgManager.ConfirmMsgByID(1150, function ()
self:CallExchangeCardItem()
end)
else
self:CallExchangeCardItem()
end
end
end
function CardMakeView:Skip()
TipManager.Instance:ShowSkipAnimationTip(skipType, self.skipBtn , NGUIUtil.AnchorSide.Right, {150,0})
end
function CardMakeView:CallExchangeCardItem()
local chooseData = CardMakeProxy.Instance:GetChoose()
local skipValue = CardMakeProxy.Instance:IsSkipGetEffect(skipType)
ServiceItemProxy.Instance:CallExchangeCardItemCmd(CardMakeProxy.MakeType.Compose, self.npcId, nil, nil, chooseData.itemData.staticData.id, skipValue)
end
function CardMakeView:SetConfirm(isGray)
if isGray then
self.confirmButton.CurrentState = 1
self.confirmLabel.effectStyle = UILabel.Effect.None
else
self.confirmButton.CurrentState = 0
self.confirmLabel.effectStyle = UILabel.Effect.Outline
end
end
function CardMakeView:ClearChooseCard()
local chooseData = CardMakeProxy.Instance:GetChoose()
if chooseData then
local cell
local cells = self.wrapHelper:GetCellCtls()
for i=1,#cells do
cell = cells[i]
if cell.data and cell.data.id == chooseData.id then
cell:SetChoose(false)
break
end
end
end
end
function CardMakeView:ClearChooseData()
local chooseData = CardMakeProxy.Instance:GetChoose()
if chooseData then
local data = CardMakeProxy.Instance:GetCard()
if data then
for i=1,#data do
if data[i].id == chooseData.id then
data[i]:SetChoose(false)
break
end
end
end
end
end