slot0 = class("FormationUI", import("..base.BaseUI")) slot0.RADIUS = 60 slot0.LONGPRESS_Y = 30 slot0.INTERVAL = math.pi / 2 / 6 slot0.MAX_FLEET_NUM = 6 slot0.MAX_SHIPP_NUM = 5 slot0.TOGGLE_DETAIL = "_detailToggle" slot0.TOGGLE_FORMATION = "_formationToggle" slot0.BUFF_TYEP = { blue = "blue", pink = "pink", cyan = "cyan" } slot0.TeamNum = { "FIRST", "SECOND", "THIRD", "FOURTH", "FIFTH", "SIXTH" } function slot0.getUIName(slot0) return "FormationUI" end function slot0.setPlayer(slot0, slot1) slot0.player = slot1 end function slot0.setCommanderPrefabFleet(slot0, slot1) slot0.commanderPrefabFleets = slot1 end function slot0.init(slot0) slot0.eventTriggers = {} slot0._blurLayer = slot0:findTF("blur_panel") slot0.backBtn = slot0:findTF("top/back_btn", slot0._blurLayer) slot0._bgFleet = slot0:findTF("bg_fleet") slot0._bgSub = slot0:findTF("bg_sub") slot0._bottomPanel = slot0:findTF("bottom", slot0._blurLayer) slot0._detailToggle = slot0:findTF("toggle_list/detail_toggle", slot0._bottomPanel) slot0._formationToggle = slot0:findTF("toggle_list/formation_toggle", slot0._bottomPanel) slot0._nextPage = slot0:findTF("nextPage") slot0._prevPage = slot0:findTF("prevPage") slot0._starTpl = slot0:findTF("star_tpl") slot0._heroInfoTpl = slot0:findTF("heroInfo") slot4 = slot0._blurLayer slot0.topPanel = slot0:findTF("top", slot4) slot0._gridTFs = { [TeamType.Vanguard] = {}, [TeamType.Main] = {}, [TeamType.Submarine] = {} } slot0._gridFrame = slot0:findTF("GridFrame") for slot4 = 1, 3 do slot0._gridTFs[TeamType.Main][slot4] = slot0._gridFrame:Find("main_" .. slot4) slot0._gridTFs[TeamType.Vanguard][slot4] = slot0._gridFrame:Find("vanguard_" .. slot4) slot0._gridTFs[TeamType.Submarine][slot4] = slot0._gridFrame:Find("submarine_" .. slot4) end slot0._heroContainer = slot0:findTF("HeroContainer") slot0._attachmentList = {} slot0._fleetInfo = slot0:findTF("fleet_info", slot0._blurLayer) slot0._fleetNumText = slot0:findTF("fleet_number", slot0._fleetInfo) slot0._fleetNameText = slot0:findTF("fleet_name/Text", slot0._fleetInfo) slot0._fleetNameEditBtn = slot0:findTF("edit_btn", slot0._fleetInfo) slot0._renamePanel = slot0:findTF("changeName_panel") slot0._renameConfirmBtn = slot0._renamePanel:Find("frame/queren") slot0._renameCancelBtn = slot0._renamePanel:Find("frame/cancel") setLocalPosition(slot0._renamePanel, { z = -45 }) slot0._propertyFrame = slot0:findTF("property_frame", slot0._blurLayer) slot0._cannonPower = slot0:findTF("cannon/Text", slot0._propertyFrame) slot0._torpedoPower = slot0:findTF("torpedo/Text", slot0._propertyFrame) slot0._AAPower = slot0:findTF("antiaircraft/Text", slot0._propertyFrame) slot0._airPower = slot0:findTF("air/Text", slot0._propertyFrame) slot0._airDominance = slot0:findTF("ac/Text", slot0._propertyFrame) slot0._cost = slot0:findTF("cost/Text", slot0._propertyFrame) slot0._mainGS = slot0:findTF("gear_score/main") slot0._vanguardGS = slot0:findTF("gear_score/vanguard") slot0._subGS = slot0:findTF("gear_score/submarine") slot0._arrUpVan = slot0._vanguardGS:Find("up") slot0._arrDownVan = slot0._vanguardGS:Find("down") slot0._arrUpMain = slot0._mainGS:Find("up") slot0._arrDownMain = slot0._mainGS:Find("down") slot0._arrUpSub = slot0._subGS:Find("up") slot0._arrDownSub = slot0._subGS:Find("down") slot0._attrFrame = slot0:findTF("blur_panel/attr_frame") slot0._cardTpl = slot0._tf:GetComponent(typeof(ItemList)).prefabItem[0] slot0._cards = { [TeamType.Main] = {}, [TeamType.Vanguard] = {}, [TeamType.Submarine] = {} } setActive(slot0._attrFrame, false) setActive(slot0._cardTpl, false) slot0.btnRegular = slot0:findTF("fleet_select/regular", slot0._bottomPanel) slot0._regularEnFllet = slot0:findTF("fleet/enFleet", slot0.btnRegular) slot0._regularNum = slot0:findTF("fleet/num", slot0.btnRegular) slot0._regualrCnFleet = slot0:findTF("fleet/CnFleet", slot0.btnRegular) slot0.btnSub = slot0:findTF("fleet_select/sub", slot0._bottomPanel) slot0._subEnFllet = slot0:findTF("fleet/enFleet", slot0.btnSub) slot0._subNum = slot0:findTF("fleet/num", slot0.btnSub) slot0._subCnFleet = slot0:findTF("fleet/CnFleet", slot0.btnSub) slot0.fleetToggleMask = slot0:findTF("blur_panel/list_mask") slot4 = slot0.fleetToggleMask slot0.fleetToggleList = slot0:findTF("list", slot4) slot0.fleetToggles = {} for slot4 = 1, uv0.MAX_FLEET_NUM do slot0.fleetToggles[slot4] = slot0:findTF("item" .. slot4, slot0.fleetToggleList) end slot0._vanGSTxt = slot0._vanguardGS:Find("Text"):GetComponent("Text") slot0._mainGSTxt = slot0._mainGS:Find("Text"):GetComponent("Text") slot0._subGSTxt = slot0._subGS:Find("Text"):GetComponent("Text") slot0.prevMainGS = slot0.contextData.mainGS slot0.prevVanGS = slot0.contextData.vanGS slot0.prevSubGS = slot0.contextData.subGS slot0.mainGSInited = slot0.contextData.mainGS and true or false slot0.VanGSInited = slot0.contextData.vanGS and true or false slot0.SubGSInited = slot0.contextData.subGS and true or false slot0._vanGSTxt.text = slot0.prevVanGS or 0 slot0._mainGSTxt.text = slot0.prevMainGS or 0 slot0._subGSTxt.text = slot0.prevSubGS or 0 slot0.commanderFormationPanel = CommanderFormationPage.New(slot0._tf, slot0.event, slot0.contextData) slot0.index = { [FleetType.Normal] = 1, [FleetType.Submarine] = 1 } end function slot0.setShips(slot0, slot1) slot0.shipVOs = slot1 end function slot0.SetFleets(slot0, slot1) slot0._fleetVOs = _(_.values(slot1)):chain():filter(function (slot0) return slot0:isRegularFleet() end):sort(function (slot0, slot1) return slot0.id < slot1.id end):value() if slot0._currentFleetVO then slot0._currentFleetVO = slot0:getFleetById(slot0._currentFleetVO.id) end end function slot0.getFleetById(slot0, slot1) return _.detect(slot0._fleetVOs, function (slot0) return slot0.id == uv0 end) end function slot0.UpdateFleetView(slot0, slot1) slot0:displayFleetInfo() slot0:updateFleetBg() slot0:updateGridVisibility() slot0:resetGrid(TeamType.Vanguard) slot0:resetGrid(TeamType.Main) slot0:resetGrid(TeamType.Submarine) slot0:resetFormationComponent() slot0:updateAttrFrame() slot0:updateFleetButton() if slot1 then slot0:loadAllCharacter() else slot0:setAllCharacterPos() end end function slot0.updateGridVisibility(slot0) slot1 = slot0._currentFleetVO:getFleetType() _.each(slot0._gridTFs[TeamType.Main], function (slot0) setActive(slot0, uv0 == FleetType.Normal) end) _.each(slot0._gridTFs[TeamType.Vanguard], function (slot0) setActive(slot0, uv0 == FleetType.Normal) end) _.each(slot0._gridTFs[TeamType.Submarine], function (slot0) setActive(slot0, uv0 == FleetType.Submarine) end) end function slot0.updateFleetBg(slot0) setActive(slot0._bgFleet, slot0._currentFleetVO:getFleetType() == FleetType.Normal) setActive(slot0._bgSub, slot1 == FleetType.Submarine) end function slot0.updateFleetButton(slot0) slot1 = nil slot2 = slot0._currentFleetVO:getFleetType() slot0.index[slot2] = slot0._currentFleetVO:getIndex() slot1 = slot0.index[FleetType.Normal] setText(slot0._regularEnFllet, uv0.TeamNum[slot1] .. " FLEET") setText(slot0._regualrCnFleet, Fleet.DEFAULT_NAME[slot1]) setText(slot0._regularNum, slot1) slot1 = slot0.index[FleetType.Submarine] setText(slot0._subEnFllet, uv0.TeamNum[slot1] .. " FLEET") setText(slot0._subCnFleet, Fleet.DEFAULT_NAME[slot1]) setText(slot0._subNum, slot1) setActive(slot0.btnRegular:Find("on"), slot2 == FleetType.Normal) setActive(slot0.btnRegular:Find("off"), slot2 ~= FleetType.Normal) setActive(slot0.btnSub:Find("on"), slot2 == FleetType.Submarine) setActive(slot0.btnSub:Find("off"), slot2 ~= FleetType.Submarine) end function slot0.SetFleetNameLabel(slot0) setText(slot0._fleetNameText, slot0.defaultFleetName(slot0._currentFleetVO)) end function slot0.quckExitFunc(slot0) if slot0._currentDragDelegate then slot0._forceDropCharacter = true LuaHelper.triggerEndDrag(slot0._currentDragDelegate) end slot0:emit(FormationMediator.COMMIT_FLEET, function () GetOrAddComponent(uv0._tf, typeof(CanvasGroup)).interactable = false uv0:emit(uv1.ON_HOME) end) end function slot0.didEnter(slot0) slot0.isOpenCommander = pg.SystemOpenMgr.GetInstance():isOpenSystem(slot0.player.level, "CommandRoomMediator") and not LOCK_COMMANDER onButton(slot0, slot0.backBtn, function () if uv0._currentDragDelegate then uv0._forceDropCharacter = true LuaHelper.triggerEndDrag(uv0._currentDragDelegate) end if uv0._attrFrame.gameObject.activeSelf then triggerToggle(uv0._formationToggle, true) else uv0:emit(FormationMediator.COMMIT_FLEET, function () GetOrAddComponent(uv0._tf, typeof(CanvasGroup)).interactable = false uv0:emit(uv1.ON_BACK) end) end end, SOUND_BACK) setActive(slot0:findTF("stamp"), BATTLE_DEBUG or getProxy(TaskProxy):mingshiTouchFlagEnabled()) if LOCK_CLICK_MINGSHI then setActive(slot0:findTF("stamp"), false) end onButton(slot0, slot0:findTF("stamp"), function () if BATTLE_DEBUG then print(uv0._currentFleetVO:genRobotDataString()) end getProxy(TaskProxy):dealMingshiTouchFlag(6) end, SFX_CONFIRM) onButton(slot0, slot0._fleetNameEditBtn, function () uv0:DisplayRenamePanel(true) end, SFX_PANEL) onButton(slot0, slot0._renameConfirmBtn, function () uv0:emit(FormationMediator.CHANGE_FLEET_NAME, uv0._currentFleetVO.id, getInputText(findTF(uv0._renamePanel, "frame/name_field"))) end, SFX_CONFIRM) onButton(slot0, slot0._renameCancelBtn, function () uv0:DisplayRenamePanel(false) end, SFX_CANCEL) onToggle(slot0, slot0._detailToggle, function (slot0) if uv0._currentDragDelegate then uv0._forceDropCharacter = true LuaHelper.triggerEndDrag(uv0._currentDragDelegate) end if slot0 then uv0:displayAttrFrame() end end, SFX_PANEL) onToggle(slot0, slot0._formationToggle, function (slot0) if uv0._currentDragDelegate then uv0._forceDropCharacter = true LuaHelper.triggerEndDrag(uv0._currentDragDelegate) end if slot0 then uv0:hideAttrFrame() end end, SFX_PANEL) onButton(slot0, slot0._attrFrame, function () triggerToggle(uv0._formationToggle, true) end, SFX_PANEL) onButton(slot0, slot0.fleetToggleMask, function () setActive(uv0.fleetToggleMask, false) uv0:tweenTabArrow(true) end, SFX_CANCEL) onButton(slot0, slot0.btnRegular, function () uv0:updateToggleList(_.filter(uv0._fleetVOs, function (slot0) return slot0:getFleetType() == FleetType.Normal end)) triggerToggle(uv0.fleetToggles[uv0.index[FleetType.Normal]], true) if uv0._currentFleetVO:getFleetType() == FleetType.Normal then setActive(uv0.fleetToggleMask, true) uv0:tweenTabArrow(false) setAnchoredPosition(uv0.fleetToggleList, Vector3.New(209, 129)) end end, SFX_PANEL) onButton(slot0, slot0.btnSub, function () uv0:updateToggleList(_.filter(uv0._fleetVOs, function (slot0) return slot0:getFleetType() == FleetType.Submarine end)) triggerToggle(uv0.fleetToggles[uv0.index[FleetType.Submarine]], true) if uv0._currentFleetVO:getFleetType() == FleetType.Submarine then setActive(uv0.fleetToggleMask, true) uv0:tweenTabArrow(false) setAnchoredPosition(uv0.fleetToggleList, Vector3.New(755, 129)) end end, SFX_PANEL) onButton(slot0, slot0._prevPage, function () slot0 = uv0:selectFleetByStep(-1) if uv0._currentDragDelegate then uv0._forceDropCharacter = true LuaHelper.triggerEndDrag(uv0._currentDragDelegate) end uv0:emit(FormationMediator.ON_CHANGE_FLEET, slot0) end, SFX_PANEL) onButton(slot0, slot0._nextPage, function () slot0 = uv0:selectFleetByStep(1) if uv0._currentDragDelegate then uv0._forceDropCharacter = true LuaHelper.triggerEndDrag(uv0._currentDragDelegate) end uv0:emit(FormationMediator.ON_CHANGE_FLEET, slot0) end, SFX_PANEL) slot0:SetCurrentFleetID(defaultValue(slot0.contextData.number, 1)) if slot0.isOpenCommander then slot0.commanderFormationPanel:ActionInvoke("Show") end slot0:UpdateFleetView(true) triggerToggle(slot0[slot0.contextData.toggle or uv0.TOGGLE_FORMATION], true) slot0:tweenTabArrow(true) onButton(slot0, slot0._vanguardGS:Find("SonarTip"), function () pg.MsgboxMgr.GetInstance():ShowMsgBox({ type = MSGBOX_TYPE_HELP, helps = pg.gametip.fleet_antisub_range_tip.tip }) end, SFX_PANEL) end function slot0.SetCurrentFleetID(slot0, slot1) slot0._currentFleetVO = slot0:getFleetById(slot1) slot0:updateCommanderFormation() end function slot0.updateCommanderFormation(slot0) if slot0.isOpenCommander then slot0.commanderFormationPanel:ActionInvoke("Update", slot0._currentFleetVO, slot0.commanderPrefabFleets) slot0.commanderFormationPanel:Load() end end function slot0.selectFleetByStep(slot0, slot1) slot2 = table.indexof(slot0._fleetVOs, slot0._currentFleetVO) while true do if slot2 + slot1 < 1 or slot2 > #slot0._fleetVOs then break end if slot0._fleetVOs[slot2]:isUnlock() then return slot3.id end end end function slot0.updateToggleList(slot0, slot1) slot0.fleetToggleList:GetComponent(typeof(ToggleGroup)).allowSwitchOff = true slot3 = slot0._currentFleetVO.id for slot7 = 1, #slot0.fleetToggles do slot9 = slot1[slot7] setActive(slot0.fleetToggles[slot7], slot9) if slot9 then slot12, slot13 = slot9:isUnlock() setToggleEnabled(slot8, slot12) setActive(slot8:Find("lock"), not slot12) setActive(slot8:Find("on"), slot12 and slot3 == slot9.id) setActive(slot8:Find("off"), slot12 and slot3 ~= slot9.id) if slot12 then slot8:GetComponent(typeof(Toggle)).isOn = slot9.id == slot3 onToggle(slot0, slot8, function (slot0) if slot0 then setActive(uv0.fleetToggleMask, false) uv0:tweenTabArrow(true) if uv1.id ~= uv2 then if uv0._currentDragDelegate then uv0._forceDropCharacter = true LuaHelper.triggerEndDrag(uv0._currentDragDelegate) end uv0:emit(FormationMediator.ON_CHANGE_FLEET, uv1.id) end end end, SFX_UI_TAG) else onButton(slot0, slot11, function () pg.TipsMgr.GetInstance():ShowTips(uv0) end, SFX_UI_CLICK) end end end slot2.allowSwitchOff = false end function slot0.loadAllCharacter(slot0) removeAllChildren(slot0._heroContainer) slot0._characterList = { [TeamType.Vanguard] = {}, [TeamType.Main] = {}, [TeamType.Submarine] = {} } slot2 = getProxy(ActivityProxy):getBuffShipList() function slot3(slot0, slot1, slot2, slot3) if uv0.exited then return end slot5 = tf(Instantiate(uv0._heroInfoTpl)) slot5.name = slot0.name slot5:SetParent(uv0._heroContainer, false) SetActive(slot5, true) slot6 = findTF(slot5, "info") slot8 = findTF(slot6, "energy") for slot13 = 1, uv0.shipVOs[slot1]:getStar() do cloneTplTo(uv0._starTpl, findTF(slot6, "stars")) end if not GetSpriteFromAtlas("shiptype", shipType2print(slot4:getShipType())) then warning("找不到船形, shipConfigId: " .. slot4.configId) end setImageSprite(findTF(slot6, "type"), slot10, true) if slot4.energy <= Ship.ENERGY_MID then setImageSprite(slot8, GetSpriteFromAtlas("energy", slot4:getEnergyPrint())) setActive(slot8, true) end setText(findTF(slot6, "frame/lv_contain/lv"), slot4.level) setActive(slot6:Find("expbuff"), uv1[slot4:getGroupId()] ~= nil) if slot11 then if slot11 % 100 > 0 then slot15 = tostring(slot11 / 100) .. "." .. tostring(slot14) end setText(slot12:Find("text"), string.format("EXP +%s%%", slot15)) end tf(slot0):SetParent(slot5, false) slot0.name = "model" slot0:GetComponent("SkeletonGraphic").raycastTarget = false for slot18, slot19 in pairs(slot4:getAttachmentPrefab()) do if slot19.attachment_combat_ui[1] ~= "" then ResourceMgr.Inst:getAssetAsync("Effect/" .. slot20, slot20, UnityEngine.Events.UnityAction_UnityEngine_Object(function (slot0) if not uv0.exited then slot1 = Object.Instantiate(slot0) uv0._attachmentList[#uv0._attachmentList + 1] = slot1 tf(slot1):SetParent(tf(uv1)) tf(slot1).localPosition = BuildVector3(uv2.attachment_combat_ui[2]) end end), true, true) end end slot13.localScale = Vector3(0.8, 0.8, 1) pg.ViewUtils.SetLayer(slot13, Layer.UI) slot6:SetSiblingIndex(2) uv0._characterList[slot2][slot3] = slot5 slot16 = GameObject("mouseChild") tf(slot16):SetParent(tf(slot0)) tf(slot16).localPosition = Vector3.zero slot17 = GetOrAddComponent(slot16, "ModelDrag") slot18 = GetOrAddComponent(slot16, "UILongPressTrigger") slot19 = GetOrAddComponent(slot16, "EventTriggerListener") uv0.eventTriggers[slot19] = true slot17:Init() slot20 = slot16:GetComponent(typeof(RectTransform)) slot20.sizeDelta = Vector2(3, 3) slot20.pivot = Vector2(0.5, 0) slot20.anchoredPosition = Vector2(0, 0) slot18.longPressThreshold = 1 pg.DelegateInfo.Add(uv0, slot18.onLongPressed) slot18.onLongPressed:AddListener(function () uv0:emit(FormationMediator.OPEN_SHIP_INFO, uv1.id, uv0._currentFleetVO, uv2.TOGGLE_FORMATION) pg.CriMgr.GetInstance():PlaySoundEffect_V3(SFX_PANEL) end) slot21, slot22, slot23, slot24 = nil pg.DelegateInfo.Add(uv0, slot17.onModelClick) slot17.onModelClick:AddListener(function () uv0:emit(FormationMediator.CHANGE_FLEET_SHIP, uv1, uv0._currentFleetVO, uv2.TOGGLE_FORMATION, uv3) pg.CriMgr.GetInstance():PlaySoundEffect_V3(SFX_PANEL) end) slot19:AddBeginDragFunc(function () if uv0._modelDrag then return end uv0._modelDrag = uv1 uv0._currentDragDelegate = uv2 uv3 = rtf(uv0._tf).rect.width / UnityEngine.Screen.width uv4 = rtf(uv0._tf).rect.height / UnityEngine.Screen.height uv5 = rtf(uv0._heroContainer).rect.width / 2 uv6 = rtf(uv0._heroContainer).rect.height / 2 LeanTween.cancel(uv1) uv7:SetAsLastSibling() uv0:switchToShiftMode(uv7, uv8) SetAction(go(uv1), "tuozhuai") SetActive(uv9, false) pg.CriMgr.GetInstance():PlaySoundEffect_V3(SFX_UI_HOME_DRAG) end) slot19:AddDragFunc(function (slot0, slot1) if uv0._modelDrag ~= uv1 then return end uv2.localPosition = Vector3(slot1.position.x * uv3 - uv4, slot1.position.y * uv5 - uv6, -22) end) slot19:AddDragEndFunc(function (slot0, slot1) if uv0._modelDrag ~= uv1 then return end uv0._modelDrag = nil uv0._forceDropCharacter = nil uv0._currentDragDelegate = nil SetAction(uv1, "stand") SetActive(uv2, true) if uv0._forceDropCharacter then function () uv0:switchToDisplayMode() uv0:sortSiblingIndex() uv0:emit(FormationMediator.CHANGE_FLEET_SHIPS_ORDER, uv0._currentFleetVO) end() return end if slot1.position.x < UnityEngine.Screen.width * 0.15 or slot1.position.x > UnityEngine.Screen.width * 0.87 or slot1.position.y < UnityEngine.Screen.height * 0.18 or slot1.position.y > UnityEngine.Screen.height * 0.7 then if not uv0._currentFleetVO:canRemove(uv3) then slot4, slot5 = uv0._currentFleetVO:getShipPos(uv3) pg.TipsMgr.GetInstance():ShowTips(i18n("ship_formationUI_removeError_onlyShip", uv3:getConfigTable().name, uv0._currentFleetVO.name, Fleet.C_TEAM_NAME[slot5])) slot3() else pg.MsgboxMgr.GetInstance():ShowMsgBox({ hideNo = false, zIndex = -30, content = i18n("ship_formationUI_quest_remove", uv3:getName()), onYes = function () for slot3, slot4 in ipairs(uv0) do if slot4 == uv1 then Object.Destroy(uv2.gameObject) uv3.name = uv1.name PoolMgr.GetInstance():ReturnSpineChar(uv4:getPrefab(), uv3) table.remove(uv0, slot3) break end end uv5:switchToDisplayMode() uv5:sortSiblingIndex() uv5:emit(FormationMediator.REMOVE_SHIP, uv4, uv5._currentFleetVO) end, onNo = slot3 }) end else slot3() end pg.CriMgr.GetInstance():PlaySoundEffect_V3(SFX_UI_HOME_PUT) end) uv0:setCharacterPos(slot2, slot3, slot5) end slot4 = {} function slot5(slot0, slot1) for slot5, slot6 in ipairs(slot0) do slot7 = uv0.shipVOs[slot6]:getPrefab() table.insert(uv1, function (slot0) PoolMgr.GetInstance():GetSpineChar(uv0, true, function (slot0) uv0(slot0, uv1, uv2, uv3) uv4() end) end) end end if slot0._currentFleetVO:getFleetType() == FleetType.Normal then slot5(slot0._currentFleetVO.vanguardShips, TeamType.Vanguard) slot5(slot0._currentFleetVO.mainShips, TeamType.Main) elseif slot6 == FleetType.Submarine then slot5(slot0._currentFleetVO.subShips, TeamType.Submarine) end if #slot4 > 0 then pg.UIMgr.GetInstance():LoadingOn() end parallelAsync(slot4, function (slot0) pg.UIMgr.GetInstance():LoadingOff() if uv0.exited then return end uv0:sortSiblingIndex() end) end function slot0.setAllCharacterPos(slot0) _.each({ TeamType.Main, TeamType.Vanguard, TeamType.Submarine }, function (slot0) for slot4, slot5 in ipairs(uv0._characterList[slot0]) do uv0:setCharacterPos(slot0, slot4, slot5) end end) end function slot0.setCharacterPos(slot0, slot1, slot2, slot3) slot4 = findTF(slot3, "model") SetActive(slot4, true) slot5 = slot0._gridTFs[slot1][slot2] slot6 = slot5.localPosition LeanTween.cancel(go(slot4)) slot3.localPosition = Vector3(slot6.x, slot6.y, -15 + slot6.z + slot2) slot4.localPosition = Vector3(0, 20, 0) LeanTween.moveY(slot4, 0, 0.5):setDelay(0.5) SetActive(slot5:Find("shadow"), true) SetAction(slot4, "stand") end function slot0.resetGrid(slot0, slot1) slot2 = slot0._currentFleetVO:getTeamByName(slot1) for slot7, slot8 in ipairs(slot0._gridTFs[slot1]) do SetActive(slot8:Find("shadow"), false) SetActive(slot8:Find("tip"), false) end if slot1 == TeamType.Main and #slot0._currentFleetVO:getTeamByName(TeamType.Vanguard) == 0 then return end if #slot2 < 3 then slot6 = slot3[slot4 + 1]:Find("tip") slot6:GetComponent("Button").enabled = true onButton(slot0, slot6, function () uv0:emit(FormationMediator.CHANGE_FLEET_SHIP, nil, uv0._currentFleetVO, uv1.TOGGLE_FORMATION, uv2) end, SFX_UI_FORMATION_ADD) slot6.localScale = Vector3(0, 0, 1) SetActive(slot6, true) LeanTween.value(go(slot6), 0, 1, 1):setOnUpdate(System.Action_float(function (slot0) uv0.localScale = Vector3(slot0, slot0, 1) end)):setEase(LeanTweenType.easeOutBack) end end function slot0.resetFormationComponent(slot0) SetActive(slot0._gridTFs.main[1]:Find("flag"), #slot0._currentFleetVO:getTeamByName(TeamType.Main) ~= 0) SetActive(slot0._gridTFs.submarine[1]:Find("flag"), #slot0._currentFleetVO:getTeamByName(TeamType.Submarine) ~= 0) end function slot0.switchToShiftMode(slot0, slot1, slot2) for slot6 = 1, 3 do _.each({ TeamType.Vanguard, TeamType.Main, TeamType.Submarine }, function (slot0) setActive(uv0._gridTFs[slot0][uv1]:Find("tip"), false) end) setActive(slot0._gridTFs[slot2][slot6]:Find("shadow"), false) end for slot7, slot8 in ipairs(slot0._characterList[slot2]) do slot9 = findTF(slot8, "model") if slot8 ~= slot1 then LeanTween.moveY(rtf(slot9), slot9.localPosition.y + 20, 0.5) slot10 = tf(slot9):Find("mouseChild"):GetComponent("EventTriggerListener") slot0.eventTriggers[slot10] = true slot10:AddPointEnterFunc(function () for slot3, slot4 in ipairs(uv0) do if slot4 == uv1 then uv2:shift(uv2._shiftIndex, slot3, uv3) break end end end) else slot0._shiftIndex = slot7 tf(slot9):Find("mouseChild"):GetComponent(typeof(Image)).enabled = false end SetAction(slot9, "normal") end end function slot0.switchToDisplayMode(slot0) function slot1(slot0) for slot4, slot5 in ipairs(slot0) do if tf(findTF(slot5, "model")):Find("mouseChild") then if slot7:GetComponent("EventTriggerListener") then slot8:RemovePointEnterFunc() end if slot4 == uv0._shiftIndex then slot7:GetComponent(typeof(Image)).enabled = true end end end end slot1(slot0._characterList[TeamType.Vanguard]) slot1(slot0._characterList[TeamType.Main]) slot1(slot0._characterList[TeamType.Submarine]) slot0._shiftIndex = nil end function slot0.shift(slot0, slot1, slot2, slot3) slot4 = slot0._characterList[slot3] slot6 = slot0._currentFleetVO:getTeamByName(slot3) slot7 = slot4[slot2] slot10 = slot0._gridTFs[slot3][slot1].localPosition slot7.localPosition = Vector3(slot10.x, slot10.y + 20, -15 + slot10.z + slot1) LeanTween.cancel(go(findTF(slot7, "model"))) slot4[slot2] = slot4[slot1] slot4[slot1] = slot4[slot2] slot6[slot2] = slot6[slot1] slot6[slot1] = slot6[slot2] if #slot0._cards[slot3] > 0 then slot11[slot2] = slot11[slot1] slot11[slot1] = slot11[slot2] end slot0._shiftIndex = slot2 end function slot0.sortSiblingIndex(slot0) slot1 = 0 for slot6, slot7 in ipairs({ 2, 1, 3 }) do if slot0._characterList[TeamType.Main][slot7] then tf(slot8):SetSiblingIndex(slot1) slot1 = slot1 + 1 end end slot3 = 3 while slot3 > 0 do if slot0._characterList[TeamType.Vanguard][slot3] then tf(slot4):SetSiblingIndex(slot1) slot1 = slot1 + 1 end slot3 = slot3 - 1 end slot3 = 3 while slot3 > 0 do if slot0._characterList[TeamType.Submarine][slot3] then tf(slot4):SetSiblingIndex(slot1) slot1 = slot1 + 1 end slot3 = slot3 - 1 end _.each({ TeamType.Main, TeamType.Vanguard, TeamType.Submarine }, function (slot0) if #uv0._cards[slot0] > 0 then for slot5 = 1, #slot1 do slot1[slot5].tr:SetSiblingIndex(slot5) end end end) end function slot0.displayFleetInfo(slot0) SetActive(slot0._prevPage, slot0:selectFleetByStep(-1)) SetActive(slot0._nextPage, slot0:selectFleetByStep(1)) setActive(slot0:findTF("gear_score"), true) setActive(slot0._vanguardGS, false) setActive(slot0._mainGS, false) setActive(slot0._subGS, false) slot1 = slot0._currentFleetVO:GetPropertiesSum() slot2 = math.floor(slot0._currentFleetVO:GetGearScoreSum(TeamType.Vanguard)) slot3 = math.floor(slot0._currentFleetVO:GetGearScoreSum(TeamType.Main)) slot4 = math.floor(slot0._currentFleetVO:GetGearScoreSum(TeamType.Submarine)) slot0.tweenNumText(slot0._cannonPower, slot1.cannon) slot0.tweenNumText(slot0._torpedoPower, slot1.torpedo) slot0.tweenNumText(slot0._AAPower, slot1.antiAir) slot0.tweenNumText(slot0._airPower, slot1.air) slot0.tweenNumText(slot0._cost, slot0._currentFleetVO:GetCostSum().oil) if OPEN_AIR_DOMINANCE then setActive(slot0._airDominance.parent, true) slot0.tweenNumText(slot0._airDominance, slot0._currentFleetVO:getFleetAirDominanceValue()) else setActive(slot0._airDominance.parent, false) end if slot0._currentFleetVO:getFleetType() == FleetType.Normal then setActive(slot0._vanguardGS, true) setActive(slot0._mainGS, true) setActive(slot0._arrUpVan, false) setActive(slot0._arrDownVan, false) setActive(slot0._arrUpMain, false) setActive(slot0._arrDownMain, false) slot0.prevVanGS = tonumber(slot0._vanGSTxt.text) slot0.tweenNumText(slot0._vanguardGS:Find("Text"), slot2) if slot0.VanGSInited then setActive(slot0._arrUpVan, slot0.prevVanGS < slot2) setActive(slot0._arrDownVan, slot2 < slot0.prevVanGS) end slot0.prevMainGS = tonumber(slot0._mainGSTxt.text) slot0.tweenNumText(slot0._mainGS:Find("Text"), slot3) if slot0.mainGSInited then setActive(slot0._arrUpMain, slot0.prevMainGS < slot3) setActive(slot0._arrDownMain, slot3 < slot0.prevMainGS) end slot0.contextData.mainGS = slot3 slot0.contextData.vanGS = slot2 slot0.mainGSInited = true slot0.VanGSInited = true setActive(slot0._vanguardGS:Find("SonarActive"), slot0._currentFleetVO:GetFleetSonarRange() > 0) setActive(slot0._vanguardGS:Find("SonarInactive"), slot7 <= 0) if slot7 > 0 then setText(slot0._vanguardGS:Find("SonarActive/Text"), math.floor(slot7)) onButton(slot0, slot0._vanguardGS:Find("SonarActive"), function () pg.MsgboxMgr.GetInstance():ShowMsgBox({ type = MSGBOX_TYPE_HELP, helps = pg.gametip.fleet_antisub_range_tip.tip }) end, SFX_PANEL) else onButton(slot0, slot0._vanguardGS:Find("SonarInactive"), slot8, SFX_PANEL) end elseif slot6 == FleetType.Submarine then setActive(slot0._arrUpSub, false) setActive(slot0._arrDownSub, false) setActive(slot0._subGS, true) slot0.prevSubGS = tonumber(slot0._subGSTxt.text) slot0.tweenNumText(slot0._subGS:Find("Text"), slot4) if slot0.SubGSInited then setActive(slot0._arrUpSub, slot0.prevSubGS < slot4) setActive(slot0._arrDownSub, slot4 < slot0.prevSubGS) end slot0.contextData.subGS = slot4 slot0.SubGSInited = true end slot0:SetFleetNameLabel() setText(slot0._fleetNumText, slot0._currentFleetVO:getIndex()) end function slot0.DisplayRenamePanel(slot0, slot1) SetActive(slot0._renamePanel, slot1) if slot1 then pg.UIMgr.GetInstance():BlurPanel(slot0._renamePanel, false) setInputText(findTF(slot0._renamePanel, "frame/name_field"), getText(slot0._fleetNameText)) else pg.UIMgr.GetInstance():UnblurPanel(slot0._renamePanel, slot0._tf) end if slot1 then slot0.commanderFormationPanel:ActionInvoke("Hide") else slot0.commanderFormationPanel:ActionInvoke("Show") end end function slot0.hideAttrFrame(slot0) SetActive(slot0._attrFrame, false) pg.UIMgr.GetInstance():UnblurPanel(slot0._blurLayer, slot0._tf) if slot0.isOpenCommander then slot0.commanderFormationPanel:ActionInvoke("Show") end end function slot0.displayAttrFrame(slot0) pg.UIMgr.GetInstance():BlurPanel(slot0._blurLayer, false) SetActive(slot0._attrFrame, true) slot0:initAttrFrame() if slot0.isOpenCommander then slot0.commanderFormationPanel:ActionInvoke("Hide") end end function slot0.initAttrFrame(slot0) slot2 = false for slot6, slot7 in pairs({ [TeamType.Main] = slot0._currentFleetVO.mainShips, [TeamType.Vanguard] = slot0._currentFleetVO.vanguardShips, [TeamType.Submarine] = slot0._currentFleetVO.subShips }) do if #slot0._cards[slot6] == 0 then for slot13 = 1, 3 do table.insert(slot8, FormationDetailCard.New(cloneTplTo(slot0._cardTpl, slot0:findTF(slot6 .. "/list", slot0._attrFrame)).gameObject)) end slot2 = true end end if slot2 then slot0:updateAttrFrame() end end function slot0.updateAttrFrame(slot0) slot2 = slot0._currentFleetVO:getFleetType() for slot6, slot7 in pairs({ [TeamType.Main] = slot0._currentFleetVO.mainShips, [TeamType.Vanguard] = slot0._currentFleetVO.vanguardShips, [TeamType.Submarine] = slot0._currentFleetVO.subShips }) do if #slot0._cards[slot6] > 0 then slot9 = slot2 == FleetType.Submarine and slot6 == TeamType.Vanguard for slot13 = 1, 3 do if slot13 <= #slot7 then slot14 = slot0.shipVOs[slot7[slot13]] slot8[slot13]:update(slot14, slot9) slot8[slot13]:updateProps(slot0:getCardAttrProps(slot14)) else slot8[slot13]:update(nil, slot9) end slot0:detachOnCardButton(slot8[slot13]) if not slot9 then slot0:attachOnCardButton(slot8[slot13], slot6) end end end end setActive(slot0:findTF(TeamType.Main, slot0._attrFrame), slot2 == FleetType.Normal) setActive(slot0:findTF(TeamType.Submarine, slot0._attrFrame), slot2 == FleetType.Submarine) setActive(slot0:findTF(TeamType.Vanguard .. "/vanguard", slot0._attrFrame), slot2 ~= FleetType.Submarine) slot0:updateUltimateTitle() end function slot0.updateUltimateTitle(slot0) slot2 = slot0._currentFleetVO.mainShips if #slot0._cards[TeamType.Main] > 0 then for slot6 = 1, #slot1 do go(slot1[slot6].shipState):SetActive(slot6 == 1) end end end function slot0.getCardAttrProps(slot0, slot1) return { { i18n("word_attr_durability"), tostring(math.floor(slot1:getProperties().durability)) }, { i18n("word_attr_luck"), "" .. tostring(math.floor(slot1:getBattleTotalExpend())) }, { i18n("word_synthesize_power"), "" .. math.floor(slot1:getShipCombatPower()) .. "" } } end function slot0.detachOnCardButton(slot0, slot1) slot2 = GetOrAddComponent(slot1.go, "EventTriggerListener") slot2:RemovePointClickFunc() slot2:RemoveBeginDragFunc() slot2:RemoveDragFunc() slot2:RemoveDragEndFunc() end function slot0.attachOnCardButton(slot0, slot1, slot2) slot3 = GetOrAddComponent(slot1.go, "EventTriggerListener") slot0.eventTriggers[slot3] = true slot3:AddPointClickFunc(function (slot0, slot1) if not uv0.carddrag and slot0 == uv1.go then if uv1.shipVO then uv0:emit(FormationMediator.OPEN_SHIP_INFO, uv1.shipVO.id, uv0._currentFleetVO, uv2.TOGGLE_DETAIL) else uv0:emit(FormationMediator.CHANGE_FLEET_SHIP, uv1.shipVO, uv0._currentFleetVO, uv2.TOGGLE_DETAIL, uv3) end pg.CriMgr.GetInstance():PlaySoundEffect_V3(SFX_PANEL) end end) if slot1.shipVO then slot4 = slot0._cards[slot2] slot5 = slot1.tr.parent:GetComponent("ContentSizeFitter") slot6 = slot1.tr.parent:GetComponent("HorizontalLayoutGroup") slot7 = slot1.tr.rect.width * 0.5 slot8 = nil slot9 = 0 slot10 = {} function slot12() for slot3 = 1, #uv0 do uv0[slot3].tr.anchoredPosition = uv1[slot3] end end slot13 = Timer.New(function () for slot3 = 1, #uv0 do if uv0[slot3] and uv0[slot3] ~= uv1 then uv0[slot3].tr.anchoredPosition = uv0[slot3].tr.anchoredPosition * 0.5 + Vector2(uv2[slot3].x, uv2[slot3].y) * 0.5 end end if uv3 and uv4 <= Time.realtimeSinceStartup then uv5:OnDrag(uv3) uv3 = nil end end, 0.03333333333333333, -1) slot3:AddBeginDragFunc(function () if uv0.carddrag then return end uv0._currentDragDelegate = uv1 uv0.carddrag = uv2 uv3.enabled = false uv4.enabled = false uv2.tr:SetSiblingIndex(#uv5) for slot3 = 1, #uv5 do if uv5[slot3] == uv2 then uv0._shiftIndex = slot3 end uv6[slot3] = uv5[slot3].tr.anchoredPosition end uv7:Start() LeanTween.scale(uv2.paintingTr, Vector3(1.1, 1.1, 0), 0.3) end) slot3:AddDragFunc(function (slot0, slot1) if uv0.carddrag ~= uv1 then return end slot2 = uv1.tr.localPosition slot2.x = uv0:change2ScrPos(uv1.tr.parent, slot1.position).x uv1.tr.localPosition = slot2 if Time.realtimeSinceStartup < uv2 then uv3 = slot1 return end slot3 = 1 for slot7 = 1, #uv4 do if uv4[slot7] ~= uv1 and uv4[slot7].shipVO and uv1.tr.localPosition.x > uv4[slot7].tr.localPosition.x + (slot3 < uv0._shiftIndex and 1.1 or -1.1) * uv5 then slot3 = slot3 + 1 end end if uv0._shiftIndex ~= slot3 then uv0:shift(uv0._shiftIndex, slot3, uv6) uv2 = Time.realtimeSinceStartup + 0.15 end end) slot3:AddDragEndFunc(function (slot0, slot1) if uv0.carddrag ~= uv1 then return end function resetCard() uv0() uv1.enabled = true uv2.enabled = true uv3._shiftIndex = nil uv4:Stop() uv3:updateUltimateTitle() uv3:sortSiblingIndex() uv3:emit(FormationMediator.CHANGE_FLEET_SHIPS_ORDER, uv3._currentFleetVO) uv5.enabled = true uv3.carddrag = nil end uv0._forceDropCharacter = nil uv0._currentDragDelegate = nil uv6.enabled = false if uv0._forceDropCharacter then resetCard() uv1.paintingTr.localScale = Vector3(1, 1, 0) else LeanTween.value(uv1.go, uv1.tr.anchoredPosition.x, uv7[uv0._shiftIndex].x, math.min(math.abs(uv1.tr.anchoredPosition.x - uv7[uv0._shiftIndex].x) / 200, 1) * 0.3):setEase(LeanTweenType.easeOutCubic):setOnUpdate(System.Action_float(function (slot0) slot1 = uv0.tr.anchoredPosition slot1.x = slot0 uv0.tr.anchoredPosition = slot1 end)):setOnComplete(System.Action(function () resetCard() LeanTween.scale(uv0.paintingTr, Vector3(1, 1, 0), 0.3) end)) end end) end end function slot0.change2ScrPos(slot0, slot1, slot2) return LuaHelper.ScreenToLocal(slot1, slot2, GameObject.Find("OverlayCamera"):GetComponent("Camera")) end function slot0.tweenNumText(slot0, slot1, slot2, slot3, slot4) LeanTween.value(go(slot0), slot4 or 0, math.floor(slot1), slot2 or 0.7):setOnUpdate(System.Action_float(function (slot0) setText(uv0, math.floor(slot0)) end)):setOnComplete(System.Action(function () if uv0 then uv0() end end)) end function slot0.defaultFleetName(slot0) if slot0.name == "" or slot0.name == nil then return Fleet.DEFAULT_NAME[slot0.id] else return slot0.name end end function slot0.GetFleetCount(slot0) for slot5, slot6 in pairs(slot0._fleetVOs) do slot1 = 0 + 1 end return slot1 end function slot0.tweenTabArrow(slot0, slot1) setActive(slot0.btnRegular:Find("arr"), slot1) setActive(slot0.btnSub:Find("arr"), slot1) if slot1 then LeanTween.moveLocalY(go(slot2), slot2.localPosition.y + 8, 0.8):setEase(LeanTweenType.easeInOutSine):setLoopPingPong(-1) LeanTween.moveLocalY(go(slot3), slot3.localPosition.y + 8, 0.8):setEase(LeanTweenType.easeInOutSine):setLoopPingPong(-1) else LeanTween.cancel(go(slot2)) LeanTween.cancel(go(slot3)) slot4 = slot2.localPosition slot4.y = 80 slot2.localPosition = slot4 slot5 = slot3.localPosition slot5.y = 80 slot3.localPosition = slot5 end end function slot0.recycleCharacterList(slot0, slot1, slot2) for slot6, slot7 in ipairs(slot1) do if slot2[slot6] then if findTF(slot2[slot6], "model") then slot8.name = slot2[slot6].name PoolMgr.GetInstance():ReturnSpineChar(slot0.shipVOs[slot7]:getPrefab(), slot8.gameObject) end slot2[slot6] = nil end end end function slot0.recyclePainting(slot0) for slot4, slot5 in pairs(slot0._cards) do for slot9, slot10 in ipairs(slot5) do slot10:clear() end end end function slot0.onBackPressed(slot0) pg.CriMgr.GetInstance():PlaySoundEffect_V3(SFX_CANCEL) if isActive(slot0._renamePanel) then slot0:DisplayRenamePanel(false) else triggerButton(slot0.backBtn) end end function slot0.willExit(slot0) slot0.commanderFormationPanel:Destroy() if slot0._attrFrame.gameObject.activeSelf then pg.UIMgr.GetInstance():UnblurPanel(slot0._blurLayer, slot0._tf) end slot0:recycleCharacterList(slot0._currentFleetVO.mainShips, slot0._characterList[TeamType.Main]) slot0:recycleCharacterList(slot0._currentFleetVO.vanguardShips, slot0._characterList[TeamType.Vanguard]) slot5 = TeamType.Submarine slot4 = slot0._characterList[slot5] slot0:recycleCharacterList(slot0._currentFleetVO.subShips, slot4) slot0:recyclePainting() slot0:DisplayRenamePanel(false) for slot4, slot5 in ipairs(slot0._attachmentList) do Object.Destroy(slot5) end slot0._attachmentList = nil slot0:tweenTabArrow(false) if slot0.tweens then cancelTweens(slot0.tweens) end if slot0.eventTriggers then for slot4, slot5 in pairs(slot0.eventTriggers) do ClearEventTrigger(slot4) end slot0.eventTriggers = nil end end return slot0