35c8d87e86
EN: 1.4.0.73 CN: 1.4.0.74 JP: 1.4.0.77 KR: 1.4.0.80
342 lines
12 KiB
Lua
342 lines
12 KiB
Lua
local Avg_8_LogCtrl = class("Avg_8_LogCtrl", BaseCtrl)
|
|
local LayoutRebuilder = CS.UnityEngine.UI.LayoutRebuilder
|
|
local WwiseAudioMgr = CS.WwiseAudioManager.Instance
|
|
local GamepadUIManager = require("GameCore.Module.GamepadUIManager")
|
|
local item_height_offset = {
|
|
[AllEnum.AvgLogType.Talk] = {
|
|
top = 53,
|
|
bottom = 17.9,
|
|
width = 1118
|
|
},
|
|
[AllEnum.AvgLogType.Choice] = {
|
|
top = 53,
|
|
bottom = 17.9,
|
|
width = 1118
|
|
},
|
|
[AllEnum.AvgLogType.Voiceover] = {
|
|
top = 9,
|
|
bottom = 12,
|
|
width = 1216
|
|
},
|
|
[AllEnum.AvgLogType.PhoneMsg] = {
|
|
top = 60.7,
|
|
bottom = 7,
|
|
width = 1118
|
|
},
|
|
[AllEnum.AvgLogType.PhoneMsgChoice] = {
|
|
top = 53,
|
|
bottom = 17.9,
|
|
width = 1118
|
|
},
|
|
[AllEnum.AvgLogType.Thought] = {
|
|
top = 63,
|
|
bottom = 8.5,
|
|
width = 1118
|
|
}
|
|
}
|
|
Avg_8_LogCtrl._mapNodeConfig = {
|
|
imgBlurredBg = {},
|
|
txtWindowTitle = {sComponentName = "TMP_Text"},
|
|
txtCalcHeight = {sComponentName = "TMP_Text"},
|
|
rtCalcHeight = {
|
|
sNodeName = "txtCalcHeight",
|
|
sComponentName = "RectTransform"
|
|
},
|
|
LoopSV = {
|
|
sNodeName = "sv",
|
|
sComponentName = "LoopScrollView"
|
|
},
|
|
goWindow = {},
|
|
animWindow = {sNodeName = "goWindow", sComponentName = "Animator"},
|
|
btnClose = {
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_Close"
|
|
},
|
|
btnClose2 = {
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_Close"
|
|
},
|
|
btnShortcutClose = {
|
|
sComponentName = "NaviButton",
|
|
callback = "OnBtnClick_Close"
|
|
},
|
|
sv = {
|
|
sComponentName = "GamepadScroll",
|
|
sAction = "Scroll"
|
|
},
|
|
ActionBar = {
|
|
sCtrlName = "Game.UI.ActionBar.ActionBarCtrl"
|
|
}
|
|
}
|
|
Avg_8_LogCtrl._mapEventConfig = {
|
|
[EventId.AvgShowHideLog] = "OnEvent_AvgShowHideLog",
|
|
[EventId.AvgMarkLog] = "OnEvent_AvgMarkLog",
|
|
[EventId.AvgSkip] = "OnEvent_Skip",
|
|
[EventId.AvgVoiceDuration] = "OnEvent_AvgVoiceDuration",
|
|
[EventId.AvgSpeedUp] = "OnEvent_AvgSpeedUp"
|
|
}
|
|
local grid_item_width = 1288
|
|
function Avg_8_LogCtrl:ParseContent(sContent)
|
|
sContent = string.gsub(sContent, "==B==", "")
|
|
sContent = string.gsub(sContent, "==W==", "")
|
|
local tbTempContent = string.split(sContent, "==P==")
|
|
local sCombine = ""
|
|
for i, sParagraphContent in ipairs(tbTempContent) do
|
|
sCombine = sCombine .. string.gsub(sParagraphContent, "==A(.+)==", "")
|
|
end
|
|
sContent = sCombine
|
|
sContent = ProcAvgTextContent(sContent, self._panel.nCurLanguageIdx)
|
|
sContent = string.gsub(sContent, "</?[^r>/][^/r>]?[^>]*>", "")
|
|
sContent = string.gsub(sContent, "<rotate[^>]*>", "")
|
|
return sContent
|
|
end
|
|
function Avg_8_LogCtrl:CalLogItemHeight(nType, sContent)
|
|
local tbOffset = item_height_offset[nType]
|
|
local nWidth = tbOffset.width
|
|
self._mapNode.rtCalcHeight.sizeDelta = Vector2(nWidth, self._mapNode.rtCalcHeight.rect.height)
|
|
sContent = string.gsub(sContent, "</?[^>]+>", "")
|
|
NovaAPI.SetText_RubyTMP(self._mapNode.txtCalcHeight, sContent)
|
|
LayoutRebuilder.ForceRebuildLayoutImmediate(self._mapNode.rtCalcHeight)
|
|
local nHeight = self._mapNode.rtCalcHeight.rect.height + self.nTxtCalDiffValue
|
|
if nil ~= tbOffset then
|
|
nHeight = nHeight + tbOffset.top + tbOffset.bottom
|
|
end
|
|
return nHeight
|
|
end
|
|
function Avg_8_LogCtrl:ShowLogList()
|
|
self._mapNode.LoopSV.gameObject:SetActive(#self.tbAvgLog > 0)
|
|
if #self.tbAvgLog > 0 then
|
|
for k, v in ipairs(self.tbAvgLog) do
|
|
local nHeight = self:CalLogItemHeight(v.nType, v.sContent)
|
|
self.tbGridHeight[k] = nHeight
|
|
end
|
|
self._mapNode.LoopSV:InitEx(self.tbGridHeight, self, self.OnRefreshGrid, nil, true)
|
|
self._mapNode.LoopSV:SetScrollPos(0)
|
|
end
|
|
end
|
|
function Avg_8_LogCtrl:OnRefreshGrid(goGrid, gridIndex)
|
|
local nIndex = gridIndex + 1
|
|
local rtGrid = goGrid:GetComponent("RectTransform")
|
|
local logData = self.tbAvgLog[nIndex]
|
|
local nType = logData.nType
|
|
local goLogItem = rtGrid:Find("goLogItem"):GetComponent("RectTransform")
|
|
self.tbAvgLogGrid[nIndex] = goLogItem
|
|
local rtTalk = goLogItem:Find("goTalk"):GetComponent("RectTransform")
|
|
local rtChoice = goLogItem:Find("goChoice"):GetComponent("RectTransform")
|
|
local rtVoiceover = goLogItem:Find("goVoiceover"):GetComponent("RectTransform")
|
|
local rtMessage = goLogItem:Find("goMessage"):GetComponent("RectTransform")
|
|
local rtMessageChoice = goLogItem:Find("goMessageChoice"):GetComponent("RectTransform")
|
|
local rtThought = goLogItem:Find("goThought"):GetComponent("RectTransform")
|
|
local btnPlayVoice = goLogItem:Find("btnPlayVoice"):GetComponent("UIButton")
|
|
local imgPlay = goLogItem:Find("btnPlayVoice/AnimRoot/imgPlay")
|
|
local imgPause = goLogItem:Find("btnPlayVoice/AnimRoot/imgPause")
|
|
local rtPlayVoice = goLogItem:Find("btnPlayVoice"):GetComponent("RectTransform")
|
|
local func_Handler = ui_handler(self, function()
|
|
if WwiseAudioMgr.VoiceVolume <= 0 or not WwiseAudioMgr.m_voice then
|
|
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Sound_Voice_Closed"))
|
|
return
|
|
end
|
|
self:OnBtnClick_PlayVoice(btnPlayVoice, nIndex)
|
|
end, btnPlayVoice.gameObject, nIndex)
|
|
btnPlayVoice.onClick:RemoveAllListeners()
|
|
btnPlayVoice.onClick:AddListener(func_Handler)
|
|
rtPlayVoice.localPosition = Vector3(rtPlayVoice.localPosition.x, 0, 0)
|
|
local bCurVoicePlay = self.curPlayIndex ~= nil and self.curPlayIndex == nIndex
|
|
imgPlay.gameObject:SetActive(not bCurVoicePlay)
|
|
imgPause.gameObject:SetActive(bCurVoicePlay)
|
|
local rtItem
|
|
if nType == AllEnum.AvgLogType.Talk then
|
|
rtItem = rtTalk
|
|
elseif nType == AllEnum.AvgLogType.Choice then
|
|
rtItem = rtChoice
|
|
elseif nType == AllEnum.AvgLogType.Voiceover then
|
|
rtItem = rtVoiceover
|
|
elseif nType == AllEnum.AvgLogType.PhoneMsg then
|
|
rtItem = rtMessage
|
|
elseif nType == AllEnum.AvgLogType.PhoneMsgChoice then
|
|
rtItem = rtMessageChoice
|
|
elseif nType == AllEnum.AvgLogType.Thought then
|
|
rtItem = rtThought
|
|
end
|
|
rtTalk.gameObject:SetActive(nType == AllEnum.AvgLogType.Talk)
|
|
rtChoice.gameObject:SetActive(nType == AllEnum.AvgLogType.Choice)
|
|
rtVoiceover.gameObject:SetActive(nType == AllEnum.AvgLogType.Voiceover)
|
|
rtMessage.gameObject:SetActive(nType == AllEnum.AvgLogType.PhoneMsg)
|
|
rtMessageChoice.gameObject:SetActive(nType == AllEnum.AvgLogType.PhoneMsgChoice)
|
|
rtThought.gameObject:SetActive(nType == AllEnum.AvgLogType.Thought)
|
|
btnPlayVoice.gameObject:SetActive(logData.sVoice ~= nil and logData.sVoice ~= "")
|
|
local txtTitle, txtContent
|
|
if nType == AllEnum.AvgLogType.Talk then
|
|
txtTitle = rtTalk:Find("txtCharName")
|
|
txtContent = rtTalk:Find("txtTalkContent")
|
|
elseif nType == AllEnum.AvgLogType.Choice then
|
|
txtTitle = rtChoice:Find("txtChoiceTitle")
|
|
txtContent = rtChoice:Find("txtChoiceContent")
|
|
elseif nType == AllEnum.AvgLogType.Voiceover then
|
|
txtContent = rtVoiceover:Find("txtVoiceover")
|
|
elseif nType == AllEnum.AvgLogType.PhoneMsg then
|
|
txtTitle = rtMessage:Find("imgMessage/txtMessageName")
|
|
txtContent = rtMessage:Find("txtMessageContent")
|
|
elseif nType == AllEnum.AvgLogType.PhoneMsgChoice then
|
|
txtTitle = rtMessageChoice:Find("imgMessage/txtMessageName")
|
|
txtContent = rtMessageChoice:Find("txtChoiceContent")
|
|
elseif nType == AllEnum.AvgLogType.Thought then
|
|
txtTitle = rtThought:Find("txtThoughtName")
|
|
txtContent = rtThought:Find("txtThoughtContent")
|
|
end
|
|
if nil ~= txtTitle then
|
|
txtTitle = txtTitle:GetComponent("RubyTextMeshProUGUI")
|
|
NovaAPI.SetText_RubyTMP(txtTitle, logData.sLogTitle)
|
|
end
|
|
if nil ~= txtContent then
|
|
txtContent = txtContent:GetComponent("RubyTextMeshProUGUI")
|
|
NovaAPI.SetText_RubyTMP(txtContent, logData.sContent)
|
|
end
|
|
local nHeight = self.tbGridHeight[nIndex]
|
|
if nil ~= rtItem then
|
|
rtItem.sizeDelta = Vector2(grid_item_width, nHeight)
|
|
end
|
|
rtGrid.sizeDelta = Vector2(grid_item_width, self.tbGridHeight[nIndex])
|
|
end
|
|
function Avg_8_LogCtrl:StopVoice()
|
|
if self.voiceTimer ~= nil then
|
|
self.voiceTimer:Cancel()
|
|
self.voiceTimer = nil
|
|
end
|
|
end
|
|
function Avg_8_LogCtrl:ResetAvgLog()
|
|
self.tbAvgLog = {}
|
|
end
|
|
function Avg_8_LogCtrl:Awake()
|
|
local AvgUIText = require(GetAvgLuaRequireRoot(self._panel.nCurLanguageIdx) .. "Preset/AvgUIText")
|
|
self.nTxtCalDiffValue = 15.5
|
|
self.tbAvgLog = {}
|
|
self.tbAvgLogGrid = {}
|
|
self.tbGridHeight = {}
|
|
self._mapNode.goWindow:SetActive(false)
|
|
self._mapNode.imgBlurredBg.gameObject:SetActive(false)
|
|
local nLanguageIndex = self._panel.nCurLanguageIdx
|
|
NovaAPI.SetTMPText(self._mapNode.txtWindowTitle, AvgUIText.AVG_Log_Title)
|
|
self.tbGamepadUINode = self:GetGamepadUINode()
|
|
end
|
|
function Avg_8_LogCtrl:OnEnable()
|
|
local tbConfig = {
|
|
{
|
|
sAction = "Back",
|
|
sLang = "ActionBar_Back"
|
|
}
|
|
}
|
|
self._mapNode.ActionBar:InitActionBar(tbConfig)
|
|
end
|
|
function Avg_8_LogCtrl:OnDisable()
|
|
end
|
|
function Avg_8_LogCtrl:OnDestroy()
|
|
self:ResetAvgLog()
|
|
end
|
|
function Avg_8_LogCtrl:OnBtnClick_Close()
|
|
if self.curPlayIndex ~= nil then
|
|
WwiseAudioMgr:WwiseVoice_StopInAVG()
|
|
self.curPlayIndex = nil
|
|
end
|
|
self:StopVoice()
|
|
EventManager.Hit(EventId.AvgShowHideLog, false)
|
|
end
|
|
function Avg_8_LogCtrl:OnBtnClick_PlayVoice(btn, nIndex)
|
|
if self.curPlayIndex ~= nil then
|
|
local imgCurPlay = self.tbAvgLogGrid[self.curPlayIndex].transform:Find("btnPlayVoice/AnimRoot/imgPlay")
|
|
local imgCurPause = self.tbAvgLogGrid[self.curPlayIndex].transform:Find("btnPlayVoice/AnimRoot/imgPause")
|
|
imgCurPlay.gameObject:SetActive(true)
|
|
imgCurPause.gameObject:SetActive(false)
|
|
WwiseAudioMgr:WwiseVoice_StopInAVG()
|
|
self:StopVoice()
|
|
end
|
|
local imgPlay = btn.transform:Find("AnimRoot/imgPlay")
|
|
local imgPause = btn.transform:Find("AnimRoot/imgPause")
|
|
if self.curPlayIndex ~= nIndex then
|
|
local logData = self.tbAvgLog[nIndex]
|
|
if nil ~= logData and "" ~= logData.sVoice then
|
|
WwiseAudioMgr:WwiseVoice_PlayInAVG(logData.sVoice)
|
|
end
|
|
self.curPlayIndex = nIndex
|
|
imgPlay.gameObject:SetActive(false)
|
|
imgPause.gameObject:SetActive(true)
|
|
else
|
|
self.curPlayIndex = nil
|
|
end
|
|
end
|
|
function Avg_8_LogCtrl:OnEvent_AvgMarkLog(tbParam)
|
|
local nLanguageIndex = self._panel.nCurLanguageIdx
|
|
local nLogType = tbParam.nType
|
|
local sContent = self:ParseContent(tbParam.sContent)
|
|
local sTitle = ""
|
|
local sAvgId = tbParam.sAvgId or ""
|
|
local sVoice = tbParam.sVoice or ""
|
|
if sAvgId == "avg3_100" or sAvgId == "avg3_101" or sAvgId == "" then
|
|
sTitle = self._panel.sPlayerNickName
|
|
else
|
|
sTitle = self._panel:GetAvgCharName(AdjustMainRoleAvgCharId(sAvgId))
|
|
end
|
|
local AvgUIText = require(GetAvgLuaRequireRoot(self._panel.nCurLanguageIdx) .. "Preset/AvgUIText")
|
|
if nLogType == AllEnum.AvgLogType.Choice then
|
|
sTitle = string.format(AvgUIText.AVG_Log_Choice_Title, sTitle)
|
|
elseif nLogType == AllEnum.AvgLogType.PhoneMsgChoice then
|
|
sTitle = string.format(AvgUIText.AVG_Log_Choice_Title, sTitle)
|
|
elseif nLogType == AllEnum.AvgLogType.Thought then
|
|
sTitle = string.format(AvgUIText.AVG_Log_Thought_Title, sTitle)
|
|
end
|
|
local logData = {
|
|
nType = nLogType,
|
|
sLogTitle = sTitle,
|
|
sContent = sContent,
|
|
sVoice = sVoice
|
|
}
|
|
table.insert(self.tbAvgLog, logData)
|
|
end
|
|
function Avg_8_LogCtrl:OnEvent_Skip()
|
|
self:ResetAvgLog()
|
|
end
|
|
function Avg_8_LogCtrl:OnEvent_AvgShowHideLog(bShow)
|
|
if bShow then
|
|
self._mapNode.goWindow.gameObject:SetActive(false)
|
|
self._mapNode.imgBlurredBg.gameObject:SetActive(true)
|
|
local wait = function()
|
|
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
|
self._mapNode.goWindow.gameObject:SetActive(true)
|
|
self._mapNode.animWindow:Play("t_window_04_t_in")
|
|
self:ShowLogList()
|
|
end
|
|
cs_coroutine.start(wait)
|
|
GamepadUIManager.EnableGamepadUI("Avg_8_LogCtrl", self.tbGamepadUINode, nil, true)
|
|
else
|
|
self._mapNode.imgBlurredBg.gameObject:SetActive(false)
|
|
local nAnimTime = NovaAPI.GetAnimClipLength(self._mapNode.animWindow, {
|
|
"t_window_04_t_out"
|
|
})
|
|
self._mapNode.animWindow:Play("t_window_04_t_out")
|
|
self:AddTimer(1, nAnimTime, function()
|
|
self._mapNode.goWindow.gameObject:SetActive(false)
|
|
GamepadUIManager.DisableGamepadUI("Avg_8_LogCtrl")
|
|
end, true, true, true)
|
|
end
|
|
end
|
|
function Avg_8_LogCtrl:OnEvent_AvgVoiceDuration(nDuration)
|
|
if self.curPlayIndex ~= nil then
|
|
self.voiceTimer = self:AddTimer(1, nDuration, function()
|
|
local imgPlay = self.tbAvgLogGrid[self.curPlayIndex].transform:Find("btnPlayVoice/AnimRoot/imgPlay")
|
|
local imgPause = self.tbAvgLogGrid[self.curPlayIndex].transform:Find("btnPlayVoice/AnimRoot/imgPause")
|
|
imgPlay.gameObject:SetActive(true)
|
|
imgPause.gameObject:SetActive(false)
|
|
self.curPlayIndex = nil
|
|
self.voiceTimer = nil
|
|
end, true, true, true)
|
|
end
|
|
end
|
|
function Avg_8_LogCtrl:OnEvent_AvgSpeedUp(nRate)
|
|
if self:GetPanelId() ~= PanelId.AvgST then
|
|
return
|
|
end
|
|
self:OnEvent_AvgSpeedUp_Timer(nRate)
|
|
NovaAPI.SetAnimatorSpeed(self._mapNode.animWindow, nRate)
|
|
end
|
|
return Avg_8_LogCtrl
|