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

256 lines
9.7 KiB
Lua

local XUiUnionKillSelectRole = XLuaUiManager.Register(XLuaUi, "UiUnionKillXuanRen")
local XUiGridUnionCharacterItem = require("XUi/XUiFubenUnionKill/XUiGridUnionCharacterItem")
local XUiPanelRoleModel = require("XUi/XUiCharacter/XUiPanelRoleModel")
function XUiUnionKillSelectRole:OnAwake()
self.AssetPanel = XUiPanelAsset.New(self, self.PanelAsset,
XDataCenter.ItemManager.ItemId.FreeGem,
XDataCenter.ItemManager.ItemId.ActionPoint,
XDataCenter.ItemManager.ItemId.Coin)
self.BtnBack.CallBack = function()
self:OnBtnBackClick()
end
self.BtnMainUi.CallBack = function()
self:OnBtnMainUiClick()
end
self.BtnFashion.CallBack = function() self:OnBtnFashionClick() end
self.BtnConsciousness.CallBack = function() self:OnBtnConsciousnessClick() end
self.BtnWeapon.CallBack = function() self:OnBtnWeaponClick() end
self.BtnJoinTeam.CallBack = function() self:OnBtnJoinTeamClick() end
self.BtnQuitTeam.CallBack = function() self:OnBtnQuitTeamClick() end
local root = self.UiModelGo.transform
self.PanelRoleModel = root:FindTransform("PanelRoleModel")
self.ImgEffectHuanren = root:FindTransform("ImgEffectHuanren")
self.CharacterItemList = {}
end
function XUiUnionKillSelectRole:OnDestroy()
end
function XUiUnionKillSelectRole:OnStart(args)
self.RoleModelPanel = XUiPanelRoleModel.New(self.PanelRoleModel, nil, nil, true)
self.StageId = args.StageId
self.Index = args.Index
self.DefaultSelectId = args.DefaultSelectId
self.DefaultSelectOwner = args.DefaultSelectOwner
self.InTeamList = args.InTeamList
self.CharacterInTeamList = args.CharacterInTeamList
self.CallBack = args.CallBack
self.SelectableList = args.CharacterList
table.sort(self.SelectableList, function(char1, char2)
local flagWeight1 = char1.Flag == XFubenUnionKillConfigs.UnionKillCharType.Share and 1 or 0
local flagWeight2 = char2.Flag == XFubenUnionKillConfigs.UnionKillCharType.Share and 1 or 0
if flagWeight1 == flagWeight2 then
return char1.Ability > char2.Ability
end
return flagWeight1 > flagWeight2
end)
self:SelectCharacterList()
end
function XUiUnionKillSelectRole:OnEnable()
if self.SelectableList then
for i = 1, #self.SelectableList do
local characterItem = self.SelectableList[i]
self.CharacterItemList[i]:UpdateGrid(characterItem)
end
if self.CurCharacter then
local fashionId
if self.CurCharacter.Flag == XFubenUnionKillConfigs.UnionKillCharType.Share then
local shareNpcData = self.CurCharacter.OwnerInfo.ShareNpcData
if shareNpcData then
fashionId = shareNpcData.Character.FashionId
end
else
local characterInfo = XDataCenter.CharacterManager.GetCharacter(self.CurCharacter.Id)
fashionId = characterInfo.FashionId
end
self:UpdateRoleModel(self.CurCharacter, fashionId)
end
end
end
function XUiUnionKillSelectRole:SelectCharacterList()
-- local defaultCharacterId = self.SelectableList[1] and self.SelectableList[1].Id
local defaultIndex = 1
for i = 1, #self.SelectableList do
local characterItem = self.SelectableList[i]
if self.DefaultSelectId and characterItem.Id == self.DefaultSelectId then
if self.DefaultSelectOwner and self.DefaultSelectOwner == characterItem.OwnerId then
--defaultCharacterId = self.DefaultSelectId
defaultIndex = i
end
end
if not self.CharacterItemList[i] then
local item = CS.UnityEngine.Object.Instantiate(self.GridMainLineCharacter)
local grid = XUiGridUnionCharacterItem.New(self, item, characterItem, function(character)
self:OnCharacterClick(character, i)
end)
grid.GameObject:SetActiveEx(true)
grid.Transform:SetParent(self.PanelRoleContent, false)
self.CharacterItemList[i] = grid
end
self.CharacterItemList[i]:UpdateGrid(characterItem)
local key = string.format("%s_%s", tostring(characterItem.OwnerId), tostring(characterItem.Id))
self.CharacterItemList[i]:SetInTeam(self.InTeamList[key])
self.CharacterItemList[i]:SetHasSameCard(not self.InTeamList[key] and self.CharacterInTeamList[tostring(characterItem.Id)])
end
for i = #self.SelectableList + 1, #self.CharacterItemList do
self.CharacterItemList[i].GameObject:SetActiveEx(false)
end
if defaultIndex > 0 then
self:SetlectCharacter(defaultIndex)
end
end
function XUiUnionKillSelectRole:OnCharacterClick(character, index)
if self.CurCharacter and self.CurCharacter == character then
return
end
if character then
self.CurCharacter = character
end
if self.CurCharacterItem then
self.CurCharacterItem:SetSelect(false)
end
-- local characterId = character.Id
local fashionId
if character.Flag == XFubenUnionKillConfigs.UnionKillCharType.Share then
local shareNpcData = self.CurCharacter.OwnerInfo.ShareNpcData
if shareNpcData then
fashionId = shareNpcData.Character.FashionId
end
else
local characterInfo = XDataCenter.CharacterManager.GetCharacter(self.CurCharacter.Id)
fashionId = characterInfo.FashionId
end
self.CurCharacterItem = self.CharacterItemList[index]
self.CurCharacterItem:UpdateGrid(self.CurCharacter)
self.CurCharacterItem:SetSelect(true)
local key = string.format("%s_%s", tostring(self.CurCharacter.OwnerId), tostring(self.CurCharacter.Id))
self.CurCharacterItem:SetInTeam(self.InTeamList[key])
self.CurCharacterItem:SetHasSameCard(not self.InTeamList[key] and self.CharacterInTeamList[tostring(self.CurCharacter.Id)])
-- 更新按钮状态
self:UpdateFunctionalBtns(self.CurCharacter)
-- 更新角色模型
self:UpdateRoleModel(self.CurCharacter, fashionId)
end
-- 更新按钮状态
function XUiUnionKillSelectRole:UpdateFunctionalBtns(characterItem)
self.BtnFashion.gameObject:SetActiveEx(characterItem.Flag == XFubenUnionKillConfigs.UnionKillCharType.Own)
self.BtnConsciousness.gameObject:SetActiveEx(characterItem.Flag == XFubenUnionKillConfigs.UnionKillCharType.Own)
self.BtnWeapon.gameObject:SetActiveEx(characterItem.Flag == XFubenUnionKillConfigs.UnionKillCharType.Own)
local teamCache = XDataCenter.FubenUnionKillManager.GetCacheTeam()
local isJoin = false
for k, v in pairs(teamCache or {}) do
if k == self.Index and v.PlayerId == characterItem.OwnerId and v.CharacterId == characterItem.Id then
isJoin = true
break
end
end
self.BtnJoinTeam.gameObject:SetActiveEx(not isJoin)
self.BtnQuitTeam.gameObject:SetActiveEx(isJoin)
end
-- 更换模型
function XUiUnionKillSelectRole:UpdateRoleModel(character, fashionId)
self.RoleModelPanel:UpdateCharacterModel(character.Id, self.PanelRoleModel, XModelManager.MODEL_UINAME.XUiUnionKillSelectRole, function(model)
self.ImgEffectHuanren.gameObject:SetActiveEx(false)
self.ImgEffectHuanren.gameObject:SetActiveEx(true)
if not model then return end
self.PanelDrag.Target = model.transform
if character.Flag == XFubenUnionKillConfigs.UnionKillCharType.Share then
self.RoleModelPanel:UpdateEquipsModelsByFightNpcData(model, character.OwnerInfo.ShareNpcData)
end
end, nil, fashionId)
end
function XUiUnionKillSelectRole:SetlectCharacter(index)
local grid = self.CharacterItemList[index]
if grid then
self:Adjust2Center(grid)
end
local characterItem = self.SelectableList[index]
self:OnCharacterClick(characterItem, index)
end
function XUiUnionKillSelectRole:OnBtnBackClick()
if self.CallBack then
self.CallBack(nil, false)
end
self:Close()
end
function XUiUnionKillSelectRole:OnBtnMainUiClick()
XLuaUiManager.RunMain()
end
function XUiUnionKillSelectRole:OnBtnFashionClick()
-- 共享角色返回
if not self.CurCharacter then return end
XLuaUiManager.Open("UiFashion", self.CurCharacter.Id)
end
function XUiUnionKillSelectRole:OnBtnConsciousnessClick()
-- 共享角色返回
if not self.CurCharacter then return end
XMVCA:GetAgency(ModuleId.XEquip):OpenUiEquipAwareness(self.CurCharacter.Id)
end
function XUiUnionKillSelectRole:OnBtnWeaponClick()
-- 共享角色返回
if not self.CurCharacter then return end
XMVCA:GetAgency(ModuleId.XEquip):OpenUiEquipReplace(self.CurCharacter.Id, nil, true)
end
function XUiUnionKillSelectRole:OnBtnJoinTeamClick()
if not self.CurCharacter then return end
-- 出现选中的角色已经存在队伍中
local key = string.format("%s_%s", tostring(self.CurCharacter.OwnerId), tostring(self.CurCharacter.Id))
if not self.InTeamList[key] and self.CharacterInTeamList[tostring(self.CurCharacter.Id)] then
XUiManager.TipMsg(CS.XTextManager.GetText("UnionSelectSameRole"))
return
end
if self.CallBack then
self.CallBack(self.CurCharacter, true)
end
self:Close()
end
function XUiUnionKillSelectRole:OnBtnQuitTeamClick()
if not self.CurCharacter then return end
if self.CallBack then
self.CallBack(self.CurCharacter, false)
end
self:Close()
end
function XUiUnionKillSelectRole:Adjust2Center(grid)
local normalizedPosition
local count = self.SViewCharacterList.content.transform.childCount
local index = grid.Transform:GetSiblingIndex()
if index > count / 2 then
normalizedPosition = (index + 1) / count
else
normalizedPosition = (index - 1) / count
end
self.SViewCharacterList.verticalNormalizedPosition = math.max(0, math.min(1, (1 - normalizedPosition)))
end