272 lines
11 KiB
Lua
272 lines
11 KiB
Lua
|
local XUiPanelPartnerOverview = require("XUi/XUiPartner/PartnerShow/XUiPanelPartnerOverview")
|
|||
|
local XUiPanelPartnerPassiveSkill = require("XUi/XUiPartner/PartnerShow/XUiPanelPartnerPassiveSkill")
|
|||
|
local XUiPartnerPropertyOther = XLuaUiManager.Register(XLuaUi, "UiPartnerPropertyOther")
|
|||
|
local XUiPanelRoleModel = require("XUi/XUiCharacter/XUiPanelRoleModel")
|
|||
|
|
|||
|
local LeftButtonType = {
|
|||
|
Overview = 1, -- 总览
|
|||
|
-- Quality = 2, -- 品质
|
|||
|
}
|
|||
|
|
|||
|
function XUiPartnerPropertyOther:OnAwake()
|
|||
|
-- XPartner
|
|||
|
self.Partner = nil
|
|||
|
-- XUiPanelRoleModel
|
|||
|
self.UiPanelRoleModel = nil
|
|||
|
-- 设置被动技能提示面板
|
|||
|
self.UiPanelPartnerPassiveSkill = XUiPanelPartnerPassiveSkill.New(self.PanelTips)
|
|||
|
-- 子面板信息配置
|
|||
|
self.ChillPanelInfoDic = {
|
|||
|
[LeftButtonType.Overview] = {
|
|||
|
uiParent = self.PanelPartnerOverview,
|
|||
|
-- 默认存在于界面中
|
|||
|
instanceGo = self.PanelPartnerOverview,
|
|||
|
proxy = XUiPanelPartnerOverview,
|
|||
|
-- 代理设置参数
|
|||
|
proxyArgs = {
|
|||
|
"Partner"
|
|||
|
, function(skill)
|
|||
|
self.BtnHidePassiveSkill.gameObject:SetActiveEx(true)
|
|||
|
self.UiPanelPartnerPassiveSkill:SetData(skill)
|
|||
|
end
|
|||
|
}
|
|||
|
},
|
|||
|
}
|
|||
|
self.CameraFarDic = nil
|
|||
|
self.CameraNearDic = nil
|
|||
|
-- XPartnerConfigs.CameraType
|
|||
|
self.PartnerStatus = nil
|
|||
|
self:RegisterUiEvents()
|
|||
|
end
|
|||
|
|
|||
|
-- partner : XPartner
|
|||
|
function XUiPartnerPropertyOther:OnStart(partner)
|
|||
|
self.Partner = partner
|
|||
|
self.PartnerStatus = XPartnerConfigs.CameraType.Standby
|
|||
|
-- 显示伙伴品质
|
|||
|
self.RImgQuality:SetRawImage(partner:GetCharacterQualityIcon())
|
|||
|
-- 伙伴等级
|
|||
|
self.TxtLevel.text = partner:GetLevel()
|
|||
|
-- 加载伙伴模型
|
|||
|
self:InitUiPanelRoleModel()
|
|||
|
self.BtnChangeRaycast.raycastTarget = false
|
|||
|
self.PanelDragRaycast.raycastTarget = false
|
|||
|
self:RefreshModel(self.PartnerStatus, function()
|
|||
|
self:PlayEnterAnim()
|
|||
|
end)
|
|||
|
-- -- 设置默认选中的左边按钮
|
|||
|
-- self.PanelLeftButtonGroup:SelectIndex(1)
|
|||
|
self:OnLeftButtonClicked(1)
|
|||
|
end
|
|||
|
|
|||
|
function XUiPartnerPropertyOther:OnDisable()
|
|||
|
self.UiPanelRoleModel:HideAllEffects()
|
|||
|
end
|
|||
|
|
|||
|
--########################## 私有方法 ##############################
|
|||
|
function XUiPartnerPropertyOther:RegisterUiEvents()
|
|||
|
self.BtnBack.CallBack = function() self:Close() end
|
|||
|
self.BtnMainUi.CallBack = function() XLuaUiManager.RunMain() end
|
|||
|
self.BtnChange.CallBack = function() self:OnChangePartnerStatus() end
|
|||
|
self.BtnHidePassiveSkill.CallBack = function() self:OnBtnHidePassiveSkillClicked() end
|
|||
|
-- 注册按钮组
|
|||
|
-- self.PanelLeftButtonGroup:Init({
|
|||
|
-- [LeftButtonType.Overview] = self.BtnTabAll,
|
|||
|
-- [LeftButtonType.Quality] = self.BtnTabQuality,
|
|||
|
-- }, function(tabIndex) self:OnLeftButtonClicked(tabIndex) end, 1000)
|
|||
|
end
|
|||
|
|
|||
|
function XUiPartnerPropertyOther:OnBtnHidePassiveSkillClicked()
|
|||
|
self.BtnHidePassiveSkill.gameObject:SetActiveEx(false)
|
|||
|
self.UiPanelPartnerPassiveSkill:Close()
|
|||
|
end
|
|||
|
|
|||
|
function XUiPartnerPropertyOther:OnLeftButtonClicked(tabIndex)
|
|||
|
-- 显示/隐藏关联子面板
|
|||
|
for key, data in pairs(self.ChillPanelInfoDic) do
|
|||
|
data.uiParent.gameObject:SetActiveEx(key == tabIndex)
|
|||
|
end
|
|||
|
local childPanelData = self.ChillPanelInfoDic[tabIndex]
|
|||
|
-- 加载panel asset
|
|||
|
local instanceGo = childPanelData.instanceGo
|
|||
|
if instanceGo == nil then
|
|||
|
instanceGo = childPanelData.uiParent:LoadPrefab(childPanelData.assetPath)
|
|||
|
childPanelData.instanceGo = instanceGo
|
|||
|
end
|
|||
|
-- 加载panel proxy
|
|||
|
local instanceProxy = childPanelData.instanceProxy
|
|||
|
if instanceProxy == nil then
|
|||
|
instanceProxy = childPanelData.proxy.New(instanceGo)
|
|||
|
childPanelData.instanceProxy = instanceProxy
|
|||
|
end
|
|||
|
-- 加载proxy参数
|
|||
|
local proxyArgs = {}
|
|||
|
if childPanelData.proxyArgs then
|
|||
|
for _, argName in ipairs(childPanelData.proxyArgs) do
|
|||
|
if type(argName) == "string" then
|
|||
|
proxyArgs[#proxyArgs + 1] = self[argName]
|
|||
|
else
|
|||
|
proxyArgs[#proxyArgs + 1] = argName
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
instanceProxy:SetData(table.unpack(proxyArgs))
|
|||
|
end
|
|||
|
|
|||
|
function XUiPartnerPropertyOther:OnChangePartnerStatus(finishCallback, isAutoCloseMask, isCheckAnimExist)
|
|||
|
if isCheckAnimExist == nil then isCheckAnimExist = false end
|
|||
|
-- 检查动画切换动画是否存在,不存在直接不处理
|
|||
|
if isCheckAnimExist then
|
|||
|
local readyPlayAnim = nil
|
|||
|
if self.PartnerStatus == XPartnerConfigs.CameraType.Standby then
|
|||
|
readyPlayAnim = self:GetChangeAnim(XPartnerConfigs.CameraType.Combat)
|
|||
|
elseif self.PartnerStatus == XPartnerConfigs.CameraType.Combat then
|
|||
|
readyPlayAnim = self:GetChangeAnim(XPartnerConfigs.CameraType.Standby)
|
|||
|
end
|
|||
|
if not self.UiPanelRoleModel:CheckAnimaCanPlay(readyPlayAnim) then
|
|||
|
self:RecoverRaycastTargets()
|
|||
|
return
|
|||
|
end
|
|||
|
end
|
|||
|
if isAutoCloseMask == nil then isAutoCloseMask = true end
|
|||
|
if isAutoCloseMask then XLuaUiManager.SetMask(true) end
|
|||
|
-- 播放变身音效
|
|||
|
local voiceId = self:GetChangeVoice()
|
|||
|
if voiceId and voiceId > 0 then
|
|||
|
XSoundManager.PlaySoundByType(voiceId, XSoundManager.SoundType.Sound)
|
|||
|
end
|
|||
|
-- 更改状态
|
|||
|
if self.PartnerStatus == XPartnerConfigs.CameraType.Standby then
|
|||
|
self.PartnerStatus = XPartnerConfigs.CameraType.Combat
|
|||
|
self:SetCameraType(self.PartnerStatus)
|
|||
|
self.UiPanelRoleModel:LoopLoadEffect(self.Partner:GetSToCEffect(), true)
|
|||
|
elseif self.PartnerStatus == XPartnerConfigs.CameraType.Combat then
|
|||
|
self.PartnerStatus = XPartnerConfigs.CameraType.Standby
|
|||
|
self.UiPanelRoleModel:LoopLoadEffect(self:GetBornEffectPath(), true)
|
|||
|
end
|
|||
|
-- 动画无论成功还是失败的回调
|
|||
|
local callback = function()
|
|||
|
-- 变身状态特殊处理
|
|||
|
if self.PartnerStatus == XPartnerConfigs.CameraType.Combat then
|
|||
|
self:SetCameraType(self.PartnerStatus)
|
|||
|
self.UiPanelRoleModel:LoopLoadEffect(self:GetBornEffectPath(), true)
|
|||
|
else
|
|||
|
self.UiPanelRoleModel:LoopLoadEffect(self.Partner:GetStandbyBornEffect(), true)
|
|||
|
end
|
|||
|
-- 刷新模型
|
|||
|
self:RefreshModel(self.PartnerStatus, finishCallback)
|
|||
|
if isAutoCloseMask then
|
|||
|
XLuaUiManager.SetMask(false)
|
|||
|
end
|
|||
|
end
|
|||
|
-- 播放变身动画
|
|||
|
self.UiPanelRoleModel:PlayAnima(self:GetChangeAnim(), true, callback, callback)
|
|||
|
end
|
|||
|
|
|||
|
-- 播放伙伴入场动画(盒子-牛-盒子)
|
|||
|
function XUiPartnerPropertyOther:PlayEnterAnim()
|
|||
|
self:OnChangePartnerStatus(function()
|
|||
|
self:OnChangePartnerStatus(nil, nil, true)
|
|||
|
self:RecoverRaycastTargets()
|
|||
|
end, false, true)
|
|||
|
end
|
|||
|
|
|||
|
function XUiPartnerPropertyOther:RecoverRaycastTargets()
|
|||
|
self.BtnChangeRaycast.raycastTarget = true
|
|||
|
self.PanelDragRaycast.raycastTarget = true
|
|||
|
end
|
|||
|
|
|||
|
function XUiPartnerPropertyOther:GetChangeVoice(partnerStatus)
|
|||
|
partnerStatus = partnerStatus or self.PartnerStatus
|
|||
|
local voiceId = 0
|
|||
|
if partnerStatus == XPartnerConfigs.CameraType.Standby then
|
|||
|
voiceId = self.Partner:GetSToCVoice()
|
|||
|
elseif partnerStatus == XPartnerConfigs.CameraType.Combat then
|
|||
|
voiceId = self.Partner:GetCToSVoice()
|
|||
|
end
|
|||
|
return voiceId
|
|||
|
end
|
|||
|
|
|||
|
function XUiPartnerPropertyOther:GetChangeAnim(partnerStatus)
|
|||
|
partnerStatus = partnerStatus or self.PartnerStatus
|
|||
|
local animName
|
|||
|
if partnerStatus == XPartnerConfigs.CameraType.Standby then
|
|||
|
animName = self.Partner:GetCToSAnime()
|
|||
|
elseif partnerStatus == XPartnerConfigs.CameraType.Combat then
|
|||
|
animName = self.Partner:GetSToCAnime()
|
|||
|
end
|
|||
|
return animName
|
|||
|
end
|
|||
|
|
|||
|
function XUiPartnerPropertyOther:GetBornEffectPath(partnerStatus)
|
|||
|
partnerStatus = partnerStatus or self.PartnerStatus
|
|||
|
local effectPath
|
|||
|
if partnerStatus == XPartnerConfigs.CameraType.Standby then
|
|||
|
effectPath = self.Partner:GetCToSEffect()
|
|||
|
elseif partnerStatus == XPartnerConfigs.CameraType.Combat then
|
|||
|
effectPath = self.Partner:GetCombatBornEffect()
|
|||
|
end
|
|||
|
return effectPath
|
|||
|
end
|
|||
|
|
|||
|
function XUiPartnerPropertyOther:GetBornAnim(partnerStatus)
|
|||
|
partnerStatus = partnerStatus or self.PartnerStatus
|
|||
|
local animName
|
|||
|
if partnerStatus == XPartnerConfigs.CameraType.Standby then
|
|||
|
animName = self.Partner:GetStandbyBornAnime()
|
|||
|
elseif partnerStatus == XPartnerConfigs.CameraType.Combat then
|
|||
|
animName = self.Partner:GetCombatBornAnime()
|
|||
|
end
|
|||
|
return animName
|
|||
|
end
|
|||
|
|
|||
|
function XUiPartnerPropertyOther:GetModelId(partnerStatus)
|
|||
|
partnerStatus = partnerStatus or self.PartnerStatus
|
|||
|
local modelId
|
|||
|
if partnerStatus == XPartnerConfigs.CameraType.Standby then
|
|||
|
modelId = self.Partner:GetStandbyModel()
|
|||
|
elseif partnerStatus == XPartnerConfigs.CameraType.Combat then
|
|||
|
modelId = self.Partner:GetCombatModel()
|
|||
|
end
|
|||
|
return modelId
|
|||
|
end
|
|||
|
|
|||
|
function XUiPartnerPropertyOther:InitUiPanelRoleModel()
|
|||
|
local root = self.UiModelGo.transform
|
|||
|
local panelRoleModel = root:FindTransform("PanelRoleModel")
|
|||
|
self.ImgEffectHuanren = root:FindTransform("ImgEffectHuanren")
|
|||
|
-- 初始化镜头信息
|
|||
|
self.CameraFarDic = {
|
|||
|
[XPartnerConfigs.CameraType.Standby] = root:FindTransform("UiCamFarStandby"),
|
|||
|
[XPartnerConfigs.CameraType.Combat] = root:FindTransform("UiCamFarCombat"),
|
|||
|
}
|
|||
|
self.CameraNearDic = {
|
|||
|
[XPartnerConfigs.CameraType.Standby] = root:FindTransform("UiCamNearStandby"),
|
|||
|
[XPartnerConfigs.CameraType.Combat] = root:FindTransform("UiCamNearCombat"),
|
|||
|
}
|
|||
|
-- self.Name 参数看起来只是在武器那边做了一个键标记
|
|||
|
self.UiPanelRoleModel = XUiPanelRoleModel.New(panelRoleModel, self.Name, nil, true, nil, true)
|
|||
|
self.UiPanelRoleModel:SetEffectMaxCount(2)
|
|||
|
end
|
|||
|
|
|||
|
function XUiPartnerPropertyOther:RefreshModel(partnerStatus, bornAnimCallback)
|
|||
|
partnerStatus = partnerStatus or self.PartnerStatus
|
|||
|
local modelId = self:GetModelId(partnerStatus)
|
|||
|
self.ImgEffectHuanren.gameObject:SetActiveEx(false)
|
|||
|
-- 参数2是UiModelTansform的配置表的键,用来设置模型的一些旋转,大小之类的,这里用回UiPartnerMain默认的
|
|||
|
self.UiPanelRoleModel:UpdatePartnerModel(modelId, XModelManager.MODEL_UINAME.XUiPartnerMain, nil, function(model)
|
|||
|
self.ImgEffectHuanren.gameObject:SetActiveEx(true)
|
|||
|
self.PanelDrag.Target = model.transform
|
|||
|
self.UiPanelRoleModel:PlayAnima(self:GetBornAnim(), true, bornAnimCallback, bornAnimCallback)
|
|||
|
end, false, true)
|
|||
|
self:SetCameraType(partnerStatus)
|
|||
|
end
|
|||
|
|
|||
|
function XUiPartnerPropertyOther:SetCameraType(partnerStatus)
|
|||
|
for k, _ in pairs(self.CameraFarDic) do
|
|||
|
self.CameraFarDic[k].gameObject:SetActiveEx(k == partnerStatus)
|
|||
|
end
|
|||
|
for k, _ in pairs(self.CameraNearDic) do
|
|||
|
self.CameraNearDic[k].gameObject:SetActiveEx(k == partnerStatus)
|
|||
|
end
|
|||
|
end
|