Files
StellaSora_DataLua/lua/game/ui/phone/phonectrl.lua
T
SL1900 46f967a584 Update - 1.6.0.84
EN: 1.6.0.84
CN: 1.6.0.87
JP: 1.6.0.88
KR: 1.6.0.91
2026-02-04 13:00:00 +09:00

708 lines
24 KiB
Lua

local PhoneCtrl = class("PhoneCtrl", BaseCtrl)
local ClientManager = CS.ClientManager.Instance
local WwiseAudioMgr = CS.WwiseAudioManager.Instance
PhoneCtrl._mapNodeConfig = {
imgBlurredBg = {sComponentName = "GameObject"},
goContent = {},
animContent = {sNodeName = "goContent", sComponentName = "Animator"},
txtTime = {sComponentName = "TMP_Text"},
txtPhoneTitle = {sComponentName = "TMP_Text"},
PhoneList = {
sComponentName = "RectTransform"
},
goTop = {
sComponentName = "RectTransform"
},
addressBookListLSV = {
sComponentName = "LoopScrollView"
},
addressBookListAnim = {
sNodeName = "addressBookListLSV",
sComponentName = "Animator"
},
trAddressLSV = {
sNodeName = "addressBookListLSV",
sComponentName = "RectTransform"
},
giftListLSV = {
sComponentName = "LoopScrollView"
},
trGiftLSV = {
sNodeName = "giftListLSV",
sComponentName = "Transform"
},
datingListLSV = {
sComponentName = "LoopScrollView"
},
trDatingLSV = {
sNodeName = "datingListLSV",
sComponentName = "Transform"
},
goChat = {
sCtrlName = "Game.UI.Phone.Chat.PhoneChatCtrl"
},
goGift = {
sCtrlName = "Game.UI.Phone.Gift.PhoneGiftCtrl"
},
goDating = {
sCtrlName = "Game.UI.Phone.Dating.PhoneDatingCtrl"
},
btnClosePanel = {
sComponentName = "UIButton",
callback = "OnBtnClick_Close"
},
btnAddress = {
sComponentName = "UIButton",
callback = "OnBtnClick_Address"
},
btnDating = {
sComponentName = "UIButton",
callback = "OnBtnClick_Dating"
},
btnGift = {
sComponentName = "UIButton",
callback = "OnBtnClick_Gift"
},
togAddress = {
sNodeName = "btnAddress",
sCtrlName = "Game.UI.TemplateEx.TemplateToggleCtrl"
},
togDating = {
sNodeName = "btnDating",
sCtrlName = "Game.UI.TemplateEx.TemplateToggleCtrl"
},
togGift = {
sNodeName = "btnGift",
sCtrlName = "Game.UI.TemplateEx.TemplateToggleCtrl"
},
rtImgBtnSelect = {
sNodeName = "imgBtnSelect",
sComponentName = "RectTransform"
},
redDotChat = {},
redDotDating = {},
rtImgMsgDetail = {sComponentName = "Canvas"},
goTopTip = {},
txtTopTip = {
sComponentName = "TMP_Text",
sLanguageId = "Phone_Top_Limit_Tip"
},
btnReceiveReward = {
sComponentName = "NaviButton",
callback = "OnBtnClick_ReceiveReward"
}
}
PhoneCtrl._mapEventConfig = {
RefreshPhoneAddress = "OnEvent_RefreshPhoneAddress",
NewChatTrigger = "OnEvent_NewChatTrigger",
RefreshChatRedDot = "OnEvent_RefreshRedDot",
RefreshCharList = "OnEvent_RefreshCharList",
RefreshSortingOrder = "OnEvent_RefreshSortingOrder",
OpenEventDetailWindow = "OnEvent_OpenEventDetailWindow",
ChangePhoneListTopStatus = "OnEvent_ChangePhoneListTopStatus",
PhoneChatTopLimit = "OnEvent_PhoneChatTopLimit",
EnableReceiveChatReward = "OnEvent_EnableReceiveChatReward"
}
PhoneCtrl._mapRedDotConfig = {
[RedDotDefine.Phone_New] = {sNodeName = "redDotChat"},
[RedDotDefine.Phone_Dating] = {
sNodeName = "redDotDating"
}
}
local lsv_max_height = 1080
local tog_Chat = AllEnum.PhoneTogType.Chat
local tog_Dating = AllEnum.PhoneTogType.Dating
local tog_Gift = AllEnum.PhoneTogType.Gift
local tbTogSelectPosX = {
-208,
-0.4,
209
}
function PhoneCtrl:PlayGridOutAnim()
local sv
local sAnim = "PhonePanel_char_out"
if self.nLastTog == tog_Chat then
sv = self._mapNode.addressBookListLSV
elseif self.nLastTog == tog_Gift then
sv = self._mapNode.giftListLSV
elseif self.nLastTog == tog_Dating then
sv = self._mapNode.datingListLSV
end
if sv == nil then
return
end
local listInUse = sv:GetInUseGridIndex()
self.tbGridInUse = {}
for i = 0, listInUse.Count - 1 do
local nIndex = listInUse[i]
local goGrid = sv.transform:Find("Viewport/Content/" .. nIndex)
if goGrid then
local animRoot = goGrid.transform:Find("btnGrid/AnimRoot"):GetComponent("Animator")
animRoot:Play(sAnim, 0, 0)
end
end
end
function PhoneCtrl:PlayGridItemAnim()
local sv
local sAnim = ""
local nAnimTime = 0.1
local nItemAnimLen = 0
if self._panel.nCurTog == tog_Chat then
sv = self._mapNode.addressBookListLSV
sAnim = "PhonePanel_char_move"
elseif self._panel.nCurTog == tog_Gift then
sv = self._mapNode.giftListLSV
sAnim = "PhonePanel_char_move"
elseif self._panel.nCurTog == tog_Dating then
sv = self._mapNode.datingListLSV
sAnim = "PhonePanel_char_scale"
nAnimTime = 0.04
end
if sv == nil then
return
end
local listInUse = sv:GetInUseGridIndex()
self.tbGridInUse = {}
for i = 0, listInUse.Count - 1 do
table.insert(self.tbGridInUse, listInUse[i])
end
if self.gridItemAnimTimer ~= nil then
self.gridItemAnimTimer:Cancel()
self.gridItemAnimTimer = nil
end
for k, v in ipairs(self.tbGridInUse) do
local goGrid = sv.transform:Find("Viewport/Content/" .. v)
local animRoot = goGrid.transform:Find("btnGrid/AnimRoot"):GetComponent("Animator")
if animRoot ~= nil then
animRoot.gameObject:SetActive(false)
end
if k == 1 then
animRoot.gameObject:SetActive(true)
nItemAnimLen = NovaAPI.GetAnimClipLength(animRoot, {sAnim})
animRoot:Play(sAnim, 0, 0)
end
end
local nCurIndex = 1
EventManager.Hit(EventId.BlockInput, true)
self.gridItemAnimTimer = self:AddTimer(0, nAnimTime, function()
nCurIndex = nCurIndex + 1
if nCurIndex > #self.tbGridInUse and self.gridItemAnimTimer ~= nil then
self.gridItemAnimTimer:Cancel()
self.gridItemAnimTimer = nil
EventManager.Hit(EventId.BlockInput, false)
return
end
local goGrid = sv.transform:Find("Viewport/Content/" .. self.tbGridInUse[nCurIndex])
if goGrid ~= nil then
local animRoot = goGrid.transform:Find("btnGrid/AnimRoot"):GetComponent("Animator")
animRoot.gameObject:SetActive(true)
animRoot:Play(sAnim, 0, 0)
end
end, true, true, true)
return nAnimTime * #self.tbGridInUse + nItemAnimLen
end
function PhoneCtrl:PlayTogAnim()
local sAnim = ""
if self._panel.nCurTog == tog_Chat then
sAnim = "PhonePanel_goChat_in"
elseif self._panel.nCurTog == tog_Gift then
sAnim = "PhonePanel_goGift_in"
elseif self._panel.nCurTog == tog_Dating then
sAnim = "PhonePanel_goDating_in"
end
local nAnimeLen = NovaAPI.GetAnimClipLength(self._mapNode.animContent, {"sAnim"})
self._mapNode.animContent:Play(sAnim)
return nAnimeLen
end
function PhoneCtrl:RefreshTogInfo(bResetChar)
self._mapNode.goChat.gameObject:SetActive(self._panel.nCurTog == tog_Chat)
self._mapNode.goGift.gameObject:SetActive(self._panel.nCurTog == tog_Gift)
self._mapNode.goDating.gameObject:SetActive(self._panel.nCurTog == tog_Dating)
self._mapNode.addressBookListLSV.gameObject:SetActive(self._panel.nCurTog == tog_Chat)
self._mapNode.giftListLSV.gameObject:SetActive(self._panel.nCurTog == tog_Gift)
self._mapNode.datingListLSV.gameObject:SetActive(self._panel.nCurTog == tog_Dating)
if bResetChar then
self._panel.nSelectCharId = nil
end
if self._panel.nCurTog == tog_Chat then
if self.nSelectAddressId == nil then
self.nSelectIndex = nil
end
NovaAPI.SetTMPText(self._mapNode.txtPhoneTitle, ConfigTable.GetUIText("Phone_Tog_Chat"))
self.tbAddressBookList = PlayerData.Phone:GetAddressBookList()
self:RefreshAddressBookList(false)
self:RefreshSelectChat()
for _, v in pairs(self.tbAddressGridCtrl) do
v:RefreshRedDotShow()
end
elseif self._panel.nCurTog == tog_Gift or self._panel.nCurTog == tog_Dating then
self.nSelectIndex = 1
self._mapNode.goChat:ResetPhone()
if self._panel.nCurTog == tog_Gift then
NovaAPI.SetTMPText(self._mapNode.txtPhoneTitle, ConfigTable.GetUIText("Phone_Tog_Gift"))
self:RefreshCharList(false)
else
NovaAPI.SetTMPText(self._mapNode.txtPhoneTitle, ConfigTable.GetUIText("Phone_Tog_Dating"))
self:RefreshDatingCharList()
end
end
end
function PhoneCtrl:ChangeTog(bInit)
self._mapNode.goChat:ResetPhone()
if not bInit and self.nLastTog ~= nil then
self:PlayGridOutAnim()
local sAnim = ""
if self.nLastTog == tog_Chat then
sAnim = "PhonePanel_List_out"
else
sAnim = "PhonePanel_GiftDating_out"
end
local nAnimLength = NovaAPI.GetAnimClipLength(self._mapNode.animContent, {sAnim})
self._mapNode.animContent:Play(sAnim)
EventManager.Hit(EventId.TemporaryBlockInput, nAnimLength)
self:AddTimer(1, nAnimLength, function()
self:PlayTogAnim()
self:RefreshTogInfo(not bInit)
self:PlayGridItemAnim()
end, true, true, true)
else
self:RefreshTogInfo(not bInit)
self:PlayGridItemAnim()
end
self.nLastTog = self._panel.nCurTog
local nPosX = tbTogSelectPosX[self._panel.nCurTog]
if not bInit then
self._mapNode.rtImgBtnSelect:DOLocalMoveX(nPosX, 0.1):SetUpdate(true):SetEase(Ease.OutSine)
else
self._mapNode.rtImgBtnSelect:DOLocalMoveX(nPosX, 0):SetUpdate(true)
end
self._mapNode.togAddress:SetDefault(self._panel.nCurTog == tog_Chat)
self._mapNode.togGift:SetDefault(self._panel.nCurTog == tog_Gift)
self._mapNode.togDating:SetDefault(self._panel.nCurTog == tog_Dating)
end
function PhoneCtrl:RefreshAddressBookList(bSetTop)
for nInstanceId, objCtrl in pairs(self.tbAddressGridCtrl) do
self:UnbindCtrlByNode(objCtrl)
self.tbAddressGridCtrl[nInstanceId] = nil
end
for k, v in ipairs(self.tbAddressBookList) do
if nil == self.tbChatHistorySelect[v.nAddressId] then
local tbChatList = v.tbChatList
self.tbChatHistorySelect[v.nAddressId] = tbChatList[1].nChatId
end
if nil ~= self.nSelectAddressId and v.nAddressId == self.nSelectAddressId then
self.nSelectIndex = k
end
end
if nil == self.nSelectAddressId and nil ~= self.nSelectIndex then
self.nSelectAddressId = self.tbAddressBookList[self.nSelectIndex].nAddressId
end
local bKeepPos = self.nSelectIndex ~= 1 or bSetTop
self._mapNode.addressBookListLSV:Init(#self.tbAddressBookList, self, self.OnAddressGridRefresh, self.OnAddressGridBtnClick, bKeepPos)
end
function PhoneCtrl:RefreshSelectChat()
local mapAddressData = self.tbAddressBookList[self.nSelectIndex]
if nil ~= mapAddressData then
self._mapNode.goChat.gameObject:SetActive(true)
self._mapNode.goChat:SetChatContent(mapAddressData, self.tbChatHistorySelect[self.nSelectAddressId])
end
end
function PhoneCtrl:OnAddressGridRefresh(goGrid, gridIndex)
local nIndex = gridIndex + 1
local nInstanceID = goGrid:GetInstanceID()
if not self.tbAddressGridCtrl[nInstanceID] then
self.tbAddressGridCtrl[nInstanceID] = self:BindCtrlByNode(goGrid, "Game.UI.Phone.Chat.AddressBookItemCtrl")
end
local addressData = self.tbAddressBookList[nIndex]
if nil ~= addressData then
local nAddressId = addressData.nAddressId
self.tbAddressGridCtrl[nInstanceID]:SetAddressData(nAddressId, self.tbChatHistorySelect[nAddressId], nIndex == #self.tbAddressBookList, addressData.bTop)
if addressData.nAddressId == self.nSelectAddressId then
self.tbAddressGridCtrl[nInstanceID]:SetSelect(true)
end
end
end
function PhoneCtrl:OnAddressGridBtnClick(goGrid, gridIndex)
local nIndex = gridIndex + 1
if nIndex == self.nSelectIndex then
return
end
if self.nSelectIndex ~= nil then
local goSelect = self._mapNode.trAddressLSV:Find("Viewport/Content/" .. self.nSelectIndex - 1)
if goSelect then
self.tbAddressGridCtrl[goSelect.gameObject:GetInstanceID()]:SetSelect(false)
end
end
self.nSelectIndex = nIndex
local nInstanceId = goGrid:GetInstanceID()
self.tbAddressGridCtrl[nInstanceId]:SetSelect(true)
local addressData = self.tbAddressBookList[self.nSelectIndex]
self.nSelectAddressId = addressData.nAddressId
self._mapNode.goChat.gameObject:SetActive(true)
self._mapNode.goChat:RecordProcess()
self._mapNode.goChat:SetChatContent(addressData, self.tbChatHistorySelect[self.nSelectAddressId])
end
function PhoneCtrl:RefreshCharList(bMax)
self.mapCharList = {}
local charList = PlayerData.Char:GetDataForCharList()
for nCharId, v in pairs(charList) do
local mapCfg = ConfigTable.GetData_Character(nCharId)
if mapCfg ~= nil and mapCfg.Visible then
local affinityData = PlayerData.Char:GetCharAffinityData(nCharId)
local data = {nCharId = nCharId, affinityData = affinityData}
table.insert(self.mapCharList, data)
end
end
table.sort(self.mapCharList, function(a, b)
if a.affinityData.Level == b.affinityData.Level then
if a.affinityData.Exp == b.affinityData.Exp then
return a.nCharId < b.nCharId
end
return a.affinityData.Exp > b.affinityData.Exp
end
return a.affinityData.Level > b.affinityData.Level
end)
if self._panel.nSelectCharId == nil then
self._panel.nSelectCharId = self.mapCharList[1].nCharId
end
for k, v in ipairs(self.mapCharList) do
if self._panel.nSelectCharId ~= nil and self._panel.nSelectCharId == v.nCharId then
self.nSelectIndex = k
end
end
if not bMax then
for nInstanceId, objCtrl in pairs(self.tbGiftGridCtrl) do
self:UnbindCtrlByNode(objCtrl)
self.tbGiftGridCtrl[nInstanceId] = nil
end
local bKeepPos = self.nSelectIndex ~= 1
self._mapNode.giftListLSV:Init(#self.mapCharList, self, self.OnGiftGridRefresh, self.OnGiftGridBtnClick, bKeepPos)
end
self._mapNode.goGift:Refresh(self._panel.nSelectCharId)
if self.bSetGridPos ~= nil and self.bSetGridPos then
local wait = function()
coroutine.yield(CS.UnityEngine.WaitForSeconds(0.5))
self:SetGiftScrollGridPos()
end
cs_coroutine.start(wait)
end
end
function PhoneCtrl:OnGiftGridRefresh(goGrid, gridIndex)
local nIndex = gridIndex + 1
local nInstanceID = goGrid:GetInstanceID()
if not self.tbGiftGridCtrl[nInstanceID] then
self.tbGiftGridCtrl[nInstanceID] = self:BindCtrlByNode(goGrid, "Game.UI.Phone.Gift.GiftCharItemCtrl")
end
if self.mapCharList[nIndex] ~= nil then
local nCharId = self.mapCharList[nIndex].nCharId
self.tbGiftGridCtrl[nInstanceID]:SetGiftCharItem(nCharId)
end
if nIndex == self.nSelectIndex then
self.tbGiftGridCtrl[nInstanceID]:SetSelect(true)
end
end
function PhoneCtrl:OnGiftGridBtnClick(goGrid, gridIndex)
local nIndex = gridIndex + 1
if nIndex == self.nSelectIndex then
return
end
local goSelect = self._mapNode.trGiftLSV:Find("Viewport/Content/" .. self.nSelectIndex - 1)
if goSelect then
self.tbGiftGridCtrl[goSelect.gameObject:GetInstanceID()]:SetSelect(false)
end
self.nSelectIndex = nIndex
local nInstanceId = goGrid:GetInstanceID()
self.tbGiftGridCtrl[nInstanceId]:SetSelect(true)
self._panel.nSelectCharId = self.mapCharList[self.nSelectIndex].nCharId
self._mapNode.goGift:Refresh(self._panel.nSelectCharId)
end
function PhoneCtrl:RefreshDatingCharList()
self.mapCharList = {}
local charList = PlayerData.Char:GetDataForCharList()
for nCharId, v in pairs(charList) do
local mapCfg = ConfigTable.GetData_Character(nCharId)
if mapCfg ~= nil and mapCfg.Visible then
local affinityData = PlayerData.Char:GetCharAffinityData(nCharId)
local data = {nCharId = nCharId, affinityData = affinityData}
table.insert(self.mapCharList, data)
end
end
table.sort(self.mapCharList, function(a, b)
if a.affinityData.Level == b.affinityData.Level then
if a.affinityData.Exp == b.affinityData.Exp then
return a.nCharId < b.nCharId
end
return a.affinityData.Exp > b.affinityData.Exp
end
return a.affinityData.Level > b.affinityData.Level
end)
for nInstanceId, objCtrl in pairs(self.tbDatingGridCtrl) do
self:UnbindCtrlByNode(objCtrl)
self.tbDatingGridCtrl[nInstanceId] = nil
end
if self._panel.nSelectCharId == nil then
self._panel.nSelectCharId = self.mapCharList[1].nCharId
end
for k, v in ipairs(self.mapCharList) do
if self._panel.nSelectCharId == v.nCharId then
self.nSelectIndex = k
end
end
local bKeepPos = self.nSelectIndex ~= 1
self._mapNode.datingListLSV:Init(#self.mapCharList, self, self.OnDatingGridRefresh, self.OnDatingGridBtnClick, bKeepPos)
self._mapNode.goDating:Refresh(self._panel.nSelectCharId)
end
function PhoneCtrl:SetGiftScrollGridPos()
if self.nSelectIndex ~= nil then
self._mapNode.giftListLSV:SetScrollGridPos(self.nSelectIndex - 1, 0.5)
end
end
function PhoneCtrl:OnDatingGridRefresh(goGrid, gridIndex)
local nIndex = gridIndex + 1
local nInstanceID = goGrid:GetInstanceID()
if not self.tbDatingGridCtrl[nInstanceID] then
self.tbDatingGridCtrl[nInstanceID] = self:BindCtrlByNode(goGrid, "Game.UI.Phone.Dating.DatingCharItemCtrl")
end
if self.mapCharList[nIndex] ~= nil then
local nCharId = self.mapCharList[nIndex].nCharId
self.tbDatingGridCtrl[nInstanceID]:SetDatingCharItem(nCharId)
end
if nIndex == self.nSelectIndex then
self.tbDatingGridCtrl[nInstanceID]:SetSelect(true)
end
end
function PhoneCtrl:OnDatingGridBtnClick(goGrid, gridIndex)
local nIndex = gridIndex + 1
if nIndex == self.nSelectIndex then
return
end
local goSelect = self._mapNode.trDatingLSV:Find("Viewport/Content/" .. self.nSelectIndex - 1)
if goSelect then
self.tbDatingGridCtrl[goSelect.gameObject:GetInstanceID()]:SetSelect(false)
end
self.nSelectIndex = nIndex
local nInstanceId = goGrid:GetInstanceID()
self.tbDatingGridCtrl[nInstanceId]:SetSelect(true)
self._panel.nSelectCharId = self.mapCharList[self.nSelectIndex].nCharId
self._mapNode.goDating:Refresh(self._panel.nSelectCharId)
end
function PhoneCtrl:ShowPhoneTime()
self:SetTime()
if nil == self.phoneTimer then
self.phoneTimer = self:AddTimer(0, 1, "SetTime", true, true, true)
end
end
function PhoneCtrl:SetTime()
local curTime = ClientManager.serverTimeStamp
NovaAPI.SetTMPText(self._mapNode.txtTime, (os.date("%H:%M", curTime)))
end
function PhoneCtrl:FadeIn()
local func = function()
PlayerData.SideBanner:TryOpenSideBanner()
local mapDelay = PlayerData.Dating:GetCharFavourLevelUpDelay()
if mapDelay ~= nil then
EventManager.Hit(EventId.OpenPanel, PanelId.CharFavourLevelUp, mapDelay.nCharId, mapDelay.nCurLevel, mapDelay.nLastLevel, mapDelay.nCurExp, mapDelay.nLastExp)
PlayerData.Dating:SetCharFavourLevelUpDelay(nil)
end
end
EventManager.Hit(EventId.SetTransition, nil, func)
end
function PhoneCtrl:Awake()
self.canvas = self.gameObject:GetComponent("Canvas")
local bottomScreenPos = Vector2(0, 0)
local localPos = GameUIUtils.ScreenPointToLocalPoint(bottomScreenPos, self._mapNode.goTop)
local nHeight = math.abs(localPos.y)
nHeight = nHeight > lsv_max_height and lsv_max_height or nHeight
self._mapNode.trAddressLSV.sizeDelta = Vector2(self._mapNode.trAddressLSV.sizeDelta.x, nHeight)
self._mapNode.trGiftLSV.sizeDelta = Vector2(self._mapNode.trGiftLSV.sizeDelta.x, nHeight)
self._mapNode.trDatingLSV.sizeDelta = Vector2(self._mapNode.trDatingLSV.sizeDelta.x, nHeight)
self._mapNode.togAddress:SetText(ConfigTable.GetUIText("Phone_Tog_Chat"))
self._mapNode.togDating:SetText(ConfigTable.GetUIText("Phone_Tog_Dating"))
self._mapNode.togGift:SetText(ConfigTable.GetUIText("Phone_Tog_Gift"))
self.nLastTog = nil
local tbParam = self:GetPanelParam()
if nil ~= tbParam and nil ~= tbParam[1] then
self._panel.nCurTog = tbParam[1]
if nil ~= tbParam[2] then
self._panel.nSelectCharId = tbParam[2]
end
self.bSetGridPos = tbParam[3]
end
end
function PhoneCtrl:OnEnable()
PanelManager.SetMainViewSkipAnimIn(true)
local sortingOrder = NovaAPI.GetCanvasSortingOrder(self.gameObject:GetComponent("Canvas"))
local nId = CS.UnityEngine.SortingLayer.NameToID(AllEnum.SortingLayerName.UI)
NovaAPI.SetCanvasSortingId(self._mapNode.rtImgMsgDetail, nId)
NovaAPI.SetCanvasSortingOrder(self._mapNode.rtImgMsgDetail, sortingOrder + 1)
self.tbAddressBookList = {}
self.tbAddressGridCtrl = {}
self.tbGiftGridCtrl = {}
self.tbDatingGridCtrl = {}
self.tbChatHistorySelect = {}
self.phoneTimer = nil
self._mapNode.goContent.gameObject:SetActive(false)
self._mapNode.imgBlurredBg.gameObject:SetActive(false)
self._mapNode.btnReceiveReward.gameObject:SetActive(false)
local wait = function()
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
self._mapNode.goContent.gameObject:SetActive(true)
if self._panel.nCurTog == nil then
self._panel.nCurTog = tog_Chat
end
if self._panel.nCurTog == tog_Chat then
self._mapNode.animContent:Play("PhonePanel_in", 0, 0)
elseif self._panel.nCurTog == tog_Dating then
self._mapNode.animContent:Play("PhonePanel_Dating_in", 0, 0)
elseif self._panel.nCurTog == tog_Gift then
self._mapNode.animContent:Play("PhonePanel_Gift_in", 0, 0)
end
local nAnimLength = NovaAPI.GetAnimClipLength(self._mapNode.animContent, {
"PhonePanel_in"
})
EventManager.Hit(EventId.TemporaryBlockInput, nAnimLength)
self._mapNode.goChat.gameObject:SetActive(false)
self:ChangeTog(true)
self:ShowPhoneTime()
end
cs_coroutine.start(wait)
end
function PhoneCtrl:OnDisable()
for nInstanceId, objCtrl in pairs(self.tbAddressGridCtrl) do
self:UnbindCtrlByNode(objCtrl)
self.tbAddressGridCtrl[nInstanceId] = nil
end
self.tbAddressGridCtrl = {}
for nInstanceId, objCtrl in pairs(self.tbGiftGridCtrl) do
self:UnbindCtrlByNode(objCtrl)
self.tbGiftGridCtrl[nInstanceId] = nil
end
self.tbGiftGridCtrl = {}
for nInstanceId, objCtrl in pairs(self.tbDatingGridCtrl) do
self:UnbindCtrlByNode(objCtrl)
self.tbDatingGridCtrl[nInstanceId] = nil
end
self.tbDatingGridCtrl = {}
self.phoneTimer = nil
end
function PhoneCtrl:OnDestroy()
end
function PhoneCtrl:OnBtnClick_Close()
local nAnimLength = NovaAPI.GetAnimClipLength(self._mapNode.animContent, {
"PhonePanel_out"
})
self._mapNode.animContent:Play("PhonePanel_out")
EventManager.Hit(EventId.TemporaryBlockInput, nAnimLength)
self:AddTimer(1, nAnimLength, function()
EventManager.Hit(EventId.ClosePanel, PanelId.Phone)
end, true, true, true, true)
end
function PhoneCtrl:OnBtnClick_Address()
if self._panel.nCurTog == tog_Chat then
return
end
self._panel.nCurTog = tog_Chat
self:ChangeTog()
end
function PhoneCtrl:OnBtnClick_Dating()
if self._panel.nCurTog == tog_Dating then
return
end
self._panel.nCurTog = tog_Dating
self:ChangeTog()
end
function PhoneCtrl:OnBtnClick_Gift()
if self._panel.nCurTog == tog_Gift then
return
end
self._panel.nCurTog = tog_Gift
self:ChangeTog()
end
function PhoneCtrl:OnEvent_RefreshPhoneAddress(nChatId, bRefreshContent)
self.tbChatHistorySelect[self.nSelectAddressId] = nChatId
if bRefreshContent == true then
self._mapNode.goChat:RefreshChatContent(nChatId, true)
end
local goSelect = self._mapNode.trAddressLSV:Find("Viewport/Content/" .. self.nSelectIndex - 1)
if goSelect then
self.tbAddressGridCtrl[goSelect.gameObject:GetInstanceID()]:RefreshChatContent(nChatId)
end
for _, v in pairs(self.tbAddressGridCtrl) do
v:RefreshRedDotShow()
end
end
function PhoneCtrl:OnEvent_NewChatTrigger(nAddressId, nChatId)
if self._panel.nCurTog ~= tog_Chat then
return
end
self._mapNode.goChat:ResetPhone()
local newAddressData = PlayerData.Phone:GetAddressBookData(nAddressId)
local tbNewAddress = {}
if newAddressData.bTop == true then
tbNewAddress = PlayerData.Phone:GetAddressBookList()
else
for _, v in ipairs(self.tbAddressBookList) do
if v.nAddressId ~= nAddressId then
table.insert(tbNewAddress, v)
end
end
local nTopCount = PlayerData.Phone:GetTopCount()
table.insert(tbNewAddress, nTopCount + 1, newAddressData)
end
self.nSelectAddressId = nAddressId
self.tbAddressBookList = tbNewAddress
self.nSelectAddressId = nAddressId
self:RefreshAddressBookList(false)
self._mapNode.goChat:SetChatContent(newAddressData, nChatId)
self:OnEvent_RefreshPhoneAddress(nChatId, false)
WwiseAudioMgr:PostEvent("ui_cellphone_message_pop")
end
function PhoneCtrl:OnEvent_RefreshRedDot()
for _, v in pairs(self.tbAddressGridCtrl) do
v:RefreshRedDotShow()
end
end
function PhoneCtrl:OnEvent_RefreshCharList(bMax)
if self._panel.nCurTog == tog_Gift then
self:RefreshCharList(bMax)
end
end
function PhoneCtrl:OnEvent_RefreshSortingOrder(nValue)
if nValue ~= nil then
NovaAPI.SetCanvasSortingOrder(self.canvas, nValue)
else
NovaAPI.SetCanvasSortingOrder(self.canvas, self._nSortingOrder)
end
end
function PhoneCtrl:OnEvent_OpenEventDetailWindow(bOpen)
self._mapNode.btnClosePanel.gameObject:SetActive(not bOpen)
end
function PhoneCtrl:OnEvent_ChangePhoneListTopStatus(nAddressId, bTop)
PlayerData.Phone:SetPhoneTopStatus(nAddressId, bTop)
self.tbAddressBookList = PlayerData.Phone:GetAddressBookList()
self:RefreshAddressBookList(true)
for nIdx, v in ipairs(self.tbAddressBookList) do
if v.nAddressId == nAddressId then
self._mapNode.addressBookListLSV:SetScrollGridPos(nIdx - 1, 0.5)
return
end
end
end
function PhoneCtrl:OnEvent_PhoneChatTopLimit()
if self._mapNode.goTopTip.activeInHierarchy then
return
end
self._mapNode.goTopTip:SetActive(true)
self._mapNode.addressBookListAnim:Play("TemplateTip_in")
self:AddTimer(1, 1, function()
self._mapNode.addressBookListAnim:Play("TemplateTip_out")
end, true, true, true)
end
function PhoneCtrl:OnEvent_EnableReceiveChatReward(bEnable)
self._mapNode.btnReceiveReward.gameObject:SetActive(bEnable)
end
function PhoneCtrl:OnBtnClick_ReceiveReward()
EventManager.Hit("ReceiveChatReward")
end
return PhoneCtrl