PGRData/Script/matrix/xui/xuiepicfashiongacha/grid/XUiGridGachaShowReward.lua

378 lines
16 KiB
Lua
Raw Normal View History

2024-09-01 20:49:41 +00:00
local XUiGridGachaShowReward = XClass(nil, "XUiGridGachaShowReward")
local XUiPanelRoleModel = require("XUi/XUiCharacter/XUiPanelRoleModel")
local XUiModelUtility = require("XUi/XUiCharacter/XUiModelUtility")
local LineEffect2d = "DrawShowLineCommunicationEffect2d"
local LineEffect3d = "DrawShowLineCommunicationEffect3d"
local LineEffectWeapon3d = "DrawShowLineCommunicationEffectWq3d"
function XUiGridGachaShowReward:Ctor(rootUi, modelPanel, uiPanel, farCamera, nearCamera, uiCamera)
self.RootUi = rootUi
self.ModelPanel = modelPanel
self.UiPanel = uiPanel
self.FarCamera = farCamera
self.NearCamera = nearCamera
self.UiCamera = uiCamera
self:InitUiObject()
end
function XUiGridGachaShowReward:InitUiObject()
---@type UnityEngine.UI.Text
self.TxtName = self.UiPanel:FindTransform("TxtName"):GetComponent("Text")
---@type UnityEngine.UI.Image
self.ImgNameBg = self.UiPanel:FindTransform("ImgBg"):GetComponent("Image")
---@type UnityEngine.UI.Text
self.TxtType = self.UiPanel:FindTransform("TxtType"):GetComponent("Text")
---@type UnityEngine.UI.Text
self.TxtQuality = self.UiPanel:FindTransform("TxtQuality"):GetComponent("Text")
---@type UnityEngine.RectTransform
self.PanelText = self.UiPanel:FindTransform("PanelText")
---@type UnityEngine.RectTransform
self.PanelChip = self.UiPanel:FindTransform("PanelChip")
---@type UnityEngine.RectTransform
self.ChipEffect = self.UiPanel:FindTransform("ChipEffect")
---@type UnityEngine.RectTransform
self.PanelItem = self.UiPanel:FindTransform("PanelItem")
---@type UnityEngine.RectTransform
self.ItemEffect = self.UiPanel:FindTransform("ItemEffect")
---@type UnityEngine.UI.RawImage
self.RImgChip = self.UiPanel:FindTransform("ImgChip"):GetComponent("RawImage")
---@type UnityEngine.UI.RawImage
self.RImgItem = self.UiPanel:FindTransform("ImgItem"):GetComponent("RawImage")
---@type UnityEngine.RectTransform
self.PanelConvert = self.UiPanel:FindTransform("PanelConvert")
---@type UnityEngine.UI.Text
self.TxtNumber = self.UiPanel:FindTransform("TxtNumber"):GetComponent("Text")
local gridConvert = self.UiPanel:FindTransform("GridCommonPopUp")
self.GridConvert = XUiGridCommon.New(nil, gridConvert)
---@type UnityEngine.RectTransform
self.ImgEffectDizuo = self.ModelPanel:FindTransform("ImgEffectDizuo")
---@type UnityEngine.RectTransform
self.ImgEffectFloor = self.ModelPanel:FindTransform("ImgEffectFloor")
---@type UnityEngine.RectTransform
self.ImgEffectXuxian = self.ModelPanel:FindTransform("ImgEffectXuxian")
---@type UnityEngine.RectTransform
self.ImgEffectGuang = self.ModelPanel:FindTransform("ImgEffectGuang")
---@type UnityEngine.RectTransform
self.GridModel = self.ModelPanel:FindTransform("GridModel")
---@type UnityEngine.RectTransform
self.GridModelCaseDisable = self.ModelPanel:FindTransform("GridModelCaseDisable")
---@type UnityEngine.RectTransform
self.GridModelCaseEnable = self.ModelPanel:FindTransform("GridModelCaseEnable")
end
function XUiGridGachaShowReward:OnShow(rewardInfo)
self.Reward = rewardInfo
self.FarCamera.gameObject:SetActiveEx(true)
self.NearCamera.gameObject:SetActiveEx(true)
self.UiCamera.gameObject:SetActiveEx(true)
self.ModelPanel.gameObject:SetActiveEx(false)
self.UiPanel.gameObject:SetActiveEx(true)
--获取奖励类型
local reward = self.Reward
local id = reward.Id and reward.Id > 0 and reward.Id or reward.TemplateId
local Type = XTypeManager.GetTypeById(id)
if reward.ConvertFrom > 0 then
--有转换碎片之后显示碎片转换ui面板
self.PanelConvert.gameObject:SetActiveEx(true)
self.GridConvert:Refresh(reward)
self.TxtNumber.text = "x" .. reward.Count
Type = XTypeManager.GetTypeById(reward.ConvertFrom)
id = reward.ConvertFrom
end
local showTable = XGachaConfigs.GetGachaShowByGroupId(self.RootUi.GachaCfg.GachaShowGroupId)[Type]
if XDataCenter.ItemManager.IsWeaponFashion(id) then
Type = XArrangeConfigs.Types.Weapon
end
--获取奖励品质
local quality
local templateIdData = XGoodsCommonManager.GetGoodsShowParamsByTemplateId(id)
if Type == XArrangeConfigs.Types.Wafer then
quality = templateIdData.Star
elseif Type == XArrangeConfigs.Types.Weapon then
quality = templateIdData.Star
elseif Type == XArrangeConfigs.Types.Character then
quality = XCharacterConfigs.GetCharMinQuality(id)
elseif Type == XArrangeConfigs.Types.Partner then
quality = templateIdData.Quality
else
quality = XTypeManager.GetQualityById(id)
end
if XDataCenter.ItemManager.IsWeaponFashion(id) then
quality = XTypeManager.GetQualityById(id)
end
-- 强制检测特效
local foreceQuality = XGachaConfigs.GetGachaShowRewardConfigById(id)
if foreceQuality then
quality = foreceQuality.EffectQualityType
end
-- 加载特效
self:LoadEffect(showTable.GachaEffectGroupId[quality])
local templateId = id
if XArrangeConfigs.Types.Furniture == reward.RewardType then
local cfg = XFurnitureConfigs.GetFurnitureReward(id)
if cfg and cfg.FurnitureId then
templateId = cfg.FurnitureId
end
end
self.TxtName.text = XTypeManager.GetNameById(templateId)
local nameBgPath = XDrawConfigs.GetDrawCardNameBg(showTable.DrawPictureGroupId[quality])
self.ImgNameBg:SetSprite(nameBgPath)
if XDataCenter.ItemManager.IsWeaponFashion(id) then
local table = XDataCenter.DrawManager.GetDrawShow(XArrangeConfigs.Types.WeaponFashion)
self.TxtType.text = table.TypeText
else
self.TxtType.text = showTable.TypeText
end
self.TxtQuality.text = showTable.QualityText[quality]
local soundType = XSoundManager.UiBasicsMusic.UiDrawCard_Type.Normal
--根据奖励品质播放对应音效
if quality then
if quality == 5 then
soundType = XSoundManager.UiBasicsMusic.UiDrawCard_Type.FiveStar
elseif quality == 6 then
soundType = XSoundManager.UiBasicsMusic.UiDrawCard_Type.SixStar
end
end
--获取对应的展示图片
local icon
if Type == XArrangeConfigs.Types.Weapon or Type == XArrangeConfigs.Types.Furniture or Type == XArrangeConfigs.Types.HeadPortrait then
local goodsShowParams = XGoodsCommonManager.GetGoodsShowParamsByTemplateId(id)
icon = goodsShowParams.BigIcon
if Type ~= XArrangeConfigs.Types.Weapon then
self:CreateItem(icon, true, Type)
end
else
local isSmall = false
if Type == XArrangeConfigs.Types.Character then
icon = XDataCenter.CharacterManager.GetCharHalfBodyImage(id)
if quality < 3 then
soundType = XSoundManager.UiBasicsMusic.UiDrawCard_Type.FiveStar
elseif quality > 2 then
soundType = XSoundManager.UiBasicsMusic.UiDrawCard_Type.SixStar
end
elseif Type == XArrangeConfigs.Types.Wafer then
icon = XDataCenter.EquipManager.GetEquipLiHuiPath(id)
elseif Type == XArrangeConfigs.Types.Item then
icon = XDataCenter.ItemManager.GetItemBigIcon(id)
isSmall = true
elseif Type == XArrangeConfigs.Types.Fashion then
icon = XDataCenter.FashionManager.GetFashionGachaIcon(id)
elseif Type == XArrangeConfigs.Types.ChatEmoji then
icon = XDataCenter.ChatManager.GetEmojiIcon(id)
isSmall = true
elseif Type == XArrangeConfigs.Types.Partner then
icon = templateIdData.Icon
if quality < 3 then
soundType = XSoundManager.UiBasicsMusic.UiDrawCard_Type.FiveStar
elseif quality > 2 then
soundType = XSoundManager.UiBasicsMusic.UiDrawCard_Type.SixStar
end
elseif Type == XArrangeConfigs.Types.Background then
isSmall = true
icon = XPhotographConfigs.GetBackgroundBigIconById(id)
end
if Type ~= XArrangeConfigs.Types.Character and Type ~= XArrangeConfigs.Types.Partner and Type ~= XArrangeConfigs.Types.Fashion and (not XDataCenter.ItemManager.IsWeaponFashion(id)) then
self:CreateItem(icon, isSmall, Type)
end
end
self.ModelPanel.gameObject:SetActiveEx(true)
self.RootUi.BtnClick.gameObject:SetActiveEx(false)
-- 播放进入动画
self.GridModelCaseEnable:PlayTimelineAnimation(function()
--根据Type创建模型
self:CreateModel(id, Type)
self.RootUi.BtnClick.gameObject:SetActiveEx(true)
end)
end
function XUiGridGachaShowReward:OnShowEnd()
if self.CvInfo then
self.CvInfo:Stop()
self.CvInfo = nil
end
self.FarCamera.gameObject:SetActiveEx(false)
self.NearCamera.gameObject:SetActiveEx(false)
self.UiCamera.gameObject:SetActiveEx(false)
-- 播放结束动画
if self.GridModelCaseDisable then
self.GridModelCaseDisable:PlayTimelineAnimation()
end
end
function XUiGridGachaShowReward:CreateModel(id, rewardType)
if rewardType == XArrangeConfigs.Types.Character then
self:CreateCharacterModel(id, nil)
elseif rewardType == XArrangeConfigs.Types.Fashion then
self:CreateCharacterModel(nil, id)
elseif rewardType == XArrangeConfigs.Types.Weapon and (not XDataCenter.ItemManager.IsWeaponFashion(id)) then
self:CreateWeaponModel(id)
elseif XDataCenter.ItemManager.IsWeaponFashion(id) then
self:CreateWeaponFashionModel(id)
elseif rewardType == XArrangeConfigs.Types.Partner then
self:CreatePartnerModel(id)
end
end
-- V2.0版本特殊处理 因通讯线特效影响了武器原有的效果 暂时屏蔽该武器(不死鸟)的通讯线特效
local tempFilterWeaponId = {
2234001,
2235001,
2236001,
6002505,
}
function XUiGridGachaShowReward:CreateWeaponModel(templateId)
local modelConfig = XDataCenter.EquipManager.GetWeaponModelCfg(templateId, self.RootUi.Name, 0)
if modelConfig then
XModelManager.LoadWeaponModel(modelConfig.ModelId, self.GridModel.gameObject, modelConfig.TransformConfig, self.RootUi.Name, function(model)
model.gameObject:SetActiveEx(true)
if not table.contains(tempFilterWeaponId, templateId) then
self:Load3dLineEffect(model, LineEffectWeapon3d)
end
end, { gameObject = self.RootUi.GameObject })
end
end
function XUiGridGachaShowReward:CreateWeaponFashionModel(templateId)
local fashionId = XDataCenter.ItemManager.GetWeaponFashionId(templateId)
local modelConfig = XDataCenter.WeaponFashionManager.GetWeaponModelCfg(fashionId, nil, self.RootUi.Name)
if modelConfig then
XModelManager.LoadWeaponModel(modelConfig.ModelId, self.GridModel.gameObject, modelConfig.TransformConfig, self.RootUi.Name, function(model)
model.gameObject:SetActiveEx(true)
self:Load3dLineEffect(model, LineEffectWeapon3d)
end, { gameObject = self.RootUi.GameObject })
end
end
function XUiGridGachaShowReward:CreateCharacterModel(templateId, fashionId)
if not templateId and not fashionId then
return
end
if not self.InitRoleMode then
self.InitRoleMode = true
self.RoleModelPanel = XUiPanelRoleModel.New(self.GridModel, self.RootUi.Name, true, false, false)
end
local curCharacterId = templateId or XDataCenter.FashionManager.GetCharacterId(fashionId)
local curFashtionId = fashionId or XCharacterConfigs.GetCharacterTemplate(curCharacterId).DefaultNpcFashtionId
XDataCenter.DisplayManager.UpdateRoleModel(self.RoleModelPanel, curCharacterId, nil, curFashtionId)
self.RoleModelPanel:UpdateCharacterModel(curCharacterId, self.GridModel, self.RootUi.Name, function(model)
model.gameObject:SetActiveEx(true)
if not table.contains(tempFilterWeaponId, templateId) and not table.contains(tempFilterWeaponId, fashionId) then
self:Load3dLineEffect(model, LineEffect3d)
end
local animeID = XDataCenter.DrawManager.GetDrawShowCharacter(curCharacterId).AnimeID
local voiceId = XDataCenter.DrawManager.GetDrawShowCharacter(curCharacterId).VoiceId
if animeID then
self.RoleModelPanel:PlayAnima(animeID)
end
if voiceId then
self.CvInfo = CS.XAudioManager.PlayCv(voiceId)
end
end, nil, curFashtionId)
end
function XUiGridGachaShowReward:CreatePartnerModel(templateId)
if not self.InitPartnerMode then
self.InitPartnerMode = true
self.PartnerModelPanel = XUiPanelRoleModel.New(self.GridModel, self.RootUi.Name, nil, true, nil, true)
end
self.CvInfo = XUiModelUtility.LoadPartnerModelSToC(templateId, self.PartnerModelPanel, self.RootUi.Name, function(SModel)
SModel.gameObject:SetActiveEx(true)
end, function()
local modelConfig = XDataCenter.PartnerManager.GetPartnerModelConfigById(templateId)
-- 战斗模型
self.PartnerModelPanel:UpdatePartnerModel(modelConfig.CombatModel, self.RootUi.Name, nil, function(CModel)
CModel.gameObject:SetActiveEx(true)
self:Load3dLineEffect(CModel, LineEffect3d)
end, false, true)
-- 出生特效
self.PartnerModelPanel:LoadPartnerUiEffect(modelConfig.CombatModel, XPartnerConfigs.EffectParentName.ModelOnEffect, true, true)
-- 动画
self.PartnerModelPanel:PlayAnima(modelConfig.CombatBornAnime, true)
end)
end
function XUiGridGachaShowReward:CreateItem(iconPath, isSmall, type)
self.PanelChip.gameObject:SetActiveEx(not isSmall)
self.PanelItem.gameObject:SetActiveEx(isSmall)
local effectPath = XUiHelper.GetClientConfig(LineEffect2d .. type, XUiHelper.ClientConfigType.String)
local effectGo
if isSmall then
self.RImgItem:SetRawImage(iconPath)
effectGo = self.ItemEffect:LoadUiEffect(effectPath)
else
self.RImgChip:SetRawImage(iconPath)
effectGo = self.ChipEffect:LoadUiEffect(effectPath)
end
if not effectGo then
return
end
-- 只修改root节点下特效主帖图
local root = XUiHelper.TryGetComponent(effectGo.transform, "Root")
if not root then
return
end
local renderer = root.transform:GetComponentsInChildren(typeof(CS.UnityEngine.Renderer))
self.Resource = CS.XResourceManager.Load(iconPath)
local texture = self.Resource.Asset
XTool.LoopArray(renderer, function(v)
v.material:SetTexture("_MainTex", texture)
v.trailMaterial = v.material
end)
end
function XUiGridGachaShowReward:LoadEffect(id)
-- 加载底座特效
local carriageEffect = XDrawConfigs.GetCarriageEffect(id)
self.ImgEffectDizuo:LoadPrefab(carriageEffect)
-- 加载线特效
local floorEffect = XDrawConfigs.GetFloorEffect(id)
self.ImgEffectFloor:LoadPrefab(floorEffect)
-- 加载光圈特效
local apertureEffect = XDrawConfigs.GetApertureEffect(id)
self.ImgEffectGuang:LoadPrefab(apertureEffect)
end
-- 加载3d 通讯线特效
function XUiGridGachaShowReward:Load3dLineEffect(model, effectKey)
local effectPath = XUiHelper.GetClientConfig(effectKey, XUiHelper.ClientConfigType.String)
local effectGo = self.ImgEffectXuxian:LoadPrefab(effectPath, true, false)
if not effectGo then
return
end
local binder = effectGo.transform:GetComponent(typeof(CS.XMaterialAnimation3StepBinder))
if binder then
binder.TargetModel = model
end
effectGo.gameObject:SetActiveEx(true)
end
function XUiGridGachaShowReward:OnDestroy()
if self.Resource then
self.Resource:Release()
self.Resource = nil
end
end
return XUiGridGachaShowReward