Initial version - 1.2.0.60

EN: 1.2.0.60
CN: 1.2.0.61
JP: 1.2.0.63
KR: 1.2.0.67
This commit is contained in:
SL1900
2025-12-03 01:00:00 +09:00
commit 5e0d58cfad
3595 changed files with 9373562 additions and 0 deletions
+522
View File
@@ -0,0 +1,522 @@
local GachaShowCtrl = class("GachaShowCtrl", BaseCtrl)
local GameResourceLoader = require("Game.Common.Resource.GameResourceLoader")
local ResTypeAny = GameResourceLoader.ResType.Any
local ResType = GameResourceLoader.ResType
local WwiseManger = CS.WwiseAudioManager
local GachaShowResRoot = "UI/GachaEx/Sprites_Show/"
local PlayablesPlayStatePlaying = CS.UnityEngine.Playables.PlayState.Playing
local Offset = CS.Actor2DOffsetData
local typeof = typeof
local Actor2DManager = require("Game.Actor2D.Actor2DManager")
local BubbleVoiceManager = require("Game.Actor2D.BubbleVoiceManager")
local WwiseAudioMgr = CS.WwiseAudioManager.Instance
local mapOutfitAnimName = {
[1] = "GachaShow_Outfit_SSR",
[2] = "GachaShow_Outfit_SR",
[3] = "GachaShow_Outfit_R",
[4] = "GachaShow_Outfit_N",
[5] = "GachaShow_Outfit_N"
}
local mapOutfitAnimTime = {
[1] = 0.6,
[2] = 0.6,
[3] = 0.6,
[4] = 0.6,
[5] = 0.6
}
GachaShowCtrl._mapNodeConfig = {
imgBgRare = {sComponentName = "Image"},
BgRare = {
sComponentName = "SpriteRenderer"
},
BgRare1 = {
sComponentName = "SpriteRenderer"
},
goCharContent = {
sNodeName = "----Char----",
sComponentName = "RectTransform"
},
rImgL2D = {sComponentName = "RawImage"},
OffScreen2DCamera = {
sNodeName = "OffScreen3DCamera",
sComponentName = "Camera"
},
L2DRoot = {sNodeName = "L2D", sComponentName = "Transform"},
rtSSRWord = {},
TMP_Word1 = {sComponentName = "TMP_Text"},
goOutfitContent = {
sNodeName = "----Outfit----"
},
imgBgOutfit = {sComponentName = "Image"},
imgOutfit = {sComponentName = "Image"},
imgOutfitRare = {sComponentName = "Image"},
goInfoContent = {
sNodeName = "----Info----"
},
animInfoContent = {
sNodeName = "----Info----",
sComponentName = "Animator"
},
rtItemTips = {},
imgItemIcon = {sComponentName = "Image"},
TMP_ItemCount = {sComponentName = "TMP_Text"},
TMP_ItemTitle = {
sComponentName = "TMP_Text",
sLanguageId = "GachaItemTIpsTitle"
},
rtItemTips2 = {},
imgItemIcon2 = {sComponentName = "Image"},
TMP_ItemCount2 = {sComponentName = "TMP_Text"},
TMP_ItemTitle2 = {
sComponentName = "TMP_Text",
sLanguageId = "Gacha_GiveItemTitle"
},
imgTitleRare = {sComponentName = "Image"},
imgTitleBg = {sComponentName = "Image"},
imgRareIcon = {sComponentName = "Image"},
TMP_Title = {sComponentName = "TMP_Text"},
TMP_Word = {sComponentName = "TMP_Text"},
ImgNew = {},
btnJumpStep = {
sComponentName = "Button",
callback = "OnBtnClick_JumpStep"
},
btnJumpAll = {
sComponentName = "UIButton",
callback = "OnBtnClick_JumpAll"
},
animWord = {sNodeName = "rtSSRWord", sComponentName = "Animator"},
SSROutfitShow = {},
animSSROutfitShow = {
sNodeName = "SSROutfitShow",
sComponentName = "Animator"
},
imgBgOutfitShow = {sComponentName = "Image"},
imgOutfitMask = {},
liveDiscCtrl = {
sNodeName = "goLiveDisc",
sCtrlName = "Game.UI.Disc.LiveDiscCtrl"
},
rtOffScreen = {
sNodeName = "Live2D_OffScreen_Renderer",
sComponentName = "Transform"
},
rtTitle = {
sComponentName = "CanvasGroup"
},
actor2dNode = {
sNodeName = "----Actor2D_Node----",
sComponentName = "Transform"
},
rtPreviewShow = {
sNodeName = "---ShowPreview---"
},
rtPreviewItems = {
sNodeName = "rtPreviewItem_",
nCount = 10
}
}
GachaShowCtrl._mapEventConfig = {}
function GachaShowCtrl:Awake()
end
function GachaShowCtrl:FadeIn()
end
function GachaShowCtrl:FadeOut()
end
function GachaShowCtrl:OnEnable()
self.animatorRoot = self.gameObject:GetComponent("Animator")
self.gameObject:SetActive(false)
self._mapNode.rtPreviewShow:SetActive(false)
self._mapNode.rtOffScreen.localScale = Vector3(1 / Settings.CANVAS_SCALE, 1 / Settings.CANVAS_SCALE, 1 / Settings.CANVAS_SCALE)
self.timerStep = nil
end
function GachaShowCtrl:OnDisable()
self._mapNode.OffScreen2DCamera.targetTexture = nil
NovaAPI.SetTexture(self._mapNode.rImgL2D, nil)
if self.rtCharL2d ~= nil then
GameUIUtils.ReleaseRenderTexture(self.rtCharL2d)
self.rtCharL2d = nil
end
if self.goL2D ~= nil then
if self.goL2D.trL2DIns ~= nil then
Actor2DManager.UnSetActor2DWithRender(self.goL2D)
end
self.goL2D = nil
end
end
function GachaShowCtrl:OnDestroy()
end
function GachaShowCtrl:OnRelease()
end
function GachaShowCtrl:ShowPreview()
self._mapNode.rtPreviewShow:SetActive(true)
for i = 1, 10 do
if self.tbItems[i] == nil then
self._mapNode.rtPreviewItems[i]:SetActive(false)
else
self._mapNode.rtPreviewItems[i]:SetActive(true)
local mapItemCfgData = ConfigTable.GetData_Item(self.tbItems[i].id)
if mapItemCfgData == nil then
self._mapNode.rtPreviewItems[i]:SetActive(false)
else
local rtR = self._mapNode.rtPreviewItems[i].transform:Find("imgR")
local rtSR = self._mapNode.rtPreviewItems[i].transform:Find("imgSR")
local rtSSR = self._mapNode.rtPreviewItems[i].transform:Find("imgSSR")
if rtR ~= nil then
rtR.gameObject:SetActive(mapItemCfgData.Rarity > 2)
end
if rtSR ~= nil then
rtSR.gameObject:SetActive(mapItemCfgData.Rarity == 2)
end
if rtSSR ~= nil then
rtSSR.gameObject:SetActive(mapItemCfgData.Rarity == 1)
end
end
end
end
end
function GachaShowCtrl:ShowResults(tbItems, mapTrans)
self.tbItems = tbItems
self.curIdx = 1
self.bJumpAll = false
self.bShowPreview = false
local ShowResult = function()
self.showPreviewTimer = nil
self.bShowPreview = false
self._mapNode.rtPreviewShow:SetActive(false)
NovaAPI.SetCanvasGroupAlpha(self._mapNode.rtTitle, 1)
self:ShowItem(self.tbItems[self.curIdx])
end
local ShowPreview = function()
self:ShowPreview()
self.showPreviewTimer = self:AddTimer(1, 1, ShowResult, true, true, true)
self.bShowPreview = true
end
local wait = function()
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
if 1 < #tbItems then
ShowPreview()
else
ShowResult()
end
end
self.gameObject:SetActive(true)
cs_coroutine.start(wait)
end
function GachaShowCtrl:ShowItem(mapItem)
self.curStep = 1
self.nTid = mapItem.id
self.bNew = mapItem.bNew
local mapItemCfgData = ConfigTable.GetData_Item(mapItem.id)
self.bChar = mapItemCfgData.Type == GameEnum.itemType.Char
if mapItem.rewardItem ~= nil and #mapItem.rewardItem > 0 then
local mapRewardItemCfgData = ConfigTable.GetData_Item(mapItem.rewardItem[1].Tid)
if mapRewardItemCfgData == nil then
printError("item ID missing" .. mapItem.rewardItem[1].Tid)
self._mapNode.rtItemTips:SetActive(false)
else
local nRewardItemCount = mapItem.rewardItem[1].Qty
self._mapNode.rtItemTips:SetActive(true)
self:SetPngSprite(self._mapNode.imgItemIcon, mapRewardItemCfgData.Icon)
NovaAPI.SetTMPText(self._mapNode.TMP_ItemCount, string.format("×%d", tostring(nRewardItemCount)))
end
else
self._mapNode.rtItemTips:SetActive(false)
end
if mapItem.exItem ~= nil and 0 < #mapItem.exItem then
local mapRewardItemCfgData = ConfigTable.GetData_Item(mapItem.exItem[1].Tid)
if mapRewardItemCfgData == nil then
printError("item ID missing" .. mapItem.exItem[1].Tid)
self._mapNode.rtItemTips2:SetActive(false)
else
local nRewardItemCount = mapItem.exItem[1].Qty
self._mapNode.rtItemTips2:SetActive(true)
self:SetPngSprite(self._mapNode.imgItemIcon2, mapRewardItemCfgData.Icon)
NovaAPI.SetTMPText(self._mapNode.TMP_ItemCount2, string.format("×%d", tostring(nRewardItemCount)))
end
else
self._mapNode.rtItemTips2:SetActive(false)
end
if self.bChar or mapItemCfgData.Rarity == GameEnum.itemRarity.SSR then
WwiseManger.Instance:SetState("recruit_rarity", "SSR")
else
WwiseManger.Instance:SetState("recruit_rarity", "R")
end
NovaAPI.SetTMPText(self._mapNode.TMP_Title, mapItemCfgData.Title)
local bgSprite = self:LoadPngGacha(GachaShowResRoot .. "bg_gacha_character_" .. AllEnum.FrameColor_New[mapItemCfgData.Rarity])
NovaAPI.SetImageSpriteAsset(self._mapNode.imgBgRare, bgSprite)
NovaAPI.SetSpriteRendererSprite(self._mapNode.BgRare, bgSprite)
NovaAPI.SetImageSpriteAsset(self._mapNode.imgRareIcon, self:LoadPngGacha(GachaShowResRoot .. "rare_character_gacha_" .. AllEnum.FrameColor_New[mapItemCfgData.Rarity]))
if self.bChar then
NovaAPI.SetImageSpriteAsset(self._mapNode.imgTitleBg, self:LoadPngGacha(GachaShowResRoot .. "zs_gacha_name"))
NovaAPI.SetImageSpriteAsset(self._mapNode.imgTitleRare, self:LoadPngGacha(GachaShowResRoot .. "zs_gacha_name_" .. AllEnum.FrameColor_New[mapItemCfgData.Rarity]))
else
NovaAPI.SetImageSpriteAsset(self._mapNode.imgTitleBg, self:LoadPngGacha(GachaShowResRoot .. "zs_gacha_name_outfit"))
NovaAPI.SetImageSpriteAsset(self._mapNode.imgTitleRare, self:LoadPngGacha(GachaShowResRoot .. "zs_gacha_name_outfit_" .. AllEnum.FrameColor_New[mapItemCfgData.Rarity]))
end
NovaAPI.SetImageNativeSize(self._mapNode.imgRareIcon)
self._mapNode.ImgNew:SetActive(self.bNew)
if self.bChar then
self:SetCharacter(mapItem.id)
else
NovaAPI.SetTMPText(self._mapNode.TMP_Word, "")
self:SetOutfit(mapItem.id)
end
end
function GachaShowCtrl:LoadPngGacha(sPath)
return self:LoadAsset(sPath .. ".png", typeof(Sprite))
end
function GachaShowCtrl:LoadOffset(sPath)
return self:LoadAsset(sPath, typeof(Offset))
end
function GachaShowCtrl:SetOutfit(nOutfitTid)
self._mapNode.goCharContent.gameObject:SetActive(false)
self._mapNode.goOutfitContent:SetActive(true)
local mapItemCfgData = ConfigTable.GetData_Item(nOutfitTid)
local mapOutfitCfgData = ConfigTable.GetData("Disc", nOutfitTid)
self._mapNode.imgOutfitMask:SetActive(false)
self._mapNode.liveDiscCtrl:SetDiscActive(true, mapOutfitCfgData.DiscBg ~= "")
self._mapNode.liveDiscCtrl:SetRawImage(mapOutfitCfgData.DiscBg, mapItemCfgData.Rarity)
self._mapNode.liveDiscCtrl:SetClickCallback(function()
self:OnBtnClick_JumpStep()
end)
if mapItemCfgData.Rarity == GameEnum.itemRarity.SSR then
self:SetPngSprite(self._mapNode.imgBgOutfitShow, mapOutfitCfgData.DiscBg .. AllEnum.DiscBgSurfix.Image)
end
self:SetPngSprite(self._mapNode.imgBgOutfit, mapOutfitCfgData.DiscBg .. AllEnum.DiscBgSurfix.Image)
self._mapNode.imgBgOutfit.gameObject:SetActive(true)
NovaAPI.SetImageNativeSize(self._mapNode.imgBgOutfit)
self._mapNode.goInfoContent:SetActive(false)
if mapItemCfgData.Rarity == GameEnum.itemRarity.SSR and self.bNew then
self._mapNode.SSROutfitShow:SetActive(true)
local wait = function()
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
self._mapNode.animSSROutfitShow:Play("SSROutfitShow_in")
WwiseAudioMgr:PlaySound("ui_recuit_gacha_disk_SSR_glass")
end
cs_coroutine.start(wait)
self.timerStep = self:AddTimer(1, 2.7, "ShowSSRAnimEndOutfit", true, true, nil, mapItemCfgData.Rarity)
else
self:ShowSSRAnimEndOutfit(0, mapItemCfgData.Rarity)
end
self:BlockJump(0.5)
end
function GachaShowCtrl:SetCharacter(nCharTid)
if self.goL2D ~= nil then
if self.goL2D.trL2DIns ~= nil then
Actor2DManager.UnSetActor2DWithRender(self.goL2D)
end
self.goL2D = nil
end
self._mapNode.goCharContent.gameObject:SetActive(true)
self._mapNode.goOutfitContent:SetActive(false)
self._mapNode.goInfoContent:SetActive(false)
local mapCharCfgData = ConfigTable.GetData_Character(nCharTid)
local mapSkinData = ConfigTable.GetData_CharacterSkin(mapCharCfgData.DefaultSkinId)
NovaAPI.SetSpriteRendererSprite(self._mapNode.BgRare1, self:LoadPngGacha(mapSkinData.Bg))
local sPath = string.format("Actor2D/Character/%d/atlas_png/a/%d_001.png", mapCharCfgData.DefaultSkinId, mapCharCfgData.DefaultSkinId)
if mapSkinData.L2D ~= nil and mapSkinData.L2D ~= "" then
local bSetSuccess, nT, nAnimLength, tbRenderer = Actor2DManager.SetActor2DWithRender(PanelId.GachaSpin, self._mapNode.rImgL2D, nCharTid, mapCharCfgData.DefaultSkinId, nil, self._mapNode.actor2dNode)
self.goL2D = tbRenderer
local voice = "gachaNew"
if not self.bNew then
voice = "gacha"
end
local nId = PlayerData.Voice:PlayCharVoice(voice, nCharTid)
local mapVoiceCfgData = ConfigTable.GetData("VoDirectory", nId)
if nil ~= mapVoiceCfgData then
local tbStr = BubbleVoiceManager.GetBubbleText(mapVoiceCfgData.voResource)
local str = ""
if tbStr ~= nil then
str = tbStr[1] .. tbStr[2] .. tbStr[3] .. tbStr[4]
str = string.gsub(str, "==RT==", "\n")
str = string.gsub(str, "==PLAYER_NAME==", PlayerData.Base:GetPlayerNickName())
end
NovaAPI.SetTMPText(self._mapNode.TMP_Word, str)
end
if mapCharCfgData.Grade == GameEnum.characterGrade.SSR then
self._mapNode.rtSSRWord:SetActive(true)
self._mapNode.animWord:Play("SSRWord_in")
WwiseAudioMgr:PlaySound("ui_recuit_gacha_SSR_glass")
self.timerStep = self:AddTimer(1, 1.7, "ShowSSRWordEnd", true, true, true, nil)
self:BlockJump(0.5)
if mapVoiceCfgData ~= nil then
local tbStr = BubbleVoiceManager.GetBubbleText(mapVoiceCfgData.voResource)
local str = ""
if tbStr ~= nil then
str = tbStr[1] .. tbStr[2] .. tbStr[3] .. tbStr[4]
str = string.gsub(str, "==RT==", "\n")
str = string.gsub(str, "==PLAYER_NAME==", PlayerData.Base:GetPlayerNickName())
end
NovaAPI.SetTMPText(self._mapNode.TMP_Word1, str)
end
else
self._mapNode.rtSSRWord:SetActive(false)
self:ShowSSRWordEnd(0, nId)
end
if self.goL2D ~= nil and self.goL2D.trL2DIns ~= nil then
Actor2DManager.PlayL2DAnim(self.goL2D.trL2DIns.transform, "idle", true, false)
end
end
end
function GachaShowCtrl:ShowSSRWordEnd(_, nId)
self:BlockJump(1.2)
self._mapNode.rtSSRWord:SetActive(false)
local mapCharCfgData = ConfigTable.GetData_Character(self.nTid)
if self.goL2D.trL2DIns == nil or mapCharCfgData == nil then
self._mapNode.goInfoContent:SetActive(true)
self.curStep = 3
return
end
if mapCharCfgData.Grade == GameEnum.characterGrade.SSR then
self.animatorRoot:Play("GachaShow_SSR")
WwiseAudioMgr:PlaySound("ui_recuit_gacha_SSR_show")
self.timerStep = self:AddTimer(1, 0.6, "ShowSSRAnimEnd", true, true, nil, nil)
else
WwiseAudioMgr:PlaySound("ui_recuit_gacha_SR_long")
self.animatorRoot:Play("GachaShow_SR")
self.timerStep = self:AddTimer(1, 1.2, "ShowSSRAnimEnd", true, true, nil, nId)
goto lbl_75
self._mapNode.goInfoContent:SetActive(true)
self.curStep = 3
end
::lbl_75::
end
function GachaShowCtrl:ShowSSRAnimEnd(_, nId)
self:BlockJump(1)
if nId ~= nil then
local mapVoiceCfgData = ConfigTable.GetData("VoDirectory", nId)
if mapVoiceCfgData ~= nil then
local tbStr = BubbleVoiceManager.GetBubbleText(mapVoiceCfgData.voResource)
local str = ""
if tbStr ~= nil then
str = tbStr[1] .. tbStr[2] .. tbStr[3] .. tbStr[4]
str = string.gsub(str, "==RT==", "\n")
str = string.gsub(str, "==PLAYER_NAME==", PlayerData.Base:GetPlayerNickName())
end
NovaAPI.SetTMPText(self._mapNode.TMP_Word, str)
NovaAPI.SetTMPText(self._mapNode.TMP_Word1, str)
end
end
self._mapNode.goInfoContent:SetActive(true)
self._mapNode.animInfoContent:Play("Info_rtTitle_in")
if self.bNew then
self:AddTimer(1, 0.4, function()
WwiseAudioMgr:PlaySound("ui_recuit_gacha_new")
end, true, true, true)
end
self.curStep = 3
end
function GachaShowCtrl:ShowSSRAnimEndOutfit(_, nRarity)
self:BlockJump(0.5)
self._mapNode.SSROutfitShow:SetActive(false)
self.curStep = 2
self.animatorRoot:Play(mapOutfitAnimName[nRarity])
self.timerStep = self:AddTimer(1, mapOutfitAnimTime[nRarity], "ShowSSRAnimEnd", true, true, nil, nil)
if nRarity == GameEnum.itemRarity.SSR then
WwiseAudioMgr:PlaySound("ui_recuit_gacha_disk_SSR_show")
elseif nRarity == GameEnum.itemRarity.SR then
WwiseAudioMgr:PlaySound("ui_recuit_gacha_disk_SR_show")
else
WwiseAudioMgr:PlaySound("ui_recuit_gacha_N")
end
end
function GachaShowCtrl:OnBtnClick_JumpStep()
if self.bBlockJump or self.bShowPreview then
return
end
print("jump step")
WwiseAudioMgr:WwiseVoice_Stop(2)
if self.curStep ~= 3 then
self.timerStep:Cancel(true)
return
end
if self.bJumpAll then
self:OnBtnClick_JumpAll()
return
end
if self.curIdx == #self.tbItems then
self.gameObject:SetActive(false)
NovaAPI.SetCanvasGroupAlpha(self._mapNode.rtTitle, 0)
if self.goL2D ~= nil then
if self.goL2D.trL2DIns ~= nil then
Actor2DManager.UnSetActor2DWithRender(self.goL2D)
end
self.goL2D = nil
end
WwiseManger.Instance:SetState("recruit_rarity", "R")
EventManager.Hit("GachaShowItemEnd")
NovaAPI.SetImageSpriteAsset(self._mapNode.imgBgOutfit, nil)
NovaAPI.SetImageSpriteAsset(self._mapNode.imgOutfit, nil)
NovaAPI.SetImageSpriteAsset(self._mapNode.imgOutfitRare, nil)
self._mapNode.liveDiscCtrl:ReleaseRawImage()
self._mapNode.liveDiscCtrl:ClearClickCallback()
if self.goL2D ~= nil then
if self.goL2D.trL2DIns ~= nil then
Actor2DManager.UnSetActor2DWithRender(self.goL2D)
end
self.goL2D = nil
end
else
self.curIdx = self.curIdx + 1
self:ShowItem(self.tbItems[self.curIdx])
end
end
function GachaShowCtrl:OnBtnClick_JumpAll()
if self.bBlockJump then
return
end
if self.bShowPreview then
if self.showPreviewTimer ~= nil then
self.showPreviewTimer:Cancel(true)
end
return
end
print("Jump all")
WwiseAudioMgr:WwiseVoice_Stop(2)
self.bJumpAll = true
if self.timerStep ~= nil then
local bStep = self.curStep ~= 3
self.timerStep:Cancel(bStep)
if bStep then
return
end
end
for i = self.curIdx + 1, #self.tbItems do
local mapItemCfgData = ConfigTable.GetData_Item(self.tbItems[i].id)
if self.tbItems[i].bForceJump ~= true and (mapItemCfgData.Rarity == GameEnum.itemRarity.SSR or self.tbItems[i].bNew and mapItemCfgData.Rarity ~= GameEnum.itemRarity.R) then
self.curIdx = i
self:ShowItem(self.tbItems[self.curIdx])
return
end
end
self.gameObject:SetActive(false)
NovaAPI.SetCanvasGroupAlpha(self._mapNode.rtTitle, 0)
if self.goL2D ~= nil then
if self.goL2D.trL2DIns ~= nil then
Actor2DManager.UnSetActor2DWithRender(self.goL2D)
end
self.goL2D = nil
end
WwiseManger.Instance:SetState("recruit_rarity", "R")
EventManager.Hit("GachaShowItemEnd")
NovaAPI.SetImageSpriteAsset(self._mapNode.imgBgOutfit, nil)
NovaAPI.SetImageSpriteAsset(self._mapNode.imgOutfit, nil)
NovaAPI.SetImageSpriteAsset(self._mapNode.imgOutfitRare, nil)
self._mapNode.liveDiscCtrl:ReleaseRawImage()
self._mapNode.liveDiscCtrl:ClearClickCallback()
if self.goL2D ~= nil then
if self.goL2D.trL2DIns ~= nil then
Actor2DManager.UnSetActor2DWithRender(self.goL2D)
end
self.goL2D = nil
end
end
function GachaShowCtrl:BlockJump(nTime)
self.bBlockJump = true
local unBlockJump = function()
self.bBlockJump = false
end
self:AddTimer(1, nTime, unBlockJump, true, true, nil, nil)
end
return GachaShowCtrl