5f417fbe9d
EN: 1.3.0.69 CN: 1.3.0.70 JP: 1.3.0.72 KR: 1.3.0.76
244 lines
7.9 KiB
Lua
244 lines
7.9 KiB
Lua
local DictionaryEntryCtrl = class("DictionaryEntryCtrl", BaseCtrl)
|
|
local AdventureModuleHelper = CS.AdventureModuleHelper
|
|
local Time = CS.UnityEngine.Time
|
|
local ModuleManager = require("GameCore.Module.ModuleManager")
|
|
local WwiseAudioMgr = CS.WwiseAudioManager.Instance
|
|
local GamepadUIManager = require("GameCore.Module.GamepadUIManager")
|
|
DictionaryEntryCtrl._mapNodeConfig = {
|
|
Mask = {sComponentName = "Image"},
|
|
blur = {
|
|
sNodeName = "t_fullscreen_blur_blue"
|
|
},
|
|
aniBlur = {
|
|
sNodeName = "t_fullscreen_blur_blue",
|
|
sComponentName = "Animator"
|
|
},
|
|
btnBlur = {
|
|
sNodeName = "snapshot",
|
|
sComponentName = "Button",
|
|
callback = "OnBtnClick_Close"
|
|
},
|
|
btnClose = {
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_Close"
|
|
},
|
|
txtTop = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Dictionary_Included_Desc"
|
|
},
|
|
imgTop = {},
|
|
btnShortcutClose = {
|
|
sComponentName = "NaviButton",
|
|
callback = "OnBtnClick_Close"
|
|
},
|
|
imgClose = {},
|
|
aniEntry = {sComponentName = "Animator"},
|
|
cvBase = {
|
|
sNodeName = "goEntryBase",
|
|
sComponentName = "Canvas"
|
|
},
|
|
cvAni = {sNodeName = "goEntryAni", sComponentName = "Canvas"},
|
|
cgEntryAni = {
|
|
sNodeName = "goEntryAni",
|
|
sComponentName = "CanvasGroup"
|
|
},
|
|
goType = {nCount = 4},
|
|
imgEntry = {nCount = 2, sComponentName = "Image"},
|
|
txtEntryTitle = {nCount = 4, sComponentName = "TMP_Text"},
|
|
txtEntryDesc = {nCount = 4, sComponentName = "TMP_Text"},
|
|
rtPoint = {sComponentName = "Transform"},
|
|
goPoint = {},
|
|
btnPre = {
|
|
sComponentName = "NaviButton",
|
|
callback = "OnBtnClick_Pre"
|
|
},
|
|
btnNext = {
|
|
sComponentName = "NaviButton",
|
|
callback = "OnBtnClick_Next"
|
|
},
|
|
txtBtnPre = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Dictionary_Btn_Pre"
|
|
},
|
|
txtBtnNext = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Dictionary_Btn_Next"
|
|
},
|
|
aniRoot = {
|
|
sNodeName = "----SafeAreaRoot----",
|
|
sComponentName = "Animator"
|
|
}
|
|
}
|
|
DictionaryEntryCtrl._mapEventConfig = {}
|
|
function DictionaryEntryCtrl:Open()
|
|
NovaAPI.SetImageColor(self._mapNode.Mask, self.bGuide and Color(0, 0, 0, 0.6509803921568628) or Color(0.25098039215686274, 0.2784313725490196, 0.2980392156862745, 0.34901960784313724))
|
|
local bHasEntry = ConfigTable.GetData("DictionaryEntry", self.nEntryId, true) ~= nil
|
|
self._mapNode.imgTop:SetActive(bHasEntry)
|
|
self:InitSort()
|
|
self:Pause()
|
|
self:PlayInAni()
|
|
self:RefreshData()
|
|
self:RefreshPoint()
|
|
self:RefreshDiagram()
|
|
end
|
|
function DictionaryEntryCtrl:PlayInAni()
|
|
self._mapNode.blur:SetActive(true)
|
|
self._mapNode.aniRoot:Play("DictionaryEntry_in")
|
|
EventManager.Hit(EventId.TemporaryBlockInput, 0.3)
|
|
end
|
|
function DictionaryEntryCtrl:RefreshData()
|
|
local mapCfg = ConfigTable.GetData("DictionaryTopBarEntry", self.nEntryId)
|
|
self.tbDiagram = mapCfg.DiagramList
|
|
self.nDiagramCount = #self.tbDiagram
|
|
self.nPage = 1
|
|
self.tbPoint = {}
|
|
end
|
|
function DictionaryEntryCtrl:RefreshDiagram()
|
|
local mapCfg = ConfigTable.GetData("DictionaryDiagram", self.tbDiagram[self.nPage])
|
|
for i = 1, 2 do
|
|
NovaAPI.SetTMPText(self._mapNode.txtEntryTitle[i], mapCfg.Title)
|
|
NovaAPI.SetTMPText(self._mapNode.txtEntryDesc[i], mapCfg.Desc)
|
|
end
|
|
if mapCfg.Icon ~= "" then
|
|
self._mapNode.goType[1]:SetActive(true)
|
|
self._mapNode.goType[2]:SetActive(false)
|
|
self:SetPngSprite(self._mapNode.imgEntry[1], mapCfg.Icon)
|
|
else
|
|
self._mapNode.goType[1]:SetActive(false)
|
|
self._mapNode.goType[2]:SetActive(true)
|
|
end
|
|
self._mapNode.btnPre.gameObject:SetActive(self.nPage ~= 1)
|
|
if self.nPage == self.nDiagramCount then
|
|
self._mapNode.btnNext.gameObject:SetActive(false)
|
|
self._mapNode.btnShortcutClose.gameObject:SetActive(GamepadUIManager.GetInputState())
|
|
else
|
|
self._mapNode.btnShortcutClose.gameObject:SetActive(false)
|
|
self._mapNode.btnNext.gameObject:SetActive(true)
|
|
end
|
|
if 1 < self.nDiagramCount then
|
|
for i = 1, self.nDiagramCount do
|
|
local imgOn = self.tbPoint[i].transform:Find("imgOn").gameObject
|
|
local imgOff = self.tbPoint[i].transform:Find("imgOff").gameObject
|
|
imgOn:SetActive(i == self.nPage)
|
|
imgOff:SetActive(i ~= self.nPage)
|
|
end
|
|
end
|
|
if GamepadUIManager.GetInputState() then
|
|
self._mapNode.btnClose.gameObject:SetActive(self.nDiagramCount == 1)
|
|
self._mapNode.imgClose.gameObject:SetActive(self.nDiagramCount == 1)
|
|
else
|
|
NovaAPI.SetNaviButtonAction(self._mapNode.btnNext, false)
|
|
NovaAPI.SetNaviButtonAction(self._mapNode.btnPre, false)
|
|
end
|
|
end
|
|
function DictionaryEntryCtrl:RefreshAniDiagram(bNext)
|
|
self:RefreshSort(bNext)
|
|
local mapCfg = ConfigTable.GetData("DictionaryDiagram", self.tbDiagram[self.nPage])
|
|
for i = 3, 4 do
|
|
NovaAPI.SetTMPText(self._mapNode.txtEntryTitle[i], mapCfg.Title)
|
|
NovaAPI.SetTMPText(self._mapNode.txtEntryDesc[i], mapCfg.Desc)
|
|
end
|
|
if mapCfg.Icon ~= "" then
|
|
self._mapNode.goType[3]:SetActive(true)
|
|
self._mapNode.goType[4]:SetActive(false)
|
|
self:SetPngSprite(self._mapNode.imgEntry[2], mapCfg.Icon)
|
|
else
|
|
self._mapNode.goType[3]:SetActive(false)
|
|
self._mapNode.goType[4]:SetActive(true)
|
|
end
|
|
end
|
|
function DictionaryEntryCtrl:RefreshPoint()
|
|
delChildren(self._mapNode.rtPoint)
|
|
if self.nDiagramCount == 1 then
|
|
return
|
|
end
|
|
for i = 1, self.nDiagramCount do
|
|
local goItemObj = instantiate(self._mapNode.goPoint, self._mapNode.rtPoint)
|
|
goItemObj:SetActive(true)
|
|
self.tbPoint[i] = goItemObj
|
|
end
|
|
end
|
|
function DictionaryEntryCtrl:Pause()
|
|
if ModuleManager.GetIsAdventure() then
|
|
EventManager.Hit(EventId.BattleDashboardVisible, false)
|
|
PanelManager.InputDisable()
|
|
else
|
|
Time.timeScale = 0
|
|
end
|
|
end
|
|
function DictionaryEntryCtrl:Resume()
|
|
if ModuleManager.GetIsAdventure() then
|
|
EventManager.Hit(EventId.BattleDashboardVisible, true)
|
|
PanelManager.InputEnable()
|
|
else
|
|
Time.timeScale = 1
|
|
end
|
|
end
|
|
function DictionaryEntryCtrl:InitSort()
|
|
self.sortingOrder = NovaAPI.GetCanvasSortingOrder(self.gameObject:GetComponent("Canvas"))
|
|
local nId = CS.UnityEngine.SortingLayer.NameToID(AllEnum.SortingLayerName.UI_Top)
|
|
NovaAPI.SetCanvasSortingId(self._mapNode.cvBase, nId)
|
|
NovaAPI.SetCanvasSortingId(self._mapNode.cvAni, nId)
|
|
self:RefreshSort(true)
|
|
end
|
|
function DictionaryEntryCtrl:RefreshSort(bNext)
|
|
NovaAPI.SetCanvasSortingOrder(self._mapNode.cvBase, bNext and self.sortingOrder or self.sortingOrder + 1)
|
|
NovaAPI.SetCanvasSortingOrder(self._mapNode.cvAni, bNext and self.sortingOrder + 1 or self.sortingOrder)
|
|
end
|
|
function DictionaryEntryCtrl:Awake()
|
|
local tbParam = self:GetPanelParam()
|
|
if type(tbParam) == "table" then
|
|
self.nEntryId = tbParam[1]
|
|
self.bGuide = tbParam[2]
|
|
end
|
|
self.tbGamepadUINode = self:GetGamepadUINode()
|
|
local bGamepad = GamepadUIManager.GetInputState()
|
|
self._mapNode.btnClose.gameObject:SetActive(not bGamepad)
|
|
self._mapNode.imgClose.gameObject:SetActive(not bGamepad)
|
|
self._mapNode.btnShortcutClose.gameObject:SetActive(bGamepad)
|
|
end
|
|
function DictionaryEntryCtrl:OnEnable()
|
|
self:Open()
|
|
if GamepadUIManager.GetInputState() then
|
|
GamepadUIManager.EnableGamepadUI("DictionaryEntryCtrl", self.tbGamepadUINode)
|
|
else
|
|
for _, v in pairs(self.tbGamepadUINode) do
|
|
if v.sComponentName == "NaviButton" then
|
|
NovaAPI.SetNaviButtonAction(v.mapNode, false)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
function DictionaryEntryCtrl:OnDisable()
|
|
EventManager.Hit("CloseDictionaryEntry")
|
|
if GamepadUIManager.GetInputState() then
|
|
GamepadUIManager.DisableGamepadUI("DictionaryEntryCtrl")
|
|
end
|
|
end
|
|
function DictionaryEntryCtrl:OnDestroy()
|
|
end
|
|
function DictionaryEntryCtrl:OnBtnClick_Close()
|
|
self._mapNode.aniRoot:Play("DictionaryEntry_out")
|
|
self._mapNode.aniBlur:SetTrigger("tOut")
|
|
self:AddTimer(1, 0.3, function()
|
|
self:Resume()
|
|
EventManager.Hit(EventId.ClosePanel, PanelId.DictionaryEntry)
|
|
end, true, true, true)
|
|
EventManager.Hit(EventId.TemporaryBlockInput, 0.3)
|
|
end
|
|
function DictionaryEntryCtrl:OnBtnClick_Pre(btn)
|
|
self:RefreshAniDiagram(false)
|
|
self.nPage = self.nPage - 1
|
|
self:RefreshDiagram()
|
|
self._mapNode.aniEntry:Play("DictionaryPanel_turn_up", 0, 0)
|
|
WwiseAudioMgr:PlaySound("ui_dictionary_page")
|
|
end
|
|
function DictionaryEntryCtrl:OnBtnClick_Next(btn)
|
|
self:RefreshAniDiagram(true)
|
|
self.nPage = self.nPage + 1
|
|
self:RefreshDiagram()
|
|
self._mapNode.aniEntry:Play("DictionaryPanel_turn_down", 0, 0)
|
|
WwiseAudioMgr:PlaySound("ui_dictionary_page")
|
|
end
|
|
return DictionaryEntryCtrl
|