PGRData/Script/matrix/xui/xuifavorability/XUiFavorabilityLineRoomCharacter.lua

222 lines
8.8 KiB
Lua
Raw Normal View History

local XUiFavorabilityLineRoomCharacter = XLuaUiManager.Register(XLuaUi, "UiFavorabilityLineRoomCharacter")
local XUiPanelRoleModel = require("XUi/XUiCharacter/XUiPanelRoleModel")
function XUiFavorabilityLineRoomCharacter:OnAwake()
self:InitUi()
local root = self.UiModelGo.transform
self.PanelRoleModel = root:FindTransform("PanelRoleModel")
self.ImgEffectHuanren = root:FindTransform("ImgEffectHuanren")
self.ImgEffectHuanren1 = root:FindTransform("ImgEffectHuanren1")
self.ImgEffectHuanren1.gameObject:SetActive(false)
self.ImgEffectHuanren.gameObject:SetActive(false)
2024-09-01 22:49:41 +02:00
self.BtnFashion.gameObject:SetActiveEx(not XUiManager.IsHideFunc)
self.IsInitRefresh = nil -- 初次进入默认选择主界面展示的看板娘,在该界面再切换时 默认选择就不根据看板娘了。用这个参数来区别
self.SelectIndex = 1 -- 当前选中的角色列表下标。包括模型、右边角色信息都根据这个下标展示
end
function XUiFavorabilityLineRoomCharacter:InitUi()
self.AssetPanel = XUiPanelAsset.New(self, self.PanelAsset, XDataCenter.ItemManager.ItemId.FreeGem, XDataCenter.ItemManager.ItemId.ActionPoint, XDataCenter.ItemManager.ItemId.Coin)
self.BtnBack.CallBack = function()
self:Close()
end
self.BtnMainUi.CallBack = function()
XLuaUiManager.RunMain()
end
2024-09-01 22:49:41 +02:00
-- 设为首席助理
self.BtnSetFav.CallBack = function()
self:OnBtnSetFavClick()
end
-- 更换助理
self.BtnExchange.CallBack = function()
self:OnBtnExchangeClick()
end
self.BtnFashion.CallBack = function()
self:OnBtnFashionClick()
end
self.DynamicTableCharacter = XDynamicTableNormal.New(self.SViewCharacterList.gameObject)
self.DynamicTableCharacter:SetProxy(XUiGridLineCharacter)
self.DynamicTableCharacter:SetDelegate(self)
end
function XUiFavorabilityLineRoomCharacter:OnStart()
self.RoleModelPanel = XUiPanelRoleModel.New(self.PanelRoleModel, self.Name, nil, true)
2024-09-01 22:49:41 +02:00
XEventManager.AddEventListener(XEventId.EVENT_FAVORABILITY_ASSISTLIST_CHANGE, self.RefreshDynamicTable, self)
end
2024-09-01 22:49:41 +02:00
function XUiFavorabilityLineRoomCharacter:RefreshDynamicTable()
self.Characters = self:GetCharaterList()
local isIn, index = table.contains(XPlayer.DisplayCharIdList, XDataCenter.DisplayManager.GetDisplayChar().Id)
local isSmaller = self.SelectIndex <= #XPlayer.DisplayCharIdList
-- 下标位置逻辑
-- 1.进入该界面【第一次】刷新定位在UiMain看板娘的位置
-- 2.被点击选中的格子会记录下标
-- 3.若刷新前检测出【记录中的下标】比【列表长度】长则使用列表的最后1个格子作为下标(删除最后1个构造体会出现的情况)
self.SelectIndex = (isIn and not self.IsInitRefresh and index) or (isSmaller and self.SelectIndex or #XPlayer.DisplayCharIdList) or 1
self.IsInitRefresh = true
self.DynamicTableCharacter:SetDataSource(self.Characters)
self.DynamicTableCharacter:ReloadDataASync(index)
2024-09-01 22:49:41 +02:00
local curAssistantId = self:GetCurrSelectChar().Id
self:UpdateRightCharInfo(curAssistantId)
self:UpdateRoleModel(curAssistantId)
end
2024-09-01 22:49:41 +02:00
function XUiFavorabilityLineRoomCharacter:GetCurrSelectChar()
if not self.Characters then
self.Characters = self:GetCharaterList()
end
local charId = self.Characters[self.SelectIndex].Id
return XDataCenter.CharacterManager.GetCharacter(charId)
end
2024-09-01 22:49:41 +02:00
function XUiFavorabilityLineRoomCharacter:OnEnable()
self:RefreshDynamicTable()
local curAssistantId = self:GetCurrSelectChar().Id
local charType = XCharacterConfigs.GetCharacterType(curAssistantId)
if charType == 1 then
self.ImgEffectHuanren.gameObject:SetActive(false)
self.ImgEffectHuanren.gameObject:SetActive(true)
else
self.ImgEffectHuanren1.gameObject:SetActive(false)
self.ImgEffectHuanren1.gameObject:SetActive(true)
end
end
2024-09-01 22:49:41 +02:00
-- 刷新右侧角色数据
function XUiFavorabilityLineRoomCharacter:UpdateRightCharInfo(characterId)
self.BtnSetFav:SetDisable(characterId == XPlayer.DisplayCharIdList[1])
local charConfig = XCharacterConfigs.GetCharacterTemplate(characterId)
self.TxtName.text = charConfig.Name
self.TxtNameOther.text = charConfig.TradeName
self.TxtNameVocal.text = XFavorabilityConfigs.GetCharacterCvById(characterId)
2024-09-01 22:49:41 +02:00
local character = XDataCenter.CharacterManager.GetCharacter(characterId)
self.RImgTypeIcon:SetRawImage(XCharacterConfigs.GetNpcTypeIcon(character.Type))
end
function XUiFavorabilityLineRoomCharacter:GetCharaterList()
local result = {}
for i, charId in ipairs(XPlayer.DisplayCharIdList) do
local isOwn = XDataCenter.CharacterManager.IsOwnCharacter(charId)
if isOwn then
2024-09-01 22:49:41 +02:00
local char = XDataCenter.CharacterManager.GetCharacter(charId)
table.insert(result, {
Id = charId,
TrustLv = char.TrustLv or 1,
ChiefAssistant = i == 1,
})
end
end
2024-09-01 22:49:41 +02:00
-- 如果还没到最大数最后要显示一个Add按钮
local maxAssistantNum = CS.XGame.Config:GetInt("AssistantNum")
if #result < maxAssistantNum then
table.insert(result, {
IsAdd = true
})
end
return result
end
-- [监听动态列表事件]
function XUiFavorabilityLineRoomCharacter:OnDynamicTableEvent(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.Characters[index]
if not data then return end
2024-09-01 22:49:41 +02:00
grid:RefreshAssist(self.Characters[index], self)
local selected = index == self.SelectIndex
-- local selected = data.Selected or false
grid:OnSelect(selected)
if selected then
2024-09-01 22:49:41 +02:00
-- self.CurCharacter = self.Characters[index]
self.CurCharacterGrid = grid
end
if data.Id == XDataCenter.DisplayManager.GetDisplayChar().Id then
self.CurAssist = grid
end
elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_TOUCHED then
2024-09-01 22:49:41 +02:00
if grid.CharacterData.IsAdd then
self:OnBtnAddAssistListClick()
return
end
if not self.Characters[index] then return end
if self.CurCharacterGrid then
2024-09-01 22:49:41 +02:00
-- if self.CurCharacter then
-- self.CurCharacter.Selected = false
-- end
self.CurCharacterGrid:OnSelect(false)
end
2024-09-01 22:49:41 +02:00
-- self.CurCharacter = self.Characters[index]
2024-09-01 22:49:41 +02:00
-- self.CurCharacter.Selected = true
self.SelectIndex = index
self.CurCharacterGrid = grid
2024-09-01 22:49:41 +02:00
grid:OnSelect(true)
self:UpdateRoleModel(self:GetCurrSelectChar().Id)
self:UpdateRightCharInfo(self:GetCurrSelectChar().Id)
end
end
2024-09-01 22:49:41 +02:00
function XUiFavorabilityLineRoomCharacter:OnBtnSetFavClick()
-- 避免重复设置
if self:GetCurrSelectChar().Id == XPlayer.DisplayCharIdList[1] then
return
end
2024-09-01 22:49:41 +02:00
local charId = self:GetCurrSelectChar().Id
XDataCenter.DisplayManager.SetDisplayCharIdFirstRequest(charId, function (res)
self.SelectIndex = 1 -- 设置首席后重新选定默认下标为1
local charConfig = XCharacterConfigs.GetCharacterTemplate(charId)
local name = charConfig.Name.. ": "..charConfig.TradeName
XUiManager.TipMsg(CS.XTextManager.GetText("FavorabilitySetChiefAssistSucc", name))
end)
end
function XUiFavorabilityLineRoomCharacter:OnBtnExchangeClick()
2024-09-01 22:49:41 +02:00
XLuaUiManager.Open("UiFavorabilityLineRoomCharacterSelect", self:GetCurrSelectChar())
end
function XUiFavorabilityLineRoomCharacter:OnBtnFashionClick()
2024-09-01 22:49:41 +02:00
if not self:GetCurrSelectChar() then return end
local isOwn = XDataCenter.CharacterManager.IsOwnCharacter(self:GetCurrSelectChar().Id)
if not isOwn then
XUiManager.TipMsg(CS.XTextManager.GetText("FavorabilityNotOwnChar"))
return
end
2024-09-01 22:49:41 +02:00
XLuaUiManager.Open("UiFashion", self:GetCurrSelectChar().Id)
end
function XUiFavorabilityLineRoomCharacter:OnBtnAddAssistListClick()
-- 打开添加助理队列ui
XLuaUiManager.Open("UiFavorabilityLineRoomCharacterSelect")
end
function XUiFavorabilityLineRoomCharacter:UpdateRoleModel(characterId)
local charType = XCharacterConfigs.GetCharacterType(characterId)
self.RoleModelPanel:UpdateCharacterModel(characterId, self.PanelRoleModel, XModelManager.MODEL_UINAME.XUiFavorabilityLineRoomCharacter, nil, function()
if charType == 1 then
self.ImgEffectHuanren.gameObject:SetActive(false)
self.ImgEffectHuanren.gameObject:SetActive(true)
else
self.ImgEffectHuanren1.gameObject:SetActive(false)
self.ImgEffectHuanren1.gameObject:SetActive(true)
end
end)
2024-09-01 22:49:41 +02:00
end
function XUiFavorabilityLineRoomCharacter:OnDestroy()
XEventManager.RemoveEventListener(XEventId.EVENT_FAVORABILITY_ASSISTLIST_CHANGE, self.RefreshDynamicTable, self)
end