slot0 = class("EquipmentTraceBackLayer", import("view.base.BaseUI")) function slot0.getUIName(slot0) return "EquipmentTraceBackUI" end function slot0.init(slot0) slot1 = slot0._tf:Find("Adapt/Left/Operation") slot0.sortOrderBtn = slot1:Find("Bar1") slot0.orderText = slot1:Find("OrderText") slot0.sortBarBtn = slot1:Find("Bar2") slot0.sortImg = slot1:Find("SortImg") slot0.sortBar = slot0._tf:Find("Adapt/Left/SortBar") setActive(slot0.sortBar, false) slot0.equipLayout = slot0._tf:Find("Adapt/Left/Scroll View") slot0.equipLayoutContent = slot0.equipLayout:Find("Viewport/Content") slot0.equipLayoutContent:GetComponent(typeof(GridLayoutGroup)).constraintCount = 6 slot3 = slot0._tf:Find("Adapt/Right") slot0.sourceEquip = slot3:Find("Source") slot0.sourceEquipStatus = slot3:Find("Status") slot0.formulaWire = slot3:Find("Wire") slot0.targetEquip = slot3:Find("Target") slot0.confirmBtn = slot3:Find("ConfirmBtn") slot0.cancelBtn = slot3:Find("CancelBtn") slot0.materialLayout = slot3:Find("Scroll View") slot0.materialLayoutContent = slot0.materialLayout:Find("Viewport/Content") slot0.goldText = slot3:Find("GoldText") setText(slot1:Find("Field/Text"), i18n("equipment_upgrade_quick_interface_source_chosen")) setText(slot3:Find("Text"), i18n("equipment_upgrade_quick_interface_materials_consume")) slot0.loader = AutoLoader.New() end slot0.SortType = { Rarity = "rarity", Strengthen = "level", Type = "type" } slot1 = { slot0.SortType.Rarity, slot0.SortType.Type, slot0.SortType.Strengthen } slot2 = { [slot0.SortType.Rarity] = "rarity", [slot0.SortType.Type] = "type", [slot0.SortType.Strengthen] = "strengthen" } slot0.SortOrder = { Descend = 0, Ascend = 1 } slot3 = { [slot0.SortOrder.Descend] = "word_desc", [slot0.SortOrder.Ascend] = "word_asc" } function slot0.SetEnv(slot0, slot1) slot0.env = slot1 end function slot0.GetAllPaths(slot0, slot1) slot2 = {} slot3 = { { slot1 } } while #slot3 > 0 do for slot9, slot10 in ipairs(EquipmentProxy.GetTransformSources(table.remove(slot3, 1)[1])) do slot11 = pg.equip_upgrade_data[slot10].upgrade_from slot12 = slot4[2] and Clone(slot4[2]) or {} table.insert(slot12, 1, slot10) table.insert(slot3, { slot11, slot12 }) if #slot0.env.tracebackHelper:GetSameTypeInEquips(slot11) > 0 then table.insertto(slot2, _.map(slot13, function (slot0) return { equipment = slot0, formulas = uv0 } end)) end end end return slot2 end function slot0.UpdateSourceEquipmentPaths(slot0) slot0.totalPaths = slot0:GetAllPaths(slot0.contextData.TargetEquipmentId) if slot0.contextData.sourceEquipmentInstance then slot0.contextData.sourceEquipmentInstance = _.detect(slot0.totalPaths, function (slot0) return EquipmentProxy.SameEquip(slot0.equipment, uv0.contextData.sourceEquipmentInstance) end) and slot1.equipment or nil end end function slot0.UpdateSort(slot0) for slot4, slot5 in ipairs(slot0.totalPaths) do slot5.isMaterialEnough = TransformEquipmentCommand.CheckEquipmentFormulasSucceed(slot5.formulas, slot5.equipment.id) end table.sort(slot0.totalPaths, function (slot0, slot1) if slot0.isMaterialEnough ~= slot1.isMaterialEnough then return slot0.isMaterialEnough else slot2 = uv0.contextData.sortType return (slot0.equipment.config[slot2] - slot1.equipment.config[slot2] ~= 0 and slot6 or slot0.equipment.id - slot1.equipment.id) * (uv0.contextData.sortOrder == uv1.SortOrder.Descend and 1 or -1) > 0 end end) setText(slot0.orderText, i18n(uv1[slot0.contextData.sortOrder])) slot0.loader:GetSprite("ui/equipmenttracebackui_atlas", uv2[slot0.contextData.sortType], slot0.sortImg) end function slot0.didEnter(slot0) function slot4() setActive(uv0.sortBar, not isActive(uv0.sortBar)) end onButton(slot0, slot0.sortBarBtn, slot4, SFX_PANEL) for slot4 = 1, slot0.sortBar.childCount do onButton(slot0, slot0.sortBar:GetChild(slot4 - 1), function () uv0.contextData.sortType = uv1[uv2] uv0:UpdateSort() uv0:UpdateSourceList() setActive(uv0.sortBar, false) end, SFX_PANEL) end onButton(slot0, slot0.sortOrderBtn, function () uv0.contextData.sortOrder = uv1.SortOrder.Ascend - uv0.contextData.sortOrder uv0:UpdateSort() uv0:UpdateSourceList() end, SFX_PANEL) onButton(slot0, slot0.cancelBtn, function () uv0:closeView() end, SFX_CANCEL) onButton(slot0, slot0.confirmBtn, function () if not uv0.contextData.sourceEquipmentInstance then pg.TipsMgr.GetInstance():ShowTips(i18n("equipment_upgrade_quick_interface_feedback_source_chosen")) return end if slot0.count == 0 or not TransformEquipmentCommand.CheckEquipmentFormulasSucceed(uv0.contextData.sourceEquipmentFormulaList, slot0.id) then pg.TipsMgr.GetInstance():ShowTips(i18n("equipment_upgrade_feedback_lack_of_materials")) return end if slot0.shipId ~= nil then pg.MsgboxMgr.GetInstance():ShowMsgBox({ content = i18n("equipment_upgrade_feedback_equipment_consume", getProxy(BayProxy):getShipById(slot0.shipId).name, slot0.config.name), onYes = function () uv0:emit(EquipmentTraceBackMediator.TRANSFORM_EQUIP, uv1, uv0.contextData.sourceEquipmentFormulaList) end }) return end uv0:emit(EquipmentTraceBackMediator.TRANSFORM_EQUIP, slot0, uv0.contextData.sourceEquipmentFormulaList) end, SFX_PANEL) slot0.contextData.sortOrder = slot0.contextData.sortOrder or uv1.SortOrder.Descend slot0.contextData.sortType = slot0.contextData.sortType or uv1.SortType.Rarity slot0:UpdateSourceEquipmentPaths() slot0:UpdateSort() slot0:UpdateSourceList() slot0:UpdateFormula() updateDrop(slot0.targetEquip, { type = DROP_TYPE_EQUIP, id = slot0.contextData.TargetEquipmentId }) pg.UIMgr.GetInstance():BlurPanel(slot0._tf, true) end function slot0.UpdateSourceList(slot0) slot0.lastSourceItem = nil UIItemList.StaticAlign(slot0.equipLayoutContent, slot0.equipLayoutContent:GetChild(0), #slot0.totalPaths, function (slot0, slot1, slot2) if slot0 == UIItemList.EventUpdate then uv0:UpdateSourceListItem(slot1, slot2) end end) Canvas.ForceUpdateCanvases() slot1 = slot0.equipLayoutContent.rect.height < slot0.equipLayout.rect.height slot0.equipLayout:GetComponent(typeof(ScrollRect)).enabled = not slot1 setActive(slot0.equipLayout:Find("Scrollbar"), not slot1) if slot1 then slot0.equipLayoutContent.anchoredPosition = Vector2.zero end end function slot0.UpdateSourceListItem(slot0, slot1, slot2) slot3 = slot0.totalPaths[slot1 + 1].equipment updateDrop(slot2:Find("Item"), { type = DROP_TYPE_EQUIP, id = slot3.id, count = slot3.count }) setText(slot2:Find("Item/icon_bg/count"), slot3.count) setActive(slot2:Find("EquipShip"), slot3.shipId) setActive(slot2:Find("Selected"), false) if slot3 == slot0.contextData.sourceEquipmentInstance then slot0.lastSourceItem = slot2 setActive(slot2:Find("Selected"), true) end if slot3.shipId then slot0.loader:GetSprite("qicon/" .. getProxy(BayProxy):getShipById(slot3.shipId):getPainting(), "", slot2:Find("EquipShip/Image")) end slot2:Find("Mask/NameText"):GetComponent(typeof(ScrollText)):SetText(slot3.config.name) onButton(slot0, slot2:Find("Item"), function () if uv0.lastSourceItem then setActive(uv0.lastSourceItem:Find("Selected"), false) end uv0.lastSourceItem = uv1 setActive(uv1:Find("Selected"), true) uv0.contextData.sourceEquipmentInstance = uv2 uv0.contextData.sourceEquipmentFormulaList = uv0.totalPaths[uv3 + 1].formulas uv0:UpdateFormula() end, SFX_PANEL) end function slot0.UpdatePlayer(slot0, slot1) slot0.player = slot1 slot0:UpdateConsumeComparer() end function slot0.UpdateConsume(slot0, slot1) slot0.consumeGold = slot1 slot0:UpdateConsumeComparer() end function slot0.UpdateConsumeComparer(slot0) slot0.goldText:GetComponent(typeof(Text)).text = setColorStr(slot0.consumeGold or 0, (slot0.player.gold or 0) >= (slot0.consumeGold or 0) and COLOR_WHITE or COLOR_RED) end function slot0.UpdateFormula(slot0) slot1 = slot0.contextData.sourceEquipmentInstance setActive(slot0.sourceEquipStatus, not slot1) setActive(slot0.sourceEquip, slot1) setActive(slot0.materialLayout, slot1) if slot1 then updateDrop(slot0.sourceEquip, { type = DROP_TYPE_EQUIP, id = slot1.id }) slot0.loader:GetSprite("ui/equipmenttracebackui_atlas", (not slot0.contextData.sourceEquipmentFormulaList or #slot2 <= 1) and "wire" or "wire2", slot0.formulaWire) slot0:UpdateFormulaMaterials() else slot0:UpdateConsume(0) end end function slot0.UpdateFormulaMaterials(slot0) if not slot0.contextData.sourceEquipmentFormulaList then return end slot1 = {} slot2 = 0 for slot6, slot7 in ipairs(slot0.contextData.sourceEquipmentFormulaList) do for slot12, slot13 in ipairs(pg.equip_upgrade_data[slot7].material_consume) do slot1[slot13[1]] = (slot1[slot13[1]] or 0) + slot13[2] end slot2 = slot2 + slot8.coin_consume end slot3 = {} for slot7, slot8 in pairs(slot1) do table.insert(slot3, { id = slot7, count = slot8 }) end table.sort(slot3, function (slot0, slot1) return slot1.id < slot0.id end) slot0.consumeMaterials = slot3 UIItemList.StaticAlign(slot0.materialLayoutContent, slot0.materialLayoutContent:GetChild(0), #slot0.consumeMaterials, function (slot0, slot1, slot2) if slot0 == UIItemList.EventUpdate then uv0:UpdateFormulaMaterialItem(slot1, slot2) end end) Canvas.ForceUpdateCanvases() slot4 = slot0.materialLayoutContent.rect.height < slot0.materialLayout.rect.height slot0.materialLayout:GetComponent(typeof(ScrollRect)).enabled = not slot4 setActive(slot0.materialLayout:Find("Scrollbar"), not slot4) if slot4 then slot0.materialLayoutContent.anchoredPosition = Vector2.zero end slot0:UpdateConsume(slot2) end function slot0.UpdateFormulaMaterialItem(slot0, slot1, slot2) slot3 = slot0.consumeMaterials[slot1 + 1] updateDrop(slot2:Find("Item"), { type = DROP_TYPE_ITEM, id = slot3.id }) setText(slot2:Find("Count"), setColorStr(slot3.count, slot3.count <= getProxy(BagProxy):getItemCountById(slot3.id) and COLOR_GREEN or COLOR_RED) .. "/" .. slot5) onButton(slot0, slot2:Find("Item"), function () uv0:emit(uv1.ON_DROP, uv2) end) end function slot0.willExit(slot0) slot0.loader:Clear() pg.UIMgr.GetInstance():UnblurPanel(slot0._tf) end return slot0