local CSXTextManagerGetText = CS.XTextManager.GetText local XUiPanelFashionList = require("XUi/XUiFashion/XUiPanelFashionList") local XUiPanelRoleModel = require("XUi/XUiCharacter/XUiPanelRoleModel") local stringFormat = string.format local tableInsert = table.insert local tableRemove = table.remove local CameraIndex = { Normal = 1, Near = 2 } local BtnTabIndex = { Character = 1, --成员涂装 Weapon = 2 --武器涂装 } local BtnTabIndexSide = { Fashion = 1, --涂装 HeadPortrait = 2 --头像 } local LastSelectedTabIndex = BtnTabIndex.Character local WeaponViewType = { WithCharacter = 1, OnlyWeapon = 2 } local SwitchWeaponViewType = { [WeaponViewType.OnlyWeapon] = WeaponViewType.WithCharacter, [WeaponViewType.WithCharacter] = WeaponViewType.OnlyWeapon } local SwitchBtnName = { [WeaponViewType.OnlyWeapon] = CSXTextManagerGetText("UiFashionBtnNameCharacter"), [WeaponViewType.WithCharacter] = CSXTextManagerGetText("UiFashionBtnNameWeapon") } local XUiFashion = XLuaUiManager.Register(XLuaUi, "UiFashion") function XUiFashion:OnAwake() self.ExpiredRefreshNameList = {} self.BtnLensOut.gameObject:SetActiveEx(true) self.BtnLensIn.gameObject:SetActiveEx(false) self.PanelUnlockShow.gameObject:SetActiveEx(false) self.PanelAssistDistanceTip.gameObject:SetActiveEx(false) self.GridFashion.gameObject:SetActiveEx(false) self.GridWeapon.gameObject:SetActiveEx(false) self.GridHeadPortrait.gameObject:SetActiveEx(false) self.AssetPanel = XUiPanelAsset.New( self, self.PanelAsset, XDataCenter.ItemManager.ItemId.FreeGem, XDataCenter.ItemManager.ItemId.ActionPoint, XDataCenter.ItemManager.ItemId.Coin ) self.PanelCharacterFashionList = XUiPanelFashionList.New( XUiPanelFashionList.GridType.FashionCharacter, self.ScrollFashionList, function(fashionId) self:OnSelectCharacterFashion(fashionId) end, self ) self.PanelWeaponFashionList = XUiPanelFashionList.New( XUiPanelFashionList.GridType.FashionWeapon, self.ScrollWeaponList, function(fashionId) self:OnSelectWeaponFashion(fashionId) end, self ) self.PanelHeadPortraitList = XUiPanelFashionList.New( XUiPanelFashionList.GridType.HeadPortrait, self.ScrollHeadPortrait, function(headInfo) self:OnSelectHeadPortrait(headInfo) end, self ) self.PanelTagGroup:Init( { self.BtnTogCharacter, self.BtnTogWeapon }, function(tabIndex) self:OnClickTabCallBack(tabIndex) end ) self.PanelTabGroup:Init( { self.BtnFashion, self.BtnHeadPortrait }, function(tabIndex) self:OnClickTabFashionCallBack(tabIndex) end ) self.OnUiSceneLoadedCB = function(lastSceneUrl) self:OnUiSceneLoaded(lastSceneUrl) end self:AutoAddListener() end function XUiFashion:OnStart(defaultCharacterId, isOnlyOneCharacter, notShowWeapon, openUiType) self:InitSceneRoot() --设置摄像机 local defaultCharacterIndex = 1 local characterList = XDataCenter.CharacterManager.GetCharacterList() if defaultCharacterId then self.CharacterId = defaultCharacterId for index, character in pairs(characterList) do if defaultCharacterId == character.Id then defaultCharacterIndex = index break end end end self.CharacterList = characterList self.DefaultCharacterIndex = defaultCharacterIndex self.CurWeaponViewType = WeaponViewType.WithCharacter self.LastCharacterFashionSceneUrl = nil self.IsOnlyOneCharacter = isOnlyOneCharacter self.NotShowWeapon = notShowWeapon self.OpenUiType = openUiType if self.OpenUiType and ( self.OpenUiType == XUiConfigs.OpenUiType.NieRCharacterUI or self.OpenUiType == XUiConfigs.OpenUiType.RobotFashion) then self.HideProtraitBtn = true end self.BtnHeadPortrait.gameObject:SetActiveEx(not self.HideProtraitBtn) end function XUiFashion:OnEnable() CS.XGraphicManager.UseUiLightDir = true if self.NotShowWeapon then self.PanelTagGroup.gameObject:SetActiveEx(false) self.PanelTagGroup:SelectIndex(BtnTabIndex.Character) else self.PanelTagGroup.gameObject:SetActiveEx(true) end self.PanelTagGroup:SelectIndex(LastSelectedTabIndex) end function XUiFashion:OnDisable() CS.XGraphicManager.UseUiLightDir = false end function XUiFashion:OnGetEvents() return { XEventId.EVENT_FASHION_WEAPON_EXPIRED_REFRESH } end function XUiFashion:OnNotify(evt, ...) if evt == XEventId.EVENT_FASHION_WEAPON_EXPIRED_REFRESH then --过期刷新 self:UpdateWeaponFashionList() self:AddExpiredRefresh(...) self:OpenTipMsg() end end function XUiFashion:AddExpiredRefresh(fashionIds) if LastSelectedTabIndex ~= BtnTabIndex.Weapon then return end local characterId = self.CharacterId local fashionName for _, weaponFashionId in pairs(fashionIds) do if XDataCenter.WeaponFashionManager.IsCharacterFashion(weaponFashionId, characterId) then fashionName = XDataCenter.WeaponFashionManager.GetWeaponFashionName(weaponFashionId) if fashionName then tableInsert(self.ExpiredRefreshNameList, fashionName) end end end end function XUiFashion:OpenTipMsg() if next(self.ExpiredRefreshNameList) then XUiManager.TipMsg( CSXTextManagerGetText("WeaponFashionNotOwnTipMsg", self.ExpiredRefreshNameList[1]), nil, function() tableRemove(self.ExpiredRefreshNameList, 1) self:OpenTipMsg() end ) end end function XUiFashion:OnUiSceneLoaded(lastSceneUrl) if lastSceneUrl ~= self.LastCharacterFashionSceneUrl then self:SetGameObject() self:InitSceneRoot() self.LastCharacterFashionSceneUrl = lastSceneUrl end end function XUiFashion:OnClickTabCallBack(tabIndex) LastSelectedTabIndex = tabIndex self:OnSelectCharacter(self.CharacterIndex or self.DefaultCharacterIndex) end function XUiFashion:OnClickTabFashionCallBack(tabIndex) --武器涂装页签没有头像栏 if LastSelectedTabIndex == BtnTabIndex.Weapon then return end self.SelectedFashionHeadIndex = tabIndex if tabIndex == BtnTabIndexSide.Fashion then self:UpdateFashionList() elseif tabIndex == BtnTabIndexSide.HeadPortrait then self:UpdateHeadPortraitList() end local characterId = self.CharacterId --成员头像数量 local haveCount, totalCount = 0, #self.HeadList for _, headInfo in pairs(self.HeadList) do if XDataCenter.FashionManager.IsFashionHeadUnLock(headInfo.HeadFashionId, headInfo.HeadFashionType, characterId) then haveCount = haveCount + 1 end end self.BtnHeadPortrait:SetNameByGroup(0, CsXTextManagerGetText("UiFashionBtnNameHeadPortrait", haveCount, totalCount)) --成员涂装数量 local haveCount, totalCount = 0, 0 local fashionStatus = XDataCenter.FashionManager.FashionStatus local fashionList = self.FashionList if self.OpenUiType and self.OpenUiType == XUiConfigs.OpenUiType.NieRCharacterUI then haveCount = #fashionList else for _, fashionId in pairs(fashionList) do local status = XDataCenter.FashionManager.GetFashionStatus(fashionId) if status ~= fashionStatus.UnOwned then haveCount = haveCount + 1 end end end totalCount = #fashionList self.BtnFashion:SetNameByGroup(0, CsXTextManagerGetText("UiFashionBtnNameFashion", haveCount, totalCount)) end function XUiFashion:UpdateFashionData() if self.OpenUiType and self.OpenUiType == XUiConfigs.OpenUiType.NieRCharacterUI then local nierCharacter = XDataCenter.NieRManager.GetSelNieRCharacter() self.FashionList = nierCharacter:GetNieRFashionList() else self.FashionList = XDataCenter.FashionManager.GetCurrentTimeFashionByCharId(self.CharacterId) end end function XUiFashion:OnSelectCharacter(characterIndex) self.CharacterIndex = characterIndex self.CharacterId = self.CharacterList[self.CharacterIndex].Id self.HeadList = XDataCenter.FashionManager.GetFashionHeadPortraitList(self.CharacterId) self:UpdateFashionData() self.CurFashionId = self.FashionList[1] local hasLast = characterIndex > 1 self.BtnLast.interactable = hasLast local hasNext = self.CharacterList[characterIndex + 1] and true or false self.BtnNext.interactable = hasNext if LastSelectedTabIndex == BtnTabIndex.Character then if not self.HideProtraitBtn then self.BtnHeadPortrait.gameObject:SetActiveEx(true) self.PanelTabGroup:SelectIndex(BtnTabIndexSide.Fashion) else self.PanelTabGroup:SelectIndex(self.SelectedFashionHeadIndex or BtnTabIndexSide.Fashion) end elseif LastSelectedTabIndex == BtnTabIndex.Weapon then self.BtnHeadPortrait.gameObject:SetActiveEx(false) self.BtnFashion:SetButtonState(CS.UiButtonState.Select) self:UpdateWeaponFashionList() end end function XUiFashion:UpdateFashionList(selectDressing, doNotReset) if LastSelectedTabIndex ~= BtnTabIndex.Character then return end local defaultSelectId, dressedId local characterId = self.CharacterId self:UpdateFashionData() local fashionStatus = XDataCenter.FashionManager.FashionStatus local fashionList = self.FashionList if self.OpenUiType and self.OpenUiType == XUiConfigs.OpenUiType.NieRCharacterUI then local nierCharacter = XDataCenter.NieRManager.GetSelNieRCharacter() dressedId = nierCharacter:GetNieRFashionId() else for _, fashionId in pairs(fashionList) do local status = XDataCenter.FashionManager.GetFashionStatus(fashionId) if status == fashionStatus.Dressed then dressedId = fashionId end end end defaultSelectId = selectDressing and dressedId or fashionList[1] defaultSelectId = not doNotReset and defaultSelectId or nil self.PanelCharacterFashionList:UpdateViewList(fashionList, defaultSelectId) self.PanelCharacterFashionList.GameObject:SetActiveEx(true) self.PanelHeadPortraitList.GameObject:SetActiveEx(false) self.PanelWeaponFashionList.GameObject:SetActiveEx(false) end function XUiFashion:UpdateWeaponFashionList(selectDressing, doNotReset) if LastSelectedTabIndex ~= BtnTabIndex.Weapon then return end local defaultSelectId, dressedId local haveCount, totalCount = 0, 0 local characterId = self.CharacterId local fashionStatus = XDataCenter.WeaponFashionManager.FashionStatus local fashionList = XDataCenter.WeaponFashionManager.GetSortedWeaponFashionIdsByCharacterId(characterId) for _, fashionId in pairs(fashionList) do local status = XDataCenter.WeaponFashionManager.GetFashionStatus(fashionId, characterId) if status ~= fashionStatus.UnOwned then haveCount = haveCount + 1 end end totalCount = #fashionList defaultSelectId = fashionList[1] defaultSelectId = not doNotReset and defaultSelectId or nil self.PanelWeaponFashionList:UpdateViewList(fashionList, defaultSelectId, characterId) self.PanelWeaponFashionList.GameObject:SetActiveEx(true) self.PanelCharacterFashionList.GameObject:SetActiveEx(false) self.PanelHeadPortraitList.GameObject:SetActiveEx(false) self.BtnHeadPortrait.gameObject:SetActiveEx(false) self.BtnFashion:SetNameByGroup(0, CsXTextManagerGetText("UiFashionBtnNameWeaponFashion", haveCount, totalCount)) end function XUiFashion:UpdateHeadPortraitList(refresh) local characterId = self.CharacterId if refresh then self.HeadList = XDataCenter.FashionManager.GetFashionHeadPortraitList(self.CharacterId) end local headList = self.HeadList self.PanelHeadPortraitList:UpdateViewList(headList, headList[1], characterId) self.PanelHeadPortraitList.GameObject:SetActiveEx(true) self.PanelWeaponFashionList.GameObject:SetActiveEx(false) self.PanelCharacterFashionList.GameObject:SetActiveEx(false) self.BtnFashionUnLock.gameObject:SetActiveEx(false) end function XUiFashion:OnSelectCharacterFashion(fashionId) self.CurFashionId = fashionId self:UpdateSceneAndModel() self:UpdateCamera(CameraIndex.Normal) self:UpdateButtonState() end function XUiFashion:UpdateSceneAndModel() self:LoadModelScene() self:UpdateCharacterModel() end function XUiFashion:LoadModelScene(isDefault) local sceneUrl = self:GetSceneUrl(isDefault) local modelUrl = self:GetDefaultUiModelUrl() self:LoadUiScene(sceneUrl, modelUrl, self.OnUiSceneLoadedCB, false) end function XUiFashion:GetSceneUrl(isDefault) if isDefault then return self:GetDefaultSceneUrl() end local sceneUrl if LastSelectedTabIndex == BtnTabIndex.Character then sceneUrl = XDataCenter.FashionManager.GetFashionSceneUrl(self.CurFashionId) elseif LastSelectedTabIndex == BtnTabIndex.Weapon then sceneUrl = XDataCenter.CharacterManager.GetCharShowFashionSceneUrl(self.CharacterId) end if sceneUrl and sceneUrl ~= "" then return sceneUrl else return self:GetDefaultSceneUrl() end end function XUiFashion:UpdateCharacterModel() local characterId local func = function(model) self.PanelDrag:GetComponent("XDrag").Target = model.transform self:ShowImgEffectHuanren(characterId) end if self.CurFashionId then local template = XDataCenter.FashionManager.GetFashionTemplate(self.CurFashionId) characterId = template.CharacterId self.TxtFashionName.text = template.Name self.RoleModelPanel:UpdateCharacterResModel( template.ResourcesId, template.CharacterId, XModelManager.MODEL_UINAME.XUiFashion, func ) self.PanelWeapon.gameObject:SetActiveEx(false) self.RoleModelPanel.GameObject:SetActiveEx(true) if self.IsOnlyOneCharacter then self.BtnNext.gameObject:SetActiveEx(false) self.BtnLast.gameObject:SetActiveEx(false) else self.BtnNext.gameObject:SetActiveEx(true) self.BtnLast.gameObject:SetActiveEx(true) end self.PanelBtnSwitch.gameObject:SetActiveEx(false) self:ResetPanelBtnLens() self:UpdateFashionIntro(self.CurFashionId) else self.TxtFashionName.text = "" self.PanelWeapon.gameObject:SetActiveEx(false) self.RoleModelPanel.GameObject:SetActiveEx(false) self.PanelBtnSwitch.gameObject:SetActiveEx(false) self.PanelBtnLens.gameObject:SetActiveEx(false) self.BtnNext.gameObject:SetActiveEx(false) self.BtnLast.gameObject:SetActiveEx(false) self.BtnUsed.gameObject:SetActiveEx(false) self.PanelUnOwed.gameObject:SetActiveEx(false) self.BtnUse.gameObject:SetActiveEx(false) end end function XUiFashion:UpdateButtonState() if self.OpenUiType and self.OpenUiType == XUiConfigs.OpenUiType.NieRCharacterUI then local nierCharacter = XDataCenter.NieRManager.GetSelNieRCharacter() local dressedId = nierCharacter:GetNieRFashionId() if self.CurFashionId == dressedId then self.PanelUnOwed.gameObject:SetActiveEx(false) self.BtnUse.gameObject:SetActiveEx(false) self.BtnUsed.gameObject:SetActiveEx(true) self.BtnFashionUnLock.gameObject:SetActiveEx(false) else self.PanelUnOwed.gameObject:SetActiveEx(false) self.BtnUse.gameObject:SetActiveEx(true) self.BtnUsed.gameObject:SetActiveEx(false) self.BtnFashionUnLock.gameObject:SetActiveEx(false) end else local status = XDataCenter.FashionManager.GetFashionStatus(self.CurFashionId) local fashionStatus = XDataCenter.FashionManager.FashionStatus if status == fashionStatus.Dressed then self.PanelUnOwed.gameObject:SetActiveEx(false) self.BtnUse.gameObject:SetActiveEx(false) self.BtnUsed.gameObject:SetActiveEx(true) self.BtnFashionUnLock.gameObject:SetActiveEx(false) elseif status == fashionStatus.UnLock then self.PanelUnOwed.gameObject:SetActiveEx(false) self.BtnUse.gameObject:SetActiveEx(true) self.BtnUsed.gameObject:SetActiveEx(false) self.BtnFashionUnLock.gameObject:SetActiveEx(false) elseif status == fashionStatus.Lock then self.PanelUnOwed.gameObject:SetActiveEx(false) self.BtnUse.gameObject:SetActiveEx(false) self.BtnUsed.gameObject:SetActiveEx(false) self.BtnFashionUnLock.gameObject:SetActiveEx(true) elseif status == fashionStatus.UnOwned then self.PanelUnOwed.gameObject:SetActiveEx(true) self.BtnUse.gameObject:SetActiveEx(false) self.BtnUsed.gameObject:SetActiveEx(false) self.BtnFashionUnLock.gameObject:SetActiveEx(false) end end self.PanelHeadLock.gameObject:SetActiveEx(false) end function XUiFashion:OnSelectWeaponFashion(weaponFashionId) self.CurWeaponFashionId = weaponFashionId self:OnSwitchWeaponViewType(true) self:UpdateWeaponButtonState() end function XUiFashion:OnSwitchWeaponViewType(doNotReset) local oldType = self.CurWeaponViewType local newType = not doNotReset and SwitchWeaponViewType[self.CurWeaponViewType] or oldType self.CurWeaponViewType = newType if newType == WeaponViewType.WithCharacter then self.BtnNext.gameObject:SetActiveEx(true) self.BtnLast.gameObject:SetActiveEx(true) self:ResetPanelBtnLens() self:LoadModelScene() self:UpdateWeaponWithCharacterModel() elseif newType == WeaponViewType.OnlyWeapon then self.PanelBtnLens.gameObject:SetActiveEx(false) self.BtnNext.gameObject:SetActiveEx(false) self.BtnLast.gameObject:SetActiveEx(false) self:LoadModelScene(true) self:UpdateWeaponModel() end local characterId = self.CharacterId local fashionName = XDataCenter.WeaponFashionManager.GetWeaponFashionName(self.CurWeaponFashionId, characterId) self.TxtFashionName.text = fashionName self:UpdateFashionIntro(self.CurWeaponFashionId) self.BtnSwitch:SetNameByGroup(0, SwitchBtnName[newType]) self.PanelBtnSwitch.gameObject:SetActiveEx(true) self.BtnFashionUnLock.gameObject:SetActiveEx(false) self:UpdateCamera(CameraIndex.Normal) end function XUiFashion:UpdateFashionIntro(fashionId) local intro, title, content = "", "", "" if BtnTabIndex.Character == LastSelectedTabIndex and BtnTabIndexSide.HeadPortrait == self.SelectedFashionHeadIndex then --成员头像 content = XDataCenter.FashionManager.GetFashionHeadUnlockConditionDesc(self.HeadInfo.HeadFashionType) intro = CsXTextManagerGetText("UiFashionIntroHeadPortrait") else --武器涂装/成员涂装 local characterId = self.CharacterId local isDefaultId = XWeaponFashionConfigs.IsDefaultId(fashionId) if isDefaultId then if not XDataCenter.CharacterManager.IsOwnCharacter(characterId) then fashionId = XCharacterConfigs.GetCharacterDefaultEquipId(characterId) else local equipId = XDataCenter.EquipManager.GetCharacterWearingWeaponId(characterId) fashionId = XDataCenter.EquipManager.GetEquipTemplateId(equipId) end end title = XGoodsCommonManager.GetGoodsDescription(fashionId) content = XGoodsCommonManager.GetGoodsWorldDesc(fashionId) if isDefaultId then content = title if string.IsNilOrEmpty(content) then local archiveCfg = XArchiveConfigs.GetWeaponSettingList(fashionId, XArchiveConfigs.SettingType.Setting) if next(archiveCfg) then content = archiveCfg[1].Text end end title = nil end intro = CsXTextManagerGetText("UiFashionIntroFashion") end self.TxtTipTitle.text = intro self.TxtIntroTitle.gameObject:SetActiveEx(not string.IsNilOrEmpty(title)) self.TxtIntroTitle.text = title self.TxtIntroDesc.gameObject:SetActiveEx(not string.IsNilOrEmpty(content)) self.TxtIntroDesc.text = content end function XUiFashion:UpdateWeaponModel() local characterId = self.CharacterId local uiName = XModelManager.MODEL_UINAME.XUiFashion local modelConfig = XDataCenter.WeaponFashionManager.GetWeaponModelCfg(self.CurWeaponFashionId, characterId, uiName) self.RoleModelPanel.GameObject:SetActiveEx(false) self.PanelWeapon.gameObject:SetActiveEx(true) XModelManager.LoadWeaponModel( modelConfig.ModelId, self.PanelWeapon, modelConfig.TransformConfig, uiName, nil, { gameObject = self.GameObject, IsDragRotation = true }, self.PanelDrag ) end function XUiFashion:UpdateWeaponWithCharacterModel() local characterId = self.CharacterId local resourcesId = XDataCenter.FashionManager.GetFashionResourceIdByCharId(characterId) local func = function(model) self.PanelDrag:GetComponent("XDrag").Target = model.transform self:ShowImgEffectHuanren(characterId) end self.PanelWeapon.gameObject:SetActiveEx(false) self.RoleModelPanel.GameObject:SetActiveEx(true) self.RoleModelPanel:UpdateCharacterResModel( resourcesId, characterId, XModelManager.MODEL_UINAME.XUiFashion, func, nil, self.CurWeaponFashionId ) end function XUiFashion:UpdateWeaponButtonState() local characterId = self.CharacterId local status = XDataCenter.WeaponFashionManager.GetFashionStatus(self.CurWeaponFashionId, characterId) local fashionStatus = XDataCenter.WeaponFashionManager.FashionStatus if status == fashionStatus.Dressed then self.PanelUnOwed.gameObject:SetActiveEx(false) self.BtnUse.gameObject:SetActiveEx(false) self.PanelHeadLock.gameObject:SetActiveEx(false) self.BtnUsed.gameObject:SetActiveEx(true) elseif status == fashionStatus.UnLock then self.PanelUnOwed.gameObject:SetActiveEx(false) self.BtnUse.gameObject:SetActiveEx(true) self.BtnUsed.gameObject:SetActiveEx(false) self.PanelHeadLock.gameObject:SetActiveEx(false) elseif status == fashionStatus.UnOwned then self.PanelUnOwed.gameObject:SetActiveEx(true) self.BtnUse.gameObject:SetActiveEx(false) self.BtnUsed.gameObject:SetActiveEx(false) self.PanelHeadLock.gameObject:SetActiveEx(false) end end function XUiFashion:OnSelectHeadPortrait(headInfo) self.HeadInfo = headInfo self:UpdateSceneAndModel() self:UpdateHeadPortraitButtonState() end function XUiFashion:UpdateHeadPortraitButtonState() local characterId = self.CharacterId local headInfo = self.HeadInfo local isUnLock = XDataCenter.FashionManager.IsFashionHeadUnLock(headInfo.HeadFashionId, headInfo.HeadFashionType, characterId) local isUsing = XDataCenter.FashionManager.IsFashionHeadUsing(headInfo.HeadFashionId, headInfo.HeadFashionType, characterId) if isUsing then --已穿戴 self.PanelHeadLock.gameObject:SetActiveEx(false) self.PanelUnOwed.gameObject:SetActiveEx(false) self.BtnUse.gameObject:SetActiveEx(false) self.BtnUsed.gameObject:SetActiveEx(true) elseif isUnLock then --已解锁 self.PanelHeadLock.gameObject:SetActiveEx(false) self.PanelUnOwed.gameObject:SetActiveEx(false) self.BtnUse.gameObject:SetActiveEx(true) self.BtnUsed.gameObject:SetActiveEx(false) else -- 未获得 self.BtnUse.gameObject:SetActiveEx(false) self.BtnUsed.gameObject:SetActiveEx(false) self.PanelUnOwed.gameObject:SetActiveEx(false) self.PanelHeadLock.gameObject:SetActiveEx(true) end end function XUiFashion:AutoAddListener() self:RegisterClickEvent(self.BtnNext, self.OnBtnNextClick) self:RegisterClickEvent(self.BtnLast, self.OnBtnLastClick) self:RegisterClickEvent(self.BtnUse, self.OnBtnUseClick) self:RegisterClickEvent(self.BtnFashionUnLock, self.OnBtnFashionUnLockClick) self:RegisterClickEvent(self.BtnGet, self.OnBtnGetClick) self:RegisterClickEvent(self.BtnBack, self.OnBtnBackClick) self:RegisterClickEvent(self.BtnMainUi, self.OnBtnMainUiClick) self.BtnLensOut.CallBack = function() self:OnBtnLensOut() end self.BtnLensIn.CallBack = function() self:OnBtnLensIn() end self.BtnSwitch.CallBack = function() self:OnSwitchWeaponViewType() end XUiHelper.RegisterSliderChangeEvent(self, self.SliderCharacter, self.OnSliderCharacterChanged) end function XUiFashion:OnBtnFashionUnLockClick() local fashionId = self.CurFashionId local template = XDataCenter.FashionManager.GetFashionTemplate(fashionId) self.TxtUnlockFashionName.text = CSXTextManagerGetText("UiFashionUnlockName", template.Name) self.RImgFashionIcon:SetRawImage(template.Icon) self.ImgUnlockShowIcon.fillAmount = 0 local animGo = self.PanelUnlockShow animGo.gameObject:SetActiveEx(true) self:PlayAnimationWithMask( "AniPanelUnlockShowBegin", function() if XTool.UObjIsNil(animGo) then return end animGo.gameObject:SetActiveEx(false) XDataCenter.FashionManager.UnlockFashion( fashionId, function() local characterId = XDataCenter.FashionManager.GetCharacterId(fashionId) local isOwnCharacter = XDataCenter.CharacterManager.IsOwnCharacter(characterId) if isOwnCharacter then -- 拥有该角色,替换新涂装 XDataCenter.FashionManager.UseFashion( fashionId, function() XUiManager.TipText("UseSuccess") self:UpdateFashionList(true) end, function() self:UpdateFashionList(nil, true) end, true ) end if XTool.UObjIsNil(self.GameObject) then return end self:ShowImgEffectHuanren(template.CharacterId) self:PlayUnLockAnimation() -- 拥有角色时,在穿戴涂装的协议回调中进行刷新 if not isOwnCharacter then self:UpdateFashionList(nil, true) end end ) end ) end function XUiFashion:OnBtnBackClick() self:Close() end function XUiFashion:OnBtnMainUiClick() XLuaUiManager.RunMain() end function XUiFashion:OnBtnUseClick() if LastSelectedTabIndex == BtnTabIndex.Character then if self.SelectedFashionHeadIndex == BtnTabIndexSide.HeadPortrait then if not XDataCenter.CharacterManager.IsOwnCharacter(self.CharacterId) then XUiManager.TipText("CharacterLock") return end local headInfo = self.HeadInfo XDataCenter.CharacterManager.CharacterSetHeadInfoRequest( self.CharacterId, headInfo.HeadFashionId, headInfo.HeadFashionType, function() XUiManager.TipText("UseSuccess") self:UpdateHeadPortraitList(true) end ) else if self.OpenUiType and self.OpenUiType == XUiConfigs.OpenUiType.NieRCharacterUI then XDataCenter.NieRManager.NieRCharacterChangeFashion( XDataCenter.NieRManager.GetSelNieRCharacter():GetNieRCharacterId(), self.CurFashionId, function() XUiManager.TipText("UseSuccess") self:UpdateFashionList(true) end ) else XDataCenter.FashionManager.UseFashion( self.CurFashionId, function() XUiManager.TipText("UseSuccess") self:UpdateFashionList(true) end ) end end elseif LastSelectedTabIndex == BtnTabIndex.Weapon then local characterId = self.CharacterId XDataCenter.WeaponFashionManager.UseFashion( self.CurWeaponFashionId, characterId, function() XUiManager.TipText("UseSuccess") self:UpdateWeaponFashionList(true) end ) end end function XUiFashion:OnBtnLastClick() local characterIndex = self.CharacterIndex if characterIndex > 1 then characterIndex = characterIndex - 1 self:OnSelectCharacter(characterIndex) self:PlayAnimation("Qiehuan") end end function XUiFashion:OnBtnNextClick() local characterIndex = self.CharacterIndex if characterIndex < #self.CharacterList then characterIndex = characterIndex + 1 self:OnSelectCharacter(characterIndex) self:PlayAnimation("Qiehuan") end end function XUiFashion:OnBtnGetClick() local templateId if LastSelectedTabIndex == BtnTabIndex.Character then templateId = self.CurFashionId elseif LastSelectedTabIndex == BtnTabIndex.Weapon then templateId = self.CurWeaponFashionId end if not templateId then return end local showSkipList = XGoodsCommonManager.GetGoodsShowSkipId(templateId) if showSkipList and next(showSkipList) then XLuaUiManager.Open("UiSkip", templateId, nil, nil, showSkipList) else XLuaUiManager.Open("UiTip", templateId) end end function XUiFashion:OnBtnLensOut() self.BtnLensOut.gameObject:SetActiveEx(false) self.BtnLensIn.gameObject:SetActiveEx(true) self:UpdateCamera(CameraIndex.Near) end function XUiFashion:OnBtnLensIn() self.BtnLensOut.gameObject:SetActiveEx(true) self.BtnLensIn.gameObject:SetActiveEx(false) self:UpdateCamera(CameraIndex.Normal) end function XUiFashion:OnSliderCharacterChanged() local pos = self.CameraNear[CameraIndex.Near].position self.CameraNear[CameraIndex.Near].position = CS.UnityEngine.Vector3(pos.x, 1.7 - self.SliderCharacter.value, pos.z) end function XUiFashion:InitSceneRoot() local root = self.UiModelGo.transform self.RoleModelPanel = XUiPanelRoleModel.New(root:FindTransform("UiModelParent"), self.Name, nil, true, nil, true) self.PanelWeapon = root:FindTransform("PanelWeapon") self.ImgEffectHuanren = root:FindTransform("ImgEffectHuanren") self.ImgEffectHuanren1 = root:FindTransform("ImgEffectHuanren1") self.CameraNear = { [CameraIndex.Normal] = root:FindTransform("FashionCamNearMain"), [CameraIndex.Near] = root:FindTransform("FashionCamNearest") } end function XUiFashion:UpdateCamera(camera) for _, cameraIndex in pairs(CameraIndex) do self.CameraNear[cameraIndex].gameObject:SetActiveEx(cameraIndex == camera) end end function XUiFashion:PlayUnLockAnimation() local template = XDataCenter.FashionManager.GetFashionTemplate(self.CurFashionId) self.TxtDistanceDesc.text = template.Name local animGo = self.PanelAssistDistanceTip animGo.gameObject:SetActiveEx(true) self:PlayAnimation( "AniPanelAssistDistanceTip", function() if XTool.UObjIsNil(animGo) then return end animGo.gameObject:SetActiveEx(false) end ) end function XUiFashion:ResetPanelBtnLens() self.BtnLensIn.gameObject:SetActiveEx(false) self.BtnLensOut.gameObject:SetActiveEx(true) self.PanelBtnLens.gameObject:SetActiveEx(true) end function XUiFashion:ShowImgEffectHuanren(templateId) self.ImgEffectHuanren.gameObject:SetActiveEx(false) self.ImgEffectHuanren1.gameObject:SetActiveEx(false) if templateId and XCharacterConfigs.IsIsomer(templateId) then self.ImgEffectHuanren1.gameObject:SetActiveEx(true) else self.ImgEffectHuanren.gameObject:SetActiveEx(true) end end