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

383 lines
10 KiB
Plaintext

local BaseCell = autoImport("BaseCell");
PicMakeCell = class("PicMakeCell", BaseCell)
autoImport("MaterialNCell");
PicMakeCell.ClickToItem = "PicMakeCell_ClickToItem";
PicMakeCell.ClickMaterial = "PicMakeCell_ClickMaterial";
PicMakeCell.GoToMake = "PicMakeCell_GoToMake";
PicMakeCell.TraceMaterial = "PicMakeCell_TraceMaterial";
-- 微笑小姐製作頭飾,製作按鈕閃爍判斷。只有玻璃帽和回憶帽的製作按鈕閃爍
PicMakeCell.GuidePicIds = {
14176,
14175,
}
function PicMakeCell:Init()
PicMakeCell.super.Init();
self.combine_lacMats = {};
self.cache_sortingOrder = {};
self:InitCell();
end
function PicMakeCell:InitCell()
self.roblab = self:FindComponent("ROGold", UILabel);
self.costGold = self:FindComponent("CostGold", UILabel);
self.destItemObj = self:FindGO("ItemCell");
self.fashionName = self:FindComponent("FashionName", UILabel);
self.modelContainer = self:FindComponent("ModelContainer", ChangeRqByTex);
self.makeTip = self:FindComponent("MakeTip", UILabel);
local materialGrid = self:FindComponent("MaterialGrid", UIGrid);
self.materialCtl = UIGridListCtrl.new(materialGrid, MaterialNCell, "MaterialNCell");
self.materialCtl:AddEventListener(MouseEvent.MouseClick, self.ClickMaterial, self);
self.modelTexture = self:FindComponent("ModelTexture", UITexture);
local toItemGO = self:FindGO("ToItem");
self:AddClickEvent(toItemGO, function (go)
self:PassEvent(PicMakeCell.ClickToItem, {
gameObject = go,
data = self.toItem,
});
end);
self:AddButtonEvent("TrackButton", function ()
local materialDatas = self.materialsData or {}
local traceDatas = {};
for i=1,#materialDatas do
local mdata = materialDatas[i];
if(mdata and mdata.neednum>mdata.num)then
local temp = {
itemid = mdata.staticData.id,
};
table.insert(traceDatas, temp);
end
end
if(#traceDatas>0)then
GameFacade.Instance:sendNotification(MainViewEvent.AddItemTrace, traceDatas);
else
MsgManager.ShowMsgByIDTable(542)
end
self:PassEvent(PicMakeCell.TraceMaterial, self);
end);
self.quickBuyButton = self:FindGO("QuickBuyButton");
self:AddClickEvent(self.quickBuyButton, function (go)
if(#self.combine_lacMats>0)then
if(QuickBuyProxy.Instance:TryOpenView(self.combine_lacMats))then
return;
end
end
end);
self.goMakeButton = self:FindGO("GoMakeButton");
self:AddClickEvent(self.goMakeButton, function (go)
self:PassEvent(PicMakeCell.GoToMake, self);
end);
self.makeBtn = self:FindGO("MakeButton");
self:AddClickEvent(self.makeBtn, function (go)
if(#self.combine_lacMats>0)then
if(QuickBuyProxy.Instance:TryOpenView(self.combine_lacMats))then
return;
end
end
if(self.canCompose)then
self:PassEvent(MouseEvent.MouseClick, self);
else
MsgManager.ShowMsgByIDTable(8);
end
end);
end
local DEFAULT_MATERIAL_SEARCH_BAGTYPES;
local PRODUCE_MATERIAL_SEARCH_BAGTYPES;
local pacakgeCheck = GameConfig.PackageMaterialCheck;
DEFAULT_MATERIAL_SEARCH_BAGTYPES = pacakgeCheck and pacakgeCheck.default or {1,9};
PRODUCE_MATERIAL_SEARCH_BAGTYPES = pacakgeCheck and pacakgeCheck.produce or DEFAULT_MATERIAL_SEARCH_BAGTYPES;
function PicMakeCell:GetItemNum(itemid)
local items = BagProxy.Instance:GetMaterialItems_ByItemId(itemid, PRODUCE_MATERIAL_SEARCH_BAGTYPES);
local searchNum = 0;
for i=1,#items do
searchNum = searchNum + items[i].num;
end
return searchNum;
end
function PicMakeCell:ClickMaterial(cellctl)
self:PassEvent(PicMakeCell.ClickMaterial, cellctl);
end
function PicMakeCell:ActiveGoMakeButton(b)
self.gotoMake_active = b;
self:UpdateButtons();
end
function PicMakeCell:Refresh()
self:SetData(self.data);
end
function PicMakeCell:SetData(data)
self.data = data;
local composeID = data.staticData.ComposeID;
if(not composeID)then
return;
end
if(not Table_Compose[composeID])then
return;
end
local cdata = Table_Compose[composeID];
self.toItem = ItemData.new(0, cdata.Product.id);
local toSdata = self.toItem.staticData;
self.fashionName.text = toSdata.NameZh;
self:UpdateFashionModel(self.toItem);
self.materialsData = {};
self.canCompose = true;
TableUtility.ArrayClear(self.combine_lacMats)
local failIndexMap = {}
if(cdata.FailStayItem)then
for i=1,#cdata.FailStayItem do
local index = cdata.FailStayItem[i];
if(index)then
failIndexMap[index] = 1;
end
end
end
for i = 1,#cdata.BeCostItem do
local v = cdata.BeCostItem[i];
if(v and not failIndexMap[i])then
local tempData = ItemData.new("Material", v.id);
tempData.num = self:GetItemNum(v.id);
tempData.neednum = v.num;
if(tempData.num < tempData.neednum)then
local lackItem = {id = v.id, count = v.num - tempData.num};
table.insert(self.combine_lacMats, lackItem);
self.canCompose = false;
end
if(tempData.staticData.Type ~= 50)then
table.insert(self.materialsData, tempData);
end
end
end
self.materialCtl:ResetDatas(self.materialsData);
self:DrawLine(#self.materialsData);
local rob = cdata.ROB;
if(rob>0)then
self.roblab.gameObject:SetActive(true);
if(cdata.ROB> MyselfProxy.Instance:GetROB())then
self.roblab.text = CustomStrColor.BanRed..tostring(rob).."[-]";
else
self.roblab.text = tostring(rob);
end
else
self.roblab.gameObject:SetActive(false);
end
-- 微笑小姐製作頭飾,製作按鈕閃爍判斷。只有玻璃帽和回憶帽的製作按鈕閃爍
if(TableUtil.HasValue(PicMakeCell.GuidePicIds ,data.staticData.id))then
self:AddOrRemoveGuideId(self.makeBtn.gameObject);
self:AddOrRemoveGuideId(self.makeBtn.gameObject, 20);
end
self:UpdateButtons();
self:UpdateBagType();
end
-- 道具來源
local BagType_SymbolMap = {
[BagProxy.BagType.PersonalStorage] = "com_icon_Corner_warehouse",
[BagProxy.BagType.Barrow] = "com_icon_Corner_wheelbarrow",
[BagProxy.BagType.Temp] = "com_icon_Corner_temporarybag",
}
function PicMakeCell:UpdateBagType()
if(not self.init_bagtype)then
self.init_bagtype = true;
self.bagTypes = self:FindGO("BagTypes");
self.bagTypes_Sp = self.bagTypes and self.bagTypes:GetComponent(UISprite);
end
if(self.bagTypes == nil)then
return;
end
local data = self.data;
if(data and data.bagtype)then
if(BagType_SymbolMap[data.bagtype])then
self.bagTypes:SetActive(true);
self.bagTypes_Sp.spriteName = BagType_SymbolMap[data.bagtype];
else
self.bagTypes:SetActive(false);
end
else
self.bagTypes:SetActive(false);
end
end
function PicMakeCell:UpdateButtons()
local canMake = #self.combine_lacMats <= 0;
self.makeBtn:SetActive(canMake);
self.goMakeButton:SetActive(not canMake);
self.quickBuyButton:SetActive(not canMake);
self.makeTip.gameObject:SetActive(not canMake);
if(canMake)then
self.quickBuyButton:SetActive(false);
self.makeBtn:SetActive(self.gotoMake_active~=true);
self.goMakeButton:SetActive(self.gotoMake_active==true);
else
self.quickBuyButton:SetActive(true);
self.makeBtn:SetActive(false);
self.goMakeButton:SetActive(false);
end
end
function PicMakeCell:DrawLine(num)
if(not self.line)then
local lineObj = self:FindGO("MaterialLines");
self.line = {};
self.line.quan = {};
self.line.dline = {};
self.line.quanGrid = self:FindComponent("QuanGrid", UIGrid, lineObj);
self.line.dlineGrid = self:FindComponent("LineGrid", UIGrid, lineObj);
for i=1,4 do
self.line.quan[i] = self:FindGO("quan"..i, lineObj);
end
for i=1,3 do
self.line.dline[i] = self:FindGO("dline"..i, lineObj);
end
self.line.mid = self:FindComponent("MidLine", UISprite, lineObj);
end
self.line.mid.width = num%2==1 and 15 or 22;
for i=1,4 do
if(self.line.quan[i])then
self.line.quan[i]:SetActive(i<=num);
end
if(self.line.dline[i])then
self.line.dline[i]:SetActive(i<=num-1);
end
end
self.line.quanGrid:Reposition();
self.line.dlineGrid:Reposition();
end
local tempQA = LuaQuaternion();
function PicMakeCell:UpdateFashionModel(fashionData)
local isPetPic = fashionData.staticData.Type==52
local staticID = fashionData.staticData.id
local sid = isPetPic and Table_UseItem[staticID] and Table_UseItem[staticID].UseEffect.itemid or staticID
if(self.modelId or self.modelId==sid)then
return;
end
self:RemoveModel();
self.modelId = sid;
local partIndex = ItemUtil.getItemRolePartIndex(sid);
self.model = Asset_RolePart.Create( partIndex, sid, self.OnModelCreate, self );
if(self.model)then
self.model:RegisterWeakObserver(self);
self.model:ResetParent(self.modelContainer.transform);
self.model:SetLayer( self.modelContainer.gameObject.layer );
self.modelContainer.excute = false;
local itemModelName = isPetPic and Table_Equip[sid].Model or fashionData.equipInfo.equipData.Model
if(itemModelName)then
if(ModelShowConfig[itemModelName])then
local position = ModelShowConfig[itemModelName].localPosition;
self.model:ResetLocalPositionXYZ(position[1],position[2],position[3]);
local rotation = ModelShowConfig[itemModelName].localRotation;
tempQA:Set(rotation[1],rotation[2],rotation[3],rotation[4]);
self.model:ResetLocalEulerAngles(tempQA.eulerAngles);
local scale = ModelShowConfig[itemModelName].localScale;
self.model:ResetLocalScaleXYZ(scale[1],scale[2],scale[3]);
end
end
end
end
function PicMakeCell.OnModelCreate(obj, self)
self:ChangeSortingOrder(obj.gameObject);
end
function PicMakeCell:ChangeSortingOrder(go)
if(go == nil)then
return;
end
local prs = UIUtil.FindAllComponents(go, ParticleSystemRenderer, true);
if(prs == nil)then
return;
end
for i=1,#prs do
local pr = prs[i];
local instanceID = pr.gameObject:GetInstanceID();
self.cache_sortingOrder[ instanceID ] = pr.sortingOrder;
pr.sortingOrder = 0;
end
end
function PicMakeCell:ObserverDestroyed(obj)
if(Slua.IsNull(obj))then
return;
end
if(obj ~= self.model)then
return;
end
local prs = UIUtil.FindAllComponents(go, ParticleSystemRenderer, true);
if(prs == nil)then
return;
end
for i=1,#prs do
local pr = prs[i];
local instanceID = pr.gameObject:GetInstanceID();
local orilayer = self.cache_sortingOrder[ instanceID ]
if(orilayer ~= nil)then
pr.sortingOrder = orilayer;
end
end
self.model:UnregisterWeakObserver(self);
end
function PicMakeCell:RemoveModel()
if(self.model)then
self.model:Destroy();
self.modelId = nil;
self.model = nil;
end
end
function PicMakeCell:OnRemove()
self:RemoveModel();
end