local UIRecycleFragment = UIViewClass() local NodeInterval = 20 local RecycleFragmentTips_Key = "RecycleFragmentTips_Key" -------------------- function UIRecycleFragment:OnOpened(context) self:RegistSystemEvent(EventID.RecycleFragment_RefreshItem, self.RefreshMaterialCell) self:RegistSystemEvent(EventID.RecycleFragment_RefreshArea, self.RefreshRecycleFragmentType) self:RegistSystemEvent(EventID.RecycleFragment_AreaLevelUp, self.RefreshAreaLevelUp) self:RegistSystemEvent(EventID.RecycleFragment_RFLevelUp, self.RefreshRFLevelUp) self:RegistSystemEvent(CTL.RedPoint.RedPointKey.Reborn_RecycleFragment_Man, self.RefreshRFManRedPoint) self:RegistSystemEvent(CTL.RedPoint.RedPointKey.Reborn_RecycleFragment_Earth, self.RefreshRFEarthRedPoint) self:RegistSystemEvent(CTL.RedPoint.RedPointKey.Reborn_RecycleFragment_Heaven, self.RefreshRFHeavenRedPoint) self.chooseMaterialDic = {} self.brokenMaterialDic = {} -- 仅仅用于播放破碎特效 self.selectRecycleFragmentType = MDL.Reborn.RecycleFragmentType.None self.chooseQualityDic = {} -- 设置Toggle本地状态 self.toggle_Low.isOn = true self.toggle_Mid.isOn = true self.toggle_High.isOn = true self:RefreshRecycleFragmentType() self:SelectRecycleFragmentType() self:RefreshMaterialCell() -- 设置一次红点 self:RefreshRFManRedPoint(CTL.RedPoint.GetRedPointActive(CTL.RedPoint.RedPointKey.Reborn_RecycleFragment_Man)) self:RefreshRFEarthRedPoint(CTL.RedPoint.GetRedPointActive(CTL.RedPoint.RedPointKey.Reborn_RecycleFragment_Earth)) self:RefreshRFHeavenRedPoint(CTL.RedPoint.GetRedPointActive(CTL.RedPoint.RedPointKey.Reborn_RecycleFragment_Heaven)) end function UIRecycleFragment:OnButtonClicked(comp) if comp == self.btn_OneChoose then self:ClickOneChoose() elseif comp == self.btn_RecycleFragment then if not next(self.chooseMaterialDic) then CTL.Tips.AddTipsMsg(Const_IDS.IDS_RFDevelop_FeedTips_NoSelect) return end local isShowTips = false local tipsIDS local rfTypeData = DataSheetManager.RecycleFragmentType:GetDataByID(self.selectRecycleFragmentType) -- 根据配置品质显示提示弹窗 if rfTypeData.ComfirmQuality > 0 then for k,v in pairs(self.chooseMaterialDic) do local materialData = MDL.Reborn.GetMaterialDataById(k) if materialData.quality >= rfTypeData.ComfirmQuality then isShowTips = true tipsIDS = rfTypeData.ComfirmIDS end end end if isShowTips then -- 获取上一次本地保存的提示时间 local refinedHintTime = PersistentData.PlayerData:Get(RecycleFragmentTips_Key) or {} if UTL.Time.IsTimestampSameDay(refinedHintTime[self.selectRecycleFragmentType] or 0) then MDL.Reborn.RecycleFragmentRequest(self.selectRecycleFragmentType, self.chooseMaterialDic) else UTL.MessageBox.ShowOKCancelToggleBox(nil, UIUtils.GetLocalizedTxt(Const_IDS[tipsIDS]), UIUtils.GetLocalizedTxt(Const_IDS["IDS_RFDevelop_Tips3"]), function() MDL.Reborn.RecycleFragmentRequest(self.selectRecycleFragmentType, self.chooseMaterialDic) end, function() -- 人之灵和地之灵分开存储今日不弹窗 refinedHintTime[self.selectRecycleFragmentType] = UTL.Time.GetServerTimestamp() PersistentData.PlayerData:Set(RecycleFragmentTips_Key, refinedHintTime, true) end) end else MDL.Reborn.RecycleFragmentRequest(self.selectRecycleFragmentType, self.chooseMaterialDic) end elseif comp == self.event_Info then UIManager.OpenView(Const_UI_Lua.UIEnum.UIRecycleFragmentProperty) elseif comp == self.obj_ManPoint[1].btn_select or comp == self.obj_ManPoint[2].btn_select then if self.selectRecycleFragmentType ~= MDL.Reborn.RecycleFragmentType.Man then self.selectRecycleFragmentType = MDL.Reborn.RecycleFragmentType.Man table.clear(self.chooseMaterialDic) self:RefreshRFPreviewExp() UIUtils.SetLabelText(self.txt_Title, Const_IDS.IDS_RFArea1_Name) self:ShowSelectRecycleFragmentType() self:SetQualityToggle() end elseif comp == self.obj_EarthPoint[1].btn_select or comp == self.obj_EarthPoint[2].btn_select then if self.selectRecycleFragmentType ~= MDL.Reborn.RecycleFragmentType.Earth then self.selectRecycleFragmentType = MDL.Reborn.RecycleFragmentType.Earth table.clear(self.chooseMaterialDic) self:RefreshRFPreviewExp() UIUtils.SetLabelText(self.txt_Title, Const_IDS.IDS_RFArea2_Name) self:ShowSelectRecycleFragmentType() self:SetQualityToggle() end elseif comp == self.obj_Heaven.btn_select then if self.selectRecycleFragmentType ~= MDL.Reborn.RecycleFragmentType.Heaven then self.selectRecycleFragmentType = MDL.Reborn.RecycleFragmentType.Heaven table.clear(self.chooseMaterialDic) self:RefreshRFPreviewExp() UIUtils.SetLabelText(self.txt_Title, Const_IDS.IDS_RFArea3_Name) self:ShowSelectRecycleFragmentType() self:SetQualityToggle() end end end function UIRecycleFragment:OnValueChanged(comp, value) if comp == self.toggle_Low then self.chooseQualityDic[LuaConst.QualityColor.Orange] = value self:RemoveQualityMaterial() self:RefreshMaterialCell() self:RefreshRFPreviewExp() elseif comp == self.toggle_Mid then self.chooseQualityDic[LuaConst.QualityColor.Red] = value self:RemoveQualityMaterial() self:RefreshMaterialCell() self:RefreshRFPreviewExp() elseif comp == self.toggle_High then self.chooseQualityDic[LuaConst.QualityColor.Gold] = value self.chooseQualityDic[LuaConst.QualityColor.DarkGold] = value self:RemoveQualityMaterial() self:RefreshMaterialCell() self:RefreshRFPreviewExp() end end function UIRecycleFragment:OnCellInit(scrollRect, index, cellTable, data) UTL.Item.SetItemCell(cellTable.item, data.cfgId) local materialCount = self.chooseMaterialDic[data.Id] if materialCount and materialCount > 0 then UIUtils.SetActive(cellTable.img_Selected, true) UTL.Item.SetItemCount(cellTable.item) UIUtils.SetLabel(cellTable.txt_Number, string.format("%s/%s", materialCount, data.itemCount)) else UIUtils.SetActive(cellTable.img_Selected, false) UTL.Item.SetItemCount(cellTable.item, data.itemCount) end if self.brokenMaterialDic[data.Id] then cellTable.effect_Use:PlayUIEffect() else cellTable.effect_Use:StopUIEffect() end self.loop_RecycleFragment:RegistTriggerEvent(cellTable.item.event_Click, UIEventTriggerType.PointerDown, index) self.loop_RecycleFragment:RegistTriggerEvent(cellTable.btn_MinusBG, UIEventTriggerType.PointerDown, index) self.loop_RecycleFragment:RegistTriggerEvent(cellTable.item.event_Click, UIEventTriggerType.BeginDrag, index) self.loop_RecycleFragment:RegistTriggerEvent(cellTable.item.event_Click, UIEventTriggerType.Drag, index) self.loop_RecycleFragment:RegistTriggerEvent(cellTable.item.event_Click, UIEventTriggerType.EndDrag, index) self.loop_RecycleFragment:RegistTriggerEvent(cellTable.item.event_Click, UIEventTriggerType.PointerUp, index) self.loop_RecycleFragment:RegistTriggerEvent(cellTable.btn_MinusBG, UIEventTriggerType.PointerUp, index) end function UIRecycleFragment:OnCellClicked(scrollRect, index, cellTable, target, data) local chooseCount = self.chooseMaterialDic[data.Id] if target == cellTable.btn_MinusBG then if chooseCount then if chooseCount > 1 then self.chooseMaterialDic[data.Id] = chooseCount - 1 else self.chooseMaterialDic[data.Id] = nil end end elseif target == cellTable.item.event_Click then local canChooseCount = CTL.Reborn.GetCanChooseMaterialCount(self.selectRecycleFragmentType, self.chooseMaterialDic, data) if canChooseCount > 0 then if chooseCount then if chooseCount < data.itemCount then self.chooseMaterialDic[data.Id] = chooseCount + 1 else CTL.Tips.AddTipsMsg(Const_IDS.IDS_RFDevelop_FeedTips_UpNumberLimit) end else self.chooseMaterialDic[data.Id] = canChooseCount end else CTL.Tips.AddTipsMsg(string.FormatByIdsId(Const_IDS.IDS_RFDevelop_FeedTips_UpCurrentLevelLimit, CTL.Reborn.GetNameByRFType(self.selectRecycleFragmentType))) end end if self.chooseMaterialDic[data.Id] then UIUtils.SetActive(cellTable.img_Selected, true) UTL.Item.SetItemCount(cellTable.item) UIUtils.SetLabel(cellTable.txt_Number, string.format("%s/%s", self.chooseMaterialDic[data.Id], data.itemCount)) else UIUtils.SetActive(cellTable.img_Selected, false) UTL.Item.SetItemCount(cellTable.item, data.itemCount) end self:RefreshRFPreviewExp() end function UIRecycleFragment:Cell_OnPointerDown(scrollRect, index, target, eventData) local cellTable = scrollRect:GetCellTableByIndex(index) local data = scrollRect:GetCellDataByIndex(index) if target == cellTable.btn_MinusBG then self:StopContinueDel() self:StartDelayContinueDel(index, data) elseif target == cellTable.item.event_Click then self:StopContinueAdd() self:StartDelayContinueAdd(index, data) end end function UIRecycleFragment:Cell_OnPointerUp(scrollRect, index, target, eventData) local cellTable = scrollRect:GetCellTableByIndex(index) if target == cellTable.btn_MinusBG then self:StopContinueDel() elseif target == cellTable.item.event_Click then self:StopContinueAdd() end end function UIRecycleFragment:Cell_OnBeginDrag(scrollRect, index, target, eventData) UIUtils.ExecuteBeginDrag(self.loop_RecycleFragment.gameObject, eventData) end function UIRecycleFragment:Cell_OnDrag(scrollRect, index, target, eventData) UIUtils.ExecuteDrag(self.loop_RecycleFragment.gameObject, eventData) end function UIRecycleFragment:Cell_OnEndDrag(scrollRect, index, comp, eventData) UIUtils.ExecuteEndDrag(self.loop_RecycleFragment.gameObject, eventData) end -------------------- function UIRecycleFragment:RefreshMaterialCell(clearCell) if clearCell then table.clear(self.brokenMaterialDic) -- 记录需要播放的破碎特效 for id, _ in pairs(self.chooseMaterialDic) do self.brokenMaterialDic[id] = 1 -- 仅占位作用 end self.loop_RecycleFragment:RefreshCells() table.clear(self.chooseMaterialDic) table.clear(self.brokenMaterialDic) -- 因为要播放特效所以此处延迟刷新UI self:StopRepeatFunc(self.RefreshCell) self:StartRepeatFunc(self.RefreshCell, MDL.Reborn.TimeDelayInterval, 1) else self:StopRepeatFunc(self.RefreshCell) self:RefreshCell() end end function UIRecycleFragment:RefreshCell() if self.loop_RecycleFragment.Count > 0 then self.loop_RecycleFragment:ClearCells() end for _, v in MDL.Reborn.GetRFMaterialIterator(self.chooseQualityDic, true) do -- 将itemCount 设置一下 self.loop_RecycleFragment:AddData(v, 0) end UIUtils.SetActive(self.img_Empty, self.loop_RecycleFragment.Count == 0) end function UIRecycleFragment:RefreshRecycleFragmentType() local curLevel = MDL.Reborn.GetRecycleFragmentLevel() local recycleFragmentData = DataSheetManager.RecycleFragmentLevel:GetDataByRecycleFragmentLevel(curLevel) UIUtils.SetLabel(self.txt_Level, curLevel) -- 设置天地人灵区位置状态 if recycleFragmentData.RFAreaLevelLimit_1 > 0 and recycleFragmentData.RFAreaLevelLimit_2 > 0 and recycleFragmentData.RFAreaLevelLimit_3 > 0 then self.obj_PointState:SetState(2) for _, item in ipairs(self.obj_ManPoint) do self:SetRFArea(item, MDL.Reborn.RecycleFragmentType.Man) end for _, item in ipairs(self.obj_EarthPoint) do self:SetRFArea(item, MDL.Reborn.RecycleFragmentType.Earth) end self:SetRFArea(self.obj_Heaven, MDL.Reborn.RecycleFragmentType.Heaven) elseif recycleFragmentData.RFAreaLevelLimit_1 > 0 and recycleFragmentData.RFAreaLevelLimit_2 > 0 then self.obj_PointState:SetState(1) for _, item in ipairs(self.obj_ManPoint) do self:SetRFArea(item, MDL.Reborn.RecycleFragmentType.Man) end for _, item in ipairs(self.obj_EarthPoint) do self:SetRFArea(item, MDL.Reborn.RecycleFragmentType.Earth) end else self.obj_PointState:SetState(0) for _, item in ipairs(self.obj_ManPoint) do self:SetRFArea(item, MDL.Reborn.RecycleFragmentType.Man) end end -- 设置人之灵状态 self:ShowSelectRecycleFragmentType() -- 设置总战力 UIUtils.SetLabel(self.txt_Power2, CTL.Reborn.GetRecycleFragmentAllPower()) -- 刷新预览 self:RefreshRFPreviewExp() end function UIRecycleFragment:RefreshRFPreviewExp() for _, item in ipairs(self.obj_ManPoint) do if self.selectRecycleFragmentType == MDL.Reborn.RecycleFragmentType.Man then self:SetRFPreviewLevel(item) else self:SetRFArea(item, MDL.Reborn.RecycleFragmentType.Man) UIUtils.SetAtlasImageFillAmount(item.img_EXPShowBotton, 0) UIUtils.SetAtlasImageFillAmount(item.img_EXPShowUp, 0) UIUtils.SetActive(item.img_Arrow, false) end end for _, item in ipairs(self.obj_EarthPoint) do if self.selectRecycleFragmentType == MDL.Reborn.RecycleFragmentType.Earth then self:SetRFPreviewLevel(item) else self:SetRFArea(item, MDL.Reborn.RecycleFragmentType.Earth) UIUtils.SetAtlasImageFillAmount(item.img_EXPShowBotton, 0) UIUtils.SetAtlasImageFillAmount(item.img_EXPShowUp, 0) UIUtils.SetActive(item.img_Arrow, false) end end if self.selectRecycleFragmentType == MDL.Reborn.RecycleFragmentType.Heaven then self:SetRFPreviewLevel(self.obj_Heaven) else self:SetRFArea(self.obj_Heaven, MDL.Reborn.RecycleFragmentType.Heaven) UIUtils.SetAtlasImageFillAmount(self.obj_Heaven.img_EXPShowBotton, 0) UIUtils.SetAtlasImageFillAmount(self.obj_Heaven.img_EXPShowUp, 0) UIUtils.SetActive(self.obj_Heaven.img_Arrow, false) end end -- 灵区升级特效 function UIRecycleFragment:RefreshAreaLevelUp(recycleFragmentType, isUpLevel) if recycleFragmentType == MDL.Reborn.RecycleFragmentType.Man then for _, item in ipairs(self.obj_ManPoint) do if isUpLevel then item.effect_LevelUp:PlayUIEffect() else item.effect_Feed:PlayUIEffect() end end elseif recycleFragmentType == MDL.Reborn.RecycleFragmentType.Earth then for _, item in ipairs(self.obj_EarthPoint) do if isUpLevel then item.effect_LevelUp:PlayUIEffect() else item.effect_Feed:PlayUIEffect() end end elseif recycleFragmentType == MDL.Reborn.RecycleFragmentType.Heaven then if isUpLevel then self.obj_Heaven.effect_LevelUp:PlayUIEffect() else self.obj_Heaven.effect_Feed:PlayUIEffect() end end CTL.Sound.PlayGameSound("UI_breakout_02") end -- 纳灵升级特效 function UIRecycleFragment:RefreshRFLevelUp() self.effect_LevelUp:PlayUIEffect() end -- 人之灵红点 function UIRecycleFragment:RefreshRFManRedPoint(active) for _, item in ipairs(self.obj_ManPoint) do item.btn_select:SetRedPoint(active) end end -- 地之灵红点 function UIRecycleFragment:RefreshRFEarthRedPoint(active) for _, item in ipairs(self.obj_EarthPoint) do item.btn_select:SetRedPoint(active) end end -- 天之灵红点 function UIRecycleFragment:RefreshRFHeavenRedPoint(active) self.obj_Heaven.btn_select:SetRedPoint(active) end -- 默认选中 选中规则 优先选择为达到等级上限的灵区,若多个满足条件的,人>地>天 function UIRecycleFragment:SelectRecycleFragmentType() local curLevel = MDL.Reborn.GetRecycleFragmentLevel() local recycleFragmentData = DataSheetManager.RecycleFragmentLevel:GetDataByRecycleFragmentLevel(curLevel) local areaInfo = MDL.Reborn.GetRFAreaInfoByType(MDL.Reborn.RecycleFragmentType.Man) if areaInfo and recycleFragmentData.RFAreaLevelLimit_1 > 0 and areaInfo.Level < recycleFragmentData.RFAreaLevelLimit_1 then self:OnButtonClicked(self.obj_ManPoint[1].btn_select) return end areaInfo = MDL.Reborn.GetRFAreaInfoByType(MDL.Reborn.RecycleFragmentType.Earth) if areaInfo and recycleFragmentData.RFAreaLevelLimit_2 > 0 and areaInfo.Level < recycleFragmentData.RFAreaLevelLimit_2 then self:OnButtonClicked(self.obj_EarthPoint[1].btn_select) return end areaInfo = MDL.Reborn.GetRFAreaInfoByType(MDL.Reborn.RecycleFragmentType.Heaven) if areaInfo and recycleFragmentData.RFAreaLevelLimit_3 > 0 and areaInfo.Level < recycleFragmentData.RFAreaLevelLimit_3 then self:OnButtonClicked(self.obj_Heaven.btn_select) return end -- 若都达到了等级上限 默认选中 人 self:OnButtonClicked(self.obj_ManPoint[1].btn_select) end -- 设置对应Type 灵区的数据 function UIRecycleFragment:SetRFArea(item, rfType) local info = MDL.Reborn.GetRFAreaInfoByType(rfType) local data = DataSheetManager.RecycleFragmentArea:GetDataByRFAreaType_RFAreaLevel_RFAreaLevelPoint(rfType, info.Level, info.Node) local nodeIndex = math.floor(info.Node / NodeInterval) local progress = (info.Node + NodeInterval * info.CurExp / data.RFAreaLevelEXP) / 100 UIUtils.SetAtlasImageFillAmount(item.img_EXP, progress) -- 设置节点 for i, dotState in ipairs(item.obj_Dots) do if i <= nodeIndex then dotState:SetState(1) else dotState:SetState(0) end end -- 设置等级 if info.Level == CTL.Reborn.GetMaxLevelByType(rfType) then UIUtils.SetLabel(item.txt_ZoneName, string.FormatByIdsId(Const_IDS.IDS_RFArea_FullLevel, info.Level)) else UIUtils.SetLabel(item.txt_ZoneName, string.FormatByIdsId(Const_IDS.IDS_RFArea_Level, info.Level, CTL.Reborn.GetAllExpByCurLevel(rfType, info.Level, info.Node) + info.CurExp, CTL.Reborn.GetAllExpByCurLevel(rfType, info.Level))) end -- 设置属性 for i, attrItem in ipairs(item.group_Attr) do local attData = data.Attr_Table[i] if attData then UIUtils.SetActive(attrItem, true) UIUtils.SetLabel(attrItem, UTL.Attr.GetAttrText(attData.AttrType, attData.AttrNum)) else UIUtils.SetActive(attrItem, false) end end end function UIRecycleFragment:SetRFPreviewLevel(item, info) local info = MDL.Reborn.GetRFAreaInfoByType(self.selectRecycleFragmentType) local chooseExp = CTL.Reborn.GetChooseMaterialExp(self.chooseMaterialDic) local curExp = CTL.Reborn.GetAllExpByCurLevel(self.selectRecycleFragmentType, info.Level, info.Node) + info.CurExp local curLevelAllExp = CTL.Reborn.GetAllExpByCurLevel(self.selectRecycleFragmentType, info.Level) -- 设置当前等级 UIUtils.SetAtlasImageFillAmount(item.img_EXPShowBotton, (curExp + chooseExp) / curLevelAllExp) -- 设置下一等级 local nextLevelAllExp = CTL.Reborn.GetAllExpByCurLevel(self.selectRecycleFragmentType, info.Level + 1) if nextLevelAllExp > 0 then UIUtils.SetAtlasImageFillAmount(item.img_EXPShowUp, (chooseExp - (curLevelAllExp - curExp)) / nextLevelAllExp) else UIUtils.SetAtlasImageFillAmount(item.img_EXPShowUp, 0) end -- 目标等级 相关数据 if chooseExp > 0 then local targetRFAreaData, remainingExp = CTL.Reborn.GetTargetRFAreaData(self.selectRecycleFragmentType, info, chooseExp) if targetRFAreaData then local levelStr if info.Level == targetRFAreaData.RFAreaLevel then levelStr = targetRFAreaData.RFAreaLevel else levelStr = UTL.Color.FormatGreenColor(targetRFAreaData.RFAreaLevel) end if targetRFAreaData.RFAreaLevel == CTL.Reborn.GetMaxLevelByType(self.selectRecycleFragmentType) then UIUtils.SetLabel(item.txt_ZoneName, string.FormatByIdsId(Const_IDS.IDS_RFArea_FullLevel, levelStr)) else local targetExp = UTL.Color.FormatGreenColor(CTL.Reborn.GetAllExpByCurLevel(self.selectRecycleFragmentType, targetRFAreaData.RFAreaLevel, targetRFAreaData.RFAreaLevelPoint) + remainingExp) local targetAllExp = UTL.Color.FormatGreenColor(CTL.Reborn.GetAllExpByCurLevel(self.selectRecycleFragmentType, targetRFAreaData.RFAreaLevel)) UIUtils.SetLabel(item.txt_ZoneName, string.FormatByIdsId(Const_IDS.IDS_RFArea_Level, levelStr, targetExp, targetAllExp)) end -- 目标属性 local curAreaData = DataSheetManager.RecycleFragmentArea:GetDataByRFAreaType_RFAreaLevel_RFAreaLevelPoint(self.selectRecycleFragmentType, info.Level, info.Node) for i, attrItem in ipairs(item.group_Attr) do local attData = targetRFAreaData.Attr_Table[i] if attData then UIUtils.SetActive(attrItem, true) local color = UTL.Color.Green for _, v in ipairs(curAreaData.Attr_Table) do if attData.AttrType == v.AttrType and attData.AttrNum == v.AttrNum then color = UTL.Color.ModelNameColor.White break end end UIUtils.SetLabel(attrItem, UTL.Attr.GetAttrText(attData.AttrType, attData.AttrNum, color)) else UIUtils.SetActive(attrItem, false) end end UIUtils.SetActive(item.img_Arrow, true) end else self:SetRFArea(item, self.selectRecycleFragmentType) UIUtils.SetActive(item.img_Arrow, false) end end -- 设置可选品质Toggle function UIRecycleFragment:SetQualityToggle() self.obj_ToggleState:SetState(self.selectRecycleFragmentType - 1) table.clear(self.chooseQualityDic) local rfTypeData = DataSheetManager.RecycleFragmentType:GetDataByID(self.selectRecycleFragmentType) for _, v in ipairs(rfTypeData.RFQuality) do if v == LuaConst.QualityColor.Orange then self.chooseQualityDic[v] = self.toggle_Low.isOn elseif v == LuaConst.QualityColor.Red then self.chooseQualityDic[v] = self.toggle_Mid.isOn elseif v == LuaConst.QualityColor.Gold then self.chooseQualityDic[v] = self.toggle_High.isOn elseif v == LuaConst.QualityColor.DarkGold then self.chooseQualityDic[v] = self.toggle_High.isOn end end self:RemoveQualityMaterial() self:RefreshMaterialCell() end function UIRecycleFragment:ShowSelectRecycleFragmentType() -- 人之灵相关 if self.selectRecycleFragmentType == MDL.Reborn.RecycleFragmentType.Man then for _, item in ipairs(self.obj_ManPoint) do item.effect_Selected:PlayUIEffect() end else for _, item in ipairs(self.obj_ManPoint) do item.effect_Selected:StopUIEffect() end end -- 地之灵相关 if self.selectRecycleFragmentType == MDL.Reborn.RecycleFragmentType.Earth then for _, item in ipairs(self.obj_EarthPoint) do item.effect_Selected:PlayUIEffect() end else for _, item in ipairs(self.obj_EarthPoint) do item.effect_Selected:StopUIEffect() end end -- 切换天之灵特效 if self.selectRecycleFragmentType == MDL.Reborn.RecycleFragmentType.Heaven then self.obj_Heaven.effect_Selected:PlayUIEffect() else self.obj_Heaven.effect_Selected:StopUIEffect() end -- 设置按钮状态 local info = MDL.Reborn.GetRFAreaInfoByType(self.selectRecycleFragmentType) local rfAreaLevelLimit = CTL.Reborn.GetCanReachMaxLevelByType(self.selectRecycleFragmentType) if not info then return end if info.Level == CTL.Reborn.GetMaxLevelByType(self.selectRecycleFragmentType) then self.obj_btnState:SetState(1) UIUtils.SetLabel(self.txt_Tip, string.FormatByIdsId(Const_IDS.IDS_RFDevelop_UpMaxLevelLimit_Tips, CTL.Reborn.GetNameByRFType(self.selectRecycleFragmentType))) elseif info.Level >= rfAreaLevelLimit then self.obj_btnState:SetState(1) UIUtils.SetLabelText(self.txt_Tip, Const_IDS.IDS_RFDevelop_UpCurrentLevelLimit_Tips) else self.obj_btnState:SetState(0) end end function UIRecycleFragment:ClickOneChoose() local isChoose = false local moveIndex = 0 local index = 0 for _, v in MDL.Reborn.GetRFMaterialIterator(self.chooseQualityDic, true) do index = index + 1 local canChooseCount = CTL.Reborn.GetCanChooseMaterialCount(self.selectRecycleFragmentType, self.chooseMaterialDic, v) if canChooseCount > 0 then isChoose = true local chooseCount = self.chooseMaterialDic[v.Id] if chooseCount then self.chooseMaterialDic[v.Id] = math.min(chooseCount + canChooseCount, v.itemCount) else self.chooseMaterialDic[v.Id] = canChooseCount end if moveIndex == 0 then moveIndex = index end end end if index == 0 then CTL.Tips.AddTipsMsg(Const_IDS.IDS_RFDevelop_FeedMaterialNull) return end if isChoose then self.loop_RecycleFragment:RefreshCells() self.loop_RecycleFragment:MoveIndex(moveIndex - 1) -- C#从0开始 else CTL.Tips.AddTipsMsg(string.FormatByIdsId(Const_IDS.IDS_RFDevelop_FeedTips_UpCurrentLevelLimit, CTL.Reborn.GetNameByRFType(self.selectRecycleFragmentType))) end -- 设置预览经验条 self:RefreshRFPreviewExp() end function UIRecycleFragment:RemoveQualityMaterial() for id, _ in pairs(self.chooseMaterialDic) do local materialData = MDL.Reborn.GetMaterialDataById(id) if not self.chooseQualityDic[materialData.quality] then self.chooseMaterialDic[id] = nil end end end ---------- Start 计时器相关 Start ---------- -- 递增计时 function UIRecycleFragment:StartDelayContinueAdd(index, data) self:StartRepeatFunc(self.StartContinueAdd, 0.8, 1) self.continueAddIndex = index self.continueAddData = data end function UIRecycleFragment:StartContinueAdd() self:StartRepeatFunc(self.ContinueAdd, 0.1, -1) end function UIRecycleFragment:ContinueAdd() local canChooseCount = CTL.Reborn.GetCanChooseMaterialCount(self.selectRecycleFragmentType, self.chooseMaterialDic, self.continueAddData) local stopContinue = false if canChooseCount > 0 then local chooseCount = self.chooseMaterialDic[self.continueAddData.Id] or 0 if chooseCount < self.continueAddData.itemCount then self.chooseMaterialDic[self.continueAddData.Id] = chooseCount + 1 else CTL.Tips.AddTipsMsg(Const_IDS.IDS_RFDevelop_FeedTips_UpNumberLimit) stopContinue = true end else CTL.Tips.AddTipsMsg(string.FormatByIdsId(Const_IDS.IDS_RFDevelop_FeedTips_UpCurrentLevelLimit, CTL.Reborn.GetNameByRFType(self.selectRecycleFragmentType))) stopContinue = true end if self.continueAddIndex then self.loop_RecycleFragment:UpdateIndex(self.continueAddIndex) end self:RefreshRFPreviewExp() if stopContinue then self:StopContinueAdd() end end function UIRecycleFragment:StopContinueAdd() self:StopRepeatFunc(self.StartContinueAdd) self:StopRepeatFunc(self.ContinueAdd) self.continueAddData = nil self.continueAddIndex = nil end -- 递减计时 function UIRecycleFragment:StartDelayContinueDel(index, data) self:StartRepeatFunc(self.StartContinueDel, 0.8, 1) self.continueDelIndex = index self.continueDelData = data end function UIRecycleFragment:StartContinueDel() self:StartRepeatFunc(self.ContinueDel, 0.1, -1) end function UIRecycleFragment:ContinueDel() local chooseCount = self.chooseMaterialDic[self.continueDelData.Id] if chooseCount and chooseCount > 0 then if chooseCount > 1 then self.chooseMaterialDic[self.continueDelData.Id] = chooseCount - 1 else self.chooseMaterialDic[self.continueDelData.Id] = nil end end if self.continueDelIndex then self.loop_RecycleFragment:UpdateIndex(self.continueDelIndex) end self:RefreshRFPreviewExp() if not self.chooseMaterialDic[self.continueDelData.Id] then self:StopContinueDel() end end function UIRecycleFragment:StopContinueDel() self:StopRepeatFunc(self.StartContinueDel) self:StopRepeatFunc(self.ContinueDel) self.continueDelIndex = nil self.continueDelData = nil end ------------ End 计时器相关 End ------------ return UIRecycleFragment