slot0 = class("ShipProfileScene", import("...base.BaseUI")) slot0.SHOW_SKILL_INFO = "event show skill info" slot0.SHOW_EVALUATION = "event show evalution" slot0.WEDDING_REVIEW = "event wedding review" slot0.INDEX_DETAIL = 1 slot0.INDEX_PROFILE = 2 slot0.CHAT_ANIMATION_TIME = 0.3 slot0.CHAT_SHOW_TIME = 3 slot1 = 0.35 function slot0.getUIName(slot0) return "ShipProfileUI" end function slot0.preload(slot0, slot1) slot3 = getProxy(CollectionProxy):getShipGroup(slot0.contextData.groupId) LoadSpriteAtlasAsync("bg/star_level_bg_" .. shipRarity2bgPrint(slot3:getRarity(slot0.showTrans), slot3:GetSkin(slot0.contextData.showTrans).id, slot3:isBluePrintGroup(), slot3:isMetaGroup()), "", slot1) end function slot0.setShipGroup(slot0, slot1) slot0.shipGroup = slot1 slot0.groupSkinList = slot1:getDisplayableSkinList() slot0.isBluePrintGroup = slot0.shipGroup:isBluePrintGroup() slot0.isMetaGroup = slot0.shipGroup:isMetaGroup() end function slot0.setShowTrans(slot0, slot1) slot0.showTrans = slot1 end function slot0.setOwnedSkinList(slot0, slot1) slot0.ownedSkinList = slot1 end function slot0.init(slot0) slot0.bg = slot0:findTF("bg") slot0.staticBg = slot0.bg:Find("static_bg") slot0.painting = slot0:findTF("paint") slot0.paintingFitter = findTF(slot0.painting, "fitter") slot0.paintingInitPos = slot0.painting.transform.localPosition slot0.chatTF = slot0:findTF("paint/chat") setActive(slot0.chatTF, false) slot0.commonPainting = slot0.painting:Find("fitter") slot0.l2dRoot = slot0:findTF("live2d", slot0.painting) slot0.spinePaintingRoot = slot0:findTF("spinePainting", slot0.painting) slot0.spinePaintingBgRoot = slot0:findTF("paintBg/spinePainting") slot0.chatBg = slot0:findTF("chatbgtop", slot0.chatTF) slot0.initChatBgH = slot0.chatBg.sizeDelta.y slot0.chatText = slot0:findTF("Text", slot0.chatBg) slot0.name = slot0:findTF("name") slot0.nameInitPos = slot0.name.transform.localPosition slot0.shipType = slot0:findTF("type", slot0.name) slot0.labelName = slot0:findTF("name_mask/Text", slot0.name):GetComponent(typeof(Text)) slot0.labelEnName = slot0:findTF("english_name", slot0.name):GetComponent(typeof(Text)) slot0.stars = slot0:findTF("stars", slot0.name) slot0.star = slot0:getTpl("star_tpl", slot0.stars) slot0.blurPanel = slot0:findTF("blur_panel") slot0.top = slot0:findTF("blur_panel/adapt/top") slot0.btnBack = slot0:findTF("back", slot0.top) slot0.bottomTF = slot0:findTF("bottom") slot0.labelHeart = slot0:findTF("adapt/detail_left_panel/heart/label", slot0.blurPanel) slot0.btnLike = slot0:findTF("adapt/detail_left_panel/heart/btnLike", slot0.blurPanel) slot0.btnLikeAct = slot0.btnLike:Find("like") slot0.btnLikeDisact = slot0.btnLike:Find("unlike") slot0.obtainBtn = slot0:findTF("bottom/obtain_btn") slot0.evaBtn = slot0:findTF("bottom/eva_btn") slot0.viewBtn = slot0:findTF("bottom/view_btn") slot0.shareBtn = slot0:findTF("bottom/share_btn") slot0.rotateBtn = slot0:findTF("bottom/rotate_btn") slot0.leftProfile = slot0:findTF("adapt/profile_left_panel", slot0.blurPanel) slot0.modelContainer = slot0:findTF("model", slot0.leftProfile) slot0.live2DBtn = ShipProfileLive2dBtn.New(slot0:findTF("L2D_btn", slot0.blurPanel)) slot0.spinePaintingBtn = slot0:findTF("SP_btn", slot0.blurPanel) slot0.spinePaintingToggle = slot0.spinePaintingBtn:Find("toggle") slot0.cvLoader = ShipProfileCVLoader.New() slot0.pageTFs = slot0:findTF("pages") slot0.paintingView = ShipProfilePaintingView.New(slot0._tf, slot0.painting) slot0.toggles = { slot0:findTF("bottom/detail"), slot0:findTF("bottom/profile") } slot1 = ShipProfileInformationPage.New(slot0.pageTFs, slot0.event) slot1:SetCvLoader(slot0.cvLoader) slot1:SetCallback(function (slot0) uv0:OnCVBtnClick(slot0) end) slot0.pages = { ShipProfileDetailPage.New(slot0.pageTFs, slot0.event), slot1 } slot0.UISkinList = UIItemList.New(slot0.leftProfile:Find("scroll/Viewport/skin_container"), slot0.leftProfile:Find("scroll/Viewport/skin_container/skin_tpl")) end function slot0.didEnter(slot0) onButton(slot0, slot0.btnBack, function () uv0:emit(uv1.ON_BACK) end, SFX_CANCEL) onButton(slot0, slot0.obtainBtn, function () pg.MsgboxMgr.GetInstance():ShowMsgBox({ type = MSGBOX_TYPE_OBTAIN, shipId = uv0.shipGroup:getShipConfigId(), list = uv0.shipGroup.groupConfig.description, mediatorName = ShipProfileMediator.__cname }) end) onButton(slot0, slot0.evaBtn, function () uv0:emit(uv1.SHOW_EVALUATION) end, SFX_PANEL) setActive(slot0.evaBtn, not slot0.contextData.showTrans) onButton(slot0, slot0.viewBtn, function () uv0.paintingView:Start() end, SFX_PANEL) onButton(slot0, slot0.shareBtn, function () pg.ShareMgr.GetInstance():Share(pg.ShareMgr.TypeShipProfile) end, SFX_PANEL) function slot4() setActive(uv0._tf, false) uv0:emit(ShipProfileMediator.CLICK_ROTATE_BTN, uv0.shipGroup, uv0.showTrans, uv0.skin) end slot5 = SFX_PANEL onButton(slot0, slot0.rotateBtn, slot4, slot5) slot0.live2DBtn:AddListener(function (slot0) if slot0 then uv0:CreateLive2D() end setActive(uv0.viewBtn, not slot0) setActive(uv0.rotateBtn, not slot0) setActive(uv0.commonPainting, not slot0) setActive(uv0.l2dRoot, slot0) uv0:StopDailogue() uv0.l2dActioning = nil if uv0.skin then uv0.pages[uv1.INDEX_PROFILE]:ExecuteAction("Flush", uv0.skin, slot0) end end) for slot4, slot5 in ipairs(slot0.toggles) do onToggle(slot0, slot5, function (slot0) if uv0 == uv1.INDEX_DETAIL then uv2.live2DBtn:Update(uv2.paintingName, false) uv2.spinePaintingisOn = false uv2:updateSpinePaintingState() uv2:DisplaySpinePainting(false) end if slot0 then uv2:SwitchPage(uv0) end end, SFX_PANEL) end slot0:InitCommon() slot0.live2DBtn:Update(slot0.paintingName, false) slot0:updateSpinePaintingState() setActive(slot0.bottomTF, false) triggerToggle(slot0.toggles[uv0.INDEX_DETAIL], true) end function slot0.InitSkinList(slot0) slot0.skinBtns = {} slot0.UISkinList:make(function (slot0, slot1, slot2) if slot0 == UIItemList.EventUpdate then slot3 = uv0.groupSkinList[slot1 + 1] slot4 = ShipProfileSkinBtn.New(slot2) table.insert(uv0.skinBtns, slot4) slot4:Update(slot3, uv0.shipGroup, table.contains(uv0.ownedSkinList, slot3.id)) onButton(uv0, slot4._tf, function () if not uv0.unlock then pg.TipsMgr.GetInstance():ShowTips(i18n("ship_profile_skin_locked")) return end uv1.contextData.skinIndex = uv2 + 1 uv1:ShiftSkin(uv3) if uv1.prevSkinBtn then uv1.prevSkinBtn:UnShift() end uv0:Shift() uv1.prevSkinBtn = uv0 end, SFX_PANEL) setActive(slot2, slot3.skin_type == ShipSkin.SKIN_TYPE_DEFAULT or not HXSet.isHxSkin()) end end) slot0.UISkinList:align(#slot0.groupSkinList) end function slot0.InitCommon(slot0) slot1 = slot0.shipGroup.shipConfig slot2 = slot0.shipGroup:getPainting(slot0.showTrans) slot0:LoadSkinBg(shipRarity2bgPrint(slot0.shipGroup:getRarity(slot0.showTrans), slot0.shipGroup:GetSkin(slot0.showTrans).id, slot0.isBluePrintGroup, slot0.isMetaGroup)) setImageSprite(slot0.shipType, GetSpriteFromAtlas("shiptype", slot0.shipGroup:getShipType(slot0.showTrans)), true) slot7 = slot0.showTrans slot0.labelName.text = slot0.shipGroup:getName(slot7) slot0.labelEnName.text = slot1.english_name for slot7 = 1, slot1.star do cloneTplTo(slot0.star, slot0.stars) end slot0:FlushHearts() slot0:SetPainting(slot3, slot0.showTrans) end function slot0.SetPainting(slot0, slot1, slot2) slot0:RecyclePainting() if slot2 and slot0.shipGroup.trans then slot1 = slot0.shipGroup.groupConfig.trans_skin end slot3 = pg.ship_skin_template[slot1].painting setPaintingPrefabAsync(slot0.painting, slot3, "chuanwu") slot0.paintingName = slot3 end function slot0.RecyclePainting(slot0) if slot0.paintingName then retPaintingPrefab(slot0.painting, slot0.paintingName) end end function slot0.FlushHearts(slot0) setText(slot0.labelHeart, slot0.shipGroup.hearts > 999 and "999+" or slot1) slot0.labelHeart:GetComponent("Text").color = slot0.shipGroup.iheart and Color.New(1, 0.6, 0.6) or Color.New(1, 1, 1) setActive(slot0.btnLikeDisact, not slot0.shipGroup.iheart) setActive(slot0.btnLikeAct, slot0.shipGroup.iheart) end function slot0.LoadSkinBg(slot0, slot1) slot0.bluePintBg = slot0.isBluePrintGroup and shipRarity2bgPrint(slot0.shipGroup:getRarity(slot0.showTrans), nil, true, false) slot0.metaMainBg = slot0.isMetaGroup and shipRarity2bgPrint(slot0.shipGroup:getRarity(slot0.showTrans), nil, false, true) if slot0.shipSkinBg ~= slot1 then slot0.shipSkinBg = slot1 function slot3() PoolMgr.GetInstance():GetUI("raritydesign" .. uv0.shipGroup:getRarity(uv0.showTrans), true, function (slot0) uv0.designBg = slot0 uv0.designName = "raritydesign" .. uv0.shipGroup:getRarity(uv0.showTrans) slot0.transform:SetParent(uv0.staticBg, false) slot0.transform.localPosition = Vector3(1, 1, 1) slot0.transform.localScale = Vector3(1, 1, 1) slot0.transform:SetSiblingIndex(1) if slot0:GetComponent("Canvas") then slot1.sortingOrder = -90 end setActive(slot0, true) end) end function slot4() PoolMgr.GetInstance():GetUI("raritymeta" .. uv0.shipGroup:getRarity(uv0.showTrans), true, function (slot0) uv0.metaBg = slot0 uv0.metaName = "raritymeta" .. uv0.shipGroup:getRarity(uv0.showTrans) slot0.transform:SetParent(uv0.staticBg, false) slot0.transform.localPosition = Vector3(1, 1, 1) slot0.transform.localScale = Vector3(1, 1, 1) slot0.transform:SetSiblingIndex(1) setActive(slot0, true) end) end pg.DynamicBgMgr.GetInstance():LoadBg(slot0, slot1, slot0.bg, slot0.staticBg, function (slot0) rtf(slot0).localPosition = Vector3(0, 0, 200) end, function (slot0) if uv0.bluePintBg and uv1 == uv0.bluePintBg then if uv0.metaBg then setActive(uv0.metaBg, false) end if uv0.designBg and uv0.designName ~= "raritydesign" .. uv0.shipGroup:getRarity(uv0.showTrans) then PoolMgr.GetInstance():ReturnUI(uv0.designName, uv0.designBg) uv0.designBg = nil end if not uv0.designBg then uv2() else setActive(uv0.designBg, true) end elseif uv0.metaMainBg and uv1 == uv0.metaMainBg then if uv0.designBg then setActive(uv0.designBg, false) end if uv0.metaBg and uv0.metaName ~= "raritymeta" .. uv0.shipGroup:getRarity(uv0.showTrans) then PoolMgr.GetInstance():ReturnUI(uv0.metaName, uv0.metaBg) uv0.metaBg = nil end if not uv0.metaBg then uv3() else setActive(uv0.metaBg, true) end else if uv0.designBg then setActive(uv0.designBg, false) end if uv0.metaBg then setActive(uv0.metaBg, false) end end end) end end function slot0.SwitchPage(slot0, slot1) if slot0.index ~= slot1 then seriesAsync({ function (slot0) pg.UIMgr.GetInstance():OverlayPanel(uv0.blurPanel, { groupName = LayerWeightConst.GROUP_SHIP_PROFILE }) slot0() end, function (slot0) slot1 = uv0.pages[uv1] slot2 = uv1 == uv2.INDEX_PROFILE and not slot1:GetLoaded() slot1:ExecuteAction("Update", uv0.shipGroup, uv0.showTrans, function () if uv0 then uv1:InitSkinList() end uv2() end) end, function (slot0) if not uv0.index then slot0() return end uv0.pages[uv0.index]:ExecuteAction("ExistAnim", uv1) slot0() end, function (slot0) slot1 = uv0.pages[uv1] SetParent(uv0.bottomTF, slot1._tf) setActive(uv0.bottomTF, true) setAnchoredPosition(uv0.bottomTF, { z = 0, x = -7, y = 24 }) slot1:ExecuteAction("EnterAnim", uv2) uv0:TweenPage(uv1) slot0() end, function (slot0) uv0.index = uv1 slot1 = uv0.contextData.skinIndex or 1 if uv1 == uv2.INDEX_PROFILE and slot1 <= #uv0.skinBtns then triggerButton(uv0.skinBtns[slot1]._tf) end end }) end end function slot0.TweenPage(slot0, slot1) if slot1 == uv0.INDEX_DETAIL then LeanTween.moveX(rtf(slot0.leftProfile), -500, uv1):setEase(LeanTweenType.easeInOutSine) LeanTween.moveY(rtf(slot0.live2DBtn._tf), -70, uv1):setEase(LeanTweenType.easeInOutSine) LeanTween.moveY(rtf(slot0.spinePaintingBtn), -70, uv1):setEase(LeanTweenType.easeInOutSine) LeanTween.moveX(rtf(slot0.painting), slot0.paintingInitPos.x, uv1):setEase(LeanTweenType.easeInOutSine) LeanTween.moveX(rtf(slot0.name), slot0.nameInitPos.x, uv1):setEase(LeanTweenType.easeInOutSine) elseif slot1 == uv0.INDEX_PROFILE then LeanTween.moveX(rtf(slot0.leftProfile), 0, uv1):setEase(LeanTweenType.easeInOutSine) LeanTween.moveY(rtf(slot0.live2DBtn._tf), 60, uv1):setEase(LeanTweenType.easeInOutSine) LeanTween.moveY(rtf(slot0.spinePaintingBtn), 60, uv1):setEase(LeanTweenType.easeInOutSine) LeanTween.moveX(rtf(slot0.painting), slot0.paintingInitPos.x + 50, uv1):setEase(LeanTweenType.easeInOutSine) LeanTween.moveX(rtf(slot0.name), slot0.nameInitPos.x + 50, uv1):setEase(LeanTweenType.easeInOutSine) end end function slot0.ShiftSkin(slot0, slot1) if slot0.index ~= uv0.INDEX_PROFILE or slot0.skin and slot1.id == slot0.skin.id then return end slot0.skin = slot1 slot0:LoadModel(slot1) slot0:SetPainting(slot1.id, false) slot0.live2DBtn:Disable() slot0.live2DBtn:Update(slot0.paintingName, false) slot0.spinePaintingisOn = false slot0:updateSpinePaintingState() slot0:DestroySpinePainting() slot0.pages[uv0.INDEX_PROFILE]:ExecuteAction("Flush", slot1, false) slot3 = nil slot0:LoadSkinBg((not slot0.skin.bg_sp or slot0.skin.bg_sp == "" or not (PlayerPrefs.GetInt("paint_hide_other_obj_" .. slot0.skin.painting, 0) == 0) or slot0.skin.bg_sp) and (not slot0.skin.bg or slot0.skin.bg == "" or slot0.skin.bg) and shipRarity2bgPrint(slot0.shipGroup:getRarity(slot0.showTrans), slot0.skin.id, slot0.shipGroup:isBluePrintGroup(), slot0.shipGroup:isMetaGroup())) slot0.haveOp = PathMgr.FileExists(PathMgr.getAssetBundle("ui/star_level_unlock_anim_" .. slot0.skin.id)) end function slot0.LoadModel(slot0, slot1) if slot0.inLoading then return end slot0:ReturnModel() slot0.inLoading = true PoolMgr.GetInstance():GetSpineChar(slot1.prefab, true, function (slot0) uv0.inLoading = false slot0.name = uv1 slot0.transform.localPosition = Vector3.zero slot0.transform.localScale = Vector3(0.8, 0.8, 1) slot0.transform:SetParent(uv0.modelContainer, false) slot0:GetComponent(typeof(SpineAnimUI)):SetAction(uv2.show_skin or "stand", 0) uv0.characterModel = slot0 uv0.modelName = uv1 end) end function slot0.ReturnModel(slot0) if not IsNil(slot0.characterModel) then PoolMgr.GetInstance():ReturnSpineChar(slot0.modelName, slot0.characterModel) end end function slot0.CreateLive2D(slot0) slot0.live2DBtn:SetEnable(false) if slot0.l2dChar then slot0.l2dChar:Dispose() end slot0.l2dChar = Live2D.New(Live2D.GenerateData({ ship = Ship.New({ configId = slot0.shipGroup:getShipConfigId(), skin_id = slot0.skin.id }), scale = Vector3(52, 52, 52), position = Vector3(0, -40, 100), parent = slot0.l2dRoot }), function () uv0.live2DBtn:SetEnable(true) end) if isHalfBodyLive2D(slot0.skin.prefab) then setAnchoredPosition(slot0.l2dRoot, { y = -37 - (slot0.painting.rect.height - slot0.l2dRoot.rect.height * 1.5) / 2 }) else setAnchoredPosition(slot0.l2dRoot, { y = 0 }) end end function slot0.GetModelAction(slot0, slot1) slot2 = nil if not slot1.spine_action or slot1.spine_action == "" then return "stand" else return slot1.spine_action end end function slot0.OnCVBtnClick(slot0, slot1) if slot0.l2dActioning then return end if slot1.voice.key == "unlock" and slot0.haveOp then slot0:playOpening(function () uv0:UpdatePaintingFace(uv1) if uv0.characterModel then uv0.characterModel:GetComponent(typeof(SpineAnimUI)):SetAction(uv0:GetModelAction(uv2), 0) end slot0 = { uv3.CHAT_SHOW_TIME } if uv0.live2DBtn.isOn and uv0.l2dChar then uv0.l2dActioning = true if not uv1:L2dHasEvent() then parallelAsync({ function (slot0) uv0:RemoveLive2DTimer() uv0.l2dChar:TriggerAction(uv1.l2d_action, slot0) end, function (slot0) uv0:PlayVoice(uv1, uv2) uv0:ShowDailogue(uv1, uv2, slot0) end }, function () uv0.l2dActioning = false end) else seriesAsync({ function (slot0) uv0:RemoveLive2DTimer() uv0.l2dChar:TriggerAction(uv1.l2d_action, slot0, nil, function (slot0) uv0:PlayVoice(uv1, uv2) uv0:ShowDailogue(uv1, uv2, uv3) end) end }, function () uv0.l2dActioning = false end) end else uv0:PlayVoice(uv1, slot0) uv0:ShowDailogue(uv1, slot0) end end) else slot3() end end function slot0.UpdatePaintingFace(slot0, slot1) slot4 = slot1.voice.key if slot1.wordData.mainIndex ~= nil then slot4 = "main_" .. slot2.mainIndex end if slot0.paintingFitter.childCount > 0 then ShipExpressionHelper.SetExpression(slot0.paintingFitter:GetChild(0), slot0.paintingName, slot4, slot2.maxfavor, slot1.skin.id) end end function slot0.PlayVoice(slot0, slot1, slot2) slot4 = slot1.skin slot5 = slot1.words slot0:RemoveCvTimer() if not slot1.wordData.cvPath or slot3.cvPath == "" then return end if ShipWordHelper.CV_KEY_REPALCE <= slot5.voice_key or slot5.voice_key == ShipWordHelper.CV_KEY_BAN_NEW then slot6 = 0 if slot1.isLive2d and slot0.l2dChar and slot3.voiceCalibrate then slot6 = slot3.voiceCalibrate end slot0.cvLoader:DelayPlaySound(slot3.cvPath, slot6, function (slot0) if slot0 then uv0[1] = long2int(slot0.length) * 0.001 end end) end slot6 = slot3.se if slot1.isLive2d and slot0.l2dChar and slot6 then slot0.cvLoader:RawPlaySound("event:/ui/" .. slot6[1], slot6[2]) end end function slot0.RemoveCvSeTimer(slot0) if slot0.cvSeTimer then slot0.cvSeTimer:Stop() slot0.cvSeTimer = nil end end function slot0.RemoveCvTimer(slot0) if slot0.cvTimer then slot0.cvTimer:Stop() slot0.cvTimer = nil end end function slot0.RemoveLive2DTimer(slot0) if slot0.Live2DTimer then LeanTween.cancel(slot0.Live2DTimer) slot0.Live2DTimer = nil end end function slot0.ShowDailogue(slot0, slot1, slot2, slot3) if not slot1.wordData.textContent or slot4 == "" or slot4 == "nil" then slot3 or function () end() return end slot5 = slot1.wordData.voiceCalibrate setText(slot0.chatText, SwitchSpecialChar(slot4)) slot6.alignment = CHAT_POP_STR_LEN < #slot0.chatText:GetComponent(typeof(Text)).text and TextAnchor.MiddleLeft or TextAnchor.MiddleCenter slot0.chatBg.sizeDelta = slot0.initChatBgH < slot6.preferredHeight + 120 and Vector2.New(slot0.chatBg.sizeDelta.x, slot7) or Vector2.New(slot0.chatBg.sizeDelta.x, slot0.initChatBgH) slot0:StopDailogue() setActive(slot0.chatTF, true) LeanTween.scale(rtf(slot0.chatTF.gameObject), Vector3.New(1, 1, 1), uv0.CHAT_ANIMATION_TIME):setEase(LeanTweenType.easeOutBack):setDelay(slot5 and slot5 or 0):setOnComplete(System.Action(function () LeanTween.scale(rtf(uv0.chatTF.gameObject), Vector3.New(0, 0, 1), uv1.CHAT_ANIMATION_TIME):setEase(LeanTweenType.easeInBack):setDelay(uv1.CHAT_ANIMATION_TIME + uv2[1]):setOnComplete(System.Action(uv3)) end)) end function slot0.StopDailogue(slot0) LeanTween.cancel(slot0.chatTF.gameObject) slot0.chatTF.localScale = Vector3(0, 0) end function slot0.onBackPressed(slot0) if slot0.paintingView.isPreview then slot0.paintingView:Finish(true) return end triggerButton(slot0.btnBack) end function slot0.playOpening(slot0, slot1) if PathMgr.FileExists(PathMgr.getAssetBundle("ui/" .. ("star_level_unlock_anim_" .. slot0.skin.id))) then pg.CpkPlayMgr.GetInstance():PlayCpkMovie(function () end, function () if uv0 then uv0() end end, "ui", slot2, true, true, nil) elseif slot1 then slot1() end end function slot0.updateSpinePaintingState(slot0) if PathMgr.FileExists(PathMgr.getAssetBundle(HXSet.autoHxShiftPath("spinepainting/" .. slot0.paintingName))) then setActive(slot0.spinePaintingBtn, true) setActive(slot0.spinePaintingToggle:Find("on"), slot0.spinePaintingisOn) setActive(slot0.spinePaintingToggle:Find("off"), not slot0.spinePaintingisOn) removeOnButton(slot0.spinePaintingBtn) onButton(slot0, slot0.spinePaintingBtn, function () uv0.spinePaintingisOn = not uv0.spinePaintingisOn setActive(uv0.spinePaintingToggle:Find("on"), uv0.spinePaintingisOn) setActive(uv0.spinePaintingToggle:Find("off"), not uv0.spinePaintingisOn) if uv0.spinePaintingisOn then uv0:CreateSpinePainting() end setActive(uv0.viewBtn, not uv0.spinePaintingisOn) setActive(uv0.rotateBtn, not uv0.spinePaintingisOn) setActive(uv0.commonPainting, not uv0.spinePaintingisOn) setActive(uv0.spinePaintingRoot, uv0.spinePaintingisOn) setActive(uv0.spinePaintingBgRoot, uv0.spinePaintingisOn) uv0:StopDailogue() if uv0.skin then uv0.pages[uv1.INDEX_PROFILE]:ExecuteAction("Flush", uv0.skin, uv0.spinePaintingisOn) end end, SFX_PANEL) else setActive(slot0.spinePaintingBtn, false) end end function slot0.CreateSpinePainting(slot0) if slot0.skin.id ~= slot0.preSkinId then slot0:DestroySpinePainting() slot0.spinePainting = SpinePainting.New(SpinePainting.GenerateData({ ship = Ship.New({ configId = slot0.shipGroup:getShipConfigId(), skin_id = slot0.skin.id }), position = Vector3(0, 0, 0), parent = slot0.spinePaintingRoot, effectParent = slot0.spinePaintingBgRoot }), function () end) slot0.preSkinId = slot0.skin.id end slot0:DisplaySpinePainting(true) end function slot0.DestroySpinePainting(slot0) if slot0.spinePainting then slot0.spinePainting:Dispose() slot0.spinePainting = nil end slot0.preSkinId = nil end function slot0.DisplaySpinePainting(slot0, slot1) setActive(slot0.spinePaintingRoot, slot1) setActive(slot0.spinePaintingBgRoot, slot1) end function slot0.willExit(slot0) pg.CpkPlayMgr.GetInstance():DisposeCpkMovie() SetParent(slot0.bottomTF, slot0._tf) slot4 = slot0._tf pg.UIMgr.GetInstance():UnOverlayPanel(slot0.blurPanel, slot4) for slot4, slot5 in ipairs(slot0.pages) do slot5:Destroy() end if slot0.l2dChar then slot0.l2dChar:Dispose() end slot0:DestroySpinePainting() slot0.paintingView:Dispose() slot0.live2DBtn:Dispose() slot0.cvLoader:Dispose() slot0:ReturnModel() slot0:RecyclePainting() _.each(slot0.skinBtns or {}, function (slot0) slot0:Dispose() end) slot0:RemoveCvTimer() slot0:RemoveCvSeTimer() slot0:RemoveLive2DTimer() end return slot0