35c8d87e86
EN: 1.4.0.73 CN: 1.4.0.74 JP: 1.4.0.77 KR: 1.4.0.80
260 lines
8.7 KiB
Lua
260 lines
8.7 KiB
Lua
local VampireLevelSelect_talentCtrl = class("VampireLevelSelect_talentCtrl", BaseCtrl)
|
|
VampireLevelSelect_talentCtrl._mapNodeConfig = {
|
|
TMPTalentTitle = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Vampire_Talent_Point"
|
|
},
|
|
TMPEmptyTitle = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "VampireTalent_EmptyAttr"
|
|
},
|
|
TMPTalentPointHint = {sComponentName = "TMP_Text"},
|
|
imgTitleTalentBg = {},
|
|
TMPAttrTitle = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Vampire_Talent_Attr"
|
|
},
|
|
txtBtnResetTalent = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Vampire_Talent_Reset"
|
|
},
|
|
rtTalentIcon = {
|
|
sCtrlName = "Game.UI.VampireLevelSelect.VampireLevelSelect_talent_iconGridCtrl"
|
|
},
|
|
lsvTalentNodes = {
|
|
sCtrlName = "Game.UI.VampireLevelSelect.VampireLevelSelect_talentListCtrl"
|
|
},
|
|
svAttrList = {sComponentName = "ScrollRect"},
|
|
TMPTitle1 = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "VampireTalent_State1"
|
|
},
|
|
TMPTitle2 = {sComponentName = "TMP_Text"},
|
|
TMPTitle3 = {sComponentName = "TMP_Text"},
|
|
TMPTitle4 = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "VampireTalent_State4"
|
|
},
|
|
TMPTitle5 = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "VampireTalent_State5"
|
|
},
|
|
rtLock = {},
|
|
rtActive = {},
|
|
rtActived = {},
|
|
TMPTalentName = {sComponentName = "TMP_Text"},
|
|
TMPFateCardInfo = {sComponentName = "TMP_Text"},
|
|
TMPTalentPoint = {sComponentName = "TMP_Text"},
|
|
btnActiveTalent = {
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_ActiveTalent"
|
|
},
|
|
btnResetTalent = {
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_ResetTalent"
|
|
},
|
|
gridText = {},
|
|
ContentAttr = {sComponentName = "Transform"},
|
|
btnTalentTips = {
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_TalentTips"
|
|
},
|
|
rtTalentPointHint = {
|
|
sCtrlName = "Game.UI.VampireLevelSelect.VampireLevelSelect_TalentPointHintCtrl"
|
|
}
|
|
}
|
|
VampireLevelSelect_talentCtrl._mapEventConfig = {
|
|
VampireTalent_ClickNode = "OnEvent_ClickNode"
|
|
}
|
|
VampireLevelSelect_talentCtrl._mapRedDotConfig = {}
|
|
function VampireLevelSelect_talentCtrl:Awake()
|
|
end
|
|
function VampireLevelSelect_talentCtrl:FadeIn()
|
|
end
|
|
function VampireLevelSelect_talentCtrl:FadeOut()
|
|
end
|
|
function VampireLevelSelect_talentCtrl:OnEnable()
|
|
self._mapNode.rtTalentPointHint.gameObject:SetActive(false)
|
|
self._mapNode.lsvTalentNodes:InitList()
|
|
local nFateCardPoint = ConfigTable.GetConfigNumber("FateCardBookToVampireTalentPoint")
|
|
if nFateCardPoint == nil then
|
|
nFateCardPoint = 1
|
|
end
|
|
if PlayerData.VampireSurvivor:GetIsTalentPointMax() then
|
|
NovaAPI.SetTMPText(self._mapNode.TMPTalentPointHint, ConfigTable.GetUIText("VampireTalent_FateCardTrans_TalentPointMaxCount"))
|
|
else
|
|
NovaAPI.SetTMPText(self._mapNode.TMPTalentPointHint, orderedFormat(ConfigTable.GetUIText("VampireTalent_FateCardHint") or "", nFateCardPoint))
|
|
end
|
|
end
|
|
function VampireLevelSelect_talentCtrl:OnDisable()
|
|
end
|
|
function VampireLevelSelect_talentCtrl:OnDestroy()
|
|
end
|
|
function VampireLevelSelect_talentCtrl:OnRelease()
|
|
end
|
|
function VampireLevelSelect_talentCtrl:Refresh(nTalentId)
|
|
local nCur = PlayerData.VampireSurvivor:GetCurTalentPoint()
|
|
NovaAPI.SetTMPText(self._mapNode.TMPTalentPoint, tostring(nCur))
|
|
local tbActivedTalent = PlayerData.VampireSurvivor:GetActivedTalent()
|
|
local tbAttr, nAnimIdx = self:SubTalentDesc(tbActivedTalent, nTalentId)
|
|
delChildren(self._mapNode.ContentAttr)
|
|
self._mapNode.TMPEmptyTitle.gameObject:SetActive(#tbAttr == 0)
|
|
self._mapNode.btnResetTalent.gameObject:SetActive(0 < #tbAttr)
|
|
self._mapNode.imgTitleTalentBg:SetActive(0 < #tbAttr)
|
|
for nIdx, tbString in ipairs(tbAttr) do
|
|
local go = instantiate(self._mapNode.gridText, self._mapNode.ContentAttr)
|
|
go:SetActive(true)
|
|
local goTMP = go.transform:Find("TMPText"):GetComponent("TMP_Text")
|
|
if nIdx == nAnimIdx then
|
|
local fx = go.transform:Find("FX")
|
|
fx.gameObject:SetActive(true)
|
|
end
|
|
NovaAPI.SetTMPText(goTMP, tbString[2])
|
|
end
|
|
if nAnimIdx ~= nil then
|
|
if nAnimIdx > #tbAttr * 0.5 then
|
|
NovaAPI.SetVerticalNormalizedPosition(self._mapNode.svAttrList, 0)
|
|
else
|
|
NovaAPI.SetVerticalNormalizedPosition(self._mapNode.svAttrList, 1)
|
|
end
|
|
end
|
|
end
|
|
function VampireLevelSelect_talentCtrl:SubTalentDesc(tbAllActivedTalent, nAnimTalentId)
|
|
local ret = {}
|
|
local mapDic = {}
|
|
local nAnimTag = 0
|
|
for _, nTalentId in ipairs(tbAllActivedTalent) do
|
|
local mapData = ConfigTable.GetData("VampireTalent", nTalentId)
|
|
if mapData ~= nil then
|
|
local nTagId = mapData.DescTag
|
|
if nTalentId == nAnimTalentId then
|
|
nAnimTag = nTagId
|
|
end
|
|
if mapDic[nTagId] == nil then
|
|
mapDic[nTagId] = 0
|
|
end
|
|
if 0 <= mapData.Param then
|
|
mapDic[nTagId] = mapDic[nTagId] + mapData.Param
|
|
elseif mapDic[nTagId] > mapData.Param then
|
|
mapDic[nTagId] = mapData.Param
|
|
end
|
|
end
|
|
end
|
|
local retIdx = 0
|
|
for nTagId, nParam in pairs(mapDic) do
|
|
if 0 <= nParam then
|
|
local mapDesc = ConfigTable.GetData("VampireTalentDesc", nTagId)
|
|
local nStr = string.format(mapDesc.Num, nParam)
|
|
table.insert(ret, {nTagId, nStr})
|
|
else
|
|
local mapDesc = ConfigTable.GetData("VampireTalentDesc", nTagId * 100 - nParam)
|
|
table.insert(ret, {
|
|
nTagId,
|
|
mapDesc.Num
|
|
})
|
|
end
|
|
end
|
|
local srot = function(tbDataA, tbDataB)
|
|
return tbDataA[1] < tbDataB[1]
|
|
end
|
|
table.sort(ret, srot)
|
|
for idx, tbData in ipairs(ret) do
|
|
if nAnimTag == tbData[1] then
|
|
retIdx = idx
|
|
end
|
|
end
|
|
return ret, retIdx
|
|
end
|
|
function VampireLevelSelect_talentCtrl:SubSingleDesc(nTalentId)
|
|
local mapData = ConfigTable.GetData("VampireTalent", nTalentId)
|
|
if mapData ~= nil then
|
|
if mapData.Param >= 0 then
|
|
local nTagId = mapData.DescTag
|
|
local mapDesc = ConfigTable.GetData("VampireTalentDesc", nTagId)
|
|
if mapDesc ~= nil then
|
|
local Str = string.format(mapDesc.Num, mapData.Param)
|
|
return Str
|
|
end
|
|
else
|
|
local nTagId = mapData.DescTag
|
|
local mapDesc = ConfigTable.GetData("VampireTalentDesc", nTagId * 100 - mapData.Param)
|
|
if mapDesc ~= nil then
|
|
local Str = mapDesc.Num
|
|
return Str
|
|
end
|
|
end
|
|
end
|
|
return ""
|
|
end
|
|
function VampireLevelSelect_talentCtrl:OpenHint(nCard, nExp)
|
|
self._mapNode.rtTalentPointHint:OpenHint(nCard, nExp)
|
|
end
|
|
function VampireLevelSelect_talentCtrl:OnEvent_ClickNode(nTalentId)
|
|
self.nCurTalent = nTalentId
|
|
local mapTalentData = ConfigTable.GetData("VampireTalent", nTalentId)
|
|
local nState = PlayerData.VampireSurvivor:IsActiveTalent(nTalentId)
|
|
self._mapNode.rtTalentIcon:SetTalent(nTalentId)
|
|
self._mapNode.rtTalentIcon:SetState(nState)
|
|
NovaAPI.SetTMPText(self._mapNode.TMPTalentName, mapTalentData.Name)
|
|
NovaAPI.SetTMPText(self._mapNode.TMPFateCardInfo, self:SubSingleDesc(nTalentId))
|
|
if nState == 3 then
|
|
NovaAPI.SetTMPText(self._mapNode.TMPTitle2, ConfigTable.GetUIText("VampireTalent_State6"))
|
|
self._mapNode.rtLock:SetActive(true)
|
|
self._mapNode.rtActive:SetActive(false)
|
|
self._mapNode.rtActived:SetActive(false)
|
|
elseif nState == 2 then
|
|
local nCost = mapTalentData.Point
|
|
local nCur = PlayerData.VampireSurvivor:GetCurTalentPoint()
|
|
if nCost <= nCur then
|
|
self._mapNode.rtLock:SetActive(false)
|
|
self._mapNode.rtActive:SetActive(true)
|
|
self._mapNode.rtActived:SetActive(false)
|
|
local str = orderedFormat(ConfigTable.GetUIText("VampireTalent_State3"), nCost)
|
|
NovaAPI.SetTMPText(self._mapNode.TMPTitle3, str)
|
|
else
|
|
self._mapNode.rtLock:SetActive(true)
|
|
self._mapNode.rtActive:SetActive(false)
|
|
self._mapNode.rtActived:SetActive(false)
|
|
local str = orderedFormat(ConfigTable.GetUIText("VampireTalent_State2"), nCur, nCost)
|
|
NovaAPI.SetTMPText(self._mapNode.TMPTitle2, str)
|
|
end
|
|
else
|
|
self._mapNode.rtLock:SetActive(false)
|
|
self._mapNode.rtActive:SetActive(false)
|
|
self._mapNode.rtActived:SetActive(true)
|
|
end
|
|
end
|
|
function VampireLevelSelect_talentCtrl:OnBtnClick_ActiveTalent()
|
|
if self.nCurTalent ~= nil then
|
|
local callback = function(nTalentId)
|
|
self:Refresh(nTalentId)
|
|
self._mapNode.lsvTalentNodes:RefreshList(nTalentId)
|
|
self:OnEvent_ClickNode(self.nCurTalent)
|
|
local WwiseManger = CS.WwiseAudioManager.Instance
|
|
WwiseManger:PostEvent("ui_vampire_talent_refresh")
|
|
PlayerData.Voice:PlayCharVoice("thankLvup", 9102, nil, true)
|
|
end
|
|
PlayerData.VampireSurvivor:ActiveTalent(self.nCurTalent, callback)
|
|
end
|
|
end
|
|
function VampireLevelSelect_talentCtrl:OnBtnClick_ResetTalent()
|
|
local callback = function()
|
|
self:Refresh()
|
|
self._mapNode.lsvTalentNodes:RefreshList(0)
|
|
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Vampire_Talent_Reset_Tips"))
|
|
self:OnEvent_ClickNode(1)
|
|
end
|
|
local msg = {
|
|
nType = AllEnum.MessageBox.Confirm,
|
|
sContent = ConfigTable.GetUIText("VampireTalent_ResetConfirm"),
|
|
callbackConfirm = function()
|
|
PlayerData.VampireSurvivor:ResetTalent(callback)
|
|
end
|
|
}
|
|
EventManager.Hit(EventId.OpenMessageBox, msg)
|
|
end
|
|
function VampireLevelSelect_talentCtrl:OnBtnClick_TalentTips()
|
|
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Vampire_Talent_Tips"))
|
|
end
|
|
return VampireLevelSelect_talentCtrl
|