PGRData/Script/matrix/xui/xuiphotograph/XUiPhotographPortrait.lua

993 lines
37 KiB
Lua
Raw Normal View History

2024-09-01 20:49:41 +00:00
local XUiGridPhotographSceneBtn = require("XUi/XUiPhotograph/XUiGridPhotographSceneBtn")
local XUiGridPhotographCharacterBtn = require("XUi/XUiPhotograph/XUiGridPhotographCharacterBtn")
local XUiGridPhotographOtherBtn = require("XUi/XUiPhotograph/XUiGridPhotographOtherBtn")
local XUiGridPhotographFashionBtn = require("XUi/XUiPhotograph/XUiGridPhotographFashionBtn")
local XUiPhotographActionPanel = require("XUi/XUiPhotograph/XUiPhotographActionPanel")
local XUiPhotographSDKPanel = require("XUi/XUiPhotograph/XUiPhotographSDKPanel")
local XUiPhotographPortrait = XLuaUiManager.Register(XLuaUi, "UiPhotographPortrait")
local XUiPanelRoleModel = require("XUi/XUiCharacter/XUiPanelRoleModel")
local OffsetX, OffsetY = 60, 60
local MAX_FASHION_MEMBER_LINE = 3 --涂装表每行个数
local CsXUiBattery = CS.XUiBattery
local CsXQualityManager = CS.XQualityManager
local LowPowerValue = CS.XGame.ClientConfig:GetFloat("UiMainLowPowerValue")
local DateStartTime = CS.XGame.ClientConfig:GetString("BackgroundChangeTimeStr")
local DateEndTime = CS.XGame.ClientConfig:GetString("BackgroundChangeTimeEnd")
local CSDestroy = CS.UnityEngine.Object.Destroy
local Vector2 = CS.UnityEngine.Vector2
local DynamicTableType = {
Scene = 1,
Character = 2,
Fashion = 3,
Action = 4
}
function XUiPhotographPortrait:OnAwake()
self:InitCb()
self:InitUi()
end
function XUiPhotographPortrait:OnStart(orientation, charId, fashionId, uiPhotograph)
self.Orientation = orientation
self.SetData = XDataCenter.PhotographManager.GetSetData()
self.OldCharacterId = charId
self.CharacterId = charId
self.FashionId = fashionId
self.UiPhotograph = uiPhotograph
self:InitView()
end
function XUiPhotographPortrait:OnEnable()
if self.Timer then
XScheduleManager.UnSchedule(self.Timer)
self.Timer = nil
end
self.Timer = XScheduleManager.ScheduleForever(function()
self:Update()
end, 0)
if self.SignBoardPlayer then
self.SignBoardPlayer:OnEnable()
end
self:UpdateView()
XDataCenter.SignBoardManager.AddRoleActionUiAnimListener(self)
-- 开启时钟
self.ClockTimer = XUiHelper.SetClockTimeTempFun(self)
end
function XUiPhotographPortrait:Update()
local dt = CS.UnityEngine.Time.deltaTime
if self.SignBoardPlayer then
self.SignBoardPlayer:Update(dt)
end
local width, height = CS.UnityEngine.Screen.width, CS.UnityEngine.Screen.height
if width ~= self.StartWidth or height ~= self.StartHeight then
self:InitProportionImage()
self.StartWidth = width
self.StartHeight = height
end
end
function XUiPhotographPortrait:OnDisable()
if self.Timer then
XScheduleManager.UnSchedule(self.Timer)
self.Timer = nil
end
if self.SignBoardPlayer then
self.SignBoardPlayer:OnDisable()
end
XDataCenter.SignBoardManager.RemoveRoleActionUiAnimListener(self)
-- 关闭时钟
if self.ClockTimer then
XUiHelper.StopClockTimeTempFun(self, self.ClockTimer)
self.ClockTimer = nil
end
end
function XUiPhotographPortrait:OnDestroy()
if self.Timer then
XScheduleManager.UnSchedule(self.Timer)
self.Timer = nil
end
if self.SignBoardPlayer then
self.SignBoardPlayer:OnDestroy()
end
CS.UnityEngine.Screen.orientation = self.Orientation
CS.XResolutionManager.IsLandscape = true
XDataCenter.PhotographManager.ClearTextureCache()
end
function XUiPhotographPortrait:Close()
self:EmitSignal("Refresh", self.CharacterId, self.FashionId, self.OldCharacterId)
self.Super.Close(self)
end
function XUiPhotographPortrait:InitView()
self.TxtUserName.text = XPlayer.Name
self.TxtLevel.text = XPlayer.GetLevelOrHonorLevel()
self.TxtID.text = string.format("ID: %s", XPlayer.Id)
self.TxtRank.text = XPhotographConfigs.GetRankLevelText()
self.ImgGlory.gameObject:SetActiveEx(XPlayer.IsHonorLevelOpen())
self:SwitchMenuPanel(false)
self:SwitchActionPanel(false)
local sceneId = XDataCenter.PhotographManager.GetCurSelectSceneId()
local sceneTemplate = XDataCenter.PhotographManager.GetSceneTemplateById(sceneId)
local scenePath, modelPath = XSceneModelConfigs.GetSceneAndModelPathById(sceneTemplate.SceneModelId)
self:LoadUiScene(scenePath, modelPath, handler(self, self.OnUiSceneLoaded), false)
self:RefreshBtnSynchronous()
end
function XUiPhotographPortrait:OnGetEvents()
return {
XEventId.EVENT_PHOTO_CHANGE_SCENE,
XEventId.EVENT_PHOTO_CHANGE_MODEL,
XEventId.EVENT_PHOTO_PLAY_ACTION,
XEventId.EVENT_PHOTO_CHANGE_ANIMATION_STATE,
XEventId.EVENT_PHOTO_REPLAY_ANIMATION,
}
end
function XUiPhotographPortrait:OnNotify(evt, ...)
if evt == XEventId.EVENT_PHOTO_CHANGE_SCENE then
self.SignBoardPlayer:Stop()
self:UpdateScene(...)
self:RefreshBtnSynchronous()
self:RefreshActionView()
elseif evt == XEventId.EVENT_PHOTO_CHANGE_MODEL then
self.SignBoardPlayer:Stop()
self:UpdateRoleModel(...)
self:PlayChangeActionEffect()
self:RefreshBtnSynchronous()
elseif evt == XEventId.EVENT_PHOTO_PLAY_ACTION then
self:ForcePlay(...)
elseif evt == XEventId.EVENT_PHOTO_CHANGE_ANIMATION_STATE then
self:UpdateAnimation(...)
elseif evt == XEventId.EVENT_PHOTO_REPLAY_ANIMATION then
self:Replay()
end
end
function XUiPhotographPortrait:UpdateView()
self:BindViewModelPropertyToObj(self.SetData, function(logo)
local show = logo.Value ~= 0
self.ImgLogo.gameObject:SetActiveEx(show)
if show then
XPhotographConfigs.SetLogoOrInfoPos(self.ImgLogo.transform, logo, false, OffsetX, OffsetY)
end
XDataCenter.PhotographManager.SaveSetData()
end, "_LogoAlignment")
self:BindViewModelPropertyToObj(self.SetData, function(info)
local show = info.Value ~= 0
self.PanelName.gameObject:SetActiveEx(show)
if show then
XPhotographConfigs.SetLogoOrInfoPos(self.PanelName, info, true, OffsetX, OffsetY, self.PanelAutoLayout)
end
XDataCenter.PhotographManager.SaveSetData()
end, "_InfoAlignment")
self:BindViewModelPropertyToObj(self.SetData, function(openLevel)
self.TxtLevel.transform.parent.gameObject:SetActiveEx(XTool.IsNumberValid(openLevel))
XDataCenter.PhotographManager.SaveSetData()
end, "_OpenLevel")
self:BindViewModelPropertyToObj(self.SetData, function(openUId)
self.TxtID.gameObject:SetActiveEx(XTool.IsNumberValid(openUId))
XDataCenter.PhotographManager.SaveSetData()
end, "_OpenUId")
end
function XUiPhotographPortrait:InitCb()
self.BtnBack.CallBack = function()
self:OnBtnBackClick()
end
self.BtnHide.CallBack = function()
self:OnBtnHideClick()
end
self.BtnSet.CallBack = function()
self:OnBtnSetClick()
end
self.BtnSynchronous.CallBack = function()
self:OnBtnSynchronousClick()
end
--self.BtnPhotograph.CallBack = function()
--self:OnBtnPhotographClick()
--end
self.BtnPhotograph:SetButtonState(3) -- 彻底隐藏拍照按钮
self.BtnMenu.CallBack = function()
self:OnBtnMenuClick()
end
self.BtnAction.CallBack = function()
self:OnBtnActionClick()
end
self.BtnCaptureClose.CallBack = function()
self:SwitchCapturePanel(false)
end
self.Btn.CallBack = function()
self:OnBtnClick()
end
if self.BtnBreakActionAnim then
self.BtnBreakActionAnim.CallBack = function () self:PlayRoleActionUiBreakAnim() end
end
end
function XUiPhotographPortrait:InitUi()
--场景列表
self.DynamicSceneTable = XDynamicTableNormal.New(self.PanelSceneList)
self.DynamicSceneTable:SetProxy(XUiGridPhotographSceneBtn)
self.DynamicSceneTable:SetDelegate(self)
--角色列表
self.DynamicCharTable = XDynamicTableNormal.New(self.PanelCharacterList)
self.DynamicCharTable:SetProxy(XUiGridPhotographCharacterBtn)
self.DynamicCharTable:SetDelegate(self)
--涂装列表
self.DynamicFashionTable = XDynamicTableNormal.New(self.PanelFashionList)
self.DynamicFashionTable:SetProxy(XUiGridPhotographFashionBtn)
self.DynamicFashionTable:SetDelegate(self)
--动作列表
self.DynamicActionTable = XDynamicTableNormal.New(self.PanelActionList)
self.DynamicActionTable:SetProxy(XUiGridPhotographOtherBtn)
self.DynamicActionTable:SetDelegate(self)
--ButtonGroup
local tabBtn = {
self.BtnScene,
self.BtnCharacter,
self.BtnFashion
}
self.TabBtnIndex = {
BtnScene = 1,
BtnCharacter = 2,
BtnFashion = 3
}
self.ImgPicture.transform.anchorMin = CS.UnityEngine.Vector2(0.5, 0.5)
self.ImgPicture.transform.anchorMax = CS.UnityEngine.Vector2(0.5, 0.5)
self.SafeAdapter = self.Transform:Find("SafeAreaContentPane"):GetComponent("XUiSafeAreaAdapter")
self.PanelBtn:Init(tabBtn, function(index) self:OnSelectMenu(index) end)
self.PanelAutoLayout = self.PanelName:GetComponent("XAutoLayoutGroup")
self.TxtRank = self.TxtLevel.transform.parent:Find("TxtLv"):GetComponent("Text")
self.ImgGlory = self.TxtLevel.transform.parent:Find("Icon")
self.StartWidth = CS.UnityEngine.Screen.width
self.StartHeight = CS.UnityEngine.Screen.height
self.ContainerSize = self.ImageContainer.sizeDelta
self:InitProportionImage()
--Player
self.Parent = self --奇怪的操作
local signBoardPlayer = require("XCommon/XSignBoardPlayer").New(self, CS.XGame.ClientConfig:GetInt("SignBoardPlayInterval"), CS.XGame.ClientConfig:GetFloat("SignBoardDelayInterval"))
local playerData = XDataCenter.SignBoardManager.GetSignBoardPlayerData()
signBoardPlayer:SetPlayerData(playerData)
self.SignBoardPlayer = signBoardPlayer
--ActionPanel
self.ActionCtrlPanel = XUiPhotographActionPanel.New(self.PanelAction)
self.ActionCtrlPanel:SetViewState(true)
self.ActionCtrlPanel:Refresh(false, false)
--SDKPanel
self.SDKPanel = XUiPhotographSDKPanel.New(self, self.PanelSDK)
end
--region ------------------动态列表 start-------------------
function XUiPhotographPortrait:SetupDynamicTable(tableType)
if self.CurTableType == tableType then
return
end
self.CurTableType = tableType
self.PanelSceneList.gameObject:SetActiveEx(false)
self.PanelCharacterList.gameObject:SetActiveEx(false)
self.PanelFashionList.gameObject:SetActiveEx(false)
self.PanelActionList.gameObject:SetActiveEx(false)
if self.CurTableType == DynamicTableType.Scene then
self.PanelSceneList.gameObject:SetActiveEx(true)
self.CurSceneIndex = XDataCenter.PhotographManager.GetSceneIndexById(XDataCenter.PhotographManager.GetCurSelectSceneId())
--self.CurSceneIndex = 1
self.DynamicSceneTable:SetDataSource(XDataCenter.PhotographManager.GetSceneIdList())
self.DynamicSceneTable:ReloadDataASync(self.CurSceneIndex)
elseif self.CurTableType == DynamicTableType.Character then
self.PanelCharacterList.gameObject:SetActiveEx(true)
self.CurCharIndex = XDataCenter.PhotographManager.GetCharIndexById(self.CharacterId)
self.DynamicCharTable:SetDataSource(XDataCenter.PhotographManager.GetCharacterList())
self.DynamicCharTable:ReloadDataASync(self.CurCharIndex)
elseif self.CurTableType == DynamicTableType.Fashion then
self.PanelFashionList.gameObject:SetActiveEx(true)
self.FashionList = XDataCenter.FashionManager.GetCurrentTimeFashionByCharId(self.CharacterId)
self.CurFashionIndex = self.CurFashionIndex and self.CurFashionIndex
or XDataCenter.PhotographManager.GetFashionIndexByFashionList(self.FashionId, self.FashionList)
self.DynamicFashionTable:SetDataSource(self.FashionList)
--动态列表的算法会屏蔽掉应该显示的格子
self.DynamicFashionTable:ReloadDataASync(self.CurFashionIndex - MAX_FASHION_MEMBER_LINE)
elseif self.CurTableType == DynamicTableType.Action then
self.PanelActionList.gameObject:SetActiveEx(true)
self.ActionList = XFavorabilityConfigs.GetCharacterActionById(self.CharacterId) or {}
self.DynamicActionTable:SetDataSource(self.ActionList)
self.DynamicActionTable:ReloadDataASync()
end
end
function XUiPhotographPortrait:OnDynamicTableEvent(evt, index, grid)
if self.CurTableType == DynamicTableType.Scene then
self:OnDynamicSceneTableEvent(evt, index, grid)
elseif self.CurTableType == DynamicTableType.Character then
self:OnDynamicCharTableEvent(evt, index, grid)
elseif self.CurTableType == DynamicTableType.Fashion then
self:OnDynamicFashionTableEvent(evt, index, grid)
elseif self.CurTableType == DynamicTableType.Action then
self:OnDynamicActionTableEvent(evt, index, grid)
end
end
function XUiPhotographPortrait:OnDynamicSceneTableEvent(evt, index, grid)
if evt == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_INIT then
grid:Init(self)
elseif evt == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_ATINDEX then
local sceneId = XDataCenter.PhotographManager.GetSceneIdByIndex(index)
local data = XDataCenter.PhotographManager.GetSceneTemplateById(sceneId)
grid:Reset()
grid:Refrash(data)
if self.CurSceneIndex and self.CurSceneIndex == index then
self.CurSceneGrid = grid
grid:SetSelect(true)
end
elseif evt == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_TOUCHED then
local sceneId = XDataCenter.PhotographManager.GetSceneIdByIndex(index)
local sceneTemplate = XDataCenter.PhotographManager.GetSceneTemplateById(sceneId)
local isHas = XDataCenter.PhotographManager.CheckSceneIsHaveById(sceneId)
if not isHas then
XUiManager.TipPortraitMsg(sceneTemplate.LockDec)
return
end
if self.CurSceneIndex and self.CurSceneIndex == index then
return
end
if self.CurSceneGrid ~= nil then
self.CurSceneGrid:SetSelect(false)
end
self.CurSceneGrid = grid
self.CurSceneIndex = index
sceneId = XDataCenter.PhotographManager.GetSceneIdByIndex(index)
local data = XDataCenter.PhotographManager.GetSceneTemplateById(sceneId)
grid:OnTouched(data)
XPhotographConfigs.CsRecord(XGlobalVar.BtnPhotograph.BtnUiPhotographPortraitBtnScene, {
scene_id = sceneId
})
end
end
function XUiPhotographPortrait:OnDynamicCharTableEvent(evt, index, grid)
if evt == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_INIT then
grid:Init(self)
elseif evt == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_ATINDEX then
local data = XDataCenter.PhotographManager.GetCharacterDataByIndex(index)
grid:Reset()
grid:Refrash(data)
if self.CurCharIndex and self.CurCharIndex == index then
self.CurCharGrid = grid
grid:SetSelect(true)
end
elseif evt == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_TOUCHED then
if self.CurCharIndex and self.CurCharIndex == index then
return
end
if self.CurCharGrid ~= nil then
self.CurCharGrid:SetSelect(false)
end
self.CurCharGrid = grid
local data = XDataCenter.PhotographManager.GetCharacterDataByIndex(index)
self:ClearAnimationCache(data.Id)
self.CharacterId = data.Id
self.CurCharIndex = index
self.CurFashionIndex = nil -- 切换角色清空涂装index 再次点击涂装会重新获取index
grid:OnTouched(self.CharacterId)
XPhotographConfigs.CsRecord(XGlobalVar.BtnPhotograph.BtnUiPhotographPortraitBtnCharacter, {
character_id = self.CharacterId
})
end
end
function XUiPhotographPortrait:OnDynamicFashionTableEvent(evt, index, grid)
if evt == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_ATINDEX then
grid:Refresh(self.FashionList[index], self.CurFashionIndex == index)
if self.CurFashionIndex and self.CurFashionIndex == index then
self.CurFashionGrid = grid
grid:SetSelect(true)
end
elseif evt == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_TOUCHED then
local fashionId = self.FashionList[index]
local isHas = XDataCenter.FashionManager.CheckHasFashion(fashionId)
if not isHas then
XUiManager.TipPortraitMsg(CS.XTextManager.GetText("PhotoModeNoFashion"))
return
end
local status = XDataCenter.FashionManager.GetFashionStatus(fashionId)
if status == XDataCenter.FashionManager.FashionStatus.Lock then
XUiManager.TipPortraitText("FashionNoGet")
return
end
if self.CurFashionIndex and self.CurFashionIndex == index then
return
end
if self.CurFashionGrid ~= nil then
self.CurFashionGrid:SetSelect(false)
end
self.CurFashionGrid = grid
self.CurFashionIndex = index
grid:OnTouched(self.CharacterId)
XPhotographConfigs.CsRecord(XGlobalVar.BtnPhotograph.BtnUiPhotographPortraitBtnFashion, {
fashion_id = fashionId,
character_id = self.CharacterId
})
end
end
function XUiPhotographPortrait:OnDynamicActionTableEvent(evt, index, grid)
if evt == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_INIT then
grid:Init(self)
elseif evt == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_ATINDEX then
local data = self.ActionList[index]
local charData = XDataCenter.PhotographManager.GetCharacterDataById(self.CharacterId)
grid:Reset()
grid:RefrashAction(data, charData)
elseif evt == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_TOUCHED then
local tryFashionId = self.FashionId
local trySceneId = self.CurrSeleSceneId
local isHas = XDataCenter.FavorabilityManager.CheckTryCharacterActionUnlock(self.ActionList[index], XDataCenter.PhotographManager.GetCharacterDataById(self.CharacterId).TrustLv, tryFashionId, trySceneId)
if not isHas then
XUiManager.TipPortraitMsg(self.ActionList[index].ConditionDescript)
return
end
self:PlayAnimation("PanelActionEnable")
if self.CurActionGrid ~= nil then
self.CurActionGrid:SetSelect(false)
if self.CurActionGrid ~= grid then
self.SignBoardPlayer:Stop(true)
end
end
self.CurActionGrid = grid
self.ActionCtrlPanel:SetTxtTitle(self.ActionList[index].Name)
grid:OnActionTouched(self.ActionList[index])
self:SwitchActionPanel(false)
XPhotographConfigs.CsRecord(XGlobalVar.BtnPhotograph.BtnUiPhotographPortraitBtnAction, {
action_id = self.ActionList[index].Id,
character_id = self.CharacterId
})
end
end
--endregion------------------动态列表 finish------------------
function XUiPhotographPortrait:OnUiSceneLoaded()
self:PlayAnimation("Loading2")
--self:SetGameObject()
local root = self.UiModelGo.transform
self.CameraFar = self:FindVirtualCamera("CamFarMain")
self.CameraNear = self:FindVirtualCamera("CamNearMain")
self.CameraComponentFar = root:FindTransform("UiFarCamera"):GetComponent("Camera")
self.CameraComponentNear = root:FindTransform("UiNearCamera"):GetComponent("Camera")
self.UiModelParent = root:FindTransform("UiModelParent")
self.ChangeActionEffect = root:FindTransform("ChangeActionEffect")
self.RoleModel = XUiPanelRoleModel.New(self.UiModelParent, self.Name, true, true, false, true, nil, nil, true)
self:UpdateRoleModel(self.CharacterId, self.FashionId)
self.CameraFar.gameObject:SetActiveEx(true)
self.CameraNear.gameObject:SetActiveEx(true)
self:UpdateBatteryMode()
self.BtnSet.gameObject:SetActiveEx(false)
end
function XUiPhotographPortrait:UpdateScene(sceneId)
XDataCenter.PhotographManager.SetCurSelectSceneId(sceneId)
local sceneTemplate = XDataCenter.PhotographManager.GetSceneTemplateById(sceneId)
local scenePath, modelPath = XSceneModelConfigs.GetSceneAndModelPathById(sceneTemplate.SceneModelId)
self:LoadUiScene(scenePath, modelPath, handler(self, self.OnUiSceneLoaded), false)
self.CurrSeleSceneId = sceneId
-- 开启时钟
self.ClockTimer = XUiHelper.SetClockTimeTempFun(self)
end
function XUiPhotographPortrait:ForcePlay(signBoardActionId, actionId)
self.SignBoardActionId = signBoardActionId
self.ActionId = actionId or self.ActionId -- characterAction表的主键
local config = XSignBoardConfigs.GetSignBoardConfigById(signBoardActionId)
if self.SignBoardPlayer:GetInterruptDetection() and self.SignBoardPlayer.PlayerData.PlayingElement.Id ~= config.Id then
self:PlayChangeActionEffect()
end
self:UpdateAnimation(false)
self.ActionCtrlPanel:SetBtnPlayState(false)
XScheduleManager.ScheduleNextFrame(function()
self.SignBoardPlayer:ForcePlayCross(config)
end)
self.SignBoardPlayer:SetInterruptDetection(true)
end
function XUiPhotographPortrait:Play(element)
if not element then
return
end
self:RefreshActionView()
if element.SignBoardConfig.CvId and element.SignBoardConfig.CvId > 0 then
if element.CvType then
self.PlayingCv = CS.XAudioManager.PlayCvWithCvType(element.SignBoardConfig.CvId, element.CvType)
else
self.PlayingCv = CS.XAudioManager.PlayCv(element.SignBoardConfig.CvId)
end
end
local actionId = element.SignBoardConfig.ActionId
if actionId then
self.RoleModel:PlayAnima(actionId, true)
self.RoleModel:LoadCharacterUiEffect(tonumber(element.SignBoardConfig.RoleId), actionId)
end
-- 关闭角色头部跟随
self.RoleModel:SetXPostFaicalControllerActive(false)
end
function XUiPhotographPortrait:PlayCross(element)
if not element then
return
end
self:RefreshActionView()
if element.SignBoardConfig.CvId and element.SignBoardConfig.CvId > 0 then
if element.CvType then
self.PlayingCv = CS.XAudioManager.PlayCvWithCvType(element.SignBoardConfig.CvId, element.CvType)
else
self.PlayingCv = CS.XAudioManager.PlayCv(element.SignBoardConfig.CvId)
end
end
local actionId = element.SignBoardConfig.ActionId
if actionId then
self.RoleModel:PlayAnimaCross(actionId, true)
self.RoleModel:LoadCharacterUiEffect(tonumber(element.SignBoardConfig.RoleId), actionId)
end
-- 关闭角色头部跟随
self.RoleModel:SetXPostFaicalControllerActive(false)
end
function XUiPhotographPortrait:OnStop(playingElement, force)
if self.PlayingCv then
self.PlayingCv:Stop()
self.PlayingCv = nil
end
if playingElement then
self.RoleAnimator.speed = 1
self.RoleModel:StopAnima(playingElement.SignBoardConfig.ActionId, force)
self.RoleModel:LoadCurrentCharacterDefaultUiEffect()
end
self.SignBoardPlayer:SetInterruptDetection(false)
self:RefreshActionView()
-- 开启角色头部跟随
self.RoleModel:SetXPostFaicalControllerActive(true)
end
function XUiPhotographPortrait:ClearAnimationCache(charId)
if charId ~= self.CharacterId then
self.SignBoardActionId = nil
end
end
function XUiPhotographPortrait:PlayChangeActionEffect()
if self.ChangeActionEffect then
self.ChangeActionEffect.gameObject:SetActive(false)
self.ChangeActionEffect.gameObject:SetActive(true)
end
end
function XUiPhotographPortrait:UpdateAnimation(pause)
if not self.RoleAnimator then
return
end
local speed
if pause then
speed = 0
self.SignBoardPlayer:Pause()
if self.PlayingCv then
self.PlayingCv:Pause()
end
else
speed = 1
self.SignBoardPlayer:Resume()
if self.PlayingCv then
self.PlayingCv:Resume()
end
end
self.RoleAnimator.speed = speed
end
function XUiPhotographPortrait:Replay()
if not XTool.IsNumberValid(self.SignBoardActionId) then
return
end
local configs = XFavorabilityConfigs.GetCharacterActionById(self.CharacterId)
local data = nil
for k, v in pairs(configs) do
if v.Id == self.ActionId then
data = v
end
end
if XTool.IsTableEmpty(data) then
return
end
local tryFashionId = self.FashionId
local trySceneId = self.CurrSeleSceneId
local isHas = XDataCenter.FavorabilityManager.CheckTryCharacterActionUnlock(data, XDataCenter.PhotographManager.GetCharacterDataById(self.CharacterId).TrustLv, tryFashionId, trySceneId)
if not isHas then
XUiManager.TipError(data.ConditionDescript)
return
end
self.SignBoardPlayer:Stop()
self:ForcePlay(self.SignBoardActionId)
end
function XUiPhotographPortrait:UpdateRoleModel(charId, fashionId)
self:ClearAnimationCache(charId)
self.CharacterId = charId
self.FashionId = fashionId
XDataCenter.DisplayManager.UpdateRoleModel(self.RoleModel, charId, nil, fashionId)
self.RoleAnimator = self.RoleModel:GetAnimator()
self.RoleModel:SetXPostFaicalControllerActive(true)
end
--region ------------------点击事件 start-------------------
function XUiPhotographPortrait:OnSelectMenu(index)
self:PlayAnimation("Qiehuan")
self.SelectIndex = index
if index == self.TabBtnIndex.BtnScene then
XPhotographConfigs.CsRecord(XGlobalVar.BtnPhotograph.BtnUiPhotographPortraitBtnScene)
elseif index == self.TabBtnIndex.BtnCharacter then
XPhotographConfigs.CsRecord(XGlobalVar.BtnPhotograph.BtnUiPhotographPortraitBtnCharacter)
elseif index == self.TabBtnIndex.BtnFashion then
XPhotographConfigs.CsRecord(XGlobalVar.BtnPhotograph.BtnUiPhotographPortraitBtnFashion)
end
self:SetupDynamicTable(index)
end
--编辑
function XUiPhotographPortrait:OnBtnMenuClick()
if self:IsShowActionPanel() then
self:SwitchActionPanel(false)
end
self:SwitchMenuPanel(true)
local type = self.SelectIndex and self.SelectIndex or DynamicTableType.Scene
self.PanelBtn:SelectIndex(type)
end
--动作
function XUiPhotographPortrait:OnBtnActionClick()
XPhotographConfigs.CsRecord(XGlobalVar.BtnPhotograph.BtnUiPhotographPortraitBtnAction)
if self:IsShowMenuPanel() then
self:SwitchMenuPanel(false)
end
self:SwitchActionPanel(true)
self:SetupDynamicTable(DynamicTableType.Action)
end
--同步主界面
function XUiPhotographPortrait:OnBtnSynchronousClick()
if not self:CheckChanged() then
XUiManager.TipPortraitText("PhotoModeCannotSyncTips")
return
end
XPhotographConfigs.CsRecord(XGlobalVar.BtnPhotograph.BtnUiPhotographPortraitBtnSynchronous, {
character_id = self.CharacterId,
fashion_id = self.FashionId,
scene_id = XDataCenter.PhotographManager.GetCurSelectSceneId()
})
XDataCenter.PhotographManager.ChangeDisplay(XDataCenter.PhotographManager.GetCurSelectSceneId(),
self.CharacterId, self.FashionId, function ()
self.OldCharacterId = self.CharacterId
self:RefreshBtnSynchronous()
XUiManager.TipPortraitText("PhotoModeChangeSuccess")
end)
end
--返回
function XUiPhotographPortrait:OnBtnBackClick()
if self:IsShowMenuPanel() then
self:SwitchMenuPanel(false)
return
end
if self:IsShowActionPanel() then
self:SwitchActionPanel(false)
return
end
self:Close()
end
--设置
function XUiPhotographPortrait:OnBtnSetClick()
XPhotographConfigs.CsRecord(XGlobalVar.BtnPhotograph.BtnUiPhotographPortraitBtnSet)
XLuaUiManager.Open("UiPhotographPortraitSet", self.SetData)
end
--隐藏UI
function XUiPhotographPortrait:OnBtnHideClick()
XPhotographConfigs.CsRecord(XGlobalVar.BtnPhotograph.BtnUiPhotographPortraitBtnHide)
self:RefreshViewActive(not self.BtnHide:GetToggleState())
end
function XUiPhotographPortrait:OnBtnClick()
if self:IsShowMenuPanel() then
self:SwitchMenuPanel(false)
elseif self:IsShowActionPanel() then
self:SwitchActionPanel(false)
elseif self.BtnHide:GetToggleState() then
self.BtnHide:SetButtonState(CS.UiButtonState.Normal)
self:OnBtnHideClick()
end
end
--拍照
function XUiPhotographPortrait:OnBtnPhotographClick()
XPhotographConfigs.CsRecord(XGlobalVar.BtnPhotograph.BtnUiPhotographPortraitBtnPhotograph, {
character_id = self.CharacterId,
fashion_id = self.FashionId,
scene_id = XDataCenter.PhotographManager.GetCurSelectSceneId()
})
-- 将人物渲染到ImgPicture内
XCameraHelper.ScreenShotNew(self.ImgPicture, self.CameraComponentNear, function()
-- 将最终图案渲染到ImagePhoto中
XCameraHelper.ScreenShotNew(self.ImagePhoto, self.CameraCupture, function(screenShot)
CsXUiManager.Instance:ChangeCanvasTypeCamera(CsXUiType.Normal, CS.XUiManager.Instance.UiCamera)
self.ShareTexture = screenShot
self.PhotoName = string.format("[%s]_Portrait_%s", tostring(XPlayer.Id), XTime.GetServerNowTimestamp())
self:PlayAnimation("Shanguang", function()
if not XTool.UObjIsNil(self.ImgPicture.mainTexture)
and self.ImgPicture.mainTexture ~= "UnityWhite"
then
CSDestroy(self.ImgPicture.mainTexture)
end
end)
self:PlayAnimation("Photo", function()
self.BtnCaptureClose.gameObject:SetActiveEx(true)
end, function()
self.BtnCaptureClose.gameObject:SetActiveEx(false)
self:SwitchCapturePanel(true)
end
)
end, function() CsXUiManager.Instance:ChangeCanvasTypeCamera(CsXUiType.Normal, self.CameraCupture) end)
end)
XDataCenter.PhotographManager.SendPhotoGraphRequest()
end
--endregion------------------点击事件 finish------------------
--region ------------------界面显隐 start-------------------
function XUiPhotographPortrait:RefreshViewActive(show)
local animName = show and "UiEnable" or "UiDisable"
self:PlayAnimation(animName)
local select = self.BtnHide:GetToggleState()
show = show and not select
if not show then
self:SwitchMenuPanel(show)
self:SwitchActionPanel(show)
end
self.BtnBack.gameObject:SetActiveEx(show)
--self.BtnSet.gameObject:SetActiveEx(show)
self:RefreshBottom(show)
self:RefreshBtnSynchronous()
end
function XUiPhotographPortrait:RefreshBottom(show, ctrlPhotograph)
local select = self.BtnHide:GetToggleState()
self.BtnAction.gameObject:SetActiveEx(show and not select)
self.BtnMenu.gameObject:SetActiveEx(show and not select)
self.Btn.gameObject:SetActiveEx(not show and select)
if ctrlPhotograph then
self.BtnPhotograph.gameObject:SetActiveEx(false)
end
end
function XUiPhotographPortrait:SwitchMenuPanel(show)
self.PanelMenu.gameObject:SetActiveEx(show)
self:RefreshBottom(not show, true)
self:RefreshActionView()
end
function XUiPhotographPortrait:IsShowMenuPanel()
return self.PanelMenu.gameObject.activeInHierarchy
end
function XUiPhotographPortrait:SwitchActionPanel(show)
self.PanelActionView.gameObject:SetActiveEx(show)
self:RefreshBottom(not show, true)
end
function XUiPhotographPortrait:IsShowActionPanel()
return self.PanelActionView.gameObject.activeInHierarchy
end
function XUiPhotographPortrait:SwitchCapturePanel(show)
self.PanelCapture.gameObject:SetActiveEx(show)
if show then
self.SDKPanel:Show()
else
self.SDKPanel:Hide()
end
self:RefreshActionView()
self.BtnHide.gameObject:SetActiveEx(not show)
self:RefreshViewActive(not show)
self.Btn.gameObject:SetActiveEx(not show)
self.BtnPhotograph.gameObject:SetActiveEx(false)
end
function XUiPhotographPortrait:IsShowCapturePanel()
return self.PanelCapture.gameObject.activeInHierarchy
end
function XUiPhotographPortrait:RefreshActionView()
local showOtherPanel = self:IsShowMenuPanel() or self:IsShowCapturePanel()
local showPause = (self.SignBoardPlayer.Status == 1 or self.SignBoardPlayer.Status == 3)
and not showOtherPanel
local showReplay = self.SignBoardActionId ~= nil and not showOtherPanel
self.ActionCtrlPanel:Refresh(showPause, showReplay)
self.ActionCtrlPanel:SetBtnPlayState(self.SignBoardPlayer.Status == 3)
end
function XUiPhotographPortrait:RefreshBtnSynchronous()
local changed = self:CheckChanged()
self.BtnSynchronous.gameObject:SetActiveEx(changed and not self.BtnHide:GetToggleState() and not self:IsShowCapturePanel())
end
function XUiPhotographPortrait:CheckChanged()
local sceneId = XDataCenter.PhotographManager.GetCurSceneId()
local selectSceneId = XDataCenter.PhotographManager.GetCurSelectSceneId()
if self.CharacterId ~= self.OldCharacterId or sceneId ~= selectSceneId then
return true
end
local fashionId = XDataCenter.CharacterManager.GetShowFashionId(self.CharacterId)
return self.FashionId ~= fashionId
end
function XUiPhotographPortrait:InitProportionImage()
--切换横竖屏后,获取到的宽高不一定正确,会在延后几帧更新
local width, height = CS.UnityEngine.Screen.width, CS.UnityEngine.Screen.height
local defaultSize = self.ContainerSize
local ratio = width / height
local screenH
--竖屏以宽度为基准进行等比缩放
if ratio < 1 then
screenH = 1 / ratio * defaultSize.x
else
screenH = ratio * defaultSize.x
end
self.ImageContainer.sizeDelta = Vector2(defaultSize.x, screenH)
self.ImgPicture.rectTransform.sizeDelta = Vector2(CsXUiManager.RealScreenWidth, CsXUiManager.RealScreenHeight)
self.SafeAdapter:UpdateSpecialScreenOff()
end
function XUiPhotographPortrait:UpdateBatteryMode()
if CsXQualityManager.Instance.IsSimulator and not CsXUiBattery.DebugMode then
return
end
local animationRoot = self.UiSceneInfo.Transform:Find("Animations")
if XTool.UObjIsNil(animationRoot) then return end
local toChargeTimeLine = animationRoot:Find("ToChargeTimeLine")
local toFullTimeLine = animationRoot:Find("ToFullTimeLine")
local fullTimeLine = animationRoot:Find("FullTimeLine")
local chargeTimeLine = animationRoot:Find("ChargeTimeLine")
toChargeTimeLine.gameObject:SetActiveEx(false)
toFullTimeLine.gameObject:SetActiveEx(false)
fullTimeLine.gameObject:SetActiveEx(false)
chargeTimeLine.gameObject:SetActiveEx(false)
local curSelectSceneId = XDataCenter.PhotographManager.GetCurSelectSceneId()
local particleGroupName = XDataCenter.PhotographManager.GetSceneTemplateById(curSelectSceneId).ParticleGroupName
local chargeAnimator
if not string.IsNilOrEmpty(particleGroupName) then
local chargeAnimatorTrans = self.UiSceneInfo.Transform:FindTransform(particleGroupName)
if chargeAnimatorTrans then
chargeAnimator = chargeAnimatorTrans:GetComponent("Animator")
else
XLog.Error("Can't Find \"" .. particleGroupName .. "\", Please Check \"ParticleGroupName\" In Share/PhotoMode/Background.tab")
end
end
local type = XPhotographConfigs.GetBackgroundTypeById(curSelectSceneId)
if type == XPhotographConfigs.BackGroundType.PowerSaved then
if CsXUiBattery.IsCharging then --充电状态
if chargeAnimator then chargeAnimator:Play("Full") end
fullTimeLine.gameObject:SetActiveEx(true)
else
if CsXUiBattery.BatteryLevel > LowPowerValue then -- 比较电量
if chargeAnimator then chargeAnimator:Play("Full") end
fullTimeLine.gameObject:SetActiveEx(true)
else
if chargeAnimator then chargeAnimator:Play("Low") end
chargeTimeLine.gameObject:SetActiveEx(true)
end
end
else
local startTime = XTime.ParseToTimestamp(DateStartTime)
local endTime = XTime.ParseToTimestamp(DateEndTime)
local nowTime = XTime.ParseToTimestamp(CS.System.DateTime.Now:ToLocalTime():ToString())
if startTime > nowTime and nowTime > endTime then -- 比较时间
if chargeAnimator then chargeAnimator:Play("Full") end
fullTimeLine.gameObject:SetActiveEx(true)
else
if chargeAnimator then chargeAnimator:Play("Low") end
chargeTimeLine.gameObject:SetActiveEx(true)
end
end
end
--endregion------------------界面显隐 finish------------------
-- v1.32 播放角色特殊动作Ui动画
-- ===================================================
-- 播放场景动画
function XUiPhotographPortrait:PlaySceneAnim(element)
if not element then
return
end
local animRoot = self.UiModelGo.transform
local sceneId = XDataCenter.PhotographManager.GetCurSelectSceneId()
local sighBoardId = element.SignBoardConfig.Id
XDataCenter.SignBoardManager.LoadSceneAnim(animRoot, self.CameraFar, self.CameraNear, sceneId, sighBoardId, self)
XDataCenter.SignBoardManager.SceneAnimPlay()
end
function XUiPhotographPortrait:PlayRoleActionUiDisableAnim(signBoardid)
self:SetActionMask(true)
if XSignBoardConfigs.CheckIsUseNormalUiAnim(signBoardid, self.Name) then
self:PlayAnimation("UiDisable")
end
end
function XUiPhotographPortrait:PlayRoleActionUiEnableAnim(signBoardid)
self:SetActionMask(false)
if XSignBoardConfigs.CheckIsUseNormalUiAnim(signBoardid, self.Name) then
self:PlayAnimationWithMask("UiEnable")
end
end
function XUiPhotographPortrait:PlayRoleActionUiBreakAnim()
self:SetActionMask(false)
self.SignBoardPlayer:Stop()
end
function XUiPhotographPortrait:SetActionMask(active)
if self.BtnBreakActionAnim then
self.BtnBreakActionAnim.gameObject:SetActiveEx(active)
end
end
-- ===================================================