5e0d58cfad
EN: 1.2.0.60 CN: 1.2.0.61 JP: 1.2.0.63 KR: 1.2.0.67
263 lines
8.7 KiB
Lua
263 lines
8.7 KiB
Lua
local Avg_2_L2DCtrl = class("Avg_2_L2DCtrl", BaseCtrl)
|
|
local WwiseAudioMgr = CS.WwiseAudioManager.Instance
|
|
Avg_2_L2DCtrl._mapNodeConfig = {}
|
|
Avg_2_L2DCtrl._mapEventConfig = {
|
|
[EventId.AvgClearAllChar] = "OnEvent_ClearAllChar",
|
|
[EventId.AvgL2DAnimEvent_FX] = "OnL2DAnimEvent_CGFX",
|
|
[EventId.AvgL2DAnimEvent_LFX_ON] = "OnL2DAnimEvent_LCGFX_ON",
|
|
[EventId.AvgL2DAnimEvent_LFX_OFF] = "OnL2DAnimEvent_LCGFX_OFF"
|
|
}
|
|
function Avg_2_L2DCtrl:Awake()
|
|
self.goEmojiRoot = self:LoadAsset("UI/Avg/Template/----emoji----.prefab", typeof(GameObject))
|
|
end
|
|
function Avg_2_L2DCtrl:OnDisable()
|
|
self.trL2DParent = nil
|
|
self.nLayerIndex = nil
|
|
WwiseAudioMgr:WwiseVoice_StopInAVG()
|
|
end
|
|
function Avg_2_L2DCtrl:PlayCGFX(tr, sAnim)
|
|
if tr ~= nil and tr:IsNull() == false then
|
|
tr:GetComponent("Animator"):Play(sAnim, -1, 0)
|
|
end
|
|
end
|
|
function Avg_2_L2DCtrl:OnEvent_ClearAllChar()
|
|
if self.goInsL2D ~= nil then
|
|
destroy(self.goInsL2D)
|
|
end
|
|
self.goInsL2D = nil
|
|
end
|
|
function Avg_2_L2DCtrl:SetL2D(tbParam)
|
|
local bNewOrDel = tbParam[1]
|
|
local sAvgCharId = tbParam[2]
|
|
sAvgCharId = AdjustMainRoleAvgCharId(sAvgCharId)
|
|
local sPose = tbParam[3]
|
|
local nDuration = tbParam[4]
|
|
local bWait = tbParam[5]
|
|
EventManager.Hit(EventId.AvgResetSpeed, bNewOrDel == 0)
|
|
if bNewOrDel == 0 then
|
|
if self.goInsL2D ~= nil then
|
|
destroy(self.goInsL2D)
|
|
end
|
|
if self.trL2DParent == nil then
|
|
self.trL2DParent = self._panel.tbStageBgCtrl[1]._mapNode.trL2D
|
|
end
|
|
if self.nLayerIndex == nil then
|
|
self.nLayerIndex = CS.UnityEngine.LayerMask.NameToLayer("Cam_Layer_4")
|
|
end
|
|
local sPath = string.format("Actor2D/CharacterAvg/%s/%s_%s.prefab", sAvgCharId, sAvgCharId, sPose)
|
|
self.goInsL2D = self:CreatePrefabInstance(sPath, self.trL2DParent)
|
|
self.goInsL2D.name = string.format("%s_%s", sAvgCharId, sPose)
|
|
local tr = self.goInsL2D.transform
|
|
tr.localPosition = Vector3.zero
|
|
tr.localScale = Vector3.one
|
|
tr:SetLayerRecursively(self.nLayerIndex)
|
|
nDuration = nDuration + NovaAPI.PlayL2DCGAnim(tr)
|
|
else
|
|
if self.goInsL2D ~= nil then
|
|
destroy(self.goInsL2D)
|
|
end
|
|
self.goInsL2D = nil
|
|
nDuration = 0
|
|
end
|
|
if bWait == true and 0 < nDuration then
|
|
return nDuration
|
|
else
|
|
return 0
|
|
end
|
|
end
|
|
function Avg_2_L2DCtrl:CtrlL2D(tbParam)
|
|
local sAvgCharId = tbParam[1]
|
|
sAvgCharId = AdjustMainRoleAvgCharId(sAvgCharId)
|
|
local sPose = tbParam[2]
|
|
local sAnimName = tbParam[3] .. self._panel.sVoResNameSurfix
|
|
local sVoiceName = tbParam[4]
|
|
local nDuration = tbParam[5]
|
|
local bWait = tbParam[6]
|
|
if self.goInsL2D ~= nil then
|
|
NovaAPI.PlayL2DAnim(self.goInsL2D.transform, sAnimName, false)
|
|
end
|
|
WwiseAudioMgr:WwiseVoice_PlayInAVG(sVoiceName)
|
|
return -1
|
|
end
|
|
function Avg_2_L2DCtrl:OnL2DAnimEvent_CGFX(n)
|
|
if self.goInsL2D == nil or self.goInsL2D:IsNull() == true then
|
|
return
|
|
end
|
|
n = tostring(n)
|
|
self:PlayCGFX(self.goInsL2D.transform:Find("root/----bg_effect----/cgfx_" .. n), "on")
|
|
self:PlayCGFX(self.goInsL2D.transform:Find("root/----fg_effect----/cgfx_" .. n), "on")
|
|
end
|
|
function Avg_2_L2DCtrl:OnL2DAnimEvent_LCGFX_ON(n)
|
|
if self.goInsL2D == nil or self.goInsL2D:IsNull() == true then
|
|
return
|
|
end
|
|
n = tostring(n)
|
|
self:PlayCGFX(self.goInsL2D.transform:Find("root/----bg_effect----/lcgfx_" .. n), "on")
|
|
self:PlayCGFX(self.goInsL2D.transform:Find("root/----fg_effect----/lcgfx_" .. n), "on")
|
|
end
|
|
function Avg_2_L2DCtrl:OnL2DAnimEvent_LCGFX_OFF(n)
|
|
if self.goInsL2D == nil or self.goInsL2D:IsNull() == true then
|
|
return
|
|
end
|
|
n = tostring(n)
|
|
self:PlayCGFX(self.goInsL2D.transform:Find("root/----bg_effect----/lcgfx_" .. n), "off")
|
|
self:PlayCGFX(self.goInsL2D.transform:Find("root/----fg_effect----/lcgfx_" .. n), "off")
|
|
end
|
|
function Avg_2_L2DCtrl:_SetEmoji(sAvgCharId, tr, sEmoji, bPlaySound)
|
|
if self.tbHoldEmoji == nil then
|
|
self.tbHoldEmoji = {}
|
|
for _, v in ipairs(self._panel.tbAvgPreset.CharEmoji) do
|
|
local sEmojiName = v[3]
|
|
local bIsLoop = v[5]
|
|
if bIsLoop == true then
|
|
table.insert(self.tbHoldEmoji, sEmojiName)
|
|
end
|
|
end
|
|
end
|
|
if bPlaySound == nil then
|
|
bPlaySound = true
|
|
end
|
|
if type(sEmoji) == "string" and sEmoji ~= "none" then
|
|
if sEmoji == "close" then
|
|
if tr.childCount > 0 then
|
|
for i = tr.childCount - 1, 0, -1 do
|
|
local animator = tr:GetChild(i):GetComponent("Animator")
|
|
if animator ~= nil then
|
|
animator:SetTrigger("tOut")
|
|
end
|
|
end
|
|
end
|
|
else
|
|
delChildren(tr)
|
|
local sFullPath = string.format("UI/Avg/AnimEmoji/%s.prefab", sEmoji)
|
|
local goEmojiIns = self:CreatePrefabInstance(sFullPath, tr)
|
|
goEmojiIns.transform:SetLayerRecursively(self.nLayerIndex)
|
|
local animator = goEmojiIns:GetComponent("Animator")
|
|
if animator ~= nil then
|
|
animator:SetTrigger("tIn")
|
|
end
|
|
local reuseL2DPose = self._panel.tbAvgCharacter[sAvgCharId].reuseL2DPose or "a"
|
|
local v3OffSetPosEmoji, v3OffsetScaleEmoji = self:GetAvgPortraitEmojiOffsetData(sAvgCharId, reuseL2DPose, self._panel:GetCharEmojiIndex(sEmoji))
|
|
tr.localPosition = Vector3(v3OffSetPosEmoji.x, v3OffSetPosEmoji.y - Settings.DESIGN_SCREEN_RESOLUTION_HEIGHT * 0.5)
|
|
tr.localScale = v3OffsetScaleEmoji
|
|
if bPlaySound == true then
|
|
self._panel:PlayCharEmojiSound(sEmoji)
|
|
end
|
|
if 0 >= table.indexof(self.tbHoldEmoji, sEmoji) then
|
|
self:AddTimer(1, 5, function()
|
|
goEmojiIns:SetActive(false)
|
|
end, true, true, true)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
function Avg_2_L2DCtrl:SetCharL2D(tbParam)
|
|
EventManager.Hit(EventId.AvgResetSpeed, true)
|
|
local tbPosX = {
|
|
[1] = {-0.75, -0.25},
|
|
[2] = {-0.25, -0.75},
|
|
[3] = {-0.75, 0},
|
|
[4] = {0, -0.75},
|
|
[5] = {0.75, 0.25},
|
|
[6] = {0.25, 0.75}
|
|
}
|
|
if self.trL2DParent == nil then
|
|
self.trL2DParent = self._panel.tbStageBgCtrl[1]._mapNode.trL2D
|
|
end
|
|
if self.nLayerIndex == nil then
|
|
self.nLayerIndex = CS.UnityEngine.LayerMask.NameToLayer("Cam_Layer_4")
|
|
end
|
|
if self.mapCharL2DIns == nil then
|
|
self.mapCharL2DIns = {}
|
|
end
|
|
if self.mapCharOffset == nil then
|
|
self.mapCharOffset = {}
|
|
end
|
|
local T = 0.75
|
|
local nDuration = T
|
|
local goInsL2D, objOffset
|
|
local destroyCharL2DIns = function(sId)
|
|
destroy(goInsL2D)
|
|
self.mapCharL2DIns[sId] = nil
|
|
self.mapCharOffset[sId] = nil
|
|
goInsL2D = nil
|
|
objOffset = nil
|
|
end
|
|
local getPosData = function(_nT, sPose)
|
|
local nX, nY = 0, 0
|
|
local offset_s, offset_x, offset_y = objOffset:GetOffsetData(PanelId.AvgST, indexOfPose(sPose), true, nX, nY)
|
|
offset_x = offset_x / 100
|
|
local root_x_from = Settings.DESIGN_SCREEN_RESOLUTION_WIDTH * tbPosX[_nT][1] / 100
|
|
local root_x_to = Settings.DESIGN_SCREEN_RESOLUTION_WIDTH * tbPosX[_nT][2] / 100
|
|
offset_y = (offset_y - Settings.DESIGN_SCREEN_RESOLUTION_HEIGHT * 0.5) / 100
|
|
return offset_x, offset_y, offset_s, root_x_from, root_x_to
|
|
end
|
|
local sAvgCharId = tbParam[1]
|
|
sAvgCharId = AdjustMainRoleAvgCharId(sAvgCharId)
|
|
local nType = tbParam[2]
|
|
local sEmoji = tbParam[3]
|
|
local sAnim = tbParam[4]
|
|
if tbParam[5] == 0 then
|
|
nDuration = 0
|
|
end
|
|
goInsL2D = self.mapCharL2DIns[sAvgCharId]
|
|
objOffset = self.mapCharOffset[sAvgCharId]
|
|
local reuseL2DPose = self._panel.tbAvgCharacter[sAvgCharId].reuseL2DPose or "a"
|
|
if nType % 2 == 0 then
|
|
if goInsL2D ~= nil and objOffset ~= nil then
|
|
if nType == 0 then
|
|
if sAnim ~= "" then
|
|
NovaAPI.PlayL2DAnim(goInsL2D.transform, sAnim, false, true)
|
|
end
|
|
if sEmoji ~= "" then
|
|
self:_SetEmoji(sAvgCharId, goInsL2D.transform:Find("----emoji----/emoji_root"), sEmoji, true)
|
|
end
|
|
nDuration = 0
|
|
else
|
|
local _, __, ___, xFrom, xTo = getPosData(nType, reuseL2DPose)
|
|
goInsL2D.transform:DOLocalMoveX(xTo, T):SetUpdate(true):SetEase(Ease.InQuint)
|
|
self:AddTimer(1, T, function()
|
|
destroyCharL2DIns(sAvgCharId)
|
|
end, true, true, true)
|
|
end
|
|
end
|
|
else
|
|
if goInsL2D ~= nil then
|
|
destroyCharL2DIns(sAvgCharId)
|
|
end
|
|
local sPath = string.format("Actor2D/CharacterAvg/%s/%s.prefab", sAvgCharId, sAvgCharId)
|
|
local prefabObj = self:LoadAsset(sPath)
|
|
if prefabObj == nil then
|
|
printError(sPath)
|
|
return -1
|
|
end
|
|
goInsL2D = instantiate(prefabObj, self.trL2DParent)
|
|
goInsL2D.name = sAvgCharId
|
|
self.mapCharL2DIns[sAvgCharId] = goInsL2D
|
|
local tr = goInsL2D.transform
|
|
tr:SetLayerRecursively(self.nLayerIndex)
|
|
NovaAPI.PlayL2DAnim(tr, "idle", true)
|
|
local trEmojiRoot = tr:Find("----emoji----")
|
|
if trEmojiRoot == nil then
|
|
trEmojiRoot = instantiate(self.goEmojiRoot, tr)
|
|
trEmojiRoot.gameObject.name = "----emoji----"
|
|
end
|
|
NovaAPI.SetCanvasWorldCamera(trEmojiRoot:GetComponent("Canvas"), self._panel.tbStageBgCtrl[1]._mapNode.camera)
|
|
sPath = string.format("Actor2D/CharacterAvg/%s/%s.asset", sAvgCharId, sAvgCharId)
|
|
objOffset = self:LoadAsset(sPath)
|
|
if objOffset == nil then
|
|
printError(sPath)
|
|
return -1
|
|
end
|
|
self.mapCharOffset[sAvgCharId] = objOffset
|
|
local x, y, s, xFrom, xTo = getPosData(nType, reuseL2DPose)
|
|
tr.localPosition = Vector3(xFrom, 0, 0)
|
|
tr:DOLocalMoveX(xTo, T):SetUpdate(true):SetEase(Ease.OutQuint)
|
|
tr = tr:Find("root")
|
|
tr.localPosition = Vector3(x, y, 0)
|
|
tr.localScale = Vector3(s, s, 1)
|
|
end
|
|
return nDuration
|
|
end
|
|
return Avg_2_L2DCtrl
|