2025-06-04 05:12:01 +08:00

303 lines
7.9 KiB
Plaintext

autoImport("MakeMaterialCell")
autoImport("EquipMakeCell")
EquipMakeView = class("EquipMakeView", ContainerView)
EquipMakeView.ViewType = UIViewType.NormalLayer
function EquipMakeView:OnEnter()
EquipMakeView.super.OnEnter(self)
if self.npc then
local viewPort = CameraConfig.HappyShop_ViewPort
local rotation = CameraConfig.HappyShop_Rotation
self:CameraFaceTo(self.npc.assetRole.completeTransform,viewPort,rotation)
end
end
function EquipMakeView:OnExit()
self:CameraReset()
self:SetChooseMakeData(false)
EquipMakeView.super.OnExit(self)
end
function EquipMakeView:Init()
self:FindObjs()
self:AddEvts()
self:AddViewEvts()
self:InitShow()
end
function EquipMakeView:FindObjs()
self.silverLabel = self:FindGO("SilverLabel"):GetComponent(UILabel)
self.selfProfession = self:FindGO("SelfProfession"):GetComponent(UIToggle)
self.makeTitle = self:FindGO("MakeTitle"):GetComponent(UILabel)
self.costInfo = self:FindGO("CostInfo")
self.silverCost = self:FindGO("ZenyCost"):GetComponent(UILabel)
self.tip = self:FindGO("Tip"):GetComponent(UILabel)
self.emptyTip = self:FindGO("EmptyTip")
self.makeBtn = self:FindGO("MakeBtn"):GetComponent(UISprite)
-- self.makeBtnLabel = self:FindGO("Label" , self.makeBtn.gameObject):GetComponent(UILabel)
end
function EquipMakeView:AddEvts()
self:AddClickEvent(self.makeBtn.gameObject,function ()
if self.curComposeId == nil then
return
end
--判斷材料是否足夠
local enoughMaterial = self.total - self.need
--判斷金幣是否足夠
local data = Table_Compose[self.curComposeId]
local enoughROB = MyselfProxy.Instance:GetROB() - data.ROB
--判斷是否解鎖
local makeData = EquipMakeProxy.Instance:GetMakeData(self.curComposeId)
if enoughMaterial < 0 then
--缺失item列表
local needList = ReusableTable.CreateArray()
local cells = self.makeMatCtl:GetCells()
for i=1,#cells do
local needCount = cells[i]:NeedCount()
if needCount > 0 then
local needData = ReusableTable.CreateTable()
needData.id = cells[i].data.id
needData.count = needCount
TableUtility.ArrayPushBack(needList, needData)
end
end
--彈出快速購買界面
if not QuickBuyProxy.Instance:TryOpenView(needList) then
MsgManager.ShowMsgByID(8)
end
--clear
for i=1,#needList do
ReusableTable.DestroyAndClearTable(needList[i])
end
ReusableTable.DestroyArray(needList)
return
elseif enoughROB < 0 then
MsgManager.ShowMsgByID(1)
return
elseif makeData:IsLock() then
local composeData = Table_Compose[self.curComposeId]
if composeData and composeData.MenuID then
local menuData = Table_Menu[composeData.MenuID]
if menuData and menuData.sysMsg and menuData.sysMsg.id then
MsgManager.ShowMsgByID(menuData.sysMsg.id)
end
end
return
end
ServiceItemProxy.Instance:CallProduce(SceneItem_pb.EPRODUCETYPE_EQUIP, self.curComposeId , self.npc.data.id)
end)
EventDelegate.Add(self.selfProfession.onChange, function ()
if self.isSelfProfession ~= self.selfProfession.value then
self.isSelfProfession = self.selfProfession.value
self:UpdateMakeList()
self.itemWrapHelper:ResetPosition()
self:SelectFirstMakeCell()
end
end)
end
function EquipMakeView:AddViewEvts()
self:AddListenEvt( MyselfEvent.MyDataChange , self.MyDataChange )
self:AddListenEvt( ItemEvent.ItemUpdate , self.UpdateItem )
end
function EquipMakeView:InitShow()
self.isSelfProfession = true
self.tipData = {}
self.tipData.funcConfig = {}
self.npc = self.viewdata.viewdata.npcdata
EquipMakeProxy.Instance:SetNpcId(self.npc.data.staticData.id)
local targetCellGO = self:FindGO("TargetCell")
self.targetCell = BaseItemCell.new(targetCellGO)
self.targetCell:AddEventListener(MouseEvent.MouseClick, self.ClickTargetCell, self)
local makeMaterialGrid = self:FindGO("MakeMaterialGrid"):GetComponent(UIGrid)
self.makeMatCtl = UIGridListCtrl.new(makeMaterialGrid, MakeMaterialCell, "MakeMaterialCell")
self.makeMatCtl:AddEventListener(MouseEvent.MouseClick, self.ClickMakeMaterialItem, self)
local makeListContainer = self:FindGO("MakeListContainer")
local wrapConfig = {
wrapObj = makeListContainer,
pfbNum = 6,
cellName = "EquipMakeCell",
control = EquipMakeCell,
dir = 1,
}
self.itemWrapHelper = WrapCellHelper.new(wrapConfig)
self.itemWrapHelper:AddEventListener(MouseEvent.MouseClick, self.ClickMakeCell, self)
local isEmpty = self:UpdateMakeList()
if isEmpty then
self.selfProfession.value = false
end
self:UpdateCoins()
--預設選中第一個
self:SelectFirstMakeCell()
end
function EquipMakeView:SelectFirstMakeCell()
local itemCells = self.itemWrapHelper:GetCellCtls()
if #itemCells > 0 then
self:ClickMakeCell(itemCells[1])
end
end
function EquipMakeView:ClickMakeCell(cellctl)
local data = cellctl.data
if data then
if self.curComposeId and self.curComposeId ~= data then
self:SetChooseMakeData(false)
self:SetChooseCell(false)
end
self.curComposeId = data
self:SetChooseMakeData(true)
cellctl:SetChoose(true)
self:UpdateTargetCell()
self:UpdateItem()
local makeData = EquipMakeProxy.Instance:GetMakeData(self.curComposeId)
if makeData and makeData:IsLock() then
self.tip.gameObject:SetActive(true)
self.costInfo:SetActive(false)
self:UpdateTip()
else
self.tip.gameObject:SetActive(false)
self.costInfo:SetActive(true)
self:UpdateCost()
end
end
end
function EquipMakeView:ClickTargetCell(cellctl)
self.tipData.itemdata = cellctl.data
self:ShowItemTip(self.tipData , cellctl.icon , NGUIUtil.AnchorSide.Left, {-170,0})
end
function EquipMakeView:ClickMakeMaterialItem(cellctl)
self.tipData.itemdata = cellctl.itemData
self:ShowItemTip(self.tipData , cellctl.icon , NGUIUtil.AnchorSide.Left, {-220,0})
end
function EquipMakeView:UpdateMakeList()
local data = EquipMakeProxy.Instance:GetMakeList()
if self.isSelfProfession then
data = EquipMakeProxy.Instance:GetSelfProfessionMakeList()
end
self.itemWrapHelper:UpdateInfo(data)
local isEmpty = #data == 0
if isEmpty then
self:UpdateEmpty()
end
self.emptyTip:SetActive(isEmpty)
return isEmpty
end
function EquipMakeView:UpdateMakeMaterial()
local data = Table_Compose[self.curComposeId]
local datas = data and data.BeCostItem or {}
self.makeMatCtl:ResetDatas(datas)
end
function EquipMakeView:UpdateTargetCell()
local makeData = EquipMakeProxy.Instance:GetMakeData(self.curComposeId)
if makeData then
self.targetCell:SetData(makeData.itemData)
else
self.targetCell.nameLab.text = ""
self.targetCell.normalItem:SetActive(false)
end
end
function EquipMakeView:UpdateMakeTitle()
local cells = self.makeMatCtl:GetCells()
self.need = #cells
self.total = 0
for i=1,self.need do
local cell = cells[i]
if cell:IsEnough() then
self.total = self.total + 1
end
end
self.makeTitle.text = string.format(ZhString.EquipMake_Title , self.total , self.need)
end
function EquipMakeView:UpdateCost()
local data = Table_Compose[self.curComposeId]
self.silverCost.text = data and data.ROB or 0
end
function EquipMakeView:UpdateTip()
local data = Table_Compose[self.curComposeId]
self.tip.text = data and data.MenuDes or ""
end
function EquipMakeView:UpdateCoins()
self.silverLabel.text = MyselfProxy.Instance:GetROB()
end
function EquipMakeView:MyDataChange()
self:UpdateCoins()
end
function EquipMakeView:UpdateItem()
self:UpdateMakeMaterial()
self:UpdateMakeTitle()
end
function EquipMakeView:SetChooseMakeData(isChoose)
local makeData = EquipMakeProxy.Instance:GetMakeData(self.curComposeId)
if makeData then
makeData:SetChoose(isChoose)
end
end
function EquipMakeView:SetChooseCell(isChoose)
local cells = self.itemWrapHelper:GetCellCtls()
for i=1,#cells do
if cells[i].data == self.curComposeId then
cells[i]:SetChoose(isChoose)
break
end
end
end
function EquipMakeView:UpdateEmpty()
if self.curComposeId then
self:SetChooseMakeData(false)
self:SetChooseCell(false)
end
self.curComposeId = nil
self:UpdateTargetCell()
self:UpdateItem()
self.tip.gameObject:SetActive(false)
self.costInfo:SetActive(true)
self:UpdateCost()
end