PGRData/Script/matrix/xui/xuiphotograph/XUiPhotographPanel.lua
2024-09-01 22:49:41 +02:00

456 lines
No EOL
19 KiB
Lua

local CSXTextManagerGetText = CS.XTextManager.GetText
local XUiPhotographPanel = XClass(nil, "XUiPhotographPanel")
local XUiGridPhotographSceneBtn = require("XUi/XUiPhotograph/XUiGridPhotographSceneBtn")
local XUiGridPhotographCharacterBtn = require("XUi/XUiPhotograph/XUiGridPhotographCharacterBtn")
local XUiGridPhotographOtherBtn = require("XUi/XUiPhotograph/XUiGridPhotographOtherBtn")
local XUiGridPhotographPartnerBtn = require("XUi/XUiPhotograph/XUiGridPhotographPartnerBtn")
local XUiPhotographActionPanel = require("XUi/XUiPhotograph/XUiPhotographActionPanel")
local MenuBtnType = {
Scene = 1,
Character = 2,
Fashion = 3,
Action = 4,
Partner = 5,
}
function XUiPhotographPanel:Ctor(rootUi, ui, setData, charId)
self.GameObject = ui.gameObject
self.Transform = ui.transform
self.RootUi = rootUi
self.SetData = setData
self.CurCharId = charId
XTool.InitUiObject(self)
self:Init()
end
function XUiPhotographPanel:Init()
self:InitMenuBtnGroup()
self:InitDynamicTable()
--self.BtnPhotograph.CallBack = function () self:OnBtnPhotographClick() end
self.BtnPhotograph:SetButtonState(3) -- 彻底隐藏拍照按钮
self.BtnSynchronous.CallBack = function () self:OnBtnSynchronousClick() end
self.BtnPhotographVertical.CallBack = function() self:OnBtnPhotographVerticalClick() end
self.BtnHide.CallBack = function() self:OnBtnHideClick() end
self.BtnSet.CallBack = function() self:OnBtnSetClick() end
self.Btn.CallBack = function() self:OnBtnClick() end
self.PanelTip.gameObject:SetActiveEx(false)
self.ActionPanel = XUiPhotographActionPanel.New(self.PanelAction)
self:UpdateViewState(not self.BtnHide:GetToggleState())
if XDataCenter.UiPcManager.IsPc() then
self.BtnPhotographVertical.gameObject:SetActiveEx(false)
else
self.BtnPhotographVertical.gameObject:SetActiveEx(true)
end
end
function XUiPhotographPanel:DefaultClick()
self.PanelMenu:SelectIndex(self.CurMenuType or MenuBtnType.Scene)
local data = XDataCenter.PhotographManager.GetSceneTemplateById(XDataCenter.PhotographManager.GetCurSceneId())
self:SetInfoTextName(data.Name)
end
function XUiPhotographPanel:Show()
self.GameObject:SetActiveEx(true)
self:UpdateViewState(not self.BtnHide:GetToggleState())
end
function XUiPhotographPanel:Hide()
self.GameObject:SetActiveEx(false)
self:UpdateViewState(not self.BtnHide:GetToggleState())
end
function XUiPhotographPanel:InitMenuBtnGroup()
self.MenuBtns = {
self.BtnScene,
self.BtnCharacter,
self.BtnFashion,
self.BtnAction,
self.BtnPartner,
}
self.PanelMenu:Init(self.MenuBtns, function(index) self:OnSelectMenuBtn(index) end)
end
function XUiPhotographPanel:OnSelectMenuBtn(index, isDefault)
if self.CurMenuType and self.CurMenuType == index then
return
end
self.CurMenuType = index
self.PanelSceneList.gameObject:SetActiveEx(false)
self.PanelCharacterList.gameObject:SetActiveEx(false)
self.PanelOtherList.gameObject:SetActiveEx(false)
self.PanelPartner.gameObject:SetActiveEx(false)
if index == MenuBtnType.Scene then
self.PanelSceneList.gameObject:SetActiveEx(true)
self.CurSceneIndex = XDataCenter.PhotographManager.GetSceneIndexById(XDataCenter.PhotographManager.GetCurSelectSceneId())
--self.CurSceneIndex = 1
self.DynamicTableScene:SetDataSource(XDataCenter.PhotographManager.GetSceneIdList())
self.DynamicTableScene:ReloadDataASync(self.CurSceneIndex)
elseif index == MenuBtnType.Character then
self.PanelCharacterList.gameObject:SetActiveEx(true)
self.DynamicTableCharacter:SetDataSource(XDataCenter.PhotographManager.GetCharacterList())
self.CurCharIndex = XDataCenter.PhotographManager.GetCharIndexById(self.CurCharId)
self.DynamicTableCharacter:ReloadDataASync(self.CurCharIndex)
elseif index == MenuBtnType.Fashion then
self.PanelOtherList.gameObject:SetActiveEx(true)
self.FashionList = XDataCenter.FashionManager.GetCurrentTimeFashionByCharId(self.CurCharId)
if not XTool.IsNumberValid(self.CurFashionIndex) then
local char = XDataCenter.CharacterManager.GetCharacter(self.CurCharId)
self.CurFashionIndex = XDataCenter.PhotographManager.GetFashionIndexByFashionList(char.FashionId, self.FashionList)
end
self.DynamicTableOther:SetDataSource(self.FashionList)
self.DynamicTableOther:ReloadDataASync()
elseif index == MenuBtnType.Action then
self.PanelOtherList.gameObject:SetActiveEx(true)
self.ActionList = XFavorabilityConfigs.GetCharacterActionById(self.CurCharId) or {}
self.DynamicTableOther:SetDataSource(self.ActionList)
self.DynamicTableOther:ReloadDataASync(self.CurActionIndex)
elseif index == MenuBtnType.Partner then
self.PanelPartner.gameObject:SetActiveEx(true)
self.PartnerList = XDataCenter.PartnerManager.GetPartnerPhotographData()
self.DynamicTablePartner:SetDataSource(self.PartnerList)
self.DynamicTablePartner:ReloadDataASync(self.CurPartnerIndex or 1)
end
self:UpdateInfoType(index)
self:PlayPanelListAnim(index)
end
function XUiPhotographPanel:InitDynamicTable()
self.DynamicTableScene = XDynamicTableNormal.New(self.PanelSceneList)
self.DynamicTableScene:SetProxy(XUiGridPhotographSceneBtn)
self.DynamicTableScene:SetDelegate(self)
self.DynamicTableCharacter = XDynamicTableNormal.New(self.PanelCharacterList)
self.DynamicTableCharacter:SetProxy(XUiGridPhotographCharacterBtn)
self.DynamicTableCharacter:SetDelegate(self)
self.DynamicTableOther = XDynamicTableNormal.New(self.PanelOtherList)
self.DynamicTableOther:SetProxy(XUiGridPhotographOtherBtn)
self.DynamicTableOther:SetDelegate(self)
self.DynamicTablePartner = XDynamicTableNormal.New(self.PanelPartner)
self.DynamicTablePartner:SetProxy(XUiGridPhotographPartnerBtn)
self.DynamicTablePartner:SetDelegate(self)
end
function XUiPhotographPanel:OnDynamicTableEvent(event, index, grid)
if self.CurMenuType == MenuBtnType.Scene then -- 场景按钮格子事件处理回调
self:OnDynamicTableSceneEvent(event, index, grid)
elseif self.CurMenuType == MenuBtnType.Character then -- 角色按钮格子事件处理回调
self:OnDynamicTableCharacterEvent(event, index, grid)
elseif self.CurMenuType == MenuBtnType.Fashion then -- 涂装按钮格子事件处理回调
self:OnDynamicTableFashionEvent(event, index, grid)
elseif self.CurMenuType == MenuBtnType.Action then -- 动作按钮格子事件处理回调
self:OnDynamicTableActionEvent(event, index, grid)
elseif self.CurMenuType == MenuBtnType.Partner then
self:OnDynamicTablePartner(event, index, grid)
end
end
function XUiPhotographPanel:OnDynamicTableSceneEvent(event, index, grid)
if event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_INIT then
grid:Init(self.RootUi)
elseif event == 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)
self:SetInfoTextName(data.Name)
end
elseif event == 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.TipError(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
local sceneId = XDataCenter.PhotographManager.GetSceneIdByIndex(index)
local data = XDataCenter.PhotographManager.GetSceneTemplateById(sceneId)
self:SetInfoTextName(data.Name)
grid:OnTouched(data)
end
end
function XUiPhotographPanel:OnDynamicTableCharacterEvent(event, index, grid)
if event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_INIT then
grid:Init(self)
elseif event == 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)
self:SetInfoTextName(data.LogName)
end
elseif event == 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.CurCharId = data.Id
self.CurCharIndex = index
self.CurFashionIndex = nil -- 切换角色清空涂装index 再次点击涂装会重新获取index
self:SetInfoTextName(data.LogName)
grid:OnTouched(self.CurCharId)
end
end
function XUiPhotographPanel:OnDynamicTableFashionEvent(event, index, grid)
if event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_INIT then
grid:Init(self)
elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_ATINDEX then
local data = self.FashionList[index]
grid:Reset()
grid:RefrashFashion(data)
if self.CurFashionIndex and self.CurFashionIndex == index then
self.CurFashionGrid = grid
grid:SetSelect(true)
self:SetInfoTextName(XDataCenter.FashionManager.GetFashionName(data))
end
elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_TOUCHED then
local fashionId = self.FashionList[index]
local isHas = XDataCenter.FashionManager.CheckHasFashion(fashionId)
if not isHas then
XUiManager.TipError(CS.XTextManager.GetText("PhotoModeNoFashion"))
return
end
local status = XDataCenter.FashionManager.GetFashionStatus(fashionId)
if status == XDataCenter.FashionManager.FashionStatus.Lock then
XUiManager.TipText("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
self:SetInfoTextName(XDataCenter.FashionManager.GetFashionName(fashionId))
grid:OnFashionTouched(self.CurCharId, self.FashionList[index])
end
end
function XUiPhotographPanel:OnDynamicTableActionEvent(event, index, grid)
if event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_INIT then
grid:Init(self)
elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_ATINDEX then
local data = self.ActionList[index]
local charData = XDataCenter.PhotographManager.GetCharacterDataById(self.CurCharId)
grid:Reset()
grid:RefrashAction(data, charData)
if self.CurActionIndex and self.CurActionIndex == index then
self.CurActionGrid = grid
grid:SetSelect(true)
end
self:SetInfoTextName()
elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_TOUCHED then
local tryFashionId = self.RootUi.SelectFashionId
local trySceneId = self.RootUi.CurrSeleSceneId
local isHas = XDataCenter.FavorabilityManager.CheckTryCharacterActionUnlock(self.ActionList[index], XDataCenter.PhotographManager.GetCharacterDataById(self.CurCharId).TrustLv, tryFashionId, trySceneId)
if not isHas then
XUiManager.TipError(self.ActionList[index].ConditionDescript)
return
end
if self.CurActionGrid ~= nil then
self.CurActionGrid:SetSelect(false)
if self.CurActionGrid ~= grid then
self.RootUi.SignBoardPlayer:Stop(true)
end
end
self.RootUi:PlayAnimation("PanelActionEnable")
self.CurActionIndex = index
self.CurActionGrid = grid
self:SetInfoTextName(self.ActionList[index].Name)
self.ActionPanel:SetTxtTitle(self.ActionList[index].Name)
grid:OnActionTouched(self.ActionList[index])
end
end
function XUiPhotographPanel:OnDynamicTablePartner(event, index, grid)
if event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_ATINDEX then
local selected = self.CurPartnerIndex == index
grid:Refresh(self.PartnerList[index], selected)
if self.CurPartnerIndex and selected then
self.CurPartnerGrid = grid
end
elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_TOUCHED then
self:OnGridPartnerClick(grid, index)
elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_RELOAD_COMPLETED then
if XTool.IsNumberValid(self.CurPartnerIndex) then
return
end
local grids = self.DynamicTablePartner:GetGrids()
local idx = 1
self:OnGridPartnerClick(grids[idx], idx)
end
end
function XUiPhotographPanel:OnGridPartnerClick(grid, index)
if index == self.CurPartnerIndex then
return
end
local state = grid:OnClickGrid()
if not state then
XUiManager.TipText("PhotoModePartnerLocked")
return
end
if self.CurPartnerGrid then
self.CurPartnerGrid:Select(false)
end
self.CurPartnerGrid = grid
self.CurPartnerIndex = index
self:SetInfoTextName(self.CurPartnerGrid:GetName())
end
function XUiPhotographPanel:OnBtnPhotographClick()
XPhotographConfigs.CsRecord(XGlobalVar.BtnPhotograph.BtnUiPhotographBtnPhotograph)
CsXGameEventManager.Instance:Notify(XEventId.EVENT_PHOTO_PHOTOGRAPH)
end
function XUiPhotographPanel:OnBtnPhotographVerticalClick()
if XDataCenter.UiPcManager.IsPc() then
return
end
XPhotographConfigs.CsRecord(XGlobalVar.BtnPhotograph.BtnUiPhotographBtnPhotographVertical)
RunAsyn(function()
local fashionId = self.RootUi.SelectFashionId
if not XTool.IsNumberValid(fashionId) then
local char = XDataCenter.CharacterManager.GetCharacter(self.CurCharId)
fashionId = char.FashionId
end
local tmpOrientation = CS.UnityEngine.Screen.orientation
CS.UnityEngine.Screen.orientation = CS.UnityEngine.ScreenOrientation.Portrait
CS.XResolutionManager.IsLandscape = false
XLuaUiManager.Open("UiPhotographPortrait", tmpOrientation, self.CurCharId, fashionId, self.RootUi)
local tmpIndex = self.CurMenuType
self.CurMenuType = nil
local signal, charId, newFashionId, oldCharId = XLuaUiManager.AwaitSignal("UiPhotographPortrait", "Refresh", self)
if signal ~= XSignalCode.SUCCESS then return end
self.RootUi:OnPortraitChanged(charId, newFashionId, oldCharId)
self.CurCharId = charId
self.PanelMenu:SelectIndex(tmpIndex or MenuBtnType.Scene)
self.FashionList = XDataCenter.FashionManager.GetCurrentTimeFashionByCharId(self.CurCharId)
self.CurFashionIndex = XDataCenter.PhotographManager.GetFashionIndexById(self.CurCharId, newFashionId)
self:RefreshBtnSynchronous()
end)
end
function XUiPhotographPanel:OnBtnHideClick()
XPhotographConfigs.CsRecord(XGlobalVar.BtnPhotograph.BtnUiPhotographBtnHide)
local select = self.BtnHide:GetToggleState()
CsXGameEventManager.Instance:Notify(XEventId.EVENT_PHOTO_HIDE_UI, not select)
self:UpdateViewState(not select)
end
function XUiPhotographPanel:OnBtnSetClick()
XPhotographConfigs.CsRecord(XGlobalVar.BtnPhotograph.BtnUiPhotographBtnSet)
XLuaUiManager.Open("UiPhotographSet", self.SetData)
end
function XUiPhotographPanel:OnBtnClick()
local select = self.BtnHide:GetToggleState()
if select then
self.BtnHide:SetButtonState(CS.UiButtonState.Normal)
self:OnBtnHideClick()
end
end
function XUiPhotographPanel:OnBtnSynchronousClick()
XDataCenter.PhotographManager.ChangeDisplay(XDataCenter.PhotographManager.GetCurSelectSceneId(), self.RootUi.SelectCharacterId, self.RootUi.SelectFashionId, function ()
self.RootUi.CurCharacterId = self.RootUi.SelectCharacterId
self.RootUi.CurFashionId = self.RootUi.SelectFashionId
self:RefreshBtnSynchronous()
XUiManager.TipText("PhotoModeChangeSuccess")
end)
end
function XUiPhotographPanel:RefreshBtnSynchronous()
self.BtnSynchronous.gameObject:SetActiveEx(self.RootUi:CheckHasChanged() and not self.BtnHide:GetToggleState())
end
function XUiPhotographPanel:UpdateViewState(show)
self.PanelMenu.gameObject:SetActiveEx(show)
self.BtnSynchronous.gameObject:SetActiveEx(show)
self.BtnSet.gameObject:SetActiveEx(false)
self.BtnPhotographVertical.gameObject:SetActiveEx(show and not XDataCenter.UiPcManager.IsPc())
self.PanelContent.gameObject:SetActiveEx(show)
self:RefreshBtnSynchronous()
self.Btn.gameObject:SetActiveEx(not show and self.GameObject.activeInHierarchy)
--self.PanelTip.gameObject:SetActiveEx(show)
end
function XUiPhotographPanel:UpdateInfoType(btnType)
local isAction = btnType == MenuBtnType.Action
self.TxtAction.gameObject:SetActiveEx(isAction)
self.TxtScene.gameObject:SetActiveEx(btnType == MenuBtnType.Scene)
self.TxTFashion.gameObject:SetActiveEx(btnType == MenuBtnType.Fashion)
self.TxTCharacter.gameObject:SetActiveEx(btnType == MenuBtnType.Character)
self.TxTPartner.gameObject:SetActiveEx(btnType == MenuBtnType.Partner)
self.ActionPanel:SetViewState(isAction)
local isPlaying = self.RootUi.SignBoardPlayer.Status == 1 or self.RootUi.SignBoardPlayer.Status == 3
self:RefreshActionPanel(isPlaying, self.RootUi.SignBoardActionId ~= nil)
if not isAction then
CsXGameEventManager.Instance:Notify(XEventId.EVENT_PHOTO_CHANGE_ANIMATION_STATE, false)
end
end
function XUiPhotographPanel:RefreshActionPanel(isPlaying, cacheAnim)
self.ActionPanel:Refresh(isPlaying, cacheAnim)
self.ActionPanel:SetBtnPlayState(self.RootUi.SignBoardPlayer.Status == 3)
end
function XUiPhotographPanel:ClearActionCache()
self.CurActionIndex = nil
self.CurActionGrid = nil
end
function XUiPhotographPanel:SetInfoTextName(textName)
if not textName or textName == "" then
self.TxtName.text = CSXTextManagerGetText("PhotoModeNotChooseText")
return
end
self.TxtName.text = textName
end
function XUiPhotographPanel:PlayPanelListAnim(menuBtnType)
self.RootUi:PlayAnimation("Qiehuan")
--if menuBtnType == MenuBtnType.Scene then
--self.RootUi:PlayAnimation("PanelSceneListEnable")
--elseif menuBtnType == MenuBtnType.Character then
--self.RootUi:PlayAnimation("PanelCharacterListEnable")
--elseif menuBtnType == MenuBtnType.Fashion or menuBtnType == MenuBtnType.Action then
--self.RootUi:PlayAnimation("PanelOtherListEnable")
--end
if menuBtnType == MenuBtnType.Action then
self.RootUi:PlayAnimation("PanelActionEnable")
end
end
return XUiPhotographPanel