46f967a584
EN: 1.6.0.84 CN: 1.6.0.87 JP: 1.6.0.88 KR: 1.6.0.91
1414 lines
49 KiB
Lua
1414 lines
49 KiB
Lua
local Avg_5_PhoneCtrl = class("Avg_5_PhoneCtrl", BaseCtrl)
|
|
local LayoutRebuilder = CS.UnityEngine.UI.LayoutRebuilder
|
|
local WwiseAudioMgr = CS.WwiseAudioManager.Instance
|
|
local GamepadUIManager = require("GameCore.Module.GamepadUIManager")
|
|
local CONST_WIDTH = 340
|
|
local CONST_GRID_WIDTH = 1022.9
|
|
local DEFAULT_AUTOPLAY_MIN_TIME = 1
|
|
local DEFAULT_AUTOPLAY_MAX_TIME = 2.5
|
|
local AUTO_PLAY_WAITING_VOIVE = 1
|
|
local max_chat_width = 708
|
|
local max_choice_width = 650
|
|
local choice_txt_diff = 22.06
|
|
local choice_img_diff = 20.22
|
|
local choice_selection_top = 26
|
|
local choice_selection_bottom = 28
|
|
local choice_selection_input = 116
|
|
local choice_selection_space = 12.5
|
|
local choice_head_offset = 15
|
|
local SelectType = {
|
|
ThinkingGoOn = 1,
|
|
PhoneGoOn = 2,
|
|
ChoiceMsg = 3
|
|
}
|
|
Avg_5_PhoneCtrl._mapNodeConfig = {
|
|
txtCalcHeight = {sComponentName = "TMP_Text"},
|
|
rtCalcHeight = {
|
|
sNodeName = "txtCalcHeight",
|
|
sComponentName = "RectTransform"
|
|
},
|
|
txtMsgCalcHeight = {sComponentName = "TMP_Text"},
|
|
rtMsgCalcHeight = {
|
|
sNodeName = "txtMsgCalcHeight",
|
|
sComponentName = "RectTransform"
|
|
},
|
|
layoutCalcHeight = {
|
|
sNodeName = "txtCalcHeight",
|
|
sComponentName = "LayoutElement"
|
|
},
|
|
imgBtnGoOn = {
|
|
sNodeName = "btnPhoneGoOn",
|
|
sComponentName = "Image"
|
|
},
|
|
btnGoOn = {
|
|
sNodeName = "btnPhoneGoOn",
|
|
sComponentName = "NaviButton",
|
|
callback = "OnBtnClick_GoOn"
|
|
},
|
|
rtRoot = {
|
|
sComponentName = "RectTransform"
|
|
},
|
|
canvasGroupRoot = {
|
|
sNodeName = "rtRoot",
|
|
sComponentName = "CanvasGroup"
|
|
},
|
|
rtInputRoot = {
|
|
sComponentName = "RectTransform"
|
|
},
|
|
txtReply = {sComponentName = "TMP_Text"},
|
|
txtReply_shadow = {sComponentName = "TMP_Text"},
|
|
rtSvReply = {
|
|
sNodeName = "svReply",
|
|
sComponentName = "RectTransform"
|
|
},
|
|
imgCursor = {sComponentName = "Image"},
|
|
loopSV = {
|
|
sNodeName = "sv",
|
|
sComponentName = "LoopScrollView"
|
|
},
|
|
Viewport_SV = {
|
|
sComponentName = "Button",
|
|
callback = "OnBtnClick_GoOn"
|
|
},
|
|
trContent = {sNodeName = "Content_SV", sComponentName = "Transform"},
|
|
rtViewPort_SV = {
|
|
sNodeName = "Viewport_SV",
|
|
sComponentName = "RectTransform"
|
|
},
|
|
rtContent_SV = {
|
|
sNodeName = "Content_SV",
|
|
sComponentName = "RectTransform"
|
|
},
|
|
layoutContent_SV = {
|
|
sNodeName = "Content_SV",
|
|
sComponentName = "GridLayoutGroup"
|
|
},
|
|
imgMsgDetail = {
|
|
sNodeName = "imgMsgDetail",
|
|
sComponentName = "Image"
|
|
},
|
|
aniMsgDetail = {
|
|
sNodeName = "rtImgMsgDetail",
|
|
sComponentName = "Animator"
|
|
},
|
|
btnSnapShot = {
|
|
sNodeName = "snapshot",
|
|
sComponentName = "Button",
|
|
callback = "OnBtnClick_HideImgMsg"
|
|
},
|
|
txtSkip = {
|
|
sNodeName = "txtNotice",
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Tips_Continue"
|
|
},
|
|
animMainRole = {
|
|
sNodeName = "----main_role----",
|
|
sComponentName = "Animator"
|
|
},
|
|
rtMainRole = {
|
|
sNodeName = "----main_role----",
|
|
sComponentName = "RectTransform"
|
|
},
|
|
trMainRole = {sNodeName = "goMainRole", sComponentName = "Transform"},
|
|
rtmp_os = {
|
|
sComponentName = "RubyTextMeshProUGUI"
|
|
},
|
|
goMask = {sNodeName = "imgMask", sComponentName = "GameObject"},
|
|
btnThinkingGoOn = {
|
|
sNodeName = "btnThinkingGoOn",
|
|
sComponentName = "NaviButton",
|
|
callback = "OnBtnClick_ThinkingGoOn"
|
|
},
|
|
imgContactHead = {
|
|
sNodeName = "imgHeadIcon",
|
|
sComponentName = "Image"
|
|
},
|
|
txtCharName = {sComponentName = "TMP_Text"},
|
|
txtSignature = {sComponentName = "TMP_Text"},
|
|
goTitle = {},
|
|
goBgRoot = {},
|
|
GoChatList = {},
|
|
PhoneRoot = {sComponentName = "Animator"},
|
|
sv = {
|
|
sComponentName = "GamepadScroll"
|
|
},
|
|
goTempLeftHead = {},
|
|
goTempRightHead = {},
|
|
goFixedHead = {sComponentName = "Transform"}
|
|
}
|
|
Avg_5_PhoneCtrl._mapEventConfig = {
|
|
[EventId.AvgSetAutoPlay] = "OnEvent_AvgSetAutoPlay",
|
|
[EventId.AvgShowHideTalkUI] = "OnEvent_AvgShowHideTalkUI",
|
|
[EventId.AvgChoiceToReplyPhoneMessage] = "OnEvent_Reply",
|
|
[EventId.AvgClearStage] = "OnEvent_ClearStage",
|
|
[EventId.AvgVoiceDuration] = "OnEvent_AvgVoiceDuration",
|
|
[EventId.AvgSpeedUp] = "OnEvent_AvgSpeedUp",
|
|
GamepadUIChange = "OnEvent_GamepadUIChange",
|
|
GamepadUIReopen = "OnEvent_Reopen"
|
|
}
|
|
function Avg_5_PhoneCtrl:Awake()
|
|
self.tbGridData = {}
|
|
local tweener = NovaAPI.ImageDoFade(self._mapNode.imgCursor, 0, 0.5, true)
|
|
tweener:SetLoops(-1)
|
|
self.tbMsgData = {}
|
|
self.tbGridHeight = {}
|
|
self.tbChoiceDecision = {}
|
|
self.nPhoneOutPosY = -(1200 + Settings.CURRENT_CANVAS_FULL_RECT_HEIGHT) / 2
|
|
self._mapNode.rtRoot.anchoredPosition = Vector2(0, self.nPhoneOutPosY)
|
|
self._mapNode.rtInputRoot.anchoredPosition = Vector2(0, -108)
|
|
self._mapNode.goTitle:SetActive(false)
|
|
self.bIsAutoPlaying = false
|
|
self.nAutoPlayWaiting = 3
|
|
self.timerAutoPlayWaiting = nil
|
|
self.colorHideReplyText = Color(0.1490196, 0.2588235, 0.4705882, 0)
|
|
self.bPhoneThinking = false
|
|
self.nAutoSelectionPlayWaiting = 0.5
|
|
self:_SetBtnEnable(false)
|
|
self.tbLogData = {}
|
|
self._mapNode.goTempLeftHead.gameObject:SetActive(false)
|
|
self._mapNode.goTempRightHead.gameObject:SetActive(false)
|
|
self._mapNode.goFixedHead.gameObject:SetActive(false)
|
|
self.sTxtLan = self._panel.sTxtLan or Settings.sCurrentTxtLanguage
|
|
end
|
|
function Avg_5_PhoneCtrl:OnEnable()
|
|
self:AddGamepadUINode()
|
|
end
|
|
function Avg_5_PhoneCtrl:OnDisable()
|
|
WwiseAudioMgr:WwiseVoice_StopInAVG()
|
|
self.bNeedWaitVoiceFinish = false
|
|
end
|
|
function Avg_5_PhoneCtrl:_SetBtnEnable(bEnable)
|
|
NovaAPI.SetImageRaycastTarget(self._mapNode.imgBtnGoOn, bEnable)
|
|
self._mapNode.Viewport_SV.interactable = bEnable
|
|
self._mapNode.btnGoOn.interactable = bEnable
|
|
self._mapNode.btnGoOn.gameObject:SetActive(bEnable)
|
|
EventManager.Hit(EventId.AvgLogBtnEnable, bEnable)
|
|
end
|
|
function Avg_5_PhoneCtrl:OnBtnClick_GoOn(btn)
|
|
if self.bPlayingVoice then
|
|
if self.bNeedWaitVoiceFinish then
|
|
return
|
|
end
|
|
WwiseAudioMgr:WwiseVoice_StopInAVG()
|
|
self.bPlayingVoice = false
|
|
if self.voicePlayWaiting ~= nil then
|
|
self.voicePlayWaiting:Cancel()
|
|
self.voicePlayWaiting = nil
|
|
end
|
|
end
|
|
self:_SetBtnEnable(false)
|
|
self:ClearAllInputingMsg()
|
|
if self.bIsAutoPlaying == true then
|
|
self:_PauseTimerAutoPlayWaiting()
|
|
end
|
|
if self.bStartChoice == true then
|
|
return
|
|
end
|
|
if self:GetPanelId() == PanelId.AvgST then
|
|
self._panel:RUN()
|
|
end
|
|
EventManager.Hit(EventId.AvgShowNextPhoneMessage)
|
|
end
|
|
function Avg_5_PhoneCtrl:OnBtnClick_ThinkingGoOn(btn)
|
|
self.bPhoneThinking = false
|
|
self._mapNode.animMainRole:SetTrigger("tOut")
|
|
self._mapNode.goMask:SetActive(false)
|
|
self._mapNode.btnThinkingGoOn.gameObject:SetActive(false)
|
|
self:_PlayPhoneHorizontalMove(false)
|
|
self:_PlayPhoneScaleMove(false)
|
|
self:OnBtnClick_GoOn()
|
|
end
|
|
function Avg_5_PhoneCtrl:OnBtnClick_ShowImgMsg(iconPath)
|
|
self:SetPngSprite(self._mapNode.imgMsgDetail, iconPath)
|
|
NovaAPI.SetImageNativeSize(self._mapNode.imgMsgDetail)
|
|
self._mapNode.aniMsgDetail:Play("showMsg")
|
|
end
|
|
function Avg_5_PhoneCtrl:OnBtnClick_HideImgMsg()
|
|
self._mapNode.aniMsgDetail:Play("hideMsg")
|
|
end
|
|
function Avg_5_PhoneCtrl:OnBtnClick_ChoiceMsg(index, choiceData)
|
|
self:ClearSelect()
|
|
self.bStartChoice = false
|
|
for k, v in ipairs(self.tbMsgData[self.curContactsId]) do
|
|
if v.type == 2 and v.msgData.groupID == choiceData.groupID then
|
|
table.remove(self.tbMsgData[self.curContactsId], k)
|
|
table.remove(self.tbGridHeight[self.curContactsId], k)
|
|
break
|
|
end
|
|
end
|
|
if self.tbChoiceDecision[self.curContactsId] == nil then
|
|
self.tbChoiceDecision[self.curContactsId] = {}
|
|
end
|
|
for k, v in pairs(self.tbChoiceDecision[self.curContactsId]) do
|
|
if v.groupID == choiceData.groupID then
|
|
return
|
|
end
|
|
end
|
|
local decisionData = {
|
|
groupID = choiceData.groupID,
|
|
choiceIndex = tostring(index)
|
|
}
|
|
table.insert(self.tbChoiceDecision[self.curContactsId], decisionData)
|
|
if self:GetPanelId() == PanelId.AvgST then
|
|
if choiceData.msgType == AllEnum.PhoneMsgType.ReplyMsg then
|
|
self.tbLogData.nType = AllEnum.AvgLogType.PhoneMsgChoice
|
|
self.tbLogData.sAvgId = nil
|
|
self.tbLogData.sContent = ProcAvgTextContent(choiceData.choices[index], self._panel.nCurLanguageIdx)
|
|
self.tbLogData.sVoice = nil
|
|
EventManager.Hit(EventId.AvgMarkLog, self.tbLogData)
|
|
end
|
|
self._panel:SetPhoneMsgChoiceJumpTo(choiceData.groupID, index)
|
|
end
|
|
WwiseAudioMgr:PlaySound("ui_choice_click")
|
|
EventManager.Hit(EventId.AvgSelectPhoneMsgChoice, choiceData.groupID, index)
|
|
end
|
|
function Avg_5_PhoneCtrl:_StartTimerAutoPlayWaiting()
|
|
if self.bPlayingVoice or self.bStartChoice then
|
|
return
|
|
end
|
|
if self.timerAutoPlayWaiting == nil then
|
|
self.timerAutoPlayWaiting = self:AddTimer(1, self.nAutoPlayWaiting, "_AutoPlayTimerCallback", true, false, true)
|
|
elseif self.nAutoPlayWaiting == self.nLastWaitingTime then
|
|
self.timerAutoPlayWaiting:Reset()
|
|
else
|
|
self.timerAutoPlayWaiting:Cancel(false)
|
|
self.timerAutoPlayWaiting = self:AddTimer(1, self.nAutoPlayWaiting, "_AutoPlayTimerCallback", true, false, true)
|
|
end
|
|
self.nLastWaitingTime = self.nAutoPlayWaiting
|
|
end
|
|
function Avg_5_PhoneCtrl:_PauseTimerAutoPlayWaiting()
|
|
if self.timerAutoPlayWaiting ~= nil then
|
|
self.timerAutoPlayWaiting:Pause()
|
|
end
|
|
end
|
|
function Avg_5_PhoneCtrl:_AutoPlayTimerCallback(timer)
|
|
if not self.bPhoneThinking then
|
|
self:OnBtnClick_GoOn(self._mapNode.btnGoOn)
|
|
else
|
|
self:OnBtnClick_ThinkingGoOn()
|
|
end
|
|
end
|
|
function Avg_5_PhoneCtrl:_SetAutoPlayState(bAuto)
|
|
self.bIsAutoPlaying = bAuto
|
|
end
|
|
function Avg_5_PhoneCtrl:_SetNextTipActive(bActive)
|
|
local trContent = self._mapNode.trContent
|
|
local lastGrid
|
|
for i = 1, trContent.childCount do
|
|
local tr = trContent:GetChild(i - 1)
|
|
if tr.gameObject.activeSelf == true then
|
|
lastGrid = tr
|
|
else
|
|
break
|
|
end
|
|
end
|
|
if lastGrid ~= nil then
|
|
local goLeft = lastGrid:Find("goChatItem/goLeft/rtMsg/imgBg/imgNextTip").gameObject
|
|
local goRight = lastGrid:Find("goChatItem/goRight/rtMsg/imgBg/imgNextTip").gameObject
|
|
goLeft:SetActive(bActive)
|
|
goRight:SetActive(bActive)
|
|
end
|
|
end
|
|
function Avg_5_PhoneCtrl:OnEvent_AvgSetAutoPlay(bAuto, bByInit)
|
|
self.bIsAutoPlaying = bAuto
|
|
local sTrigger = "tManual"
|
|
if self.bIsAutoPlaying == true then
|
|
sTrigger = "tAuto"
|
|
end
|
|
if bByInit == true then
|
|
return
|
|
end
|
|
if self.bIsActive ~= true then
|
|
return
|
|
end
|
|
if self.bIsAutoPlaying == true then
|
|
self:_StartTimerAutoPlayWaiting()
|
|
else
|
|
self:_PauseTimerAutoPlayWaiting()
|
|
end
|
|
end
|
|
function Avg_5_PhoneCtrl:OnEvent_AvgShowHideTalkUI(bVisible)
|
|
NovaAPI.SetCanvasGroupAlpha(self._mapNode.canvasGroupRoot, bVisible == true and 1 or 0)
|
|
NovaAPI.SetCanvasGroupInteractable(self._mapNode.canvasGroupRoot, bVisible)
|
|
NovaAPI.SetCanvasGroupBlocksRaycasts(self._mapNode.canvasGroupRoot, bVisible)
|
|
self._mapNode.btnGoOn.transform.localScale = bVisible == true and Vector3.one or Vector3.zero
|
|
NovaAPI.SetButtonInteractable(self._mapNode.btnGoOn, bVisible)
|
|
end
|
|
function Avg_5_PhoneCtrl:OnEvent_Reply(sReplyMsg)
|
|
NovaAPI.SetTMPText(self._mapNode.txtReply, sReplyMsg)
|
|
NovaAPI.SetTMPText(self._mapNode.txtReply_shadow, sReplyMsg)
|
|
self._mapNode.txtReply:DOFade(1, 0.2):SetUpdate(true)
|
|
end
|
|
function Avg_5_PhoneCtrl:OnEvent_AvgVoiceDuration(time)
|
|
if self:GetPanelId() == PanelId.AvgEditor then
|
|
return
|
|
end
|
|
if self.bProcVoiceCallbackEvent ~= true then
|
|
return
|
|
end
|
|
self.bProcVoiceCallbackEvent = false
|
|
self.bPlayingVoice = true
|
|
if self.voicePlayWaiting == nil then
|
|
self.voicePlayWaiting = self:AddTimer(1, time, "_EndPlayTalkVoice", true, true, true)
|
|
end
|
|
end
|
|
function Avg_5_PhoneCtrl:OnEvent_ClearStage()
|
|
if self:GetPanelId() == PanelId.AvgEditor then
|
|
return
|
|
end
|
|
self:_DelayHidePhone()
|
|
self:SetPhone({1, 1})
|
|
end
|
|
function Avg_5_PhoneCtrl:OnEvent_AvgSpeedUp(nRate)
|
|
if self:GetPanelId() ~= PanelId.AvgST then
|
|
return
|
|
end
|
|
self:OnEvent_AvgSpeedUp_Timer(nRate)
|
|
NovaAPI.SetAnimatorSpeed(self._mapNode.aniMsgDetail, nRate)
|
|
NovaAPI.SetAnimatorSpeed(self._mapNode.animMainRole, nRate)
|
|
NovaAPI.SetAnimatorSpeed(self._mapNode.PhoneRoot, nRate)
|
|
end
|
|
function Avg_5_PhoneCtrl:_CalcGridHeight(sContent)
|
|
self._mapNode.layoutCalcHeight.enabled = false
|
|
NovaAPI.SetTMPText(self._mapNode.txtCalcHeight, sContent)
|
|
LayoutRebuilder.ForceRebuildLayoutImmediate(self._mapNode.rtCalcHeight)
|
|
if self._mapNode.rtCalcHeight.rect.width > max_chat_width then
|
|
self._mapNode.layoutCalcHeight.enabled = true
|
|
self._mapNode.layoutCalcHeight.preferredWidth = max_chat_width
|
|
end
|
|
LayoutRebuilder.ForceRebuildLayoutImmediate(self._mapNode.rtCalcHeight)
|
|
local nH = self._mapNode.rtCalcHeight.rect.height + 56
|
|
if nH < 104 then
|
|
nH = 104
|
|
end
|
|
return nH
|
|
end
|
|
function Avg_5_PhoneCtrl:_CalcMsgGridHeight(sContent)
|
|
self._mapNode.layoutCalcHeight.enabled = false
|
|
NovaAPI.SetTMPText(self._mapNode.txtMsgCalcHeight, sContent)
|
|
LayoutRebuilder.ForceRebuildLayoutImmediate(self._mapNode.rtMsgCalcHeight)
|
|
if self._mapNode.rtMsgCalcHeight.rect.width > max_chat_width then
|
|
self._mapNode.layoutCalcHeight.enabled = true
|
|
self._mapNode.layoutCalcHeight.preferredWidth = max_chat_width
|
|
end
|
|
LayoutRebuilder.ForceRebuildLayoutImmediate(self._mapNode.rtMsgCalcHeight)
|
|
local nH = self._mapNode.rtMsgCalcHeight.rect.height + 40
|
|
return nH
|
|
end
|
|
function Avg_5_PhoneCtrl:_CalcChoiceHeight(sContent)
|
|
self._mapNode.layoutCalcHeight.enabled = false
|
|
NovaAPI.SetTMPText(self._mapNode.txtCalcHeight, sContent)
|
|
LayoutRebuilder.ForceRebuildLayoutImmediate(self._mapNode.rtCalcHeight)
|
|
if self._mapNode.rtCalcHeight.rect.width > max_choice_width then
|
|
self._mapNode.layoutCalcHeight.enabled = true
|
|
self._mapNode.layoutCalcHeight.preferredWidth = max_choice_width
|
|
end
|
|
LayoutRebuilder.ForceRebuildLayoutImmediate(self._mapNode.rtCalcHeight)
|
|
local nH = self._mapNode.rtCalcHeight.rect.height + choice_txt_diff
|
|
if nH < 67.15 then
|
|
nH = 67.15
|
|
end
|
|
return nH
|
|
end
|
|
function Avg_5_PhoneCtrl:_CalcGridWidth(sContent)
|
|
self._mapNode.layoutCalcHeight.enabled = false
|
|
NovaAPI.SetTMPText(self._mapNode.txtCalcHeight, sContent)
|
|
LayoutRebuilder.ForceRebuildLayoutImmediate(self._mapNode.rtCalcHeight)
|
|
local width = self._mapNode.rtCalcHeight.rect.width
|
|
if width > max_chat_width then
|
|
width = max_chat_width
|
|
end
|
|
return width
|
|
end
|
|
function Avg_5_PhoneCtrl:_CalcTextAnimDuration(sContent)
|
|
local nCurLanguageIdx = self._panel.nCurLanguageIdx
|
|
if nCurLanguageIdx == nil then
|
|
nCurLanguageIdx = GetLanguageIndex(Settings.sCurrentTxtLanguage)
|
|
end
|
|
local nDuration = CalcTextAnimDuration(sContent, nCurLanguageIdx)
|
|
nDuration = math.min(DEFAULT_AUTOPLAY_MAX_TIME, nDuration)
|
|
nDuration = math.max(DEFAULT_AUTOPLAY_MIN_TIME, nDuration)
|
|
return nDuration
|
|
end
|
|
function Avg_5_PhoneCtrl:_PlayPhoneInOutAnim(bIn)
|
|
if bIn == true then
|
|
self._mapNode.rtRoot.localScale = Vector3.one
|
|
self._mapNode.rtMainRole.localScale = Vector3.one
|
|
self._mapNode.rtRoot.anchoredPosition = Vector2(0, 0)
|
|
self._mapNode.rtInputRoot.anchoredPosition = Vector2(0, -108)
|
|
self._mapNode.PhoneRoot:Play("avg_5_phone_title_in")
|
|
self._mapNode.goBgRoot:SetActive(true)
|
|
self._mapNode.GoChatList:SetActive(true)
|
|
else
|
|
self._mapNode.PhoneRoot:Play("avg_5_phone_title_out")
|
|
self:AddTimer(1, 0.6, "_DelayHidePhone", true, true, true)
|
|
self._mapNode.goBgRoot:SetActive(false)
|
|
end
|
|
end
|
|
function Avg_5_PhoneCtrl:_PlayPhoneHorizontalMove(bLeft)
|
|
local nTargetPosX = 0
|
|
if bLeft == true then
|
|
nTargetPosX = -490
|
|
end
|
|
self._mapNode.rtRoot:DOAnchorPosX(nTargetPosX, 0.4):SetUpdate(true):SetEase(Ease.InOutQuad)
|
|
end
|
|
function Avg_5_PhoneCtrl:_PlayPhoneScaleMove(bSmall)
|
|
local nTargetScale = 1
|
|
if bSmall == true then
|
|
nTargetScale = 0.8
|
|
end
|
|
self._mapNode.rtRoot:DOScale(nTargetScale, 0.4):SetUpdate(true):SetEase(Ease.InOutQuad)
|
|
end
|
|
function Avg_5_PhoneCtrl:_SetReplyInputField(bIn, nDelay)
|
|
local nTargetPosY = -108
|
|
if bIn == true then
|
|
nTargetPosY = 0
|
|
self._mapNode.rtSvReply.anchoredPosition = Vector2(0, 0)
|
|
NovaAPI.SetTMPColor(self._mapNode.txtReply, self.colorHideReplyText)
|
|
NovaAPI.SetTMPText(self._mapNode.txtReply, " ")
|
|
NovaAPI.SetTMPText(self._mapNode.txtReply_shadow, " ")
|
|
end
|
|
if math.abs(self._mapNode.rtInputRoot.anchoredPosition.y - nTargetPosY) > 0.1 then
|
|
local tw = self._mapNode.rtInputRoot:DOAnchorPosY(nTargetPosY, 0.3):SetUpdate(true):SetEase(Ease.OutQuad)
|
|
if nDelay ~= nil and 0 < nDelay then
|
|
tw:SetDelay(nDelay)
|
|
end
|
|
return 0.3
|
|
else
|
|
return 0
|
|
end
|
|
end
|
|
function Avg_5_PhoneCtrl:_PlayReplyTextAnim(sContent)
|
|
self._mapNode.rtSvReply.anchoredPosition = Vector2(0, 0)
|
|
NovaAPI.SetTMPColor(self._mapNode.txtReply, self.colorHideReplyText)
|
|
sContent = string.gsub(sContent, "\n", "")
|
|
NovaAPI.SetTMPText(self._mapNode.txtReply, sContent)
|
|
NovaAPI.SetTMPText(self._mapNode.txtReply_shadow, sContent)
|
|
self._mapNode.txtReply:DOFade(1, 0.2):SetUpdate(true)
|
|
self._mapNode.rtSvReply:DOAnchorPosY(50, 0.2):SetUpdate(true):SetEase(Ease.InQuad):SetDelay(0.7)
|
|
return 1
|
|
end
|
|
function Avg_5_PhoneCtrl:_DelayHidePhone()
|
|
self._mapNode.rtRoot.localScale = Vector3.zero
|
|
self._mapNode.rtMainRole.localScale = Vector3.zero
|
|
end
|
|
function Avg_5_PhoneCtrl:_DelayShowThinkingBtn()
|
|
self._mapNode.btnThinkingGoOn.gameObject:SetActive(true)
|
|
end
|
|
function Avg_5_PhoneCtrl:_EndPlayTalkVoice()
|
|
if self.bPlayingVoice then
|
|
self.bPlayingVoice = false
|
|
end
|
|
if self.bNeedWaitVoiceFinish then
|
|
self.bNeedWaitVoiceFinish = false
|
|
end
|
|
if self.voicePlayWaiting ~= nil then
|
|
self.voicePlayWaiting = nil
|
|
end
|
|
if self.bIsAutoPlaying then
|
|
self:_StartTimerAutoPlayWaiting()
|
|
end
|
|
end
|
|
local nTimes = 1
|
|
function Avg_5_PhoneCtrl:_RefreshLoopSV(timer)
|
|
self.bIsFullPage = self:IsFullPage()
|
|
self.bOnInitEx = true
|
|
self._mapNode.loopSV:InitEx(self.tbGridHeight[self.curContactsId], self, self.OnRefreshGrid, nil, true)
|
|
self.bOnInitEx = false
|
|
self._mapNode.loopSV:SetScrollPos(0, 0.2 * nTimes)
|
|
if not self.bShowInputingWaiting and not self.RecordMsg then
|
|
self.timerDelayEnableBtn = self:AddTimer(1, 0.4 * nTimes, "_DelayEnableBtn", true, true, true)
|
|
self:CheckNextMessage(1)
|
|
end
|
|
end
|
|
function Avg_5_PhoneCtrl:_DelayEnableBtn(timer)
|
|
self:_SetBtnEnable(true)
|
|
if self.bIsAutoPlaying == true then
|
|
self:_StartTimerAutoPlayWaiting()
|
|
end
|
|
if self.trTempHeadImg ~= nil and self.trTempHeadImgRoot ~= nil then
|
|
self.trTempHeadImg:SetParent(self.trTempHeadImgRoot)
|
|
self.trTempHeadImg = nil
|
|
self.trTempHeadImgRoot = nil
|
|
end
|
|
end
|
|
function Avg_5_PhoneCtrl:OnRefreshGrid(goGrid, gridIndex)
|
|
local nDataIndex = gridIndex + 1
|
|
local data = self.tbMsgData[self.curContactsId][nDataIndex]
|
|
if data == nil then
|
|
return
|
|
end
|
|
local goChat = goGrid.transform:Find("goChatItem")
|
|
local goMiddle = goGrid.transform:Find("goMiddle")
|
|
local goSelection = goGrid.transform:Find("goSelection")
|
|
local goNextItemLeft = goGrid.transform:Find("goNextItemLeft")
|
|
local goNextItemRight = goGrid.transform:Find("goNextItemRight")
|
|
goChat.gameObject:SetActive(data.type == 1 and data.msgData[1] ~= AllEnum.PhoneMsgType.SystemMsg and data.msgData[1] ~= AllEnum.PhoneMsgType.InputingMsgLeft and data.msgData[1] ~= AllEnum.PhoneMsgType.InputingMsgRight)
|
|
goMiddle.gameObject:SetActive(data.type == 1 and data.msgData[1] == AllEnum.PhoneMsgType.SystemMsg)
|
|
goNextItemLeft.gameObject:SetActive(data.type == 1 and data.msgData[1] == AllEnum.PhoneMsgType.InputingMsgLeft)
|
|
goNextItemRight.gameObject:SetActive(data.type == 1 and data.msgData[1] == AllEnum.PhoneMsgType.InputingMsgRight)
|
|
goSelection.gameObject:SetActive(data.type == 2)
|
|
if data.type == 1 then
|
|
if data.msgData[1] == AllEnum.PhoneMsgType.SystemMsg then
|
|
local txtMiddle = goMiddle:Find("txtMiddle"):GetComponent("TMP_Text")
|
|
NovaAPI.SetTMPText(txtMiddle, data.msgData[3])
|
|
local rtGrid = goGrid:GetComponent("RectTransform")
|
|
local sizeDelta = rtGrid.sizeDelta
|
|
sizeDelta.y = self.tbGridHeight[self.curContactsId][nDataIndex]
|
|
rtGrid.sizeDelta = sizeDelta
|
|
elseif data.msgData[1] == AllEnum.PhoneMsgType.InputingMsgLeft or data.msgData[1] == AllEnum.PhoneMsgType.InputingMsgRight then
|
|
self:OnRefreshInputingGrid(goGrid, gridIndex)
|
|
else
|
|
self:OnRefreshCommonGrid(goGrid, nDataIndex)
|
|
end
|
|
else
|
|
self:OnRefreshChoiceGrid(goGrid, nDataIndex)
|
|
end
|
|
end
|
|
function Avg_5_PhoneCtrl:OnRefreshCommonGrid(goGrid, nDataIndex)
|
|
local data = self:GetMsgDataByDataIndex(nDataIndex)
|
|
local bReply = data[1] ~= AllEnum.PhoneMsgType.ReceiveMsg and data[1] ~= AllEnum.PhoneMsgType.ReceiveImgMsg
|
|
local bImgMsg = data[1] == AllEnum.PhoneMsgType.ReceiveImgMsg or data[1] == AllEnum.PhoneMsgType.ReplyImgMsg
|
|
local sAvgCharId = data[2]
|
|
local sMsgContent = data[3]
|
|
local bPlayed = data[4]
|
|
local nH = self.tbGridHeight[self.curContactsId][nDataIndex]
|
|
local imgType = data[5]
|
|
local imgSize = data[6]
|
|
local sVoiceName = data[7]
|
|
self.bNeedWaitVoiceFinish = data[8]
|
|
local rtGrid = goGrid:GetComponent("RectTransform")
|
|
local func_SetGrid = function(sPart, bActive)
|
|
local go = rtGrid:Find(sPart).gameObject
|
|
local goHead = rtGrid:Find(sPart .. "Head").gameObject
|
|
if rtGrid:Find(sPart .. "Head/imgHeadBg/imgHead") == nil then
|
|
return nil
|
|
end
|
|
local rtImgHeadBg = rtGrid:Find(sPart .. "Head/imgHeadBg"):GetComponent("RectTransform")
|
|
local imgHead = rtGrid:Find(sPart .. "Head/imgHeadBg/imgHead"):GetComponent("Image")
|
|
local rtImgHead = imgHead:GetComponent("RectTransform")
|
|
local rtMsg = rtGrid:Find(sPart .. "/rtMsg"):GetComponent("RectTransform")
|
|
local btnImg = rtGrid:Find(sPart .. "/rtMsg/imgBg"):GetComponent("Button")
|
|
local txtMsg = rtGrid:Find(sPart .. "/rtMsg/txtContent"):GetComponent("TMP_Text")
|
|
local rtTxtMsg = txtMsg:GetComponent("RectTransform")
|
|
local rtImgMsg = rtGrid:Find(sPart .. "/rtMsg/imgMsg"):GetComponent("RectTransform")
|
|
local btnImgMsg = rtImgMsg:GetComponent("Button")
|
|
local imgImgMsg = rtImgMsg:GetComponent("Image")
|
|
btnImg.gameObject:SetActive(not bImgMsg)
|
|
txtMsg.gameObject:SetActive(not bImgMsg)
|
|
imgImgMsg.gameObject:SetActive(bImgMsg)
|
|
rtImgHeadBg.anchoredPosition = Vector2.zero
|
|
local imgTempHead = self.trTempHeadImg.transform:Find("imgHeadBg/imgHead"):GetComponent("Image")
|
|
self.nHeadAnimEndPosY = 0
|
|
if bActive == true then
|
|
local bHeadImgVisible = false
|
|
local bHeadImgAnim = false
|
|
if nDataIndex == #self.tbMsgData[self.curContactsId] and not self.RecordMsg then
|
|
bHeadImgVisible = true
|
|
if self.bOnInitEx == true and 1 < nDataIndex and self:IsSameMsgSender(nDataIndex) and self.bRevertHistoryMsg ~= true then
|
|
bHeadImgVisible = false
|
|
bHeadImgAnim = true
|
|
end
|
|
elseif not self:IsSameMsgSender(nDataIndex + 1) or self:GetMsgDataByDataIndex(nDataIndex + 1)[1] == AllEnum.PhoneMsgType.SystemMsg then
|
|
bHeadImgVisible = true
|
|
end
|
|
go:SetActive(true)
|
|
goHead:SetActive(true)
|
|
self:SetAvgCharHeadIcon(imgHead, sAvgCharId, "002")
|
|
rtImgHeadBg.gameObject:SetActive(bHeadImgVisible == true)
|
|
if self.trTempHeadImg then
|
|
self:SetAvgCharHeadIcon(imgTempHead, sAvgCharId, "002")
|
|
end
|
|
if bImgMsg then
|
|
rtMsg.sizeDelta = Vector2(imgSize[1], imgSize[2])
|
|
NovaAPI.SetImageRaycastTarget(imgImgMsg, imgType == 1)
|
|
btnImgMsg.onClick:RemoveAllListeners()
|
|
if imgType == 1 then
|
|
sMsgContent = "Icon/AvgPhoneImageMsg/" .. sMsgContent
|
|
btnImgMsg.onClick:AddListener(function()
|
|
self:OnBtnClick_ShowImgMsg(sMsgContent)
|
|
end)
|
|
else
|
|
sMsgContent = "Icon/AvgPhoneEmojiMsg/" .. sMsgContent
|
|
end
|
|
self:SetPngSprite(imgImgMsg, sMsgContent)
|
|
rtImgMsg.localScale = Vector3(1, 1, 1)
|
|
else
|
|
btnImg.interactable = bHeadImgVisible == true
|
|
local width = self:_CalcGridWidth(sMsgContent)
|
|
rtTxtMsg.sizeDelta = Vector2(width, rtTxtMsg.sizeDelta.y)
|
|
NovaAPI.SetTMPText(txtMsg, sMsgContent)
|
|
rtMsg.sizeDelta = Vector2(width + 92, nH)
|
|
end
|
|
rtGrid.sizeDelta = Vector2(CONST_GRID_WIDTH, nH)
|
|
local rtGo = go:GetComponent("RectTransform")
|
|
rtGo.sizeDelta = Vector2(CONST_GRID_WIDTH, nH)
|
|
if bHeadImgAnim then
|
|
local trPreHead = self._mapNode.trContent:Find(tostring(nDataIndex - 1 - 1) .. "/" .. sPart .. "Head")
|
|
if self.trTempHeadImg and trPreHead then
|
|
local imgTempHeadBg = self.trTempHeadImg.transform:Find("imgHeadBg")
|
|
imgTempHeadBg.transform.position = trPreHead.position
|
|
end
|
|
if self.bIsFullPage == true then
|
|
self.nHeadAnimEndPosY = self._mapNode.goFixedHead.position.y
|
|
else
|
|
self.nHeadAnimEndPosY = rtImgHeadBg.transform.position.y
|
|
end
|
|
end
|
|
return rtGo, rtMsg.transform, go:GetComponent("CanvasGroup"), rtImgHeadBg, bHeadImgAnim
|
|
else
|
|
go:SetActive(false)
|
|
goHead:SetActive(false)
|
|
NovaAPI.SetImageSpriteAsset(imgHead, nil)
|
|
NovaAPI.SetTMPText(txtMsg, " ")
|
|
rtMsg.sizeDelta = Vector2(344, 104)
|
|
rtGrid.sizeDelta = Vector2(CONST_GRID_WIDTH, 104)
|
|
return nil
|
|
end
|
|
end
|
|
local sRootNodeName_On, sRootNodeName_Off
|
|
self.trTempHeadImg = nil
|
|
self._mapNode.goTempRightHead.gameObject:SetActive(false)
|
|
self._mapNode.goTempLeftHead.gameObject:SetActive(false)
|
|
if bReply == true then
|
|
sRootNodeName_On = "goChatItem/goRight"
|
|
sRootNodeName_Off = "goChatItem/goLeft"
|
|
self.trTempHeadImg = self._mapNode.goTempRightHead
|
|
else
|
|
sRootNodeName_On = "goChatItem/goLeft"
|
|
sRootNodeName_Off = "goChatItem/goRight"
|
|
self.trTempHeadImg = self._mapNode.goTempLeftHead
|
|
end
|
|
func_SetGrid(sRootNodeName_Off, false)
|
|
local rtAnimPos, trAnimScale, canvasGroup, rtImgHeadBg, bHeadImgAnim = func_SetGrid(sRootNodeName_On, true)
|
|
if bPlayed ~= true and rtAnimPos ~= nil and trAnimScale ~= nil and canvasGroup ~= nil then
|
|
self:GetMsgDataByDataIndex(nDataIndex)[4] = true
|
|
local animTime = self.RecordMsg == true and 0 or nTimes
|
|
rtAnimPos.anchoredPosition = Vector2(0, -50)
|
|
rtAnimPos:DOAnchorPosY(0, 0.35 * animTime):SetUpdate(true):SetEase(Ease.OutCirc)
|
|
NovaAPI.SetCanvasGroupAlpha(canvasGroup, 0)
|
|
canvasGroup:DOFade(1, 0.3 * animTime):SetUpdate(true):SetEase(Ease.OutSine)
|
|
if rtImgHeadBg ~= nil and self.trTempHeadImg ~= nil then
|
|
if bHeadImgAnim then
|
|
self.trTempHeadImg.gameObject:SetActive(true)
|
|
local rtTempImgHeadBg = self.trTempHeadImg.transform:Find("imgHeadBg")
|
|
local headTweener = rtTempImgHeadBg:DOMoveY(self.nHeadAnimEndPosY, 0.35 * animTime):SetUpdate(true):SetEase(Ease.OutQuad)
|
|
local _cb = function()
|
|
if self.trTempHeadImg ~= nil then
|
|
self.trTempHeadImg.gameObject:SetActive(false)
|
|
end
|
|
self.trTempHeadImg = nil
|
|
if rtImgHeadBg ~= nil then
|
|
rtImgHeadBg.gameObject:SetActive(true)
|
|
end
|
|
end
|
|
headTweener.onComplete = dotween_callback_handler(self, _cb)
|
|
elseif not self.bIsFullPage then
|
|
local y = rtImgHeadBg.anchoredPosition.y
|
|
rtImgHeadBg.anchoredPosition = Vector2(rtImgHeadBg.anchoredPosition.x, y - 50)
|
|
rtImgHeadBg:DOAnchorPosY(y, 0.35 * animTime):SetUpdate(true):SetEase(Ease.OutCirc)
|
|
end
|
|
end
|
|
end
|
|
if nDataIndex == #self.tbGridHeight[self.curContactsId] then
|
|
if sVoiceName ~= nil and sVoiceName ~= "" then
|
|
self.bProcVoiceCallbackEvent = true
|
|
WwiseAudioMgr:WwiseVoice_PlayInAVG(sVoiceName)
|
|
self.nAutoPlayWaiting = AUTO_PLAY_WAITING_VOIVE
|
|
else
|
|
self.nAutoPlayWaiting = self:_CalcTextAnimDuration(sMsgContent)
|
|
end
|
|
end
|
|
end
|
|
function Avg_5_PhoneCtrl:OnRefreshChoiceGrid(goGrid, nDataIndex)
|
|
local data = self:GetMsgDataByDataIndex(nDataIndex)
|
|
local rootRect = goGrid.transform:Find("goSelection")
|
|
local rtRootRect = rootRect:GetComponent("RectTransform")
|
|
local imgHead = rootRect:Find("imgRightBg/imgRightHeadIcon"):GetComponent("Image")
|
|
local sAvgCharId = data.sAvgCharId
|
|
self:SetAvgCharHeadIcon(imgHead, AdjustMainRoleAvgCharId(sAvgCharId), "002")
|
|
local goTxtSelection = rootRect:Find("goSelectionList/goTxtSelection")
|
|
local goImgSelection = rootRect:Find("goSelectionList/goImgSelection")
|
|
goTxtSelection.gameObject:SetActive(data.msgType == AllEnum.PhoneMsgType.ReplyMsg)
|
|
goImgSelection.gameObject:SetActive(data.msgType ~= AllEnum.PhoneMsgType.ReplyMsg)
|
|
local goRoot = data.msgType == AllEnum.PhoneMsgType.ReplyMsg and goTxtSelection or goImgSelection
|
|
local nChoiceH = 0
|
|
self:ClearSelect()
|
|
for i = 1, 3 do
|
|
do
|
|
local goSelection = goRoot:Find("goSelection" .. i)
|
|
if i > #data.choices then
|
|
goSelection.gameObject:SetActive(false)
|
|
else
|
|
goSelection.gameObject:SetActive(true)
|
|
local btnSelection = goSelection:Find("btnSelection"):GetComponent("NaviButton")
|
|
btnSelection.onClick:RemoveAllListeners()
|
|
btnSelection.onClick:AddListener(function()
|
|
self:OnBtnClick_ChoiceMsg(i, data)
|
|
end)
|
|
btnSelection.onSelect:RemoveAllListeners()
|
|
btnSelection.onSelect:AddListener(function()
|
|
self:OnBtnSelect_ChoiceMsg(btnSelection, i)
|
|
end)
|
|
self:SetSelectBtnObj(i, btnSelection)
|
|
if data.msgType == AllEnum.PhoneMsgType.ReplyMsg then
|
|
local txtSelection = btnSelection.transform:Find("AnimRoot/txtSelection"):GetComponent("TMP_Text")
|
|
local rtTxtSelection = btnSelection.transform:Find("AnimRoot/txtSelection"):GetComponent("RectTransform")
|
|
local rtImgBg = btnSelection.transform:Find("AnimRoot/imgBg"):GetComponent("RectTransform")
|
|
local rtSelection = goSelection:GetComponent("RectTransform")
|
|
local sContent = ProcAvgTextContent(data.choices[i], self._panel.nCurLanguageIdx)
|
|
NovaAPI.SetTMPText(txtSelection, sContent)
|
|
local nHeight = self:_CalcChoiceHeight(sContent)
|
|
rtTxtSelection.sizeDelta = Vector2(rtTxtSelection.sizeDelta.x, nHeight)
|
|
rtImgBg.sizeDelta = Vector2(rtImgBg.sizeDelta.x, nHeight + choice_img_diff)
|
|
rtSelection.sizeDelta = Vector2(rtSelection.sizeDelta.x, nHeight + choice_img_diff)
|
|
nChoiceH = nChoiceH + nHeight + choice_img_diff
|
|
else
|
|
do
|
|
local imgSelection = btnSelection.transform:Find("AnimRoot/imgSelection"):GetComponent("Image")
|
|
local rtImg = imgSelection:GetComponent("RectTransform")
|
|
local path = data.msgType == AllEnum.PhoneMsgType.ReplyImgMsg and "Icon/AvgPhoneImageMsg/" .. data.choices[i] or "Icon/AvgPhoneEmojiMsg/" .. data.choices[i]
|
|
self:SetPngSprite(imgSelection, path)
|
|
if data.msgType == AllEnum.PhoneMsgType.ReplyImgMsg then
|
|
local rectWidth = NovaAPI.GetImageSpriteWidth(imgSelection)
|
|
local rectHeight = NovaAPI.GetImageSpriteHeight(imgSelection)
|
|
local ratio = rectWidth / rectHeight
|
|
if rectWidth > rectHeight then
|
|
rtImg.sizeDelta = Vector2(200, 200 / ratio)
|
|
else
|
|
local ratio = rectHeight / rectWidth
|
|
rtImg.sizeDelta = Vector2(200 * ratio, 200)
|
|
end
|
|
else
|
|
rtImg.sizeDelta = Vector2(200, 200)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if self:GetPanelId() == PanelId.AvgST then
|
|
if data.msgType == AllEnum.PhoneMsgType.ReplyMsg and next(self.tbSelectBtnObj) then
|
|
GamepadUIManager.SetNavigation(self.tbSelectBtnObj, false)
|
|
elseif (data.msgType == AllEnum.PhoneMsgType.ReplyImgMsg or data.msgType == AllEnum.PhoneMsgType.ReplyEmoji) and next(self.tbSelectBtnObj) then
|
|
GamepadUIManager.SetNavigation(self.tbSelectBtnObj, true)
|
|
end
|
|
end
|
|
self:SelectUI()
|
|
local goHead = rootRect:Find("imgRightBg"):GetComponent("RectTransform")
|
|
local headPos = goHead.anchoredPosition
|
|
if data.msgType == AllEnum.PhoneMsgType.ReplyMsg then
|
|
nChoiceH = nChoiceH + choice_selection_space * (#data.choices - 1) + choice_selection_top + choice_selection_bottom + choice_selection_input + choice_head_offset
|
|
rtRootRect.sizeDelta = Vector2(rtRootRect.sizeDelta.x, nChoiceH)
|
|
headPos.y = 0
|
|
else
|
|
headPos.y = -choice_head_offset
|
|
end
|
|
goHead.anchoredPosition = headPos
|
|
self.bStartChoice = true
|
|
end
|
|
function Avg_5_PhoneCtrl:OnRefreshInputingGrid(goGrid, gridIndex)
|
|
local rtGrid = goGrid:GetComponent("RectTransform")
|
|
rtGrid.sizeDelta = Vector2(rtGrid.sizeDelta.x, 104)
|
|
self.bShowInputingWaiting = true
|
|
end
|
|
function Avg_5_PhoneCtrl:IsFullPage()
|
|
local height = 0
|
|
for i = 1, #self.tbGridHeight[self.curContactsId] - 1 do
|
|
height = height + self.tbGridHeight[self.curContactsId][i]
|
|
end
|
|
height = height + self._mapNode.layoutContent_SV.padding.top
|
|
height = height + self._mapNode.layoutContent_SV.padding.bottom
|
|
height = height + self._mapNode.layoutContent_SV.spacing.y * (#self.tbGridHeight[self.curContactsId] - 2)
|
|
return height >= self._mapNode.rtViewPort_SV.rect.height
|
|
end
|
|
function Avg_5_PhoneCtrl:IsSameMsgSender(nDataIndex)
|
|
local tbCurData = self:GetMsgDataByDataIndex(nDataIndex)
|
|
local tbLastData = self:GetMsgDataByDataIndex(nDataIndex - 1)
|
|
if tbCurData ~= nil and tbLastData ~= nil and tbCurData[2] == tbLastData[2] then
|
|
local bReply = tbCurData[1] ~= AllEnum.PhoneMsgType.ReceiveMsg and tbCurData[1] ~= AllEnum.PhoneMsgType.ReceiveImgMsg
|
|
local bLastReply = tbLastData[1] ~= AllEnum.PhoneMsgType.ReceiveMsg and tbLastData[1] ~= AllEnum.PhoneMsgType.ReceiveImgMsg
|
|
if bReply ~= bLastReply then
|
|
return false
|
|
end
|
|
return true
|
|
else
|
|
return false
|
|
end
|
|
end
|
|
function Avg_5_PhoneCtrl:GetMsgDataByDataIndex(nDataIndex)
|
|
local data = self.tbMsgData[self.curContactsId]
|
|
if data[nDataIndex] ~= nil then
|
|
return data[nDataIndex].msgData
|
|
end
|
|
end
|
|
function Avg_5_PhoneCtrl:ResetPhoneMsgData()
|
|
self:ClearAllInputingMsg()
|
|
if self.timerAutoPlayWaiting ~= nil then
|
|
self.timerAutoPlayWaiting:Cancel()
|
|
self.timerAutoPlayWaiting = nil
|
|
end
|
|
if self.tbMsgData[self.curContactsId] ~= nil then
|
|
self.tbMsgData[self.curContactsId] = {}
|
|
end
|
|
if self.tbGridHeight[self.curContactsId] ~= nil then
|
|
self.tbGridHeight[self.curContactsId] = {}
|
|
end
|
|
if self.tbChoiceDecision[self.curContactsId] ~= nil then
|
|
self.tbChoiceDecision[self.curContactsId] = {}
|
|
end
|
|
self.bStartChoice = false
|
|
self.bPlayingVoice = false
|
|
self._mapNode.goTempLeftHead.gameObject:SetActive(false)
|
|
self._mapNode.goTempRightHead.gameObject:SetActive(false)
|
|
self:_SetBtnEnable(false)
|
|
if self.timerDelayEnableBtn ~= nil then
|
|
self.timerDelayEnableBtn:Cancel(false)
|
|
self.timerDelayEnableBtn = nil
|
|
end
|
|
if self.timerSetMsg ~= nil then
|
|
self.timerSetMsg:Cancel(false)
|
|
self.timerSetMsg = nil
|
|
end
|
|
end
|
|
function Avg_5_PhoneCtrl:CheckNextMessage(index)
|
|
if self:GetPanelId() == PanelId.AvgST then
|
|
local nextData = self._panel:GetNextProcFunc(index)
|
|
local state = self:GetNextDataState(nextData)
|
|
if state < 0 then
|
|
self:ShowNextInputingPhoneMsg(state)
|
|
elseif state == 0 then
|
|
index = index + 1
|
|
self:CheckNextMessage(index)
|
|
end
|
|
end
|
|
end
|
|
function Avg_5_PhoneCtrl:ShowNextInputingPhoneMsg(state)
|
|
if self.inputtingTimer ~= nil then
|
|
self.inputtingTimer:Cancel()
|
|
self.inputtingTimer = nil
|
|
end
|
|
local sFunc = ""
|
|
if state == -1 then
|
|
sFunc = "SetPhoneInputingMsgLeft"
|
|
elseif state == -2 then
|
|
sFunc = "SetPhoneInputingMsgRight"
|
|
end
|
|
self.inputtingTimer = self:AddTimer(1, 0.4 * nTimes, sFunc, true, true, true)
|
|
end
|
|
function Avg_5_PhoneCtrl:GetNextDataState(mapConfig)
|
|
if mapConfig == nil then
|
|
return 1
|
|
end
|
|
local tbParam = mapConfig.param
|
|
if tbParam == nil then
|
|
return 1
|
|
end
|
|
if mapConfig.cmd == "SetPhoneMsg" then
|
|
if self.bInChoiceMsg then
|
|
return 0
|
|
end
|
|
local nMsgType = tbParam[1]
|
|
if nMsgType == AllEnum.PhoneMsgType.ReceiveMsg or nMsgType == AllEnum.PhoneMsgType.ReceiveImgMsg then
|
|
return -1
|
|
elseif nMsgType == AllEnum.PhoneMsgType.ReplyMsg or nMsgType == AllEnum.PhoneMsgType.ReplyImgMsg then
|
|
return -2
|
|
else
|
|
return 0
|
|
end
|
|
elseif mapConfig.cmd == "SetPhoneMsgChoiceEnd" then
|
|
self.bInChoiceMsg = false
|
|
return 0
|
|
elseif mapConfig.cmd == "SetPhoneMsgChoiceJumpTo" then
|
|
if self.tbChoiceDecision[self.curContactsId] == nil then
|
|
return 1
|
|
end
|
|
local groupID = tbParam[1]
|
|
local index = tbParam[2]
|
|
for k, v in ipairs(self.tbChoiceDecision[self.curContactsId]) do
|
|
local sGroupID = v.groupID
|
|
local nChoiceIndex = v.choiceIndex
|
|
if nChoiceIndex ~= nil and sGroupID ~= nil and sGroupID == groupID then
|
|
if nChoiceIndex == index then
|
|
return 1
|
|
elseif nChoiceIndex ~= index then
|
|
self.bInChoiceMsg = true
|
|
return 0
|
|
end
|
|
end
|
|
end
|
|
return 1
|
|
elseif mapConfig.cmd == "SetPhoneMsgChoiceBegin" then
|
|
self.nAutoPlayWaiting = self.nAutoSelectionPlayWaiting
|
|
return 1
|
|
else
|
|
return 1
|
|
end
|
|
return 1
|
|
end
|
|
function Avg_5_PhoneCtrl:ClearAllInputingMsg()
|
|
if self.inputtingTimer ~= nil then
|
|
self.inputtingTimer:Cancel()
|
|
self.inputtingTimer = nil
|
|
end
|
|
self.bShowInputingWaiting = false
|
|
if self.tbMsgData[self.curContactsId] == nil or self.tbGridHeight[self.curContactsId] == nil then
|
|
return
|
|
end
|
|
for i = #self.tbMsgData[self.curContactsId], 1, -1 do
|
|
local data = self.tbMsgData[self.curContactsId][i]
|
|
if data.type == 1 and (data.msgData[1] == AllEnum.PhoneMsgType.InputingMsgLeft or data.msgData[1] == AllEnum.PhoneMsgType.InputingMsgRight) then
|
|
table.remove(self.tbMsgData[self.curContactsId], i)
|
|
table.remove(self.tbGridHeight[self.curContactsId], i)
|
|
end
|
|
end
|
|
end
|
|
function Avg_5_PhoneCtrl:SetPhone(tbParam)
|
|
local nMoveType = tbParam[1]
|
|
local bClearHistoryMsg = tbParam[2] == 0
|
|
local sContactsId = tbParam[3]
|
|
if nMoveType == 0 then
|
|
self:ResetGamepadUI()
|
|
end
|
|
if nMoveType == 1 then
|
|
self.bIsActive = false
|
|
else
|
|
self.bIsActive = true
|
|
end
|
|
if bClearHistoryMsg == true then
|
|
if self.curContactsId ~= nil then
|
|
self.tbMsgData[self.curContactsId] = {}
|
|
self.tbGridHeight[self.curContactsId] = {}
|
|
end
|
|
delChildren(self._mapNode.trContent)
|
|
end
|
|
local nDuration = 0
|
|
local recordedMsg = self.RecordMsg
|
|
self.RecordMsg = false
|
|
if nMoveType == 0 then
|
|
self:SetPhoneContacts(sContactsId)
|
|
if recordedMsg then
|
|
self:AddTimer(1, 0.1, function()
|
|
self:_PlayPhoneInOutAnim(true)
|
|
end, true, true, true)
|
|
nDuration = 1.1
|
|
else
|
|
self:_PlayPhoneInOutAnim(true)
|
|
nDuration = 1
|
|
end
|
|
elseif nMoveType == 1 then
|
|
self:_PlayPhoneInOutAnim(false)
|
|
nDuration = 0.6
|
|
elseif nMoveType == 2 then
|
|
self:_PlayPhoneHorizontalMove(true)
|
|
self:_SetReplyInputField(true)
|
|
nDuration = 0
|
|
elseif nMoveType == 3 then
|
|
self:_PlayPhoneHorizontalMove(false)
|
|
nDuration = 0.4
|
|
elseif nMoveType == 4 then
|
|
self:SetPhoneContacts(sContactsId)
|
|
self.RecordMsg = true
|
|
end
|
|
return nDuration
|
|
end
|
|
function Avg_5_PhoneCtrl:SetPhoneMsg(tbParam, bWaitRefresh, nProcess)
|
|
self:SetSelectType(SelectType.PhoneGoOn)
|
|
self:SelectUI()
|
|
if self.tbMsgData[self.curContactsId] ~= nil then
|
|
for k, v in ipairs(self.tbMsgData[self.curContactsId]) do
|
|
if nProcess ~= nil and v.nProcess ~= nil and v.nProcess == nProcess then
|
|
if bWaitRefresh ~= true then
|
|
self:_RefreshLoopSV()
|
|
end
|
|
return
|
|
end
|
|
end
|
|
end
|
|
local nMsgType = tbParam[1]
|
|
local sAvgCharId = tbParam[2]
|
|
sAvgCharId = AdjustMainRoleAvgCharId(sAvgCharId)
|
|
local sMsgContent = tbParam[3]
|
|
if nMsgType == 0 or nMsgType == 1 or nMsgType == 2 or nMsgType == 5 then
|
|
sMsgContent = ProcAvgTextContentFallback(self.sTxtLan, self._panel.sVoLan, self._panel.bIsPlayerMale, tbParam[3], tbParam[7], tbParam[8], tbParam[9])
|
|
sMsgContent = ProcAvgTextContent(sMsgContent, self._panel.nCurLanguageIdx)
|
|
end
|
|
local nImgType = tonumber(tbParam[4])
|
|
local imgSize = {}
|
|
if nMsgType == AllEnum.PhoneMsgType.ReceiveImgMsg or nMsgType == AllEnum.PhoneMsgType.ReplyImgMsg then
|
|
local path = nImgType == 1 and "Icon/AvgPhoneImageMsg/" .. sMsgContent or "Icon/AvgPhoneEmojiMsg/" .. sMsgContent
|
|
local sprite = self:GetPngSprite(path)
|
|
imgSize[2] = nImgType == 1 and CONST_WIDTH / sprite.rect.width * sprite.rect.height or sprite.rect.height
|
|
imgSize[1] = nImgType == 1 and CONST_WIDTH or sprite.rect.width
|
|
end
|
|
local voiceName = tbParam[5]
|
|
local isCanSkip = tbParam[6]
|
|
if self.tbMsgData[self.curContactsId] == nil then
|
|
self.tbMsgData[self.curContactsId] = {}
|
|
end
|
|
local data = {
|
|
type = 1,
|
|
msgData = {
|
|
nMsgType,
|
|
sAvgCharId,
|
|
sMsgContent,
|
|
false,
|
|
nImgType,
|
|
imgSize,
|
|
voiceName,
|
|
isCanSkip
|
|
},
|
|
nProcess = nProcess
|
|
}
|
|
table.insert(self.tbMsgData[self.curContactsId], data)
|
|
if self.tbGridHeight[self.curContactsId] == nil then
|
|
self.tbGridHeight[self.curContactsId] = {}
|
|
end
|
|
if nMsgType <= 2 then
|
|
table.insert(self.tbGridHeight[self.curContactsId], self:_CalcGridHeight(sMsgContent))
|
|
elseif nMsgType == AllEnum.PhoneMsgType.SystemMsg then
|
|
local nHeight = self:_CalcMsgGridHeight(sMsgContent)
|
|
table.insert(self.tbGridHeight[self.curContactsId], nHeight)
|
|
else
|
|
table.insert(self.tbGridHeight[self.curContactsId], imgSize[2])
|
|
end
|
|
local nDelayTime = 0
|
|
if nMsgType == AllEnum.PhoneMsgType.ReplyChoiceMgs then
|
|
self:_SetReplyInputField(false, 0.5)
|
|
nDelayTime = 0.5
|
|
end
|
|
if not bWaitRefresh or bWaitRefresh == nil then
|
|
if 0 < nDelayTime then
|
|
self.timerSetMsg = self:AddTimer(1, nDelayTime, "_RefreshLoopSV", true, true, true)
|
|
else
|
|
self:_RefreshLoopSV()
|
|
end
|
|
end
|
|
if not bWaitRefresh and (voiceName == nil or voiceName == "") then
|
|
if nMsgType ~= AllEnum.PhoneMsgType.ReceiveMsg and nMsgType ~= AllEnum.PhoneMsgType.ReceiveImgMsg and nMsgType ~= AllEnum.PhoneMsgType.SystemMsg then
|
|
WwiseAudioMgr:PostEvent("ui_cellphone_message_out")
|
|
elseif nMsgType == AllEnum.PhoneMsgType.SystemMsg then
|
|
WwiseAudioMgr:PostEvent("ui_cellphone_message_pop")
|
|
else
|
|
WwiseAudioMgr:PostEvent("ui_cellphone_message_in")
|
|
end
|
|
end
|
|
if nMsgType == AllEnum.PhoneMsgType.ReceiveMsg or nMsgType == AllEnum.PhoneMsgType.ReplyMsg or nMsgType == AllEnum.PhoneMsgType.ReplyChoiceMgs then
|
|
self.tbLogData.nType = AllEnum.AvgLogType.PhoneMsg
|
|
if nMsgType == AllEnum.PhoneMsgType.ReceiveMsg then
|
|
self.tbLogData.sAvgId = sAvgCharId
|
|
else
|
|
self.tbLogData.sAvgId = AdjustMainRoleAvgCharId(sAvgCharId)
|
|
end
|
|
self.tbLogData.sContent = sMsgContent
|
|
self.tbLogData.sVoice = voiceName
|
|
EventManager.Hit(EventId.AvgMarkLog, self.tbLogData)
|
|
elseif nMsgType == AllEnum.PhoneMsgType.SystemMsg then
|
|
self.tbLogData.nType = AllEnum.AvgLogType.Voiceover
|
|
self.tbLogData.sAvgId = nil
|
|
self.tbLogData.sContent = sMsgContent
|
|
self.tbLogData.sVoice = voiceName
|
|
EventManager.Hit(EventId.AvgMarkLog, self.tbLogData)
|
|
end
|
|
if self.RecordMsg then
|
|
return 0
|
|
end
|
|
return -1
|
|
end
|
|
function Avg_5_PhoneCtrl:SetPhoneThinking(tbParam)
|
|
self:SetSelectType(SelectType.ThinkingGoOn)
|
|
self:SelectUI()
|
|
self.bPhoneThinking = true
|
|
self._mapNode.animMainRole:SetTrigger("tIn")
|
|
self._mapNode.goMask:SetActive(true)
|
|
local sBody = tbParam[1]
|
|
local sFace = tbParam[2]
|
|
local sEmoji = tbParam[3]
|
|
local sContentOS = tbParam[4]
|
|
if self._panel.bIsPlayerMale == true and tbParam[5] ~= nil and tbParam[5] ~= "" then
|
|
sContentOS = tbParam[5]
|
|
end
|
|
sContentOS = ProcAvgTextContent(sContentOS, self._panel.nCurLanguageIdx)
|
|
local nTextAnimDuration = self:_CalcTextAnimDuration(sContentOS)
|
|
local twDOText = NovaAPI.DOText_RubyTMP(self._mapNode.rtmp_os, sContentOS, nTextAnimDuration)
|
|
twDOText:SetUpdate(true)
|
|
self:AddTimer(1, nTextAnimDuration, "_DelayShowThinkingBtn", true, true, true)
|
|
EventManager.Hit(EventId.AvgChoiceMainRoleOS_In, self._mapNode.trMainRole, sBody, sFace, sEmoji)
|
|
self:_PlayPhoneHorizontalMove(true)
|
|
self:_PlayPhoneScaleMove(true)
|
|
self:_SetBtnEnable(false)
|
|
return -1
|
|
end
|
|
function Avg_5_PhoneCtrl:SetPhoneContacts(sContactsId)
|
|
if sContactsId == nil then
|
|
if self.curContactsId == nil then
|
|
self.curContactsId = #self.tbMsgData + 1
|
|
end
|
|
self._mapNode.goTitle:SetActive(false)
|
|
return
|
|
end
|
|
self.curContactsId = sContactsId
|
|
local constactData = self._panel:GetAvgContactsData(tonumber(sContactsId))
|
|
if constactData == nil then
|
|
if self.curContactsId == nil then
|
|
self.curContactsId = #self.tbMsgData + 1
|
|
end
|
|
self._mapNode.goTitle:SetActive(false)
|
|
return
|
|
end
|
|
self._mapNode.goTitle:SetActive(constactData ~= sContactsId)
|
|
if constactData ~= sContactsId then
|
|
local sIcon = Avg_ProcContactsIcon_M_F(constactData.icon)
|
|
sIcon = string.gsub(sIcon, AllEnum.CharHeadIconSurfix.S, "")
|
|
self:SetPngSprite(self._mapNode.imgContactHead, sIcon, AllEnum.CharHeadIconSurfix.S)
|
|
NovaAPI.SetTMPText(self._mapNode.txtCharName, ProcAvgTextContent(constactData.name, self._panel.nCurLanguageIdx))
|
|
NovaAPI.SetTMPText(self._mapNode.txtSignature, constactData.signature)
|
|
end
|
|
end
|
|
function Avg_5_PhoneCtrl:SetPhoneMsgChoiceBegin(tbParam, bWaitRefresh, nProcess)
|
|
EventManager.Hit(EventId.AvgAllMenuBtnEnable, false)
|
|
self:SetSelectType(SelectType.ChoiceMsg)
|
|
if self.tbMsgData[self.curContactsId] ~= nil then
|
|
for k, v in ipairs(self.tbMsgData[self.curContactsId]) do
|
|
if nProcess ~= nil and v.nProcess ~= nil and v.nProcess == nProcess then
|
|
if bWaitRefresh ~= true then
|
|
self:_RefreshLoopSV()
|
|
end
|
|
return
|
|
end
|
|
end
|
|
end
|
|
local sGroupId = tbParam[1]
|
|
local tbChoices = {}
|
|
local nOffset = self._panel.bIsPlayerMale == true and 3 or 0
|
|
for i = 2, 4 do
|
|
local sChoiceContent = tbParam[i + nOffset]
|
|
if sChoiceContent == nil or sChoiceContent == "" then
|
|
sChoiceContent = tbParam[i]
|
|
end
|
|
if sChoiceContent ~= nil and sChoiceContent ~= "" then
|
|
table.insert(tbChoices, sChoiceContent)
|
|
end
|
|
end
|
|
local nMsgType = AllEnum.PhoneMsgType.ReplyMsg
|
|
if 0 < #tbChoices then
|
|
if IsStartsWith(tbChoices[1], "emoji_") then
|
|
nMsgType = AllEnum.PhoneMsgType.ReplyEmoji
|
|
elseif IsStartsWith(tbChoices[1], "pic_") then
|
|
nMsgType = AllEnum.PhoneMsgType.ReplyImgMsg
|
|
end
|
|
end
|
|
local sAvgCharId = (tbParam[8] == nil or tbParam[8] == "") and AdjustMainRoleAvgCharId() or tbParam[8]
|
|
local data = {
|
|
type = 2,
|
|
msgData = {
|
|
groupID = sGroupId,
|
|
msgType = nMsgType,
|
|
choices = tbChoices,
|
|
sAvgCharId = sAvgCharId
|
|
},
|
|
nProcess = nProcess
|
|
}
|
|
if self.tbMsgData[self.curContactsId] == nil then
|
|
self.tbMsgData[self.curContactsId] = {}
|
|
end
|
|
if self.tbGridHeight[self.curContactsId] == nil then
|
|
self.tbGridHeight[self.curContactsId] = {}
|
|
end
|
|
table.insert(self.tbMsgData[self.curContactsId], data)
|
|
if nMsgType == AllEnum.PhoneMsgType.ReplyMsg then
|
|
local nHeight = choice_selection_top + choice_selection_bottom + choice_selection_input + choice_head_offset
|
|
for _, v in ipairs(tbChoices) do
|
|
nHeight = nHeight + self:_CalcChoiceHeight(v) + choice_img_diff
|
|
end
|
|
nHeight = nHeight + choice_selection_space * (#tbChoices - 1)
|
|
table.insert(self.tbGridHeight[self.curContactsId], nHeight)
|
|
else
|
|
table.insert(self.tbGridHeight[self.curContactsId], 461)
|
|
end
|
|
if not bWaitRefresh or bWaitRefresh == nil then
|
|
self:_RefreshLoopSV()
|
|
end
|
|
NovaAPI.SetScreenSleepTimeout(false)
|
|
return -1
|
|
end
|
|
function Avg_5_PhoneCtrl:SetPhoneMsgChoiceJumpTo(tbParam)
|
|
EventManager.Hit(EventId.AvgAllMenuBtnEnable, true)
|
|
local groupID = tonumber(tbParam[1])
|
|
local index = tonumber(tbParam[2])
|
|
if self.tbChoiceDecision[self.curContactsId] == nil then
|
|
return 0
|
|
end
|
|
for k, v in ipairs(self.tbChoiceDecision[self.curContactsId]) do
|
|
local nGroupID = tonumber(v.groupID)
|
|
local nChoiceIndex = tonumber(v.choiceIndex)
|
|
if nGroupID == groupID then
|
|
if nChoiceIndex == index then
|
|
return 0
|
|
else
|
|
if self:GetPanelId() == PanelId.AvgST then
|
|
self._panel:SetPhoneMsgChoiceEnd(groupID)
|
|
return 0
|
|
end
|
|
EventManager.Hit(EventId.AvgSetToPhoneMsgChoiceEnd, groupID, self.bIsAutoPlaying)
|
|
end
|
|
end
|
|
end
|
|
EventManager.Hit("AvgCheckAutoOnOff")
|
|
return -1
|
|
end
|
|
function Avg_5_PhoneCtrl:SetPhoneMsgChoiceEnd(tbParam)
|
|
local groupID = tbParam[1]
|
|
EventManager.Hit(EventId.AvgSetToPhoneMsgChoiceEnd, groupID, self.bIsAutoPlaying)
|
|
return 0
|
|
end
|
|
function Avg_5_PhoneCtrl:SetHistoryPhoneMsg(tbMsgData, tbSelectionData)
|
|
if tbSelectionData ~= nil then
|
|
self.tbChoiceDecision[self.curContactsId] = tbSelectionData
|
|
end
|
|
for k, v in ipairs(tbMsgData) do
|
|
if v.cmd == "SetPhoneMsg" then
|
|
self:SetPhoneMsg(v.param, true, v.process)
|
|
elseif v.cmd == "SetPhoneMsgChoiceBegin" then
|
|
self:SetPhoneMsgChoiceBegin(v.param, true, v.process)
|
|
end
|
|
end
|
|
self.bRevertHistoryMsg = true
|
|
self:_RefreshLoopSV(0)
|
|
self.bRevertHistoryMsg = false
|
|
end
|
|
function Avg_5_PhoneCtrl:SetPhoneInputingMsgLeft()
|
|
local data = {
|
|
type = 1,
|
|
msgData = {
|
|
AllEnum.PhoneMsgType.InputingMsgLeft
|
|
}
|
|
}
|
|
table.insert(self.tbMsgData[self.curContactsId], data)
|
|
table.insert(self.tbGridHeight[self.curContactsId], 104)
|
|
self:_RefreshLoopSV()
|
|
self.inputtingTimer = nil
|
|
end
|
|
function Avg_5_PhoneCtrl:SetPhoneInputingMsgRight()
|
|
local data = {
|
|
type = 1,
|
|
msgData = {
|
|
AllEnum.PhoneMsgType.InputingMsgRight
|
|
}
|
|
}
|
|
table.insert(self.tbMsgData[self.curContactsId], data)
|
|
table.insert(self.tbGridHeight[self.curContactsId], 104)
|
|
self:_RefreshLoopSV()
|
|
self.inputtingTimer = nil
|
|
end
|
|
function Avg_5_PhoneCtrl:AddGamepadUINode()
|
|
if self:GetPanelId() ~= PanelId.AvgST then
|
|
return
|
|
end
|
|
GamepadUIManager.AddGamepadUINode("AVG", self:GetGamepadUINode())
|
|
end
|
|
function Avg_5_PhoneCtrl:OnBtnSelect_ChoiceMsg(btn, nIndex)
|
|
if self:GetPanelId() ~= PanelId.AvgST then
|
|
return
|
|
end
|
|
if self.nSelectIndex == nIndex then
|
|
return
|
|
end
|
|
for k, v in ipairs(self.tbSelectBtnObj) do
|
|
local goSelect = v.gameObject.transform:Find("AnimRoot/goSelect").gameObject
|
|
if k == nIndex then
|
|
if GamepadUIManager.GetCurUIType() ~= AllEnum.GamepadUIType.Other and GamepadUIManager.GetCurUIType() ~= AllEnum.GamepadUIType.Mouse then
|
|
goSelect:SetActive(true)
|
|
else
|
|
goSelect:SetActive(false)
|
|
end
|
|
elseif k == self.nSelectIndex then
|
|
goSelect:SetActive(false)
|
|
end
|
|
end
|
|
self.nSelectIndex = nIndex
|
|
end
|
|
function Avg_5_PhoneCtrl:SetSelectBtnObj(nIndex, btnObj)
|
|
if self:GetPanelId() ~= PanelId.AvgST then
|
|
return
|
|
end
|
|
if next(self.tbSelectBtnObj) == nil then
|
|
self.nSelectIndex = nIndex
|
|
end
|
|
table.insert(self.tbSelectBtnObj, btnObj)
|
|
end
|
|
function Avg_5_PhoneCtrl:SetSelectType(nType)
|
|
if self:GetPanelId() ~= PanelId.AvgST then
|
|
return
|
|
end
|
|
self.nSelectType = nType
|
|
self.tbSelectBtnObj = {}
|
|
self.nSelectIndex = 0
|
|
end
|
|
function Avg_5_PhoneCtrl:ClearSelect()
|
|
if self:GetPanelId() ~= PanelId.AvgST then
|
|
return
|
|
end
|
|
GamepadUIManager.ClearSelectedUI()
|
|
self.nSelectIndex = 0
|
|
self.tbSelectBtnObj = {}
|
|
end
|
|
function Avg_5_PhoneCtrl:SelectUI()
|
|
if self:GetPanelId() ~= PanelId.AvgST then
|
|
return
|
|
end
|
|
if self.nSelectType == SelectType.ChoiceMsg then
|
|
local nUIType = GamepadUIManager.GetCurUIType()
|
|
if nUIType ~= AllEnum.GamepadUIType.Other and nUIType ~= AllEnum.GamepadUIType.Mouse then
|
|
if self.nSelectIndex and self.nSelectIndex ~= 0 then
|
|
self.tbSelectBtnObj[self.nSelectIndex].gameObject.transform:Find("AnimRoot/goSelect").gameObject:SetActive(true)
|
|
GamepadUIManager.SetSelectedUI(self.tbSelectBtnObj[self.nSelectIndex].gameObject)
|
|
end
|
|
else
|
|
for k, _ in ipairs(self.tbSelectBtnObj) do
|
|
self.tbSelectBtnObj[k].gameObject.transform:Find("AnimRoot/goSelect").gameObject:SetActive(false)
|
|
end
|
|
end
|
|
elseif self.nSelectType == SelectType.PhoneGoOn then
|
|
GamepadUIManager.SetSelectedUI(self._mapNode.btnGoOn.gameObject)
|
|
elseif self.nSelectType == SelectType.ThinkingGoOn then
|
|
GamepadUIManager.SetSelectedUI(self._mapNode.btnThinkingGoOn.gameObject)
|
|
end
|
|
end
|
|
function Avg_5_PhoneCtrl:ResetGamepadUI()
|
|
if self:GetPanelId() ~= PanelId.AvgST then
|
|
return
|
|
end
|
|
self._panel.sCurGamepadUI = "Phone"
|
|
GamepadUIManager.ClearSelectedUI()
|
|
self.tbSelectBtnObj = {}
|
|
self.nSelectIndex = 0
|
|
self.nSelectType = SelectType.PhoneGoOn
|
|
local tbConfig = {
|
|
{
|
|
sAction = "Scroll",
|
|
sLang = "ActionBar_Scroll"
|
|
}
|
|
}
|
|
EventManager.Hit(EventId.AvgRefreshActionBar, tbConfig)
|
|
end
|
|
function Avg_5_PhoneCtrl:OnEvent_GamepadUIChange(sName, nBeforeType, nAfterType)
|
|
if self:GetPanelId() ~= PanelId.AvgST then
|
|
return
|
|
end
|
|
if sName ~= "AVG" or self._panel.sCurGamepadUI ~= "Phone" then
|
|
return
|
|
end
|
|
self:SelectUI()
|
|
end
|
|
function Avg_5_PhoneCtrl:OnEvent_Reopen(sName)
|
|
if self:GetPanelId() ~= PanelId.AvgST then
|
|
return
|
|
end
|
|
if sName ~= "AVG" or self._panel.sCurGamepadUI ~= "Phone" then
|
|
return
|
|
end
|
|
self:SelectUI()
|
|
end
|
|
return Avg_5_PhoneCtrl
|