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

483 lines
No EOL
17 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

local XUiMaverick2CharacterRobot = require("XUi/XUiMaverick2/XUiMaverick2CharacterRobot")
local XUiPanelRoleModel = require("XUi/XUiCharacter/XUiPanelRoleModel")
-- 异构阵线2.0成员界面
local XUiMaverick2Character = XLuaUiManager.Register(XLuaUi, "UiMaverick2Character")
local TabType =
{
HelpSkill = 1, -- 支援技能
Info = 2, -- 角色信息
}
local Select = CS.UiButtonState.Select
local Normal = CS.UiButtonState.Normal
function XUiMaverick2Character:OnAwake()
self.SelectRobotIndex = nil
self.RobotCfgList = {}
self.SelectTag = TabType.HelpSkill
self.StageId = nil -- 挑战关卡id
self.HelpSkillInfoList = {} -- 支援技列表
self.SelHelpSkillIndex = nil -- 选中的支援技列表
self:SetButtonCallBack()
self:InitDynamicTable()
self:InitAssetPanel()
self:InitTimes()
self:InitRoleModel()
end
function XUiMaverick2Character:OnStart(stageId)
self.StageId = stageId
local isFight = self.StageId ~= nil
self.SelectTag = isFight and TabType.HelpSkill or TabType.Info
-- 挑战界面显示挑战按钮和支援技能
self.PanelTabGroup.gameObject:SetActiveEx(isFight)
self.TxtTitle.gameObject:SetActiveEx(not isFight)
self.BtnFight.gameObject:SetActiveEx(isFight)
end
function XUiMaverick2Character:OnEnable()
self.Super.OnEnable(self)
self:Refresh()
-- 战斗失败回到选角色界面重新播放BGM
XDataCenter.Maverick2Manager.PlayBGM()
end
function XUiMaverick2Character:OnDisable()
end
function XUiMaverick2Character:SetButtonCallBack()
XUiHelper.RegisterClickEvent(self, self.BtnBack, self.Close)
XUiHelper.RegisterClickEvent(self, self.BtnMainUi, function() XLuaUiManager.RunMain() end)
XUiHelper.RegisterClickEvent(self, self.BtnFight, self.OnClickBtnFight)
XUiHelper.RegisterClickEvent(self, self.BtnHelpSkill, function() self:OnClickTab(TabType.HelpSkill) end)
XUiHelper.RegisterClickEvent(self, self.BtnInfo, function() self:OnClickTab(TabType.Info) end)
XUiHelper.RegisterClickEvent(self, self.BtnTalent, self.OnClickBtnTalent)
end
function XUiMaverick2Character:OnClickBtnFight()
-- 进入战斗前需刷新支援技能信息,防止改动天赋导致之前选中的支援技能失效
local talentGroupId = nil
local talentId = nil
self:RefreshDetailHelpSkill()
if self.SelHelpSkillIndex then
local helpSkillCfg = self.HelpSkillInfoList[self.SelHelpSkillIndex].HelpSkillCfg
talentGroupId = helpSkillCfg.TalentGroupId
talentId = helpSkillCfg.TalentId
end
local robotId = self:GetSelectRobotId()
XDataCenter.Maverick2Manager.EnterFight(self.StageId, robotId, talentGroupId, talentId)
end
function XUiMaverick2Character:OnClickBtnTalent()
XLuaUiManager.Open("UiMaverick2Talent", self:GetSelectRobotId(), self.StageId, function(robotId)
-- 设置最后选中的机器人
XDataCenter.Maverick2Manager.SaveLastSelRobotId(robotId)
end)
end
function XUiMaverick2Character:Refresh()
self.RobotCfgList = XDataCenter.Maverick2Manager.GetRobotCfgList(self.StageId)
self:RefreshDynamicTable()
self:UpdateAssetPanel()
self:UpdateCamera(XMaverick2Configs.CharacterCamera.Prepare)
end
function XUiMaverick2Character:InitTimes()
self:SetAutoCloseInfo(XDataCenter.Maverick2Manager.GetActivityEndTime(), function(isClose)
if isClose then
XLuaUiManager.RunMain()
XUiManager.TipMsg(XUiHelper.GetText("ActivityAlreadyOver"))
end
end)
end
function XUiMaverick2Character:GetSelectRobotId()
return self.RobotCfgList[self.SelectRobotIndex].RobotId
end
-- 机器人是否被禁用
function XUiMaverick2Character:IsRobotForbid(robotId)
return XDataCenter.Maverick2Manager.IsRobotForbid(robotId, self.StageId)
end
---------------------------------------- 机器人动态列表 begin ----------------------------------------
function XUiMaverick2Character:InitDynamicTable()
self.GridCharacter.gameObject:SetActive(false)
self.DynamicTable = XDynamicTableNormal.New(self.CharacterList)
self.DynamicTable:SetProxy(XUiMaverick2CharacterRobot)
self.DynamicTable:SetDelegate(self)
end
function XUiMaverick2Character:RefreshDynamicTable()
-- 优先选中上次的机器人
self.SelectRobotIndex = 1
local robotId = XDataCenter.Maverick2Manager.GetLastSelRobotId()
if not self:IsRobotForbid(robotId) then
for i, robotCfg in ipairs(self.RobotCfgList) do
if robotCfg.RobotId == robotId then
self.SelectRobotIndex = i
end
end
end
-- 刷新机器人列表
self.DynamicTable:SetDataSource(self.RobotCfgList)
self.DynamicTable:ReloadDataASync(self.SelectRobotIndex)
self:UpdateRobotInfo()
end
function XUiMaverick2Character:OnDynamicTableEvent(event, index, grid)
if event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_ATINDEX then
local robotCfg = self.RobotCfgList[index]
local isSelect = self.SelectRobotIndex == index
local isForbid = self:IsRobotForbid(robotCfg.RobotId)
grid:Refresh(robotCfg, isForbid, isSelect)
elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_TOUCHED then
self:OnClickRobot(index, grid)
end
end
function XUiMaverick2Character:OnClickRobot(index, selectGrid)
if self.SelectRobotIndex == index then
return
end
-- 禁用/未解锁,播放禁止音效
if selectGrid.IsForbid or not selectGrid.IsUnlock then
CS.XAudioManager.PlaySound(XSoundManager.UiBasicsMusic.Intercept)
return
end
-- 切换按钮状态
self.SelectRobotIndex = index
local grids = self.DynamicTable:GetGrids()
for i, grid in pairs(grids) do
local isSelect = i == self.SelectRobotIndex
grid:ShowSelect(isSelect)
end
-- 选中回调
selectGrid:OnClickRobot()
-- 刷新角色
self:UpdateRobotInfo()
end
---------------------------------------- 机器人动态列表 end ----------------------------------------
---------------------------------------- 机器人详情 begin ----------------------------------------
-- 刷新机器人信息
function XUiMaverick2Character:UpdateRobotInfo()
-- 刷新模型旁边名字
local robotId = self:GetSelectRobotId()
local characterId = XEntityHelper.GetCharacterIdByEntityId(robotId)
self.TxtName.text = XCharacterConfigs.GetCharacterName(characterId)
self.TxtType.text = XCharacterConfigs.GetCharacterTradeName(characterId)
self.TxtNumber.text = XCharacterConfigs.GetCharacterCodeStr(characterId)
-- 刷新模型
self:UpdateRoleModel(robotId)
-- 刷新详细信息
self:OnClickTab(self.SelectTag, true)
-- 机器人天赋红点
self:RefreshTalentRed()
-- 设置最后选中的机器人
XDataCenter.Maverick2Manager.SaveLastSelRobotId(self:GetSelectRobotId())
end
-- 初始化3D模型
function XUiMaverick2Character:InitRoleModel()
local root = self.UiModelGo.transform
self.PanelRoleModel = root:FindTransform("PanelRoleModel")
self.UiPanelRoleModel = XUiPanelRoleModel.New(self.PanelRoleModel, self.Name, nil, true, nil, true)
self.CameraFar = {
root:FindTransform("UiCamFarMaverick2Lv"),
root:FindTransform("UiCamFarMaverick2Prepare"),
root:FindTransform("UiCamFarMaverick2Exchange"),
}
self.CameraNear = {
root:FindTransform("UiCamNearMaverick2Lv"),
root:FindTransform("UiCamNearMaverick2Prepare"),
root:FindTransform("UiCamNearMaverick2Exchange"),
}
end
-- 刷新3D模型
function XUiMaverick2Character:UpdateRoleModel(robotId)
local entity = XRobotManager.GetRobotById(robotId)
if entity == nil then
return
end
local finishedCallback = function(model)
self.PanelDrag.Target = model.transform
end
local characterViewModel = entity:GetCharacterViewModel()
local sourceEntityId = characterViewModel:GetSourceEntityId()
if XRobotManager.CheckIsRobotId(sourceEntityId) then
local robot2CharEntityId = XRobotManager.GetCharacterId(sourceEntityId)
local isOwen = XDataCenter.CharacterManager.IsOwnCharacter(robot2CharEntityId)
if XRobotManager.CheckUseFashion(sourceEntityId) and isOwen then
local character = XDataCenter.CharacterManager.GetCharacter(robot2CharEntityId)
local robot2CharViewModel = character:GetCharacterViewModel()
self.UiPanelRoleModel:UpdateCharacterModel(robot2CharEntityId
, self.PanelRoleModelGo
, self.Name
, finishedCallback
, nil
, robot2CharViewModel:GetFashionId())
else
local robotConfig = XRobotManager.GetRobotTemplate(sourceEntityId)
self.UiPanelRoleModel:UpdateRobotModel(sourceEntityId
, robotConfig.CharacterId
, nil
, robotConfig.FashionId
, robotConfig.WeaponId
, finishedCallback
, nil
, self.PanelRoleModelGo
, self.Name)
end
else
self.UiPanelRoleModel:UpdateCharacterModel(
sourceEntityId,
self.PanelRoleModelGo,
self.Name,
finishedCallback,
nil,
characterViewModel:GetFashionId()
)
end
end
function XUiMaverick2Character:UpdateCamera(index)
if self.CurCameraIndex == index then
return
end
self.CurCameraIndex = index
for i = 1, XMaverick2Configs.CAMERA_CNT do
local isShow = self.CurCameraIndex == i
if self.CameraFar[i] then
self.CameraFar[i].gameObject:SetActiveEx(isShow)
end
if self.CameraNear[i] then
self.CameraNear[i].gameObject:SetActiveEx(isShow)
end
end
end
---------------------------------------- 机器人详情 end ----------------------------------------
---------------------------------------- 页签 begin ----------------------------------------
function XUiMaverick2Character:OnClickTab(index, isForcedRefresh)
if self.SelectTag == index and not isForcedRefresh then
return
end
self.SelectTag = index
local isSelectInfo = index == TabType.Info
self.BtnHelpSkill:SetButtonState(isSelectInfo and Normal or Select)
self.BtnInfo:SetButtonState(isSelectInfo and Select or Normal)
if isSelectInfo then
self:RefreshDetailInfo()
else
self:RefreshDetailHelpSkill()
end
self.PanelHelpSkill.gameObject:SetActiveEx(not isSelectInfo)
self.PanelInfo.gameObject:SetActiveEx(isSelectInfo)
self.BtnTalent.gameObject:SetActiveEx(isSelectInfo)
end
-- 刷新支援技能
function XUiMaverick2Character:RefreshDetailHelpSkill()
self.SelHelpSkillIndex = nil
self.HelpSkillInfoList = {}
local robotId = self:GetSelectRobotId()
local helpSkillList = XMaverick2Configs.GetRobotAssistSkillConfigs()
table.sort(helpSkillList, function(a, b)
local isUnlockA = XDataCenter.Maverick2Manager.IsAssistTalentUnlock(a.TalentId)
local isUnlockB = XDataCenter.Maverick2Manager.IsAssistTalentUnlock(b.TalentId)
local aValue = isUnlockA and 1 or 0
local bValue = isUnlockB and 1 or 0
if aValue ~= bValue then
return aValue > bValue
else
return a.TalentId < b.TalentId
end
end)
-- 刷新ui
XUiHelper.RefreshCustomizedList(self.PanelContent, self.GridHelpSkill, #helpSkillList, function(index, go)
self:RefreshHelpSkill(index, go, helpSkillList[index])
end)
-- 没有支援技
self.TxtSelectHelpSkillTitle.text = ""
self.TxtSelectHelpSkilDesc.text = ""
if #self.HelpSkillInfoList == 0 then
return
end
-- 优先选择上次选中的技能,没有则选第一个,都没解锁则不选中
local selTalentId = XDataCenter.Maverick2Manager.GetRobotSelHelpSkill(robotId)
local selectIndex = 1
for i, skillInfo in ipairs(self.HelpSkillInfoList) do
local skillCfg = skillInfo.HelpSkillCfg
local isUnlock = XDataCenter.Maverick2Manager.IsAssistTalentUnlock(skillCfg.TalentId)
if skillCfg.TalentId == selTalentId and isUnlock then
selectIndex = i
end
end
if self.HelpSkillInfoList[selectIndex].IsLock then
self.TxtSelectHelpSkillTitle.text = ""
self.TxtSelectHelpSkilDesc.text = ""
for _, skillInfo in ipairs(self.HelpSkillInfoList) do
skillInfo.ImgSelected.gameObject:SetActiveEx(false)
end
else
self:OnClickBtnHelpSkill(selectIndex)
end
end
-- 刷新支援技能
function XUiMaverick2Character:RefreshHelpSkill(index, go, helpSkillCfg)
local robotId = self:GetSelectRobotId()
local groupId = helpSkillCfg.TalentGroupId
local talentId = helpSkillCfg.TalentId
local lvConfigs = XMaverick2Configs.GetTalentLvConfigs(talentId)
local lv = XDataCenter.Maverick2Manager.GetAssistTalentLv(talentId)
local icon = lv == 0 and lvConfigs[1].Icon or lvConfigs[lv].Icon -- 无0级配置表使用一级的图标配置
local isLock = not XDataCenter.Maverick2Manager.IsAssistTalentUnlock(talentId)
local uiObj = go:GetComponent("UiObject")
local rImgIcon = uiObj:GetObject("RImgIcon")
local imgLock = uiObj:GetObject("ImgLock")
rImgIcon.gameObject:SetActiveEx(not isLock)
imgLock.gameObject:SetActiveEx(isLock)
if not isLock then
rImgIcon:SetRawImage(icon)
end
XUiHelper.RegisterClickEvent(self, go, function()
self:OnClickBtnHelpSkill(index)
end)
local imgSelected = uiObj:GetObject("ImgSelected")
self.HelpSkillInfoList[index] = { Index = index, ImgSelected = imgSelected, HelpSkillCfg = helpSkillCfg, IsLock = isLock }
if not isLock then
self.HelpSkillInfoList[index].Name = XUiHelper.GetText("Maverick2HelpSkillName", helpSkillCfg.Name, lv)
self.HelpSkillInfoList[index].Desc = lvConfigs[lv].Desc
end
end
-- 点击支援技能
function XUiMaverick2Character:OnClickBtnHelpSkill(index)
local skillInfo = self.HelpSkillInfoList[index]
if skillInfo.IsLock then
return
end
-- 刷新ui
for _, skillInfo in ipairs(self.HelpSkillInfoList) do
local isSelect = skillInfo.Index == index
skillInfo.ImgSelected.gameObject:SetActiveEx(isSelect)
end
self.TxtSelectHelpSkillTitle.text = skillInfo.Name
self.TxtSelectHelpSkilDesc.text = skillInfo.Desc
-- 更新数据
self.SelHelpSkillIndex = index
local robotId = self:GetSelectRobotId()
local talentId = skillInfo.HelpSkillCfg.TalentId
XDataCenter.Maverick2Manager.SaveRobotSelHelpSkill(robotId, talentId)
end
-- 刷新角色信息
function XUiMaverick2Character:RefreshDetailInfo()
local robotId = self:GetSelectRobotId()
-- 刷新属性
local propertyList = XDataCenter.Maverick2Manager.GetRobotPropertyList(robotId)
XUiHelper.RefreshCustomizedList(self.PropertyContent, self.PropertyItem, #propertyList, function(index, go)
self:RefreshProperty(index, go, propertyList[index])
end)
local localPos = self.PropertyContent.localPosition
localPos.y = 0
self.PropertyContent.localPosition = localPos
-- 刷新技能
local skillCfgs = XMaverick2Configs.GetRobotSkillConfigs(robotId)
XUiHelper.RefreshCustomizedList(self.PaneSkillContent, self.GridSkill, #skillCfgs, function(index, go)
self:RefreshSkill(go, skillCfgs[index])
end)
end
-- 刷新属性
function XUiMaverick2Character:RefreshProperty(index, go, property)
local uiObj = go:GetComponent("UiObject")
local config = XMaverick2Configs.GetMaverick2Attribute(property.AttrId, true)
local showBg = index % 2 == 1
local isPercent = config.ShowType == XMaverick2Configs.AttributeEffectType.Percent
uiObj:GetObject("Bg").gameObject:SetActiveEx(showBg)
uiObj:GetObject("Icon"):SetSprite(config.Icon)
uiObj:GetObject("Name").text = config.Name
uiObj:GetObject("NameEng").text = config.EnglishName
uiObj:GetObject("TxtAttack").text = isPercent and (property.AttrValue / 100) .. "%" or property.AttrValue
end
-- 刷新角色技能
function XUiMaverick2Character:RefreshSkill(go, skillCfg)
local uiObj = go:GetComponent("UiObject")
uiObj:GetObject("Icon"):SetRawImage(skillCfg.Icon)
uiObj:GetObject("Text").text = skillCfg.Name
XUiHelper.RegisterClickEvent(self, go, function() self:OnClickBtnSkill(skillCfg) end)
end
-- 点击角色技能
function XUiMaverick2Character:OnClickBtnSkill(skillCfg)
local data = { IsSkill = true }
for k, v in pairs(skillCfg) do
data[k] = v
end
XLuaUiManager.Open("UiFubenMaverickSkillTips", data)
end
---------------------------------------- 页签 end ----------------------------------------
---------------------------------------- 资源栏 begin ----------------------------------------
function XUiMaverick2Character:InitAssetPanel()
self.AssetActivityPanel = XUiPanelActivityAsset.New(self.PanelSpecialTool)
XDataCenter.ItemManager.AddCountUpdateListener(
{
XDataCenter.ItemManager.ItemId.Maverick2Coin,
},
handler(self, self.UpdateAssetPanel),
self.AssetActivityPanel
)
end
function XUiMaverick2Character:UpdateAssetPanel()
self.AssetActivityPanel:Refresh(
{
XDataCenter.ItemManager.ItemId.Maverick2Coin,
}
)
end
---------------------------------------- 资源栏 end ----------------------------------------
-- 刷新天赋红点
function XUiMaverick2Character:RefreshTalentRed()
local isRed = XDataCenter.Maverick2Manager.IsShowTalentRed(self:GetSelectRobotId())
self.BtnInfo:ShowReddot(isRed)
self.BtnTalent:ShowReddot(isRed)
end