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

408 lines
11 KiB
Plaintext

autoImport("BusinessmanMakeMaterialCell")
autoImport("BusinessmanMakeItemCell")
autoImport("BusinessmanMakeModelCell")
autoImport("BusinessmanMakeTypeCell")
MakeBaseView = class("MakeBaseView", ContainerView)
MakeBaseView.ViewType = UIViewType.NormalLayer
local normalMaterialPosVec = LuaVector3.zero
local greatMaterialPosVec = LuaVector3.zero
function MakeBaseView:OnExit()
if self.plusTick ~= nil then
TimeTickManager.Me():ClearTick(self, 1)
self.plusTick = nil
end
if self.subtractTick ~= nil then
TimeTickManager.Me():ClearTick(self, 2)
self.subtractTick = nil
end
MakeBaseView.super.OnExit(self)
end
function MakeBaseView:Init()
self:FindObjs()
self:AddEvts()
self:AddViewEvts()
self:InitShow()
end
function MakeBaseView:FindObjs()
self.makeRoot = self:FindGO("MakeRoot")
self.makeBtn = self:FindGO("MakeBtn"):GetComponent(UISprite)
self.makeCount = self:FindGO("MakeCount"):GetComponent(UIInput)
self.countPlusBg = self:FindGO("CountPlusBg"):GetComponent(UISprite)
self.countPlus = self:FindGO("CountPlus"):GetComponent(UISprite)
self.countSubtractBg = self:FindGO("CountSubtractBg"):GetComponent(UISprite)
self.countSubtract = self:FindGO("CountSubtract"):GetComponent(UISprite)
self.lockTip = self:FindGO("LockTip"):GetComponent(UILabel)
self.itemTable = self:FindGO("ItemTable"):GetComponent(UITable)
self.normalProduct = self:FindGO("NormalProduct")
self.greatProduct = self:FindGO("GreatProduct")
self.normalRoot = self:FindGO("NormalRoot", self.normalProduct)
self.modelRoot = self:FindGO("ModelRoot", self.normalProduct)
self.makeMaterial = self:FindGO("MakeMaterialGrid")
end
function MakeBaseView:AddEvts()
self:AddClickEvent(self.makeBtn.gameObject,function ()
if self.curComposeId == nil then
return
end
self:calcMakeMaterial()
--判斷材料是否足夠
local enoughMaterial = self.total - self.need
--判斷是否解鎖
local makeData = BusinessmanMakeProxy.Instance:GetMakeData(self.curComposeId)
if enoughMaterial < 0 then
MsgManager.ShowMsgByID(8)
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_TRADER, self.curComposeId, nil, nil, self.makeTimes)
end)
self:AddPressEvent(self.countPlus.gameObject,function (g,b)
self:PressCountPlus(b)
end)
self:AddPressEvent(self.countSubtract.gameObject,function (g,b)
self:PressCountSubtract(b)
end)
EventDelegate.Set(self.makeCount.onChange,function ()
self:InputOnChange()
end)
end
function MakeBaseView:AddViewEvts()
self:AddListenEvt(ItemEvent.ItemUpdate , self.HandleItemUpdate)
self:AddListenEvt(MyselfEvent.MyDataChange, self.HandleItemUpdate)
end
function MakeBaseView:InitShow()
self.isSelfProfession = true
self.tipData = {}
self.tipData.funcConfig = {}
local x,y,z = LuaGameObject.GetLocalPosition(self.makeMaterial.transform)
normalMaterialPosVec:Set(x, -131, z)
greatMaterialPosVec:Set(x, -159, z)
--普通顯示產物item cell
self.normalCell = BusinessmanMakeItemCell.new(self.normalRoot)
self.normalCell:AddEventListener(MouseEvent.MouseClick, self.ClickCell, self)
--普通顯示產物model
self.modelCell = BusinessmanMakeModelCell.new(self.modelRoot)
self.modelCell:AddEventListener(MouseEvent.MouseClick, self.ClickModelCell, self)
--暴擊顯示產物item cell
local greatNormalRoot = self:FindGO("NormalRoot", self.greatProduct)
self.greatNormalCell = BusinessmanMakeItemCell.new(greatNormalRoot)
self.greatNormalCell:AddEventListener(MouseEvent.MouseClick, self.ClickCell, self)
--暴擊顯示暴擊物品item cell
local greatRoot = self:FindGO("GreatRoot", self.greatProduct)
self.greatCell = BusinessmanMakeItemCell.new(greatRoot)
self.greatCell:AddEventListener(MouseEvent.MouseClick, self.ClickCell, self)
local makeMaterialGrid = self.makeMaterial:GetComponent(UIGrid)
self.makeMatCtl = UIGridListCtrl.new(makeMaterialGrid, BusinessmanMakeMaterialCell, "BusinessmanMakeMaterialCell")
self.makeMatCtl:AddEventListener(MouseEvent.MouseClick, self.ClickMakeMaterialItem, self)
self.typeCtl = UIGridListCtrl.new(self.itemTable, BusinessmanMakeTypeCell, "BusinessmanMakeTypeCell")
self.typeCtl:AddEventListener(MouseEvent.MouseClick, self.ClickItem, self)
BusinessmanMakeProxy.Instance:InitItemList(self.type.Type)
self:UpdateItemList()
self:SelectFirst()
self:ResetMakeCount()
end
function MakeBaseView:ClickCell(cellctl)
self.tipData.itemdata = cellctl.data
self:ShowItemTip(self.tipData , cellctl.icon , NGUIUtil.AnchorSide.Left, {-170,0})
end
function MakeBaseView:ClickModelCell(cellctl)
self.tipData.itemdata = cellctl.data
self:ShowItemTip(self.tipData , self.makeBtn , NGUIUtil.AnchorSide.Left, {-220,0})
end
function MakeBaseView:ClickMakeMaterialItem(cellctl)
self.tipData.itemdata = cellctl.itemData
self:ShowItemTip(self.tipData , cellctl.icon , NGUIUtil.AnchorSide.Left, {-220,0})
end
function MakeBaseView:ClickItem(cellctl)
local data = cellctl.data
if data then
if self.lastItemCell then
self.lastItemCell:SetChoose(false)
end
cellctl:SetChoose(true)
self.lastItemCell = cellctl
self.curComposeId = data.id
self:UpdateItem(data)
self:ResetMakeCount()
end
end
function MakeBaseView:PressCountPlus(isPressed)
if isPressed then
self.countChangeRate = 1
if self.plusTick == nil then
self.plusTick = TimeTickManager.Me():CreateTick(0, 150, function (self, deltatime)
self:PressCount(1)
end, self, 1)
else
self.plusTick:Restart()
end
else
if self.plusTick then
self.plusTick:StopTick()
end
end
end
function MakeBaseView:PressCountSubtract(isPressed)
if isPressed then
self.countChangeRate = 1
if self.subtractTick == nil then
self.subtractTick = TimeTickManager.Me():CreateTick(0, 150, function (self, deltatime)
self:PressCount(-1)
end, self, 2)
else
self.subtractTick:Restart()
end
else
if self.subtractTick then
self.subtractTick:StopTick()
end
end
end
function MakeBaseView:PressCount(change)
self.makeTimes = self.makeTimes + self.countChangeRate * change
self:UpdateMakeCount()
if self.countChangeRate <= 3 then
self.countChangeRate = self.countChangeRate + 1
end
end
function MakeBaseView:InputOnChange()
local count = tonumber(self.makeCount.value)
if count == nil then
return
end
self.makeTimes = count
self:UpdateMakeCount()
end
function MakeBaseView:UpdateItemList()
if self.type ~= nil then
self.typeCtl:ResetDatas(self.type.Category)
end
end
function MakeBaseView:UpdateMakeMaterial()
local data = Table_Compose[self.curComposeId]
local datas = data and data.BeCostItem or {}
self.makeMatCtl:ResetDatas(datas)
end
function MakeBaseView:UpdateProduceCell(itemData)
if itemData then
self.produceCell:SetData(itemData)
end
local isShow = itemData ~= nil
self.produceCell.gameObject:SetActive(isShow)
end
function MakeBaseView:UpdateItem(data)
local isGreatProduce = data.produceItemData ~= nil --是否顯示暴擊
local composeData = Table_Compose[self.curComposeId]
if isGreatProduce then
self.greatNormalCell:SetData(data.itemData)
self.greatCell:SetData(data.produceItemData)
self.greatNormalCell:SetProduceRate(composeData)
self.greatNormalCell:SetProductNum(data, self.makeTimes)
self.greatCell:SetProductNum(data, self.makeTimes)
self.makeMaterial.transform.localPosition = greatMaterialPosVec
else
local showType = BusinessmanMakeProxy.Instance:CheckItemType(data.itemData)
if showType then
self.modelCell:SetData(data.itemData, showType)
self.modelCell:SetProduceRate(composeData)
self.modelCell:SetProductNum(data, self.makeTimes)
else
self.normalCell:SetData(data.itemData)
self.normalCell:SetProduceRate(composeData)
self.normalCell:SetProductNum(data, self.makeTimes)
end
self.normalRoot:SetActive(showType == nil)
self.modelRoot:SetActive(showType ~= nil)
self.makeMaterial.transform.localPosition = normalMaterialPosVec
end
self.greatProduct:SetActive(isGreatProduce)
self.normalProduct:SetActive(not isGreatProduce)
self:UpdateMakeMaterial()
if(data:IsLock()) then
self:Hide(self.makeRoot)
self:Show(self.lockTip.gameObject)
local composeData = Table_Compose[data.id]
self.lockTip.text = ZhString.Businessman_Need..Table_Menu[composeData.MenuID].Tip
else
self:Show(self.makeRoot)
self:Hide(self.lockTip.gameObject)
end
end
function MakeBaseView:UpdateMakeCount()
if self.maxTimes == 1 then
self:SetCountSubtract(0.5)
self:SetCountPlus(0.5)
self.makeTimes = 1
self.countChangeRate = 1
else
if self.makeTimes <= 1 then
self:SetCountSubtract(0.5)
self:SetCountPlus(1)
self.makeTimes = 1
self.countChangeRate = 1
elseif self.makeTimes >= self.maxTimes then
self:SetCountSubtract(1)
self:SetCountPlus(0.5)
self.makeTimes = self.maxTimes
self.countChangeRate = 1
else
self:SetCountSubtract(1)
self:SetCountPlus(1)
end
end
self.makeCount.value = self.makeTimes
--更新右側item cell右下角數量
local data = BusinessmanMakeProxy.Instance:GetMakeData(self.curComposeId)
local isGreatProduce = data.produceItemData ~= nil --是否顯示暴擊
if isGreatProduce then
self.greatNormalCell:SetProductNum(data, self.makeTimes)
self.greatCell:SetProductNum(data, self.makeTimes)
else
local showType = BusinessmanMakeProxy.Instance:CheckItemType(data.itemData)
if showType then
self.modelCell:SetProductNum(data, self.makeTimes)
else
self.normalCell:SetProductNum(data, self.makeTimes)
end
end
--更新材料需要總數
local cells = self.makeMatCtl:GetCells()
for i=1,#cells do
local cell = cells[i]
cell:SetNum(nil, self.makeTimes)
end
end
function MakeBaseView:HandleItemUpdate()
local typeList = self.typeCtl:GetCells()
for i=1,#typeList do
local typeCell = typeList[i]
for j=1,#typeCell:GetCombineCellList() do
local combineCell = typeCell:GetCombineCellList()[j]
for k=1,#combineCell.childrenObjs do
local cell = combineCell.childrenObjs[k]
if cell and cell.data then
cell:SetCanMakeNum()
end
end
end
end
self:UpdateMakeMaterial()
self:ResetMakeCount()
end
function MakeBaseView:SelectFirst()
local itemList = self.typeCtl:GetCells()[1]
if itemList then
local combineCell = itemList:GetCombineCellList()[1]
if combineCell then
local cell = combineCell.childrenObjs[1]
if cell then
self:ClickItem(cell)
end
end
end
end
function MakeBaseView:ResetMakeCount()
--製作次數
self.makeTimes = 1
self.maxTimes = BusinessmanMakeData.GetCanMakeTimes(self.curComposeId)
if self.maxTimes == 0 then
self.maxTimes = 1
end
self:UpdateMakeCount()
end
function MakeBaseView:calcMakeMaterial()
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
end
function MakeBaseView:SetCountPlus(alpha)
if self.countPlusBg.color.a ~= alpha then
self:SetSpritAlpha(self.countPlusBg,alpha)
self:SetSpritAlpha(self.countPlus,alpha)
end
end
function MakeBaseView:SetCountSubtract(alpha)
if self.countSubtractBg.color.a ~= alpha then
self:SetSpritAlpha(self.countSubtractBg,alpha)
self:SetSpritAlpha(self.countSubtract,alpha)
end
end
function MakeBaseView:SetSpritAlpha(sprit,alpha)
sprit.color = Color(sprit.color.r,sprit.color.g,sprit.color.b,alpha)
end