local UIRebornSoulCrystal = UIViewClass() local EventSystem = require('Event/EventSystem') local SmeltHintTime = "UIRebornSoulCrystal_SmeltHintTime" local OneKeyChooseMaxNum = DataSheetManager.ConstData:GetDataByID("OneKeyChooseMaxNum").IntValue -------------------- function UIRebornSoulCrystal:OnOpened(context) self:RegistSystemEvent(EventID.UI_Reborn_Smelt_EquipSmeltSuccess, self.InitSoulCrystal) self.selectIdDict = {} self:InitSoulCrystal() end function UIRebornSoulCrystal:OnButtonClicked(comp) if comp == self.btn_Smelt then if next(self.selectIdDict) then self:SetSoulCrystalTipView(false) local smeltHintTime = PersistentData.PlayerData:Get(SmeltHintTime, 0) -- 获取上一次本地保存的提示时间 if UTL.Time.IsTimestampSameDay(smeltHintTime) then MDL.Reborn.SmeltReq(self.selectIdDict, MDL.Reborn.SmeltType.Crystal) else UTL.MessageBox.ShowOKCancelToggleBox(nil, Const_IDS.IDS_TreasureSoul_DecomposeConfirm, UIUtils.GetLocalizedTxt(Const_IDS.IDS_WarZoneAuction_27), function() MDL.Reborn.SmeltReq(self.selectIdDict, MDL.Reborn.SmeltType.Crystal) end, function() PersistentData.PlayerData:Set(SmeltHintTime, UTL.Time.GetServerTimestamp(), true) end) end end elseif comp == self.btn_closeSoulTipView then self:SetSoulCrystalTipView(false) end end function UIRebornSoulCrystal:OnCellInit(scrollRect, index, cellTable, data) if scrollRect == self.loop_SmeltEquip then UTL.Item.SetItemCell(cellTable.item, data.soulData.CrystalID) if self.selectIdDict[data.id] then UIUtils.SetActive(cellTable.img_Selected, true) else UIUtils.SetActive(cellTable.img_Selected, false) end elseif scrollRect == self.loop_SmeltReward then UTL.Item.SetItemCell(cellTable.item, data.ItemID, data.ItemNum) end end function UIRebornSoulCrystal:OnCellClicked(scrollRect, index, cellTable, target, data) if scrollRect == self.loop_SmeltEquip then if target == cellTable.item.event_Click then if self.selectIdDict[data.id] then self.selectIdDict[data.id] = nil UIUtils.SetActive(cellTable.img_Selected, false) self:SetSoulCrystalTipView(false) else if table.getDictCount(self.selectIdDict) == OneKeyChooseMaxNum then CTL.Tips.AddTipsMsg(Const_IDS.IDS_TreasureSoul_SameTimeSelected, OneKeyChooseMaxNum) else self.selectIdDict[data.id] = data UIUtils.SetActive(cellTable.img_Selected, true) self:SetSoulCrystalTipView(true, data.id) end end self:RefreshSoulCrystalRewardList() end elseif scrollRect == self.loop_SmeltReward then if target == cellTable.item.event_Click then UTL.ItemTips.ShowCommonTipsById(data.ItemID) end end end -------------------- function UIRebornSoulCrystal:InitSoulCrystal() if self.loop_SmeltEquip.Count > 0 then self.loop_SmeltEquip:ClearCells() end for _, v in MDL.Treasure.GetSoulCrystalIterator(false) do if not v.equip then self.loop_SmeltEquip:AddData(v, 0) end end -- 移除已经选中的魂晶 local soulInfo local removeId = {} for id, _ in pairs(self.selectIdDict) do soulInfo = MDL.Treasure.GetSoulCrystalById(id) if not soulInfo then table.insert(removeId, id) end end for _, id in ipairs(removeId) do self.selectIdDict[id] = nil end UIUtils.SetActive(self.img_Empty, self.loop_SmeltEquip.Count == 0) UIUtils.SetActive(self.btn_closeSoulTipView, false) self:RefreshSoulCrystalRewardList() end function UIRebornSoulCrystal:RefreshSoulCrystalRewardList() local rewardList = {} for _, data in pairs(self.selectIdDict) do for _, item in ipairs(data.soulData.Item_Table) do local rewardData = nil for _, v in ipairs(rewardList) do if v.ItemID == item.ItemID then rewardData = v end end if rewardData then rewardData.ItemNum = rewardData.ItemNum + item.ItemNum else table.insert(rewardList, {ItemID = item.ItemID, ItemNum = item.ItemNum}) end end end if #rewardList > 0 then self.effect_MeltLight:PlayUIEffect() UIUtils.SetActive(self.group_SmeltReward, true) self.loop_SmeltReward:ReloadAll(rewardList) else self.effect_MeltLight:StopUIEffect() UIUtils.SetActive(self.group_SmeltReward, false) end end function UIRebornSoulCrystal:SetSoulCrystalTipView(isOpen, id) if isOpen then local posX, posY = self.obj_tipPos:GetPosition() local param = {showPlace = CTL.Treasure.SoulCrystalShowPlace.Reborn, id = id, panelPosX = posX, panelPosY = posY} if self.tipView then EventSystem.Dispatch(EventID.TreasureSoulCrystal_UpdateShowPanel, param) else self.tipView = self.soulTipView:OpenView(GetViewClass(Const_UI_Lua.UIEnum.UITreasureSoulCrystalShow), param) end UIUtils.SetActive(self.btn_closeSoulTipView, true) else self.soulTipView:CloseAll() self.tipView = nil UIUtils.SetActive(self.btn_closeSoulTipView, false) end end return UIRebornSoulCrystal