447 lines
16 KiB
Lua
447 lines
16 KiB
Lua
|
local XUiPartnerMain = XLuaUiManager.Register(XLuaUi, "UiPartnerMain")
|
||
|
local XUiGridPartner = require("XUi/XUiPartner/PartnerMain/XUiGridPartner")
|
||
|
local XUiPanelRoleModel = require("XUi/XUiCharacter/XUiPanelRoleModel")
|
||
|
|
||
|
local CSTextManagerGetText = CS.XTextManager.GetText
|
||
|
local CSUnityEngineGameObject = CS.UnityEngine.GameObject
|
||
|
local DefaultIndex = 1
|
||
|
|
||
|
function XUiPartnerMain:OnStart(state, partner, IsNotBackChange, IsNotSelectPartner)
|
||
|
self.LastPartner = {}
|
||
|
self.ModelEffect = {}
|
||
|
self.IsChangeUiState = true
|
||
|
self.AssetPanel = XUiPanelAsset.New(self, self.PanelAsset, XDataCenter.ItemManager.ItemId.FreeGem, XDataCenter.ItemManager.ItemId.ActionPoint, XDataCenter.ItemManager.ItemId.Coin)
|
||
|
self.CurUiState = self.FightBackUiState or (state or XPartnerConfigs.MainUiState.Overview)
|
||
|
|
||
|
self:SetLastPartner(self.CurUiState, self.FightBackPartner or partner)
|
||
|
|
||
|
self.CurPartnerState = XPartnerConfigs.PartnerState.Combat
|
||
|
self.IsNotBackChange = self.FightBackIsNotBackChange or IsNotBackChange
|
||
|
self.IsNotSelectPartner = self.FightBackIsNotSelectPartner or IsNotSelectPartner
|
||
|
|
||
|
self:SetButtonCallBack()
|
||
|
self:InitSceneRoot()
|
||
|
self:InitDynamicTable()
|
||
|
|
||
|
XRedPointManager.AddRedPointEvent(self.BtnCompose, self.OnCheckComposeNews, self, { XRedPointConditions.Types.CONDITION_PARTNER_COMPOSE_RED })
|
||
|
end
|
||
|
|
||
|
function XUiPartnerMain:OnDestroy()
|
||
|
|
||
|
end
|
||
|
|
||
|
function XUiPartnerMain:OnEnable()
|
||
|
self:ChangeUiState(self.CurUiState)
|
||
|
XEventManager.AddEventListener(XEventId.EVENT_PARTNER_DATAUPDATE, self.ShowPanel, self)
|
||
|
XEventManager.AddEventListener(XEventId.EVENT_PARTNER_SKILLUNLOCK_CLOSERED, self.ShowPanel, self)
|
||
|
end
|
||
|
|
||
|
function XUiPartnerMain:OnDisable()
|
||
|
XEventManager.RemoveEventListener(XEventId.EVENT_PARTNER_DATAUPDATE, self.ShowPanel, self)
|
||
|
XEventManager.RemoveEventListener(XEventId.EVENT_PARTNER_SKILLUNLOCK_CLOSERED, self.ShowPanel, self)
|
||
|
self.RoleModelPanel:HideAllEffects()
|
||
|
end
|
||
|
|
||
|
function XUiPartnerMain:IsUiOverview()
|
||
|
return self.CurUiState == XPartnerConfigs.MainUiState.Overview
|
||
|
end
|
||
|
|
||
|
function XUiPartnerMain:IsUiCompose()
|
||
|
return self.CurUiState == XPartnerConfigs.MainUiState.Compose
|
||
|
end
|
||
|
|
||
|
function XUiPartnerMain:IsUiProperty()
|
||
|
return self.CurUiState == XPartnerConfigs.MainUiState.Property
|
||
|
end
|
||
|
|
||
|
function XUiPartnerMain:IsPartnerStandby()
|
||
|
return self.CurPartnerState == XPartnerConfigs.PartnerState.Standby
|
||
|
end
|
||
|
|
||
|
function XUiPartnerMain:IsPartnerCombat()
|
||
|
return self.CurPartnerState == XPartnerConfigs.PartnerState.Combat
|
||
|
end
|
||
|
|
||
|
function XUiPartnerMain:GetLastPartner(state)
|
||
|
if state == XPartnerConfigs.MainUiState.Property then
|
||
|
return self.LastPartner[XPartnerConfigs.MainUiState.Overview]
|
||
|
else
|
||
|
return self.LastPartner[state]
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XUiPartnerMain:SetLastPartner(state, partner)
|
||
|
if state == XPartnerConfigs.MainUiState.Property then
|
||
|
self.LastPartner[XPartnerConfigs.MainUiState.Overview] = partner
|
||
|
else
|
||
|
self.LastPartner[state] = partner
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XUiPartnerMain:SetButtonCallBack()
|
||
|
self.BtnCompose.CallBack = function()
|
||
|
self:ChangeUiState(XPartnerConfigs.MainUiState.Compose)
|
||
|
end
|
||
|
self.BtnChange.CallBack = function()
|
||
|
self:ChangePartnerState()
|
||
|
end
|
||
|
self.BtnTrial.CallBack = function()
|
||
|
self:OnBtnTrialClick()
|
||
|
end
|
||
|
self.BtnBack.CallBack = function()
|
||
|
self:OnBtnBackClick()
|
||
|
end
|
||
|
self.BtnMainUi.CallBack = function()
|
||
|
self:OnBtnMainUiClick()
|
||
|
end
|
||
|
|
||
|
self.PaneComposeView:GetObject("BtnComposeAll").CallBack = function()
|
||
|
self:OnBtnComposeAllClick()
|
||
|
end
|
||
|
|
||
|
self:BindHelpBtn(self.BtnHelp, "PartnerHelp")
|
||
|
end
|
||
|
|
||
|
function XUiPartnerMain:InitSceneRoot()
|
||
|
local root = self.UiModelGo.transform
|
||
|
|
||
|
self.PanelRoleModel = root:FindTransform("PanelRoleModel")
|
||
|
self.ImgEffectHuanren = root:FindTransform("ImgEffectHuanren")
|
||
|
|
||
|
self.CameraFar = {
|
||
|
[XPartnerConfigs.CameraType.Standby] = root:FindTransform("UiCamFarStandby"),
|
||
|
[XPartnerConfigs.CameraType.Combat] = root:FindTransform("UiCamFarCombat"),
|
||
|
[XPartnerConfigs.CameraType.Compose] = root:FindTransform("UiCamFarCompose"),
|
||
|
[XPartnerConfigs.CameraType.Level] = root:FindTransform("UiCamFarLv"),
|
||
|
[XPartnerConfigs.CameraType.Quality] = root:FindTransform("UiCamFarQuality"),
|
||
|
[XPartnerConfigs.CameraType.Skill] = root:FindTransform("UiCamFarSkill"),
|
||
|
[XPartnerConfigs.CameraType.Story] = root:FindTransform("UiCamFarrStory"),
|
||
|
[XPartnerConfigs.CameraType.StandbyNoSelect] = root:FindTransform("UiCamFarStandbyNoSelect"),
|
||
|
[XPartnerConfigs.CameraType.CombatNoSelect] = root:FindTransform("UiCamFarCombatNoSelect"),
|
||
|
}
|
||
|
self.CameraNear = {
|
||
|
[XPartnerConfigs.CameraType.Standby] = root:FindTransform("UiCamNearStandby"),
|
||
|
[XPartnerConfigs.CameraType.Combat] = root:FindTransform("UiCamNearCombat"),
|
||
|
[XPartnerConfigs.CameraType.Compose] = root:FindTransform("UiCamNearCompose"),
|
||
|
[XPartnerConfigs.CameraType.Level] = root:FindTransform("UiCamNearLv"),
|
||
|
[XPartnerConfigs.CameraType.Quality] = root:FindTransform("UiCamNearQuality"),
|
||
|
[XPartnerConfigs.CameraType.Skill] = root:FindTransform("UiCamNearSkill"),
|
||
|
[XPartnerConfigs.CameraType.Story] = root:FindTransform("UiCamNearrStory"),
|
||
|
[XPartnerConfigs.CameraType.StandbyNoSelect] = root:FindTransform("UiCamNearStandbyNoSelect"),
|
||
|
[XPartnerConfigs.CameraType.CombatNoSelect] = root:FindTransform("UiCamNearCombatNoSelect"),
|
||
|
}
|
||
|
|
||
|
self.RoleModelPanel = XUiPanelRoleModel.New(self.PanelRoleModel, self.Name, nil, true, nil, true)
|
||
|
end
|
||
|
|
||
|
function XUiPartnerMain:InitDynamicTable()
|
||
|
self.PaneMainView:GetObject("GridCharacterNew").gameObject:SetActiveEx(false)
|
||
|
self.PaneComposeView:GetObject("GridCharacterNew").gameObject:SetActiveEx(false)
|
||
|
|
||
|
self.MainDynamicTable = XDynamicTableNormal.New(self.PaneMainView:GetObject("SViewCharacterList"))
|
||
|
self.MainDynamicTable:SetProxy(XUiGridPartner)
|
||
|
self.MainDynamicTable:SetDelegate(self)
|
||
|
|
||
|
self.ComposeDynamicTable = XDynamicTableNormal.New(self.PaneComposeView:GetObject("SViewCharacterList"))
|
||
|
self.ComposeDynamicTable:SetProxy(XUiGridPartner)
|
||
|
self.ComposeDynamicTable:SetDelegate(self)
|
||
|
|
||
|
end
|
||
|
|
||
|
function XUiPartnerMain:SetupDynamicTable()
|
||
|
local selectIndex = 1
|
||
|
self.DefaultSelectPartnerId = self.PageDatas[DefaultIndex] and self.PageDatas[DefaultIndex]:GetId()
|
||
|
|
||
|
local lastPartner = self:GetLastPartner(self.CurUiState)
|
||
|
if lastPartner then
|
||
|
for index, data in pairs(self.PageDatas) do
|
||
|
if data:GetId() == lastPartner:GetId() then
|
||
|
selectIndex = index
|
||
|
self.DefaultSelectPartnerId = lastPartner:GetId()
|
||
|
break
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
if self:IsUiCompose() then
|
||
|
self.CurDynamicTable = self.ComposeDynamicTable
|
||
|
else
|
||
|
self.CurDynamicTable = self.MainDynamicTable
|
||
|
end
|
||
|
|
||
|
self.CurDynamicTable:SetDataSource(self.PageDatas)
|
||
|
self.CurDynamicTable:ReloadDataSync(selectIndex)
|
||
|
|
||
|
end
|
||
|
|
||
|
function XUiPartnerMain:OnDynamicTableEvent(event, index, grid)
|
||
|
if event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_ATINDEX then
|
||
|
grid:UpdateGrid(self.PageDatas[index], self.CurUiState, self)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XUiPartnerMain:SelectPartner(partner)
|
||
|
local lastPartner = self:GetLastPartner(self.CurUiState)
|
||
|
local lastPartnerId = lastPartner and lastPartner:GetId()
|
||
|
if lastPartnerId ~= partner:GetId() or self.IsChangeUiState then
|
||
|
self.CurPartnerState = XPartnerConfigs.PartnerState.Combat
|
||
|
self.IsChangeUiState = false
|
||
|
self:UpdateRoleModel(partner:GetCombatModel(), partner, true)
|
||
|
self:UpdateCamera()
|
||
|
end
|
||
|
self:UpdatePanel(partner)
|
||
|
self:SetLastPartner(self.CurUiState, partner)
|
||
|
self.BtnTrial.gameObject:SetActiveEx(self:IsUiOverview() and partner and partner:GetStageSkipId() > 0)
|
||
|
end
|
||
|
|
||
|
function XUiPartnerMain:UpdatePanel(Data)
|
||
|
if self:IsUiOverview() then
|
||
|
self:UpdateChildUi("UiPartnerOwnedInfo", Data)
|
||
|
elseif self:IsUiCompose() then
|
||
|
self:UpdateChildUi("UiPartnerCompose", Data)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XUiPartnerMain:UpdateChildUi(uiName, Data)
|
||
|
local childUi = self:FindChildUiObj(uiName)
|
||
|
childUi:UpdatePanel(Data)
|
||
|
end
|
||
|
|
||
|
function XUiPartnerMain:ChangePartnerState()
|
||
|
if self:IsPartnerStandby() then
|
||
|
self:DoPartnerStateChange(XPartnerConfigs.PartnerState.Combat)
|
||
|
elseif self:IsPartnerCombat() then
|
||
|
self:DoPartnerStateChange(XPartnerConfigs.PartnerState.Standby)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XUiPartnerMain:DoPartnerStateChange(state)
|
||
|
if state == self.CurPartnerState then
|
||
|
return
|
||
|
end
|
||
|
|
||
|
local partner = self:GetLastPartner(self.CurUiState)
|
||
|
if not partner then
|
||
|
return
|
||
|
end
|
||
|
|
||
|
XLuaUiManager.SetMask(true)
|
||
|
local closeMask = function()
|
||
|
XLuaUiManager.SetMask(false)
|
||
|
end
|
||
|
|
||
|
if self:IsPartnerStandby() then
|
||
|
|
||
|
local voiceId = partner:GetSToCVoice()
|
||
|
if voiceId and voiceId > 0 then
|
||
|
XSoundManager.PlaySoundByType(voiceId, XSoundManager.SoundType.Sound)
|
||
|
end
|
||
|
|
||
|
self.CurPartnerState = state
|
||
|
self:UpdateCamera()
|
||
|
self.RoleModelPanel:LoadEffect(partner:GetSToCEffect(), "ModelOffEffect", true, true)
|
||
|
self:PlayPartnerAnima(partner:GetSToCAnime(), true, function()
|
||
|
self:UpdateRoleModel(partner:GetCombatModel(), partner, false)
|
||
|
self.RoleModelPanel:LoadEffect(partner:GetCombatBornEffect(), "ModelOnEffect", true, true)
|
||
|
self:PlayPartnerAnima(partner:GetCombatBornAnime(), true, closeMask)
|
||
|
end)
|
||
|
|
||
|
elseif self:IsPartnerCombat() then
|
||
|
|
||
|
local voiceId = partner:GetCToSVoice()
|
||
|
if voiceId and voiceId > 0 then
|
||
|
XSoundManager.PlaySoundByType(voiceId, XSoundManager.SoundType.Sound)
|
||
|
end
|
||
|
self.RoleModelPanel:LoadEffect(partner:GetCToSEffect(), "ModelOnEffect", true, true)
|
||
|
self:PlayPartnerAnima(partner:GetCToSAnime(), true, function()
|
||
|
self.CurPartnerState = state
|
||
|
self:UpdateCamera()
|
||
|
self:UpdateRoleModel(partner:GetStandbyModel(), partner, false)
|
||
|
self.RoleModelPanel:LoadEffect(partner:GetStandbyBornEffect(), "ModelOffEffect", true, true)
|
||
|
self:PlayPartnerAnima(partner:GetStandbyBornAnime(), true, closeMask)
|
||
|
end)
|
||
|
else
|
||
|
closeMask()
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XUiPartnerMain:PlayPartnerAnima(animaName, fromBegin, callBack)
|
||
|
local IsCanPlay = self.RoleModelPanel:PlayAnima(animaName, fromBegin, callBack)
|
||
|
if not IsCanPlay then
|
||
|
if callBack then callBack() end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
--更新模型
|
||
|
function XUiPartnerMain:UpdateRoleModel(modelId, partner, IsShowEffect)
|
||
|
self.RoleModelPanel:UpdatePartnerModel(modelId, XModelManager.MODEL_UINAME.XUiPartnerMain, nil, function(model)
|
||
|
self.PanelDrag.Target = model.transform
|
||
|
if IsShowEffect then
|
||
|
self.ImgEffectHuanren.gameObject:SetActiveEx(false)
|
||
|
self.ImgEffectHuanren.gameObject:SetActiveEx(true)
|
||
|
end
|
||
|
end, false, true, true)
|
||
|
end
|
||
|
|
||
|
function XUiPartnerMain:ChangeUiState(state)
|
||
|
if self.CurUiState ~= XPartnerConfigs.MainUiState.Property and
|
||
|
state ~= XPartnerConfigs.MainUiState.Property then
|
||
|
self:PlayAnimation("DarkEnable")
|
||
|
self.IsChangeUiState = true
|
||
|
end
|
||
|
|
||
|
self.CurUiState = state
|
||
|
self:ShowPanel()
|
||
|
end
|
||
|
|
||
|
function XUiPartnerMain:ShowPanel()
|
||
|
self.PageDatas = {}
|
||
|
local IsPartnerListEmpty = XDataCenter.PartnerManager.IsPartnerListEmpty()
|
||
|
|
||
|
if self:IsUiOverview() then
|
||
|
if IsPartnerListEmpty then
|
||
|
self.CurUiState = XPartnerConfigs.MainUiState.Compose
|
||
|
end
|
||
|
end
|
||
|
|
||
|
self.RoleModelPanel:ShowRoleModel()
|
||
|
|
||
|
local lastPartner = self:GetLastPartner(self.CurUiState)
|
||
|
if self:IsUiOverview() then
|
||
|
local lastPartnerId = lastPartner and lastPartner:GetId()
|
||
|
|
||
|
self.PageDatas = XDataCenter.PartnerManager.GetPartnerOverviewDataList(lastPartnerId, nil, true)
|
||
|
XPartnerSort.OverviewSortFunction(self.PageDatas)
|
||
|
|
||
|
self:OpenChildUi("UiPartnerOwnedInfo", self)
|
||
|
self:PlayAnimation("ListEnable")
|
||
|
|
||
|
elseif self:IsUiCompose() then
|
||
|
self.PageDatas, self.CanComposeIdList, self.CanComposeCount = XDataCenter.PartnerManager.GetPartnerComposeDataList()
|
||
|
self.PaneComposeView:GetObject("BtnComposeAll").gameObject:SetActiveEx(self.CanComposeCount > 1)
|
||
|
|
||
|
XPartnerSort.ComposeSortFunction(self.PageDatas)
|
||
|
|
||
|
self:OpenChildUi("UiPartnerCompose", self)
|
||
|
self:PlayAnimation("ListEnable")
|
||
|
|
||
|
elseif self:IsUiProperty() then
|
||
|
self:DoPartnerStateChange(XPartnerConfigs.PartnerState.Combat)
|
||
|
self:OpenChildUi("UiPartnerProperty", self)
|
||
|
self:UpdateChildUi("UiPartnerProperty", lastPartner)
|
||
|
end
|
||
|
|
||
|
self:UpdateCamera()
|
||
|
|
||
|
self.BtnCompose.gameObject:SetActiveEx(self:IsUiOverview() and not self.IsNotSelectPartner)
|
||
|
self.BtnChange.gameObject:SetActiveEx(self:IsUiOverview())
|
||
|
|
||
|
self.BtnTrial.gameObject:SetActiveEx(self:IsUiOverview())
|
||
|
|
||
|
self.PaneMainView.gameObject:SetActiveEx(self:IsUiOverview() and not self.IsNotSelectPartner)
|
||
|
self.PaneComposeView.gameObject:SetActiveEx(self:IsUiCompose())
|
||
|
|
||
|
if self.IsNotSelectPartner or (self.IsFightBack and self:IsUiProperty()) then
|
||
|
local partner = self:GetLastPartner(self.CurUiState)
|
||
|
if partner then
|
||
|
self:SelectPartner(partner)
|
||
|
end
|
||
|
else
|
||
|
self:SetupDynamicTable()
|
||
|
end
|
||
|
|
||
|
self.IsFightBack = false
|
||
|
end
|
||
|
|
||
|
function XUiPartnerMain:OpenChildUi(uiName, ...)
|
||
|
if not XLuaUiManager.IsUiShow(uiName) then
|
||
|
self:OpenOneChildUi(uiName, ...)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XUiPartnerMain:SetCameraType(type)
|
||
|
for k, _ in pairs(self.CameraFar) do
|
||
|
self.CameraFar[k].gameObject:SetActiveEx(k == type)
|
||
|
end
|
||
|
|
||
|
for k, _ in pairs(self.CameraNear) do
|
||
|
self.CameraNear[k].gameObject:SetActiveEx(k == type)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XUiPartnerMain:UpdateCamera()
|
||
|
if self:IsPartnerStandby() then
|
||
|
local cameraType = self.IsNotSelectPartner and XPartnerConfigs.CameraType.StandbyNoSelect or XPartnerConfigs.CameraType.Standby
|
||
|
self:SetCameraType(cameraType)
|
||
|
elseif self:IsPartnerCombat() then
|
||
|
if self:IsUiOverview() then
|
||
|
local cameraType = self.IsNotSelectPartner and XPartnerConfigs.CameraType.CombatNoSelect or XPartnerConfigs.CameraType.Combat
|
||
|
self:SetCameraType(cameraType)
|
||
|
elseif self:IsUiCompose() then
|
||
|
self:SetCameraType(XPartnerConfigs.CameraType.Compose)
|
||
|
elseif self:IsUiProperty() then
|
||
|
self:SetCameraType(XPartnerConfigs.CameraType.Combat)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XUiPartnerMain:OnBtnBackClick()
|
||
|
if not self:IsUiOverview() then
|
||
|
if XDataCenter.PartnerManager.IsPartnerListEmpty() or self.IsNotBackChange then
|
||
|
self:Close()
|
||
|
else
|
||
|
self:ChangeUiState(XPartnerConfigs.MainUiState.Overview)
|
||
|
end
|
||
|
else
|
||
|
self:Close()
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XUiPartnerMain:OnBtnMainUiClick()
|
||
|
XLuaUiManager.RunMain()
|
||
|
end
|
||
|
|
||
|
function XUiPartnerMain:OnBtnTrialClick()
|
||
|
local partner = self:GetLastPartner(self.CurUiState)
|
||
|
local skipId = partner:GetStageSkipId()
|
||
|
if skipId > 0 then
|
||
|
XFunctionManager.SkipInterface(skipId)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XUiPartnerMain:ShowRoleModel()
|
||
|
self.RoleModelPanel:ShowRoleModel()
|
||
|
end
|
||
|
|
||
|
function XUiPartnerMain:HideRoleModel()
|
||
|
self.RoleModelPanel:HideRoleModel()
|
||
|
self.RoleModelPanel:HideAllEffects()
|
||
|
end
|
||
|
|
||
|
function XUiPartnerMain:OnCheckComposeNews(count)
|
||
|
self.BtnCompose:ShowReddot(count >= 0)
|
||
|
end
|
||
|
|
||
|
function XUiPartnerMain:OnReleaseInst()
|
||
|
return {
|
||
|
UiState = self.CurUiState,
|
||
|
Partner = self:GetLastPartner(self.CurUiState),
|
||
|
IsNotBackChange = self.IsNotBackChange,
|
||
|
IsNotSelectPartner = self.IsNotSelectPartner,
|
||
|
}
|
||
|
end
|
||
|
|
||
|
function XUiPartnerMain:OnResume(data)
|
||
|
self.IsFightBack = true
|
||
|
self.FightBackUiState = data.UiState
|
||
|
self.FightBackPartner = data.Partner
|
||
|
self.FightBackIsNotBackChange = data.IsNotBackChange
|
||
|
self.FightBackIsNotSelectPartner = data.IsNotSelectPartner
|
||
|
end
|
||
|
|
||
|
function XUiPartnerMain:OnBtnComposeAllClick()
|
||
|
XDataCenter.PartnerManager.TipDialog(nil, function()
|
||
|
XPartnerSort.CanComposeIdSort(self.CanComposeIdList)
|
||
|
XDataCenter.PartnerManager.PartnerComposeRequest(self.CanComposeIdList, true)
|
||
|
end, "PartnerAllComposeHint")
|
||
|
end
|