Initial version - 1.2.0.60

EN: 1.2.0.60
CN: 1.2.0.61
JP: 1.2.0.63
KR: 1.2.0.67
This commit is contained in:
SL1900
2025-12-03 01:00:00 +09:00
commit 5e0d58cfad
3595 changed files with 9373562 additions and 0 deletions
@@ -0,0 +1,267 @@
local CharacterInfoTrialCtrl = class("CharacterInfoTrialCtrl", BaseCtrl)
local CharacterAttrData = require("GameCore.Data.DataClass.CharacterAttrData")
local Actor2DManager = require("Game.Actor2D.Actor2DManager")
local LayoutRebuilder = CS.UnityEngine.UI.LayoutRebuilder
local typeof = typeof
local PropertyIndexList = {
Simple = {
1,
2,
3
},
Detail = {
1,
2,
3,
4,
5,
6,
13,
7,
8,
9,
10,
11,
12
}
}
local talent_skill_bg_fold = 76
local talent_skill_bg_unFold = 351.6
CharacterInfoTrialCtrl._mapNodeConfig = {
safeAreaRoot = {
sNodeName = "----SafeAreaRoot----",
sComponentName = "RectTransform"
},
Drag = {},
txtCharLevel = {sComponentName = "TMP_Text"},
txtTitleRank = {
sComponentName = "TMP_Text",
sLanguageId = "Template_CharRank"
},
txtLevelMax = {sComponentName = "TMP_Text"},
goStarAdvance = {
sNodeName = "tc_star_advance",
sCtrlName = "Game.UI.TemplateEx.TemplateStarAdvanceCtrl"
},
goProperty = {
nCount = 3,
sCtrlName = "Game.UI.TemplateEx.TemplatePropertyCtrl"
},
txtTitleProperty = {
sComponentName = "TMP_Text",
sLanguageId = "CharacterInfo_Property"
},
txtBtnProperty = {
sComponentName = "TMP_Text",
sLanguageId = "CharacterInfo_Btn_Property"
},
btnProperty = {
sComponentName = "UIButton",
callback = "OnBtnClick_Property"
},
txtCharDesc = {sComponentName = "TMP_Text"},
txtName = {sComponentName = "TMP_Text"},
imgRareName = {sComponentName = "Image"},
imgCharColor = {sComponentName = "Image"},
imgTag = {nCount = 3},
txtTag = {nCount = 3, sComponentName = "TMP_Text"},
txtElement = {sComponentName = "TMP_Text"},
imgElementIcon = {sComponentName = "Image"},
btnCloseWordTip = {
sComponentName = "Button",
callback = "OnBtnClick_CloseWordTip"
},
imgWordTipBg = {},
TMPWordDesc = {sComponentName = "TMP_Text"},
TMPWordTipsTitle = {sComponentName = "TMP_Text"}
}
CharacterInfoTrialCtrl._mapEventConfig = {
[EventId.ShowCharacterSkillTips] = "ShowCharacterSkillTips",
[EventId.CharBgRefresh] = "OnEvent_RefreshPanel",
[EventId.CharRelatePanelAdvance] = "OnEvent_PanelAdvance",
[EventId.CharRelatePanelBack] = "OnEvent_PanelBack"
}
function CharacterInfoTrialCtrl:PlayOpenAnim(nClosePanelId)
if nClosePanelId == PanelId.CharUpPanel then
self.ani:Play("CharacterInfoPanel_out", 0, 0)
else
self.ani:Play("CharacterInfoPanel_in", 0, 0)
end
EventManager.Hit(EventId.TemporaryBlockInput, 0.4)
end
function CharacterInfoTrialCtrl:PlayCloseAnim()
end
function CharacterInfoTrialCtrl:RefreshContent()
local nCurPanelId = self._panel.nPanelId
if nCurPanelId ~= PanelId.CharInfoTrial then
return
end
self.mapCharTrialInfo = self._panel.mapCharTrialInfo
self.characterId = self._panel.nCharId
self.configData = self._panel.configData
self.showDetail = false
self:RefreshShow()
end
function CharacterInfoTrialCtrl:InitBg()
EventManager.Hit(EventId.CharBgRefresh, PanelId.CharInfoTrial, self.characterId)
end
function CharacterInfoTrialCtrl:RefreshShow()
self:CalculateCharacterInfo()
self:RefreshCharacterInfo()
self:RefreshProperty()
self:RefreshActor2D()
end
function CharacterInfoTrialCtrl:CalculateCharacterInfo()
self:CalculateProperty()
end
function CharacterInfoTrialCtrl:CalculateProperty()
local nMaxLevel = 0
local forEach = function(mapData)
if mapData.Grade == self.configData.Grade and tonumber(mapData.LvLimit) > nMaxLevel then
nMaxLevel = tonumber(mapData.LvLimit)
end
end
ForEachTableLine(DataTable.CharRaritySequence, forEach)
local charData = {
nLevel = self.mapCharTrialInfo.nLevel,
nAdvance = self.mapCharTrialInfo.nAdvance
}
if not self.attrData then
self.attrData = CharacterAttrData.new(self.characterId, {mapChar = charData})
else
self.attrData:SetCharacter(self.characterId, {mapChar = charData})
end
end
function CharacterInfoTrialCtrl:RefreshCharacterInfo()
local MaxLevel = PlayerData.Char:CalCharMaxLevel(self.mapCharTrialInfo.nId, self.mapCharTrialInfo.nLevel)
NovaAPI.SetTMPText(self._mapNode.txtCharLevel, self.mapCharTrialInfo.nLevel)
NovaAPI.SetTMPText(self._mapNode.txtLevelMax, "/" .. MaxLevel)
self._mapNode.goStarAdvance:SetStar(self.mapCharTrialInfo.nAdvance, 8)
local mapConfigDesc = ConfigTable.GetData("CharacterDes", self.mapCharTrialInfo.nId)
local sDesc
if mapConfigDesc ~= nil then
sDesc = mapConfigDesc.CharDes
else
sDesc = ""
end
NovaAPI.SetTMPText(self._mapNode.txtCharDesc, sDesc)
NovaAPI.SetTMPText(self._mapNode.txtName, self.mapCharTrialInfo.sName)
self:SetSprite_FrameColor(self._mapNode.imgRareName, self.configData.Grade, AllEnum.FrameType_New.Text)
NovaAPI.SetImageNativeSize(self._mapNode.imgRareName)
local mapCharDescCfg = ConfigTable.GetData("CharacterDes", self.characterId)
local sColor, tbTag
if mapCharDescCfg ~= nil then
sColor = mapCharDescCfg.CharColor
tbTag = mapCharDescCfg.Tag
else
sColor = ""
tbTag = {}
end
local _, colorChar = ColorUtility.TryParseHtmlString(sColor)
NovaAPI.SetImageColor(self._mapNode.imgCharColor, colorChar)
for i = 1, 3 do
local nTag = tbTag[i]
if nTag then
self._mapNode.imgTag[i]:SetActive(true)
NovaAPI.SetTMPText(self._mapNode.txtTag[i], ConfigTable.GetData("CharacterTag", nTag).Title)
else
self._mapNode.imgTag[i]:SetActive(false)
end
end
local sName = AllEnum.ElementIconType.Icon .. self.configData.EET
self:SetAtlasSprite(self._mapNode.imgElementIcon, "12_rare", sName)
NovaAPI.SetTMPColor(self._mapNode.txtElement, AllEnum.ElementColor[self.configData.EET])
NovaAPI.SetTMPText(self._mapNode.txtElement, ConfigTable.GetUIText("T_Element_Attr_" .. self.configData.EET))
end
function CharacterInfoTrialCtrl:RefreshProperty()
local attrList = self.attrData:GetAttrList()
for i = 1, #PropertyIndexList.Simple do
local index = PropertyIndexList.Simple[i]
local mapCharAttr = AllEnum.CharAttr[index]
self._mapNode.goProperty[i]:SetCharProperty(mapCharAttr, attrList[index], true)
end
end
function CharacterInfoTrialCtrl:RefreshActor2D()
EventManager.Hit(EventId.CharBgRefresh, PanelId.CharInfoTrial, self.characterId)
end
function CharacterInfoTrialCtrl:PlaySwitchAnim(nClosePanelId, nOpenPanelId, bBack)
if nClosePanelId == PanelId.CharInfoTrial then
self._mapNode.safeAreaRoot.gameObject:SetActive(false)
end
if nOpenPanelId == PanelId.CharInfoTrial then
self._mapNode.safeAreaRoot.gameObject:SetActive(true)
self:PlayOpenAnim(nClosePanelId)
end
end
function CharacterInfoTrialCtrl:FadeIn()
end
function CharacterInfoTrialCtrl:Awake()
self.ani = self.gameObject:GetComponent("Animator")
self.characterId = nil
self.configData = nil
self.characterIdList = nil
self.curCharacterIndex = nil
self.attrData = nil
self.attrList = nil
self.skillLevelList = nil
self.skillIdList = nil
self.power = nil
self.playEnterAnim = true
self.showDetail = false
end
function CharacterInfoTrialCtrl:OnEnable()
self:RefreshContent()
if self._panel.nPanelId == PanelId.CharInfoTrial then
self:PlayOpenAnim()
else
self._mapNode.safeAreaRoot.gameObject:SetActive(false)
end
end
function CharacterInfoTrialCtrl:OnDisable()
end
function CharacterInfoTrialCtrl:OnDestroy()
end
function CharacterInfoTrialCtrl:OnBtnClick_Property()
local attrList = self.attrData:GetAttrList()
local mapCfg = ConfigTable.GetData_Character(self.characterId)
if not mapCfg then
return
end
EventManager.Hit(EventId.OpenPanel, PanelId.CharAttrDetail, attrList, mapCfg.EET)
end
function CharacterInfoTrialCtrl:OnBtnClick_CloseWordTip()
self._mapNode.btnCloseWordTip.gameObject:SetActive(false)
self._mapNode.imgWordTipBg:SetActive(false)
end
function CharacterInfoTrialCtrl:OnEvent_RefreshPanel()
if self._panel.nPanelId ~= PanelId.CharInfo then
return
end
self:RefreshContent()
end
function CharacterInfoTrialCtrl:OnEvent_PanelAdvance(nClosePanelId, nOpenPanelId)
self:PlaySwitchAnim(nClosePanelId, nOpenPanelId, false)
self:RefreshContent()
end
function CharacterInfoTrialCtrl:OnEvent_PanelBack(nClosePanelId, nOpenPanelId)
self:PlaySwitchAnim(nClosePanelId, nOpenPanelId, true)
self:RefreshContent()
end
function CharacterInfoTrialCtrl:OnEventTrigger_BeginDrag(eventTrigger, eventData)
self.nBeginX = eventData.position.x
self.nBeginTS = CS.UnityEngine.Time.time
end
function CharacterInfoTrialCtrl:OnEvnetTrigger_EndDrag(eventTrigger, eventData)
if type(self.nBeginTS) == "number" and type(self.nBeginX) == "number" then
local nDelX = eventData.position.x - self.nBeginX
local nDelTS = CS.UnityEngine.Time.time - self.nBeginTS
if nDelTS < 0.3 then
if nDelX < 0 then
self:OnBtnClick_Right()
elseif 0 < nDelX then
self:OnBtnClick_Left()
end
end
end
end
return CharacterInfoTrialCtrl
@@ -0,0 +1,10 @@
local CharacterInfoTrialPanel = class("CharacterInfoTrialPanel", BasePanel)
CharacterInfoTrialPanel._nFADEINTYPE = 1
CharacterInfoTrialPanel._nFadeInType = 0
CharacterInfoTrialPanel._tbDefine = {
{
sPrefabPath = "CharacterInfoTrial/CharacterInfoTrialPanel.prefab",
sCtrlName = "Game.UI.CharacterInfoTrial.CharacterInfoTrialCtrl"
}
}
return CharacterInfoTrialPanel
@@ -0,0 +1,281 @@
local CharBgTrialCtrl = class("CharBgTrialCtrl", BaseCtrl)
local PlayerCharData = PlayerData.Char
local GameResourceLoader = require("Game.Common.Resource.GameResourceLoader")
local Actor2DManager = require("Game.Actor2D.Actor2DManager")
local Path = require("path")
local LocalSettingData = require("GameCore.Data.LocalSettingData")
local ResTypeAny = GameResourceLoader.ResType.Any
local LayerMask = CS.UnityEngine.LayerMask
local RendererProjectionModifier = CS.RendererProjectionModifier
local typeof = typeof
CharBgTrialCtrl._mapNodeConfig = {
imgBgRT = {
sNodeName = "----Actor2D----",
sComponentName = "RawImage"
},
rtBgRoot = {sNodeName = "----bg----", sComponentName = "Transform"},
animBgLeft = {sNodeName = "bgLeft", sComponentName = "Animator"},
animBgMiddle = {sNodeName = "bgMiddle", sComponentName = "Animator"},
rtOffScreenRoot = {
sNodeName = "Char_OffScreen_Renderer",
sComponentName = "Transform"
},
trCamera = {
sNodeName = "OffScreen3DCamera",
sComponentName = "Camera"
},
bgRight = {
sComponentName = "SpriteRenderer"
},
trCharacter = {sNodeName = "animator", sComponentName = "Transform"},
trPanelOffsetL2D = {
sNodeName = "panel_offset",
sComponentName = "Transform"
},
trActorOffsetL2d = {
sNodeName = "actor_offset",
sComponentName = "Transform"
},
trPng = {sNodeName = "PNG", sComponentName = "Transform"},
trL2D = {sNodeName = "L2D", sComponentName = "Transform"},
spr_body = {
sNodeName = "sp_body",
sComponentName = "SpriteRenderer"
},
spr_face = {
sNodeName = "sp_face",
sComponentName = "SpriteRenderer"
},
actor2dNode = {
sNodeName = "----Actor2D_Node----",
sComponentName = "Transform"
}
}
CharBgTrialCtrl._mapEventConfig = {
[EventId.CharBgRefresh] = "OnEvent_RefreshPanel",
[EventId.CharRelatePanelAdvance] = "OnEvent_PanelSwitch",
[EventId.CharRelatePanelBack] = "OnEvent_PanelSwitch",
[EventId.HideCharBgActor] = "OnEvent_HideCharBgActor",
[EventId.RevertCharBgActor] = "OnEvent_RevertCharBgActor",
PlayCharL2DAnim = "PlayCharL2DAnim",
PlayCharBgLeftAnim = "PlayCharBgLeftAnim"
}
function CharBgTrialCtrl:CreateRT()
end
function CharBgTrialCtrl:ReleaseRT()
self._mapNode.trCamera.targetTexture = nil
NovaAPI.SetTexture(self._mapNode.imgBgRT, nil)
if self.rtPanel ~= nil then
GameUIUtils.ReleaseRenderTexture(self.rtPanel)
self.rtPanel = nil
end
end
function CharBgTrialCtrl:GetOffsetData(sOffset)
local objOffset
if nil == self.mapOffsetObj[sOffset] then
objOffset = self:LoadAsset(sOffset, typeof(CS.Actor2DOffsetData))
self.mapOffsetObj[sOffset] = objOffset
else
objOffset = self.mapOffsetObj[sOffset]
end
local nShowPanelId = self:GetOffsetPanelId()
if nil == objOffset then
printError(string.format("角色关联界面 加载偏移数据失败!!!panelId = %s, 加载路径[%s]", nShowPanelId, sOffset))
return Vector3.zero, Vector3.one
end
local nX, nY = 0, 0
local s, x, y = objOffset:GetOffsetData(nShowPanelId, indexOfPose("a"), true, nX, nY)
local vPos = Vector3(x, y, 0)
local vScale = Vector3(s, s, 1)
return vPos, vScale
end
function CharBgTrialCtrl:GetOffsetPanelId()
local nShowPanelId = self._panel.nPanelId
local tbConfig = Actor2DManager.GetMapPanelConfig(self._panel.nPanelId)
if nil ~= tbConfig and tbConfig.nReuse > 0 then
nShowPanelId = tbConfig.nReuse
end
return nShowPanelId
end
function CharBgTrialCtrl:CheckUseL2D()
local bL2D = false
local tbConfig = Actor2DManager.GetMapPanelConfig(self._panel.nPanelId)
if nil ~= tbConfig then
bL2D = tbConfig.bL2D and LocalSettingData.mapData.UseLive2D
end
return bL2D
end
function CharBgTrialCtrl:GetName(sPortrait, sFace)
local sFileFullName = Path.basename(sPortrait)
local sFileExtName = Path.extension(sPortrait)
local sFileName = string.gsub(sFileFullName, sFileExtName, "")
sFileName = string.gsub(sFileName, "_a", "")
local sBodyName = string.format("%s_%s", sFileName, "001")
local sFaceName = string.format("%s_%s", sFileName, sFace)
return sBodyName, sFaceName
end
function CharBgTrialCtrl:SetCharacterPng(nSkinId, nType)
local bSetSuccess, nT, nAnimLength, tbRenderer = Actor2DManager.SetActor2DWithRender(self._panel.nPanelId, self._mapNode.imgBgRT, self.nCharId, nSkinId, nil, self._mapNode.actor2dNode)
end
function CharBgTrialCtrl:SetCharacterL2D(nSkinId, nType)
if nil ~= self.tbRenderer then
if self.tbRenderer.nSkinId == nSkinId then
return
end
self:RecycleCharacter()
end
local bSetSuccess, nT, nAnimLength, tbRenderer = Actor2DManager.SetActor2DWithRender(self._panel.nPanelId, self._mapNode.imgBgRT, self.nCharId, nSkinId, nil, self._mapNode.actor2dNode)
if bSetSuccess then
self.tbRenderer = {}
self.tbRenderer.nSkinId = nSkinId
self.tbRenderer.tbRenderer = tbRenderer
self.mapCharacter[nSkinId] = self.tbRenderer
Actor2DManager.PlayL2DAnim(self.tbRenderer.tbRenderer.trL2DIns, "idle", true, true)
if self.lasttrPanelOffsetL2DPos ~= nil then
self._mapNode.trPanelOffsetL2D:DOLocalMoveX(self.lasttrPanelOffsetL2DPos, 0):SetUpdate(true)
end
end
local skinCfgData = ConfigTable.GetData_CharacterSkin(nSkinId)
NovaAPI.SetSpriteRendererSprite(self._mapNode.bgRight, self:LoadAsset(skinCfgData.Bg .. ".png", typeof(Sprite)))
end
function CharBgTrialCtrl:SetCharacter(nCharId)
if nil ~= nCharId and nCharId ~= self.nCharId then
self.nCharId = nCharId
end
local nSkinId = self._panel.mapCharTrialInfo.nSkinId
local bL2D = self:CheckUseL2D()
local nType = AllEnum.Actor2DType.Normal
if bL2D then
self:SetCharacterL2D(nSkinId, nType)
else
self:SetCharacterPng(nSkinId, nType)
end
self._mapNode.trL2D.gameObject:SetActive(bL2D)
self._mapNode.trPng.gameObject:SetActive(not bL2D)
local skinCfgData = ConfigTable.GetData_CharacterSkin(nSkinId)
local vPos, vScale = self:GetOffsetData(skinCfgData.Offset)
self._mapNode.trActorOffsetL2d.localPosition = vPos
self._mapNode.trActorOffsetL2d.localScale = vScale
end
function CharBgTrialCtrl:PlayCharL2DAnim(animName, bLoop, bForcePlay)
if self.tbRenderer ~= nil and self.tbRenderer.trL2DIns ~= nil then
Actor2DManager.PlayL2DAnim(self.tbRenderer.tbRenderer.trL2DIns.transform, animName, bLoop, bForcePlay)
end
end
function CharBgTrialCtrl:PlayCharBgLeftAnim(bIn)
if bIn then
self._mapNode.animBgLeft:Play("CharBgPanelBg_in")
else
self._mapNode.animBgLeft:Play("CharBgPanelBg_out")
end
end
function CharBgTrialCtrl:RecycleCharacter()
self.mapCharacter[self.tbRenderer.nSkinId] = self.tbRenderer
Actor2DManager.UnSetActor2DWithRender(self.tbRenderer.tbRenderer)
end
function CharBgTrialCtrl:ClearCharacter()
for k, v in pairs(self.mapCharacter) do
Actor2DManager.UnSetActor2DWithRender(v.tbRenderer)
end
self.mapCharacter = {}
self.tbRenderer = nil
self._mapNode.trPanelOffsetL2D.localPosition = Vector3.zero
self._mapNode.trPanelOffsetL2D.localScale = Vector3.one
self._mapNode.trActorOffsetL2d.localPosition = Vector3.zero
self._mapNode.trActorOffsetL2d.localScale = Vector3.one
end
function CharBgTrialCtrl:RefreshBgShow()
local nPanelId = self._panel.nPanelId
local panelCfg = self.tbPanelCfg[nPanelId]
if nil == panelCfg then
return
end
self.nType = panelCfg.type
if self.nType == AllEnum.CharBgPanelShowType.L2D then
self:SetCharacter(self._panel.nCharId)
end
end
function CharBgTrialCtrl:InitBgPos()
local panelAnimCfg = self.tbPanelCfg[self._panel.nPanelId]
if nil ~= panelAnimCfg then
self._mapNode.rtBgRoot:DOLocalMoveX(panelAnimCfg.bgPosX, 0)
self._mapNode.trPanelOffsetL2D:DOLocalMoveX(panelAnimCfg.L2DPosX, 0)
end
if self._panel.nPanelId == PanelId.CharEquipment then
self._mapNode.animBgMiddle:Play("CharBgPanelBgMiddle_out")
end
end
function CharBgTrialCtrl:Awake()
self.charInfoCtrl = nil
self.charSkillCtrl = nil
self.mapOffsetObj = {}
self.tbRenderer = nil
self.mapCharacter = {}
self.nDragStartPosX = nil
self.nDragThreshold = ConfigTable.GetConfigNumber("CharDragThreshold")
end
function CharBgTrialCtrl:OnEnable()
self:CreateRT()
self.tbPanelCfg = self._panel:GetPanelShowCfg()
if nil == self.uiRoot then
self.uiRoot = PanelManager.GetUIRoot(self._panel._sSortingLayerName)
end
if nil ~= self.uiRoot then
self._mapNode.rtOffScreenRoot:SetParent(self.uiRoot)
self._mapNode.rtOffScreenRoot.localScale = Vector3.one
self._mapNode.rtOffScreenRoot:SetParent(self.gameObject.transform)
end
self.nCharId = self._panel.nCharId
self:RefreshBgShow()
self:InitBgPos()
self.tbSelectedCharList = {}
PlayerData.Voice:ClearTimer()
PlayerData.Voice:StopCharVoice()
end
function CharBgTrialCtrl:OnDisable()
self.mapOffsetObj = {}
self.charInfoCtrl = nil
self.charSkillCtrl = nil
self:ClearCharacter()
self:ReleaseRT()
PlayerData.Char:DeleteTrialChar()
end
function CharBgTrialCtrl:OnDestroy()
end
function CharBgTrialCtrl:OnEvent_RefreshPanel(nPanelId, nCharId)
self._panel.nPanelId = nPanelId
self._panel.nCharId = nCharId
EventManager.Hit("RefreshCharTopBar")
self:RefreshBgShow()
EventManager.Hit("RefreshCharFg")
end
function CharBgTrialCtrl:OnEvent_PanelSwitch(nClosePanelId, nOpenPanelId)
self:RefreshBgShow()
EventManager.Hit("RefreshCharTopBar")
local panelAnimCfg = self.tbPanelCfg[nOpenPanelId]
if nil ~= panelAnimCfg then
local nBgTime, nL2dTime = self._panel:GetPanelAnimTime(nClosePanelId, nOpenPanelId)
if nil == nBgTime or nil == nL2dTime then
return
end
local tbCfg = self._panel:GetPanelAnimCfg(nClosePanelId, nOpenPanelId)
if nil ~= tbCfg then
local bgTweener, l2dTweener
bgTweener = self._mapNode.rtBgRoot:DOLocalMoveX(panelAnimCfg.bgPosX, nBgTime):SetUpdate(true)
l2dTweener = self._mapNode.trPanelOffsetL2D:DOLocalMoveX(panelAnimCfg.L2DPosX, nL2dTime):SetUpdate(true)
self.lasttrPanelOffsetL2DPos = panelAnimCfg.L2DPosX
if nil ~= tbCfg.bgEaseType then
bgTweener:SetEase(tbCfg.bgEaseType)
l2dTweener:SetEase(tbCfg.bgEaseType)
end
end
end
end
function CharBgTrialCtrl:OnEvent_HideCharBgActor()
self.curPanelOffsetL2D = self._mapNode.trPanelOffsetL2D.localPosition.x
self._mapNode.trPanelOffsetL2D:DOLocalMoveX(-100, 0):SetUpdate(true)
end
function CharBgTrialCtrl:OnEvent_RevertCharBgActor()
self._mapNode.trPanelOffsetL2D:DOLocalMoveX(self.curPanelOffsetL2D, 0):SetUpdate(true)
end
return CharBgTrialCtrl
@@ -0,0 +1,183 @@
local CharBgTrialPanel = class("CharBgTrialPanel", BasePanel)
CharBgTrialPanel._bIsMainPanel = false
CharBgTrialPanel._tbDefine = {
{
sPrefabPath = "CharacterInfoTrial/CharBgTrialPanel.prefab",
sCtrlName = "Game.UI.CharacterInfoTrial.CharBgTrialCtrl"
},
{
sPrefabPath = "CharacterInfoTrial/CharacterInfoTrialPanel.prefab",
sCtrlName = "Game.UI.CharacterInfoTrial.CharacterInfoTrialCtrl"
},
{
sPrefabPath = "CharacterInfoTrial/CharSkillTrialPanel.prefab",
sCtrlName = "Game.UI.CharacterInfoTrial.CharSkillTrialCtrl"
},
{
sPrefabPath = "CharacterInfoTrial/CharPotentialTrialPanel.prefab",
sCtrlName = "Game.UI.CharacterInfoTrial.CharPotentialTrialCtrl"
},
{
sPrefabPath = "CharacterInfoTrial/CharTalentTrialPanel.prefab",
sCtrlName = "Game.UI.CharacterInfoTrial.CharTalentTrialCtrl"
},
{
sPrefabPath = "CharacterInfoTrial/CharFgTrialPanel.prefab",
sCtrlName = "Game.UI.CharacterInfoTrial.CharFgTrialCtrl"
}
}
CharBgTrialPanel._mapEventConfig = {
[EventId.CharRelatePanelOpen] = "OnEvent_CharRelatePanelOpen",
[EventId.CharRelatePanelClose] = "OnEvent_CharRelatePanelClose"
}
local char_panel_show_cfg = {
[PanelId.CharInfoTrial] = {
bShowTopBar = true,
type = AllEnum.CharBgPanelShowType.L2D,
bgPosX = 0,
L2DPosX = 0,
weaponPosX = 28
},
[PanelId.CharSkillTrial] = {
bShowTopBar = true,
type = AllEnum.CharBgPanelShowType.L2D,
bgPosX = -26.8,
L2DPosX = -0.62,
weaponPosX = 28
},
[PanelId.CharPotentialTrial] = {
bShowTopBar = true,
type = AllEnum.CharBgPanelShowType.L2D,
bgPosX = -31.4,
L2DPosX = -6.8,
weaponPosX = 28
},
[PanelId.CharTalentTrial] = {
bShowTopBar = true,
type = AllEnum.CharBgPanelShowType.None,
bgPosX = -33.8,
L2DPosX = -26,
weaponPosX = 28
}
}
local char_sub_panel = {
[PanelId.CharUpPanel] = true,
[PanelId.CharFavourGift] = true
}
local panel_switch_anim_cfg = {
[PanelId.CharInfoTrial] = {
[PanelId.CharSkillTrial] = {nL2dTime = 0.2, nBgTime = 0},
[PanelId.CharPotentialTrial] = {nL2dTime = 0.3, nBgTime = 0},
[PanelId.CharTalentTrial] = {nL2dTime = 0, nBgTime = 0}
},
[PanelId.CharSkillTrial] = {
[PanelId.CharInfoTrial] = {nL2dTime = 0.3, nBgTime = 0},
[PanelId.CharPotentialTrial] = {nL2dTime = 0.3, nBgTime = 0.3},
[PanelId.CharTalentTrial] = {nL2dTime = 0.3, nBgTime = 0.3}
},
[PanelId.CharPotentialTrial] = {
[PanelId.CharInfoTrial] = {nL2dTime = 0.3, nBgTime = 0},
[PanelId.CharSkillTrial] = {nL2dTime = 0.3, nBgTime = 0.3},
[PanelId.CharTalentTrial] = {nL2dTime = 0.3, nBgTime = 0.3}
},
[PanelId.CharTalentTrial] = {
[PanelId.CharInfoTrial] = {nL2dTime = 0, nBgTime = 0},
[PanelId.CharSkillTrial] = {nL2dTime = 0, nBgTime = 0.3},
[PanelId.CharPotentialTrial] = {nL2dTime = 0, nBgTime = 0.3}
}
}
function CharBgTrialPanel:Close()
EventManager.Hit(EventId.ClosePanel, PanelId.CharBgPanel)
end
function CharBgTrialPanel:GetPanelAnimCfg(nClosePanelId, nOpenPanelId)
if nil == panel_switch_anim_cfg[nClosePanelId] then
return
end
if nil == panel_switch_anim_cfg[nClosePanelId][nOpenPanelId] then
return
end
return panel_switch_anim_cfg[nClosePanelId][nOpenPanelId]
end
function CharBgTrialPanel:GetPanelAnimTime(nClosePanelId, nOpenPanelId)
local tbCfg = self:GetPanelAnimCfg(nClosePanelId, nOpenPanelId)
if nil ~= tbCfg then
return tbCfg.nBgTime, tbCfg.nL2dTime
end
end
function CharBgTrialPanel:PlayPanelSwitchAnim(trContent, nWidth, nTime)
EventManager.Hit(EventId.TemporaryBlockInput, nTime)
local tweener = trContent:DOAnchorPosX(nWidth, nTime):SetUpdate(true)
local tbCfg = self:GetPanelAnimCfg(self.nClosePanelId, self.nPanelId)
if nil ~= tbCfg and nil ~= tbCfg.uiEaseType then
tweener:SetEase(tbCfg.uiEaseType)
end
return tweener
end
function CharBgTrialPanel:GetPanelShowCfg()
return char_panel_show_cfg
end
function CharBgTrialPanel:GetSubPanel()
return char_sub_panel
end
function CharBgTrialPanel:Awake()
self.nPanelId = 0
self.nCharId = 0
self.tbCharList = {}
self.panelStack = {}
self.bSecondPanel = false
local tbParam = self._tbParam
if type(tbParam) == "table" then
self.nPanelId = tbParam[1]
if nil ~= tbParam[2] then
self.configData = ConfigTable.GetData_Character(tbParam[2])
self.mapCharTrialInfo = PlayerData.Char:CreateTrialChar({
self.configData.ViewId
})[self.configData.ViewId]
self.nCharId = self.mapCharTrialInfo.nId
end
end
table.insert(self.panelStack, self.nPanelId)
end
function CharBgTrialPanel:OnEnable()
end
function CharBgTrialPanel:OnDisable()
end
function CharBgTrialPanel:OnEvent_CharRelatePanelOpen(nPanelId, ncharId, tbCharList, param1)
self.nClosePanelId = self.nPanelId
self.nPanelId = nPanelId
self.bSecondPanel = false
if nil ~= ncharId then
self.nCharId = ncharId
end
if nil ~= tbCharList then
self.tbCharList = tbCharList
end
if nil ~= param1 then
self.param1 = param1
end
if char_sub_panel[nPanelId] then
table.insert(self.panelStack, nPanelId)
end
EventManager.Hit(EventId.CharRelatePanelAdvance, self.nClosePanelId, nPanelId)
end
function CharBgTrialPanel:OnEvent_CharRelatePanelClose(bForceClose)
if #self.panelStack <= 1 or bForceClose then
self:Close()
return
end
self.nClosePanelId = self.nPanelId
local nLastPanelId = self.panelStack[#self.panelStack]
if self.nClosePanelId ~= nLastPanelId then
self:Close()
return
end
local nOpenPanelId = self.panelStack[#self.panelStack - 1]
table.remove(self.panelStack, #self.panelStack)
self.nPanelId = nOpenPanelId
self.bSecondPanel = false
local panelCfg = char_panel_show_cfg[self.nClosePanelId]
if nil ~= panelCfg then
EventManager.Hit(EventId.CharRelatePanelBack, self.nClosePanelId, nOpenPanelId)
end
end
return CharBgTrialPanel
@@ -0,0 +1,136 @@
local CharFgTrialCtrl = class("CharFgTrialCtrl", BaseCtrl)
local MoveBarPos = {
-483.6,
-162,
159.6,
481.2
}
local PanelToTab = {
[PanelId.CharInfoTrial] = 1,
[PanelId.CharSkillTrial] = 2,
[PanelId.CharPotentialTrial] = 3,
[PanelId.CharTalentTrial] = 4
}
local TabTextKey = {
"CharacterInfo_Tab1",
"CharacterInfo_Tab2",
"CharacterInfo_Tab4",
"CharacterInfo_Tab5"
}
CharFgTrialCtrl._mapNodeConfig = {
TopBar = {
sNodeName = "TopBarPanel",
sCtrlName = "Game.UI.TopBarEx.TopBarCtrl"
},
goBack = {},
goResBarAnimRoot = {},
btnTab = {
nCount = 4,
sComponentName = "UIButton",
callback = "OnBtnClick_Tab"
},
imgOn = {nCount = 4},
txtTabOn = {nCount = 4, sComponentName = "TMP_Text"},
txtTabOff = {nCount = 4, sComponentName = "TMP_Text"},
layoutOff = {nCount = 4},
imgMoveBar = {sComponentName = "Transform"},
Tab = {sNodeName = "--Tab--"},
aniSafeRoot = {
sNodeName = "----SafeAreaRoot----",
sComponentName = "Animator"
}
}
CharFgTrialCtrl._mapEventConfig = {
RefreshCharFg = "OnEvent_RefreshFg",
RefreshCharTopBar = "RefreshTopBar",
RefreshCharTopBarText = "OnEvent_SetTopBarText",
ChangeCharFgTab = "OnEvent_ChangeTab",
ChangeCharTopBar = "OnEvent_ChangeTopBar"
}
function CharFgTrialCtrl:InitTab()
self.nTab = PanelToTab[self._panel.nPanelId]
self._mapNode.imgMoveBar.localPosition = Vector3(MoveBarPos[self.nTab], 4.5, 0)
for i = 1, 4 do
NovaAPI.SetTMPText(self._mapNode.txtTabOn[i], ConfigTable.GetUIText(TabTextKey[i]))
NovaAPI.SetTMPText(self._mapNode.txtTabOff[i], ConfigTable.GetUIText(TabTextKey[i]))
self._mapNode.imgOn[i]:SetActive(PanelToTab[self._panel.nPanelId] == i)
self._mapNode.txtTabOn[i].gameObject:SetActive(PanelToTab[self._panel.nPanelId] == i)
self._mapNode.layoutOff[i].gameObject:SetActive(PanelToTab[self._panel.nPanelId] ~= i)
end
end
function CharFgTrialCtrl:RefreshTopBar()
local nPanelId = self._panel.nPanelId
local panelCfg = self.tbPanelCfg[nPanelId]
if nil ~= panelCfg then
if panelCfg.bShowTopBar then
self._mapNode.TopBar.gameObject:SetActive(true)
self._mapNode.TopBar:InitTopBar(nPanelId)
if nPanelId == PanelId.CharTalent then
local mapCharCfg = ConfigTable.GetData_Character(self._panel.nCharId)
self._mapNode.TopBar:CreateCoin({
mapCharCfg.FragmentsId
})
end
else
self._mapNode.TopBar.gameObject:SetActive(false)
end
end
if self._panel.bSecondPanel then
self:OnEvent_ChangeTopBar(false, true)
end
end
function CharFgTrialCtrl:Awake()
self:InitTab()
end
function CharFgTrialCtrl:OnEnable()
self.tbPanelCfg = self._panel:GetPanelShowCfg()
local tbSubPanel = self._panel:GetSubPanel()
if tbSubPanel[self._panel.nPanelId] or self._panel.bSecondPanel then
self._mapNode.aniSafeRoot:Play("CharFgPanel_out", 0, 1)
else
self._mapNode.aniSafeRoot:Play("CharFgPanel_in")
end
local wait = function()
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
self:RefreshTopBar()
end
cs_coroutine.start(wait)
end
function CharFgTrialCtrl:OnDisable()
end
function CharFgTrialCtrl:OnDestroy()
end
function CharFgTrialCtrl:OnEvent_RefreshFg()
end
function CharFgTrialCtrl:OnEvent_ChangeTab(bOpen)
if bOpen then
self._mapNode.aniSafeRoot:Play("CharFgPanel_in")
else
self._mapNode.aniSafeRoot:Play("CharFgPanel_out")
end
end
function CharFgTrialCtrl:OnEvent_ChangeTopBar(bShowBack, bShowRes)
self._mapNode.goBack:SetActive(bShowBack)
self._mapNode.goResBarAnimRoot:SetActive(bShowRes)
end
function CharFgTrialCtrl:OnBtnClick_Tab(btn, nIndex)
if self.nTab == nIndex then
return
end
local nNextPanel = table.keyof(PanelToTab, nIndex)
self._mapNode.imgMoveBar:DOLocalMoveX(MoveBarPos[nIndex], 0.1):SetUpdate(true)
self._mapNode.imgOn[self.nTab]:SetActive(false)
self._mapNode.txtTabOn[self.nTab].gameObject:SetActive(false)
self._mapNode.layoutOff[self.nTab].gameObject:SetActive(true)
self._mapNode.imgOn[nIndex]:SetActive(true)
self._mapNode.txtTabOn[nIndex].gameObject:SetActive(true)
self._mapNode.layoutOff[nIndex].gameObject:SetActive(false)
self.nTab = nIndex
if nNextPanel then
EventManager.Hit(EventId.CharRelatePanelOpen, nNextPanel, self._panel.nCharId)
end
end
function CharFgTrialCtrl:OnEvent_SetTopBarText(sTitle)
self._mapNode.TopBar:SetTitleTxt(sTitle)
end
return CharFgTrialCtrl
@@ -0,0 +1,364 @@
local CharPotentialTrialCtrl = class("CharPotentialTrialCtrl", BaseCtrl)
CharPotentialTrialCtrl._mapNodeConfig = {
safeAreaRoot = {
sNodeName = "----SafeAreaRoot----"
},
rtRoot = {
sNodeName = "----SafeAreaRoot----",
sComponentName = "RectTransform"
},
animRoot = {
sNodeName = "----SafeAreaRoot----",
sComponentName = "Animator"
},
animCard = {
sNodeName = "PotentialCardRoot",
sComponentName = "Animator"
},
PotentialCard = {
sCtrlName = "Game.UI.StarTower.Potential.PotentialCardItemCtrl"
},
PotentialCard2 = {
sCtrlName = "Game.UI.StarTower.Potential.PotentialCardItemCtrl"
},
svPotential = {sComponentName = "ScrollRect"},
btnSwitch = {
nCount = 2,
sComponentName = "UIButton",
callback = "OnBtnClick_Switch"
},
SwitchOn = {
sComponentName = "TMP_Text",
sLanguageId = "Shop_Sample_SwithOn"
},
SwitchOff = {
sComponentName = "TMP_Text",
sLanguageId = "Shop_Sample_SwithOff"
},
tab = {
nCount = 2,
sCtrlName = "Game.UI.TemplateEx.TemplateTabCtrl"
},
btnTab = {
nCount = 2,
sComponentName = "UIButton",
callback = "OnBtnClick_Tab"
},
PotentialList = {nCount = 3},
rtPotential = {nCount = 3, sComponentName = "Transform"},
PotentialDepotItem = {},
txtPotentialTitle = {nCount = 2, sComponentName = "TMP_Text"},
txtPotentialTitle3 = {
sComponentName = "TMP_Text",
sLanguageId = "Potential_Build_Common"
},
txtPotentialDesc = {nCount = 2, sComponentName = "TMP_Text"},
switch_des = {},
switch_img_bg = {
sComponentName = "RectTransform"
},
switch_nameRect = {
sNodeName = "switch_name",
sComponentName = "RectTransform"
},
switch_name = {
sComponentName = "TMP_Text",
sLanguageId = "Potential_Change_Desc"
},
btnSwitch_on = {
sComponentName = "UIButton",
callback = "OnBtnClick_SetDes"
},
btnSwitch_off = {
sComponentName = "UIButton",
callback = "OnBtnClick_SetSimpleDes"
}
}
CharPotentialTrialCtrl._mapEventConfig = {
[EventId.CharBgRefresh] = "OnEvent_RefreshPanel",
[EventId.CharRelatePanelAdvance] = "OnEvent_PanelAdvance",
[EventId.CharRelatePanelBack] = "OnEvent_PanelBack",
SelectDepotPotential = "OnEvent_Select"
}
function CharPotentialTrialCtrl:ClearData()
self.bMax = false
self.nTab = 1
self.nSelectId = nil
self.MasterSpecificIds = nil
self.MasterNormalIds = nil
self.AssistSpecificIds = nil
self.AssistNormalIds = nil
end
function CharPotentialTrialCtrl:RefreshData()
self.nCharId = self._panel.nCharId
self.bMax = false
self.nTab = 1
self.tbPotentialList = PlayerData.Char:GetCharPotentialList(self.nCharId)
if self.tbBuild1GridCtrl == nil then
self.tbBuild1GridCtrl = {}
end
if self.tbBuild2GridCtrl == nil then
self.tbBuild2GridCtrl = {}
end
if self.tbBuildCommonGirdCtrl == nil then
self.tbBuildCommonGirdCtrl = {}
end
if self.tbPotentialList and self.tbPotentialList.master then
for type = 1, 3 do
if self.tbPotentialList.master[type] ~= nil and #self.tbPotentialList.master[type] > 0 then
self.nSelectId = self.tbPotentialList.master[type][1].nId
break
end
end
end
end
function CharPotentialTrialCtrl:Reselect()
NovaAPI.SetVerticalNormalizedPosition(self._mapNode.svPotential, 1)
if self.nTab == 1 then
if self.tbPotentialList and self.tbPotentialList.master then
for type = 1, 3 do
if self.tbPotentialList.master[type] ~= nil and #self.tbPotentialList.master[type] > 0 then
self.nSelectId = self.tbPotentialList.master[type][1].nId
break
end
end
end
elseif self.tbPotentialList and self.tbPotentialList.assist then
for type = 1, 3 do
if self.tbPotentialList.assist[type] ~= nil and 0 < #self.tbPotentialList.assist[type] then
self.nSelectId = self.tbPotentialList.assist[type][1].nId
break
end
end
end
end
function CharPotentialTrialCtrl:RefreshContent()
if self._panel.nPanelId ~= PanelId.CharPotentialTrial then
return
end
self:RefreshData()
if not self.nSelectId then
printError("CharPotential表没配这个角色:" .. self.nCharId)
return
end
self:RefreshTab()
self:RefreshSwitch()
self:RefreshList()
self:SetPotentialBuildName()
self:RefreshMaxLevelSwitch()
end
function CharPotentialTrialCtrl:RefreshTab()
self._mapNode.tab[1]:SetSelect(1 == self.nTab, 1)
self._mapNode.tab[2]:SetSelect(2 == self.nTab, 3)
end
function CharPotentialTrialCtrl:SetPotentialBuildName()
local charDescCfg = ConfigTable.GetData("CharacterDes", self.nCharId)
if charDescCfg ~= nil then
for i = 1, 2 do
do
NovaAPI.SetTMPText(self._mapNode.txtPotentialTitle[i], self.nTab == 1 and charDescCfg["PotentialMain" .. i] or charDescCfg["PotentialAssistant" .. i])
local titleLayoutElement = self._mapNode.txtPotentialTitle[i].gameObject:GetComponent("LayoutElement")
local tr = self._mapNode.txtPotentialTitle[i].gameObject:GetComponent("RectTransform")
local wait = function()
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
self:SetTitleWidth(titleLayoutElement, tr)
end
cs_coroutine.start(wait)
NovaAPI.SetTMPText(self._mapNode.txtPotentialDesc[i], self.nTab == 1 and charDescCfg["PotentialMainContent" .. i] or charDescCfg["PotentialAssistantContent" .. i])
end
end
end
end
function CharPotentialTrialCtrl:SetTitleWidth(nTitleLayout, tr)
local minWidth = nTitleLayout.minWidth
local preferredWidth = tr.rect.width
if minWidth == preferredWidth then
return
else
nTitleLayout.minWidth = preferredWidth
end
end
function CharPotentialTrialCtrl:RefreshMaxLevelSwitch()
self._mapNode.btnSwitch[1].gameObject:SetActive(not self.bMax)
self._mapNode.btnSwitch[2].gameObject:SetActive(self.bMax)
end
function CharPotentialTrialCtrl:RefreshList(bChangeTab)
local tbPotential = self.nTab == 1 and self.tbPotentialList.master or self.tbPotentialList.assist
local tbBuild1 = tbPotential[GameEnum.potentialBuild.PotentialBuild1] or {}
local tbBuild2 = tbPotential[GameEnum.potentialBuild.PotentialBuild2] or {}
local tbBuildCommon = tbPotential[GameEnum.potentialBuild.PotentialBuildCommon] or {}
self._mapNode.PotentialList[1]:SetActive(0 < #tbBuild1)
self._mapNode.PotentialList[2]:SetActive(0 < #tbBuild2)
self._mapNode.PotentialList[3]:SetActive(0 < #tbBuildCommon)
local createPotentialItem = function(tbPotential, tbGrid, rtContent)
if 0 < #tbPotential then
for k, v in ipairs(tbPotential) do
local nMaxLevel = PlayerData.StarTower:GetPotentialMaxLevelWithMaxGrowth(v.nId)
local nLv = self.bMax and nMaxLevel or 1
if nil == tbGrid[k] then
local itemObj = instantiate(self._mapNode.PotentialDepotItem, rtContent)
itemObj.gameObject:SetActive(true)
local itemCtrl = self:BindCtrlByNode(itemObj, "Game.UI.StarTower.Depot.DepotPotentialItemCtrl")
itemCtrl:InitItem(v.nId, nLv, 0, false)
table.insert(tbGrid, itemCtrl)
else
tbGrid[k]:InitItem(v.nId, nLv, 0, false)
end
EventManager.Hit("SelectDepotPotential", self.nSelectId)
end
if #tbGrid > #tbPotential then
for i = #tbPotential + 1, #tbGrid do
tbGrid[i].gameObject:SetActive(false)
end
end
end
end
createPotentialItem(tbBuild1, self.tbBuild1GridCtrl, self._mapNode.rtPotential[1])
createPotentialItem(tbBuild2, self.tbBuild2GridCtrl, self._mapNode.rtPotential[2])
createPotentialItem(tbBuildCommon, self.tbBuildCommonGirdCtrl, self._mapNode.rtPotential[3])
local nLevel = PlayerData.StarTower:GetPotentialMaxLevelWithMaxGrowth(self.nSelectId)
local bSimple = PlayerData.StarTower:GetPotentialDescSimple()
if bChangeTab then
self._mapNode.animCard:Play("PotentialCardRoot_switch", 0, 0)
self._mapNode.PotentialCard2:SetPotentialItem(self.nSelectId, self.bMax and nLevel or 1, nil, bSimple)
self:AddTimer(1, 0.2, function()
self._mapNode.PotentialCard:SetPotentialItem(self.nSelectId, self.bMax and nLevel or 1, nil, bSimple)
self._mapNode.PotentialCard:ChangeWordRaycast(true)
end, true, true, true)
else
self._mapNode.PotentialCard:SetPotentialItem(self.nSelectId, self.bMax and nLevel or 1, nil, bSimple)
self._mapNode.PotentialCard:ChangeWordRaycast(true)
end
end
function CharPotentialTrialCtrl:SetTabText()
self._mapNode.tab[1]:SetText(ConfigTable.GetUIText("Build_Leader"))
self._mapNode.tab[2]:SetText(ConfigTable.GetUIText("Build_Sub"))
end
function CharPotentialTrialCtrl:PlayOpenAnim()
end
function CharPotentialTrialCtrl:PlaySwitchAnim(nClosePanelId, nOpenPanelId, bBack)
if nClosePanelId == PanelId.CharPotentialTrial then
NovaAPI.SetVerticalNormalizedPosition(self._mapNode.svPotential, 1)
self._mapNode.safeAreaRoot.gameObject:SetActive(false)
self:ClearData()
end
if nOpenPanelId == PanelId.CharPotentialTrial then
self._mapNode.safeAreaRoot.gameObject:SetActive(true)
self:PlayOpenAnim()
end
end
function CharPotentialTrialCtrl:InitSwitch()
local bSimple = PlayerData.StarTower:GetPotentialDescSimple()
self._mapNode.btnSwitch_on.gameObject:SetActive(bSimple)
self._mapNode.btnSwitch_off.gameObject:SetActive(not bSimple)
self:AddTimer(1, 0.5, "RefreshSwitch", true, true, false)
end
function CharPotentialTrialCtrl:RefreshSwitch()
CS.UnityEngine.UI.LayoutRebuilder.ForceRebuildLayoutImmediate(self._mapNode.switch_nameRect)
self._mapNode.switch_img_bg.sizeDelta = Vector2(100 + self._mapNode.switch_nameRect.sizeDelta.x + 30, self._mapNode.switch_img_bg.sizeDelta.y)
end
function CharPotentialTrialCtrl:Awake()
self:ClearData()
self:SetTabText()
end
function CharPotentialTrialCtrl:OnEnable()
self._mapNode.safeAreaRoot.gameObject:SetActive(false)
local callback = function()
self:RefreshContent()
if self._panel.nPanelId == PanelId.CharPotentialTrial then
self._mapNode.safeAreaRoot.gameObject:SetActive(true)
self:PlayOpenAnim()
else
self._mapNode.safeAreaRoot.gameObject:SetActive(false)
end
self:InitSwitch()
self:RefreshMaxLevelSwitch()
end
PlayerData.StarTower:SendTowerGrowthDetailReq(callback)
end
function CharPotentialTrialCtrl:OnDisable()
if self.tbBuildCommonGirdCtrl then
for k, objCtrl in pairs(self.tbBuildCommonGirdCtrl) do
local obj = objCtrl.gameObject
self:UnbindCtrlByNode(objCtrl)
self.tbBuildCommonGirdCtrl[k] = nil
destroyImmediate(obj)
end
self.tbBuildCommonGirdCtrl = {}
end
if self.tbBuild2GridCtrl then
for k, objCtrl in pairs(self.tbBuild2GridCtrl) do
local obj = objCtrl.gameObject
self:UnbindCtrlByNode(objCtrl)
self.tbBuild2GridCtrl[k] = nil
destroyImmediate(obj)
end
self.tbBuild2GridCtrl = {}
end
if self.tbBuild1GridCtrl then
for k, objCtrl in pairs(self.tbBuild1GridCtrl) do
local obj = objCtrl.gameObject
self:UnbindCtrlByNode(objCtrl)
self.tbBuild1GridCtrl[k] = nil
destroyImmediate(obj)
end
self.tbBuild1GridCtrl = {}
end
end
function CharPotentialTrialCtrl:OnDestroy()
end
function CharPotentialTrialCtrl:OnBtnClick_Tab(btn, nIndex)
if nIndex == self.nTab then
return
end
self.nTab = nIndex
self:RefreshTab()
self:Reselect()
self:RefreshList(true)
self:SetPotentialBuildName()
end
function CharPotentialTrialCtrl:OnBtnClick_Switch(btn, nIndex)
self.bMax = not self.bMax
self:RefreshMaxLevelSwitch()
self:RefreshList()
end
function CharPotentialTrialCtrl:OnBtnClick_SetSimpleDes(...)
PlayerData.StarTower:SetPotentialDescSimple(true)
self:RefreshList()
self._mapNode.btnSwitch_on.gameObject:SetActive(true)
self._mapNode.btnSwitch_off.gameObject:SetActive(false)
end
function CharPotentialTrialCtrl:OnBtnClick_SetDes(...)
PlayerData.StarTower:SetPotentialDescSimple(false)
self:RefreshList()
self._mapNode.btnSwitch_on.gameObject:SetActive(false)
self._mapNode.btnSwitch_off.gameObject:SetActive(true)
end
function CharPotentialTrialCtrl:OnEvent_Select(nPotentialId)
if self.nSelectId == nPotentialId then
return
end
self.nSelectId = nPotentialId
local nMaxLevel = PlayerData.StarTower:GetPotentialMaxLevelWithMaxGrowth(self.nSelectId)
local nLevel = self.bMax and nMaxLevel or 1
self._mapNode.animCard:Play("PotentialCardRoot_switch", 0, 0)
self._mapNode.switch_des:SetActive(true)
local bSimple = PlayerData.StarTower:GetPotentialDescSimple()
self._mapNode.PotentialCard2:SetPotentialItem(nPotentialId, nLevel, nil, bSimple)
self:AddTimer(1, 0.2, function()
self._mapNode.PotentialCard:SetPotentialItem(nPotentialId, nLevel, nil, bSimple)
self._mapNode.PotentialCard:ChangeWordRaycast(true)
end, true, true, true)
end
function CharPotentialTrialCtrl:OnEvent_RefreshPanel()
self:RefreshContent()
end
function CharPotentialTrialCtrl:OnEvent_PanelAdvance(nClosePanelId, nOpenPanelId)
self:PlaySwitchAnim(nClosePanelId, nOpenPanelId, false)
self:RefreshContent()
end
function CharPotentialTrialCtrl:OnEvent_PanelBack(nClosePanelId, nOpenPanelId)
self:PlaySwitchAnim(nClosePanelId, nOpenPanelId, true)
self:RefreshContent()
end
return CharPotentialTrialCtrl
@@ -0,0 +1,16 @@
local CharPotentialTrialPanel = class("CharPotentialTrialPanel", BasePanel)
CharPotentialTrialPanel._tbDefine = {
{
sPrefabPath = "CharacterInfoTrial/CharPotentialTrialPanel.prefab",
sCtrlName = "Game.UI.CharacterInfoTrial.CharPotentialTrialCtrl"
}
}
function CharPotentialTrialPanel:Awake()
end
function CharPotentialTrialPanel:OnEnable()
end
function CharPotentialTrialPanel:OnDisable()
end
function CharPotentialTrialPanel:OnDestroy()
end
return CharPotentialTrialPanel
@@ -0,0 +1,313 @@
local PlayerCharData = PlayerData.Char
local PlayerCoinData = PlayerData.Coin
local PlayerItemData = PlayerData.Item
local Actor2DManager = require("Game.Actor2D.Actor2DManager")
local ConfigData = require("GameCore.Data.ConfigData")
local LayoutRebuilder = CS.UnityEngine.UI.LayoutRebuilder
local CharSkillTrialCtrl = class("CharSkillTrialCtrl", BaseCtrl)
CharSkillTrialCtrl._mapNodeConfig = {
safeAreaRoot = {
sNodeName = "----SafeAreaRoot----",
sComponentName = "RectTransform"
},
contentRoot = {
sNodeName = "----ContentRoot----",
sComponentName = "RectTransform"
},
canvasGroupUpgrade = {
sNodeName = "--Upgrade--",
sComponentName = "CanvasGroup"
},
ctrlSkill = {
sNodeName = "goSkill",
nCount = 4,
sCtrlName = "Game.UI.TemplateEx.TemplateSkillSelectCtrl"
},
btnSkill = {
sNodeName = "goSkill",
nCount = 4,
sComponentName = "UIButton",
callback = "OnBtn_Skill"
},
goLvMax = {},
txtLvWord_Max = {
sComponentName = "TMP_Text",
sLanguageId = "Monster_Rank"
},
txtLvNum_Max = {sComponentName = "TMP_Text"},
goCD = {},
imgIcon_CD = {sComponentName = "Image"},
txtProperty_CD = {sComponentName = "TMP_Text", sLanguageId = "Talent_CD"},
txtValue_CD = {sComponentName = "TMP_Text"},
goCost = {},
imgIcon_Cost = {sComponentName = "Image"},
txtProperty_Cost = {
sComponentName = "TMP_Text",
sLanguageId = "Talent_Cost"
},
txtValue_Cost = {sComponentName = "TMP_Text"},
txtIsMaxLv = {
sComponentName = "TMP_Text",
sLanguageId = "Talent_MaxLv"
},
goMaxLv = {sNodeName = "txtIsMaxLv"},
goSkillInfoBrief = {},
imgSkillTypeBg = {sComponentName = "Image"},
imgSkillType = {sComponentName = "Image"},
txtSkillType = {sComponentName = "TMP_Text"},
txtSkillName = {sComponentName = "TMP_Text"},
goCDCost = {},
txtSkillDesc = {nCount = 2, sComponentName = "TMP_Text"},
TMP_Link = {
nCount = 2,
sNodeName = "txtSkillDesc",
sComponentName = "TMPHyperLink",
callback = "OnBtnClick_Word"
},
goDescNode = {
nCount = 2,
sNodeName = "imgSkillBg",
sComponentName = "RectTransform"
},
txtSkillDetailTitle = {
nCount = 2,
sComponentName = "TMP_Text",
sLanguageId = "Skill_DescTitle"
},
ScrollView = {nCount = 2, sComponentName = "ScrollRect"},
Content = {
nCount = 2,
sComponentName = "RectTransform"
},
rtSvBg = {
nCount = 2,
sComponentName = "RectTransform"
},
btnCloseWordTip = {
sComponentName = "Button",
callback = "OnBtnClick_CloseWordTip"
},
imgWordTipBg = {},
TMPWordDesc = {sComponentName = "TMP_Text"},
TMPWordTipsTitle = {sComponentName = "TMP_Text"},
switch_skillDesc = {nCount = 2},
switch_name = {
nCount = 2,
sComponentName = "TMP_Text",
sLanguageId = "CharSkillDescType"
},
btnSwitch1_on = {
sComponentName = "UIButton",
callback = "OnEvent_SetDesc"
},
btnSwitch1_off = {
sComponentName = "UIButton",
callback = "OnEvent_SetSimpleDesc"
},
btnSwitch2_on = {
sComponentName = "UIButton",
callback = "OnEvent_SetDesc"
},
btnSwitch2_off = {
sComponentName = "UIButton",
callback = "OnEvent_SetSimpleDesc"
}
}
CharSkillTrialCtrl._mapEventConfig = {
[EventId.CharBgRefresh] = "OnEvent_RefreshPanel",
[EventId.CharRelatePanelAdvance] = "OnEvent_PanelAdvance",
[EventId.CharRelatePanelBack] = "OnEvent_PanelBack"
}
local desc_adapt_ui_cfg = {
[1] = {
localPosY = -203.6,
otherHeight = 868.5,
otherHeightMax = 637.6
},
[2] = {
localPosY = -260.6,
otherHeight = 925.4,
otherHeightMax = 694.5
}
}
function CharSkillTrialCtrl:PlayOpenAnim()
end
function CharSkillTrialCtrl:PlayCloseAnim()
end
function CharSkillTrialCtrl:RefreshContent()
if self._panel.nPanelId ~= PanelId.CharSkillTrial then
return
end
if self.nCharId ~= self._panel.nCharId then
self.nUpgradeIndex = 1
end
self.nCharId = self._panel.nCharId
self.EET = ConfigTable.GetData_Character(self.nCharId).EET
self.tbSKillData = {}
self.sUpgradeError = nil
self.tbBranchSkillId = PlayerCharData:GetSkillIds(self.nCharId)
self:RefreshUpgrade()
end
function CharSkillTrialCtrl:PlaySwitchAnim(nClosePanelId, nOpenPanelId, bBack)
if nClosePanelId == PanelId.CharSkillTrial then
self._mapNode.contentRoot.gameObject:SetActive(false)
end
if nOpenPanelId == PanelId.CharSkillTrial then
self._mapNode.contentRoot.gameObject:SetActive(true)
end
end
function CharSkillTrialCtrl:Awake()
self.nW = 749
self.nH_min = 391
self:SetPngSprite(self._mapNode.imgIcon_CD, "Icon/ZZZOther/icon_common_skillinfo_ct")
self:SetPngSprite(self._mapNode.imgIcon_Cost, "Icon/ZZZOther/icon_common_skillinfo_eny")
self._mapCanNotSetAsEnterSkill = {
[115] = {
[1] = false,
[2] = false
}
}
self.nUpgradeIndex = 1
end
function CharSkillTrialCtrl:OnEnable()
self:RefreshContent()
if self._panel.nPanelId == PanelId.CharSkillTrial then
self:PlayOpenAnim()
else
self._mapNode.contentRoot.gameObject:SetActive(false)
end
end
function CharSkillTrialCtrl:OnDisable()
end
function CharSkillTrialCtrl:OnDestroy()
end
function CharSkillTrialCtrl:SetCanvasGroup(cg, bVisible)
NovaAPI.SetCanvasGroupAlpha(cg, bVisible == true and 1 or 0)
NovaAPI.SetCanvasGroupBlocksRaycasts(cg, bVisible == true)
NovaAPI.SetCanvasGroupInteractable(cg, bVisible == true)
end
function CharSkillTrialCtrl:RefreshUpgrade()
self.tbSKillData = PlayerCharData:GetSkillIds(self.nCharId)
self.tbSkillLevels = self._panel.mapCharTrialInfo.tbSkillLvs
self:SetSkillList()
self:SetUpgrade()
end
function CharSkillTrialCtrl:SetSkillList()
for i = 1, 4 do
self._mapNode.ctrlSkill[i]:SetSkill(self.tbSKillData[i], i, self.tbSkillLevels[i], self.EET, 0)
end
self._mapNode.ctrlSkill[self.nUpgradeIndex]:SetSelect(true)
end
function CharSkillTrialCtrl:SetUpgrade()
local mapSkillData = self.tbSKillData[self.nUpgradeIndex]
local nId = mapSkillData
local mapCfgData_Skill = ConfigTable.GetData_Skill(nId)
if nil == mapCfgData_Skill then
return
end
local nCD = FormatNum(mapCfgData_Skill.SkillCD * ConfigData.IntFloatPrecision)
local nCost = FormatNum(mapCfgData_Skill.UltraEnergy * ConfigData.IntFloatPrecision)
NovaAPI.SetTMPText(self._mapNode.txtLvNum_Max, tostring(self.tbSkillLevels[self.nUpgradeIndex]))
self._mapNode.goLvMax:SetActive(true)
local skillShowCfg = AllEnum.SkillTypeShow[self.nUpgradeIndex]
NovaAPI.SetTMPText(self._mapNode.txtSkillType, ConfigTable.GetUIText(skillShowCfg.sLanguageId))
local skillTypeIconIdx = skillShowCfg.iconIndex
self:SetAtlasSprite(self._mapNode.imgSkillType, "05_language", "zs_character_skill_text_" .. skillTypeIconIdx)
NovaAPI.SetImageNativeSize(self._mapNode.imgSkillType)
local _, _color = ColorUtility.TryParseHtmlString(skillShowCfg.bgColor)
NovaAPI.SetImageColor(self._mapNode.imgSkillTypeBg, _color)
NovaAPI.SetTMPText(self._mapNode.txtSkillName, mapCfgData_Skill.Title)
local sCD = tostring(nCD) .. ConfigTable.GetUIText("Talent_Sec")
local sCost = tostring(nCost)
if nCD <= 0 then
sCD = ConfigTable.GetUIText("Skill_NoCD")
end
if nCost <= 0 then
sCost = ConfigTable.GetUIText("Skill_NoCost")
end
NovaAPI.SetTMPText(self._mapNode.txtValue_CD, sCD)
NovaAPI.SetTMPText(self._mapNode.txtValue_Cost, sCost)
local bVisibleCD, bVisibleCost = false, false
if mapCfgData_Skill.Type == GameEnum.skillType.NORMAL then
bVisibleCD, bVisibleCost = false, false
elseif mapCfgData_Skill.Type == GameEnum.skillType.SKILL or mapCfgData_Skill.Type == GameEnum.skillType.SUPPORT or mapCfgData_Skill.Type == GameEnum.skillType.OTHER_SKILL then
bVisibleCD, bVisibleCost = true, false
elseif mapCfgData_Skill.Type == GameEnum.skillType.ULTIMATE then
bVisibleCD, bVisibleCost = true, true
end
self._mapNode.goCDCost:SetActive(bVisibleCD or bVisibleCost)
self._mapNode.goCD:SetActive(bVisibleCD)
self._mapNode.goCost:SetActive(bVisibleCost)
local bWithCDCost = bVisibleCD == true or bVisibleCost == true
local sDesc = UTILS.ParseDesc(mapCfgData_Skill)
local bIsSimpleDescType = PlayerCharData:GetCharPanelSkillDescType()
self._mapNode.btnSwitch1_on.gameObject:SetActive(bIsSimpleDescType)
self._mapNode.btnSwitch1_off.gameObject:SetActive(not bIsSimpleDescType)
self._mapNode.btnSwitch2_on.gameObject:SetActive(bIsSimpleDescType)
self._mapNode.btnSwitch2_off.gameObject:SetActive(not bIsSimpleDescType)
local sShowDesc = bIsSimpleDescType and UTILS.ParseDesc(mapCfgData_Skill, GameEnum.levelTypeData.SkillSlot, nil, true, 10) or sDesc
local nDescAdaptIdx = (bVisibleCD or bVisibleCost) and 2 or 1
self._mapNode.goDescNode[1].gameObject:SetActive(nDescAdaptIdx == 1)
self._mapNode.goDescNode[2].gameObject:SetActive(nDescAdaptIdx == 2)
self._mapNode.switch_skillDesc[1].gameObject:SetActive(nDescAdaptIdx == 1)
self._mapNode.switch_skillDesc[2].gameObject:SetActive(nDescAdaptIdx == 2)
if nDescAdaptIdx == 1 then
NovaAPI.SetTMPText(self._mapNode.txtSkillDesc[1], sShowDesc)
NovaAPI.SetTMPText(self._mapNode.txtSkillDesc[2], "")
else
NovaAPI.SetTMPText(self._mapNode.txtSkillDesc[1], "")
NovaAPI.SetTMPText(self._mapNode.txtSkillDesc[2], sShowDesc)
end
end
function CharSkillTrialCtrl:RefreshHeight(nType, bMax)
local nOtherHeight = bMax and desc_adapt_ui_cfg[nType].otherHeightMax or desc_adapt_ui_cfg[nType].otherHeight
local nMaxHeight = Settings.CURRENT_CANVAS_FULL_RECT_HEIGHT - nOtherHeight
local wait = function()
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
local nContentH = self._mapNode.Content[nType].rect.height
local bOver = nContentH > nMaxHeight
local nHeight = bOver and nMaxHeight or nContentH
NovaAPI.SetScrollRectVertical(self._mapNode.ScrollView[nType], bOver)
self._mapNode.rtSvBg[nType].sizeDelta = Vector2(self._mapNode.rtSvBg[nType].rect.width, nHeight)
NovaAPI.SetVerticalNormalizedPosition(self._mapNode.ScrollView[nType], 1)
end
cs_coroutine.start(wait)
end
function CharSkillTrialCtrl:OnBtn_Skill(btn)
local nIndex = btn.transform:GetSiblingIndex() + 1
if self.nUpgradeIndex == nIndex then
return
end
self.nUpgradeIndex = nIndex
for i, v in ipairs(self._mapNode.ctrlSkill) do
v:SetSelect(i == self.nUpgradeIndex)
end
self:SetUpgrade()
end
function CharSkillTrialCtrl:OnBtnClick_Word(link, _, sWordId)
UTILS.ClickWordLink(link, sWordId)
end
function CharSkillTrialCtrl:OnBtnClick_CloseWordTip()
self._mapNode.btnCloseWordTip.gameObject:SetActive(false)
self._mapNode.imgWordTipBg:SetActive(false)
end
function CharSkillTrialCtrl:OnEvent_RefreshPanel()
self:RefreshContent()
end
function CharSkillTrialCtrl:OnEvent_PanelAdvance(nClosePanelId, nOpenPanelId)
self:PlaySwitchAnim(nClosePanelId, nOpenPanelId, false)
self:RefreshContent()
end
function CharSkillTrialCtrl:OnEvent_PanelBack(nClosePanelId, nOpenPanelId)
self:PlaySwitchAnim(nClosePanelId, nOpenPanelId, true)
self:RefreshContent()
end
function CharSkillTrialCtrl:OnEvent_SetSimpleDesc()
PlayerCharData:SetCharPanelSkillDescType(true)
self:SetUpgrade()
end
function CharSkillTrialCtrl:OnEvent_SetDesc()
PlayerCharData:SetCharPanelSkillDescType(false)
self:SetUpgrade()
end
return CharSkillTrialCtrl
@@ -0,0 +1,14 @@
local CharSkillTrialPanel = class("CharSkillTrialPanel", BasePanel)
CharSkillTrialPanel._tbDefine = {
{
sPrefabPath = "CharacterInfoTrial/CharSkillTrialPanel.prefab",
sCtrlName = "Game.UI.CharacterInfoTrial.CharSkillTrialCtrl"
}
}
function CharSkillTrialPanel:Awake()
local tbParam = self:GetPanelParam()
if type(tbParam) == "table" then
self.nCharId = tbParam[1]
end
end
return CharSkillTrialPanel
@@ -0,0 +1,250 @@
local CharTalentDetailTrialCtrl = class("CharTalentDetailTrialCtrl", BaseCtrl)
CharTalentDetailTrialCtrl._mapNodeConfig = {
Info = {
sNodeName = "--Info--",
sCtrlName = "Game.UI.CharacterInfoTrial.CharTalentInfoTrialCtrl"
},
animInfo = {sNodeName = "--Info--", sComponentName = "Animator"},
goKeyReady = {},
imgKeyOff = {},
imgKeyOn = {},
goKeySelect = {},
btnKey = {
sComponentName = "UIButton",
callback = "OnBtnClick_Key"
},
Node = {
nCount = 10,
sCtrlName = "Game.UI.CharacterInfoEx.TalentNodeCtrl"
},
btnNode = {
nCount = 10,
sComponentName = "UIButton",
callback = "OnBtnClick_Node"
},
btnBack = {
sComponentName = "UIButton",
callback = "OnBtnClick_Back"
}
}
CharTalentDetailTrialCtrl._mapEventConfig = {
ActiveTalent = "OnEvent_ActiveTalent"
}
function CharTalentDetailTrialCtrl:Refresh(nSelectGroupIndex, nSelectGroupId, bSkipIn)
self.gameObject:SetActive(true)
if bSkipIn then
self._mapNode.animInfo:Play("CharTalent_info_in", 0, 0.7)
else
self._mapNode.animInfo:Play("CharTalent_info_in")
end
self.nCharId = self._panel.nCharId
self.nSelectGroupIndex = nSelectGroupIndex
self.nSelectGroupId = nSelectGroupId
self:RefreshData()
self:RefreshNode()
self:DefaultSelect()
end
function CharTalentDetailTrialCtrl:RefreshData()
local tbTalent, tbGroup = PlayerData.Talent:CreateNewTalentData(self.nCharId)
local nFirstGroup = tbTalent.nFirstGroup
local mapCurGroup = tbGroup[nFirstGroup]
self.tbGroup = {}
while mapCurGroup do
table.insert(self.tbGroup, mapCurGroup)
mapCurGroup = tbGroup[mapCurGroup.nNext]
end
self.mapTalent = tbTalent
self.nGroupNodeLimit = 0
local mapGroupCfg = ConfigTable.GetData("TalentGroup", self.nSelectGroupId)
if mapGroupCfg then
self.nGroupNodeLimit = mapGroupCfg.NodeLimit
end
self.nFragmentsId = 0
self.nPerFragmentsQty, self.nGeneralFragmentId = 0, 0
local mapCharCfg = ConfigTable.GetData_Character(self.nCharId)
if mapCharCfg then
self.nFragmentsId = mapCharCfg.FragmentsId
local mapGradeCfg = ConfigTable.GetData("CharGrade", mapCharCfg.Grade)
if mapGradeCfg then
self.nPerFragmentsQty = mapGradeCfg.FragmentsQty
self.nGeneralFragmentId = mapGradeCfg.GeneralFragmentId
end
end
end
function CharTalentDetailTrialCtrl:RefreshNode()
local tbTalent = CacheTable.GetData("_Talent", self.nSelectGroupId)
if not tbTalent then
return
end
local mapGroup = self.tbGroup[self.nSelectGroupIndex]
local bMax = mapGroup.nNormalCount >= self.nGroupNodeLimit
local nFragmentCount = PlayerData.Item:GetItemCountByID(self.nFragmentsId)
local bUnable = nFragmentCount < self.nPerFragmentsQty
self.tbTalent = {}
for _, v in pairs(tbTalent) do
if v.Type == GameEnum.talentType.OrdinaryNode then
local nIndex = v.Sort
local nState = 1
if self.mapTalent.tbActiveTalent[v.Id] then
nState = 3
elseif mapGroup.bLock or bMax or bUnable then
nState = 1
elseif not mapGroup.bLock and not bMax then
nState = 2
end
self._mapNode.Node[nIndex]:Refresh(nState)
self.tbTalent[nIndex] = v.Id
end
end
if not bMax then
self._mapNode.imgKeyOn:SetActive(false)
self._mapNode.imgKeyOff:SetActive(true)
else
self._mapNode.imgKeyOn:SetActive(true)
self._mapNode.imgKeyOff:SetActive(false)
end
end
function CharTalentDetailTrialCtrl:DefaultSelect()
if self.mapSelectNode ~= nil then
if self.mapSelectNode.bKey then
self._mapNode.goKeySelect:SetActive(false)
else
self._mapNode.Node[self.mapSelectNode.nIndex]:SetSelect(false)
end
end
local select_key = function()
self.mapSelectNode = {bKey = true, nIndex = 0}
self._mapNode.goKeySelect:SetActive(true)
self._mapNode.Info:RefreshKey(self.tbGroup[self.nSelectGroupIndex], self.mapTalent)
end
local select_normal = function()
local nIndex = 1
for i, v in ipairs(self.tbTalent) do
local bReady = self._mapNode.Node[i]:CheckReady()
if bReady then
nIndex = i
break
end
end
self.mapSelectNode = {bKey = false, nIndex = nIndex}
self._mapNode.Node[nIndex]:SetSelect(true)
self._mapNode.Info:RefreshNormal(self.tbTalent[nIndex], self.tbGroup[self.nSelectGroupIndex], self.mapTalent)
end
local mapGroup = self.tbGroup[self.nSelectGroupIndex]
local bMax = mapGroup.nNormalCount >= self.nGroupNodeLimit
if mapGroup.bLock or bMax then
select_key()
return
end
local nLeft = self.nGroupNodeLimit - mapGroup.nNormalCount
local nGeneralCount = PlayerData.Item:GetItemCountByID(self.nGeneralFragmentId)
local nFragmentCount = PlayerData.Item:GetItemCountByID(self.nFragmentsId)
local nUse = self.nPerFragmentsQty * nLeft
if nUse <= nFragmentCount + nGeneralCount or nFragmentCount < self.nPerFragmentsQty then
select_key()
else
select_normal()
end
end
function CharTalentDetailTrialCtrl:PlayOpenAnim()
end
function CharTalentDetailTrialCtrl:Awake()
self.gameObject:SetActive(false)
self.ani = self.gameObject.transform:GetComponent("Animator")
end
function CharTalentDetailTrialCtrl:OnEnable()
end
function CharTalentDetailTrialCtrl:OnDisable()
end
function CharTalentDetailTrialCtrl:OnDestroy()
end
function CharTalentDetailTrialCtrl:OnBtnClick_Key(btn)
if self.mapSelectNode ~= nil then
if self.mapSelectNode.bKey == true then
return
else
self._mapNode.Node[self.mapSelectNode.nIndex]:SetSelect(false)
end
end
self.mapSelectNode = {bKey = true, nIndex = 0}
self._mapNode.goKeySelect:SetActive(true)
self._mapNode.Info:RefreshKey(self.tbGroup[self.nSelectGroupIndex], self.mapTalent)
end
function CharTalentDetailTrialCtrl:OnBtnClick_Node(btn, nIndex)
if self.mapSelectNode ~= nil then
if self.mapSelectNode.bKey == true then
self._mapNode.goKeySelect:SetActive(false)
elseif self.mapSelectNode.bKey == false and self.mapSelectNode.nIndex == nIndex then
return
elseif self.mapSelectNode.bKey == false and self.mapSelectNode.nIndex ~= nIndex then
self._mapNode.Node[self.mapSelectNode.nIndex]:SetSelect(false)
end
end
self.mapSelectNode = {bKey = false, nIndex = nIndex}
self._mapNode.Node[nIndex]:SetSelect(true)
self._mapNode.Info:RefreshNormal(self.tbTalent[nIndex], self.tbGroup[self.nSelectGroupIndex], self.mapTalent)
end
function CharTalentDetailTrialCtrl:OnBtnClick_Back(btn)
if self.mapSelectNode.bKey then
self._mapNode.goKeySelect:SetActive(false)
else
self._mapNode.Node[self.mapSelectNode.nIndex]:SetSelect(false)
end
self._mapNode.animInfo:Play("CharTalent_info_out")
EventManager.Hit("CharTalentDetailBack")
self:AddTimer(1, 0.33, function()
self.gameObject:SetActive(false)
end, true, true, true)
end
function CharTalentDetailTrialCtrl:OnEvent_ActiveTalent(bKey, nTalentId)
if bKey then
EventManager.Hit(EventId.BlockInput, true)
end
local nHas = PlayerData.Item:GetItemCountByID(self.nFragmentsId)
local callback = function()
local bAble = nHas >= self.nPerFragmentsQty
if not bAble or bKey then
self:RefreshNode()
end
if bKey then
PlayerData.Voice:PlayCharVoice("exCharUp", self.nCharId)
CS.WwiseAudioManager.Instance:PostEvent("ui_charInfo_talent_active_large")
self.ani:Play("TalentKeyNode_unlock", 0, 0)
self:AddTimer(1, 1.3, function()
EventManager.Hit(EventId.BlockInput, false)
end, true, true, true)
end
end
if self.mapSelectNode.bKey then
callback()
else
self._mapNode.Node[self.mapSelectNode.nIndex]:PlayActiveAnim(callback)
local nStart = self.mapSelectNode.nIndex
local nIndex = 0
for i, v in ipairs(self.tbTalent) do
if i > nStart then
local bActive = self._mapNode.Node[i]:CheckActive()
if not bActive then
nIndex = i
break
end
end
end
if nIndex == 0 then
for i, v in ipairs(self.tbTalent) do
if i < nStart then
local bActive = self._mapNode.Node[i]:CheckActive()
if not bActive then
nIndex = i
break
end
end
end
end
if nIndex ~= 0 then
self:OnBtnClick_Node(nil, nIndex)
end
end
self:RefreshData()
end
return CharTalentDetailTrialCtrl
@@ -0,0 +1,140 @@
local CharTalentInfoTrialCtrl = class("CharTalentInfoTrialCtrl", BaseCtrl)
local LocalData = require("GameCore.Data.LocalData")
local newDayTime = UTILS.GetDayRefreshTimeOffset()
CharTalentInfoTrialCtrl._mapNodeConfig = {
sv = {sComponentName = "ScrollRect"},
txtNodeName = {sComponentName = "TMP_Text"},
txtTitleDesc = {
sComponentName = "TMP_Text",
sLanguageId = "CharTalent_Title_Desc"
},
TMP_Link1 = {
sNodeName = "txtSkillDesc",
sComponentName = "TMPHyperLink",
callback = "OnLinkClick_Word"
},
txtSkillDesc = {sComponentName = "TMP_Text"}
}
CharTalentInfoTrialCtrl._mapEventConfig = {}
function CharTalentInfoTrialCtrl:RefreshKey(mapGroup, mapTalent)
local mapTalentCfg = ConfigTable.GetData("Talent", mapGroup.nKeyTalent)
local mapGroupCfg = ConfigTable.GetData("TalentGroup", mapGroup.nId)
if not mapTalentCfg or not mapGroupCfg then
return
end
self.sKeyName = mapTalentCfg.Title
self.nGroupId = mapGroup.nId
NovaAPI.SetTMPText(self._mapNode.txtNodeName, mapTalentCfg.Title)
NovaAPI.SetTMPText(self._mapNode.txtSkillDesc, UTILS.ParseDesc(mapTalentCfg, nil, nil, nil, nil, {
nCharId = self._panel.nCharId
}))
local bActive = mapTalent.tbActiveTalent[mapGroup.nKeyTalent]
if bActive then
else
local nLeft = mapGroupCfg.NodeLimit - mapGroup.nNormalCount
local mapCharCfg = ConfigTable.GetData_Character(self._panel.nCharId)
if not mapCharCfg then
return
end
local mapGradeCfg = ConfigTable.GetData("CharGrade", mapCharCfg.Grade)
if not mapGradeCfg then
return
end
end
NovaAPI.SetVerticalNormalizedPosition(self._mapNode.sv, 1)
end
function CharTalentInfoTrialCtrl:RefreshNormal(nTalentId, mapGroup, mapTalent)
self.nTalentId = nTalentId
local mapTalentCfg = ConfigTable.GetData("Talent", nTalentId)
if not mapTalentCfg then
return
end
NovaAPI.SetTMPText(self._mapNode.txtNodeName, mapTalentCfg.Title)
NovaAPI.SetTMPText(self._mapNode.txtSkillDesc, UTILS.ParseParamDesc(mapTalentCfg.Desc, mapTalentCfg, nil, {
nCharId = self._panel.nCharId
}))
NovaAPI.SetVerticalNormalizedPosition(self._mapNode.sv, 1)
end
function CharTalentInfoTrialCtrl:ActiveLayer(active)
local isSelectAgain = false
local confirmCallback = function()
if isSelectAgain then
local _curTimeStamp = CS.ClientManager.Instance.serverTimeStampWithTimeZone
local _fixedTimeStamp = _curTimeStamp + newDayTime * 3600
local _nYear = tonumber(os.date("!%Y", _fixedTimeStamp))
local _nMonth = tonumber(os.date("!%m", _fixedTimeStamp))
local _nDay = tonumber(os.date("!%d", _fixedTimeStamp))
local _nowD = _nYear * 366 + _nMonth * 31 + _nDay
LocalData.SetPlayerLocalData("TalentActiveLayer_Tips_Time", tostring(_nowD))
end
active()
end
local againCallback = function(isSelect)
isSelectAgain = isSelect
end
if not self.nLayerCost then
return
end
local mapCharCfg = ConfigTable.GetData_Character(self._panel.nCharId)
if not mapCharCfg then
return
end
local mapGradeCfg = ConfigTable.GetData("CharGrade", mapCharCfg.Grade)
if not mapGradeCfg then
return
end
local nGeneralCount = PlayerData.Item:GetItemCountByID(mapGradeCfg.GeneralFragmentId)
local nFragmentCount = PlayerData.Item:GetItemCountByID(mapCharCfg.FragmentsId)
local sFragment = ConfigTable.GetData_Item(mapCharCfg.FragmentsId).Title
local sGeneral = ConfigTable.GetData_Item(mapGradeCfg.GeneralFragmentId).Title
local sChar = mapCharCfg.Name
if nFragmentCount >= self.nLayerCost then
local msg = {
nType = AllEnum.MessageBox.Confirm,
sContent = orderedFormat(ConfigTable.GetUIText("CharTalent_ActiveLayerTip_CharFragment"), sFragment, self.nLayerCost, sChar, self.sKeyName),
callbackConfirm = confirmCallback,
callbackAgain = againCallback
}
EventManager.Hit(EventId.OpenMessageBox, msg)
elseif self.nLayerCost <= nFragmentCount + nGeneralCount then
local sTip = ""
if nFragmentCount == 0 then
sTip = orderedFormat(ConfigTable.GetUIText("CharTalent_ActiveLayerTip_GeneralFragment"), sGeneral, self.nLayerCost, sChar, self.sKeyName)
else
sTip = orderedFormat(ConfigTable.GetUIText("CharTalent_ActiveLayerTip_BothFragment"), sFragment, nFragmentCount, sGeneral, self.nLayerCost - nFragmentCount, sChar, self.sKeyName)
end
local msg = {
nType = AllEnum.MessageBox.Confirm,
sContent = sTip,
callbackConfirm = confirmCallback,
callbackAgain = againCallback
}
EventManager.Hit(EventId.OpenMessageBox, msg)
end
end
function CharTalentInfoTrialCtrl:Awake()
end
function CharTalentInfoTrialCtrl:OnEnable()
end
function CharTalentInfoTrialCtrl:OnDisable()
end
function CharTalentInfoTrialCtrl:OnDestroy()
end
function CharTalentInfoTrialCtrl:OnBtnClick_Tips(btn, nIndex)
local mapCharCfg = ConfigTable.GetData_Character(self._panel.nCharId)
if not mapCharCfg then
return
end
local mapData = {
nTid = mapCharCfg.FragmentsId,
bShowDepot = true,
bShowJumpto = true
}
EventManager.Hit(EventId.OpenPanel, PanelId.ItemTips, btn.transform, mapData)
end
function CharTalentInfoTrialCtrl:OnLinkClick_Word(link, sWordId)
UTILS.ClickWordLink(link, sWordId, {
nCharId = self._panel.nCharId
})
end
return CharTalentInfoTrialCtrl
@@ -0,0 +1,318 @@
local WwiseAudioManager = CS.WwiseAudioManager.Instance
local Actor2DManager = require("Game.Actor2D.Actor2DManager")
local CharTalentTrialCtrl = class("CharTalentTrialCtrl", BaseCtrl)
CharTalentTrialCtrl._mapNodeConfig = {
root_canvas_group = {
sComponentName = "CanvasGroup"
},
anim = {
sNodeName = "root_canvas_group",
sComponentName = "Animator"
},
rawImg = {
sNodeName = "----Actor2D----",
sComponentName = "RawImage"
},
btn_FullScreen_PlayBtnUIShowAnim = {},
btnUIShow = {
sComponentName = "UIButton",
callback = "OnBtnClick_UIShow"
},
btnUIHide = {
sComponentName = "UIButton",
callback = "OnBtnClick_UIHide"
},
tmpUIShow = {
sComponentName = "TMP_Text",
sLanguageId = "MainView_ShowUI"
},
KeyNode = {
nCount = 5,
sCtrlName = "Game.UI.CharacterInfoEx.TalentKeyNodeCtrl"
},
btnKey = {
nCount = 5,
sComponentName = "UIButton",
callback = "OnBtnClick_Key"
},
btnBack = {
sComponentName = "UIButton",
callback = "OnBtnClick_Back"
},
tmpGroupName = {sComponentName = "TMP_Text"},
tmpGroupDesc = {sComponentName = "TMP_Text"},
tmpGroupDesc_Link = {
sNodeName = "tmpGroupDesc",
sComponentName = "TMPHyperLink",
callback = "OnBtnClick_Word"
},
imgGroupNode = {sComponentName = "Image"},
imgNode = {nCount = 10, sComponentName = "Image"},
btnPrev = {
sComponentName = "UIButton",
callback = "OnBtnClick_PrevGroup"
},
btnNext = {
sComponentName = "UIButton",
callback = "OnBtnClick_NextGroup"
},
animRoot = {sNodeName = "root", sComponentName = "Animator"},
animGroupNode = {sComponentName = "Animator"},
tbAnimNode = {
sNodeName = "imgNode",
nCount = 10,
sComponentName = "Animator"
},
animDetailText = {
sNodeName = "DetailTextAnim",
sComponentName = "Animator"
}
}
CharTalentTrialCtrl._mapEventConfig = {
[EventId.CharRelatePanelOpen] = "OnEvent_CharRelatePanelOpen"
}
function CharTalentTrialCtrl:RefreshAll(nUIState)
self:SetL2D()
self:SetBtnUIShowHide()
self:SetOverview()
self:SetDetail(nUIState)
end
function CharTalentTrialCtrl:BuildUIData()
self.nCharId = self._panel.nCharId
self.tbGroup = {}
local tbTalent, tbGroup = PlayerData.Talent:CreateNewTalentData(self.nCharId)
local nFirstGroup = tbTalent.nFirstGroup
local mapCurGroup = tbGroup[nFirstGroup]
while mapCurGroup do
table.insert(self.tbGroup, mapCurGroup)
mapCurGroup = tbGroup[mapCurGroup.nNext]
end
local mapCfgData_Character = ConfigTable.GetData("Character", self.nCharId)
local mapCfgData_CharGrade = ConfigTable.GetData("CharGrade", mapCfgData_Character.Grade)
self.nItemId = mapCfgData_Character.FragmentsId
self.nItemNum = mapCfgData_CharGrade.FragmentsQty
self:CheckL2DStatus()
end
function CharTalentTrialCtrl:CheckL2DStatus()
self.nL2DStatus = 0
for i, v in ipairs(self.tbGroup) do
local mapCfgData_TalentGroup = ConfigTable.GetData("TalentGroup", v.nId)
if v.nNormalCount == mapCfgData_TalentGroup.NodeLimit then
self.nL2DStatus = self.nL2DStatus + 1
end
end
end
function CharTalentTrialCtrl:SetAllVisibale(bVisible)
NovaAPI.SetCanvasGroupAlpha(self._mapNode.root_canvas_group, bVisible == true and 1 or 0)
NovaAPI.SetCanvasGroupBlocksRaycasts(self._mapNode.root_canvas_group, bVisible == true)
NovaAPI.SetCanvasGroupInteractable(self._mapNode.root_canvas_group, bVisible == true)
end
function CharTalentTrialCtrl:SetL2D()
local nCharSkinId = ConfigTable.GetData_Character(self.nCharId).DefaultSkinId
Actor2DManager.SetActor2D(self:GetPanelId(), self._mapNode.rawImg, self.nCharId, nCharSkinId, {
"TalentL2D",
self.nL2DStatus
}, 2)
end
function CharTalentTrialCtrl:SetBtnUIShowHide()
self._mapNode.btn_FullScreen_PlayBtnUIShowAnim:SetActive(self.bUIVisible == false)
self._mapNode.btnUIShow.gameObject:SetActive(self.bUIVisible == false)
self._mapNode.btnUIHide.gameObject:SetActive(self.bUIVisible == true)
end
function CharTalentTrialCtrl:CheckGroupState(bLock, nNormalCount, nNodeLimit)
local nState = 1
if bLock == true then
nState = 1
else
nState = nNodeLimit <= nNormalCount and 3 or 2
end
return nState
end
function CharTalentTrialCtrl:GetCurTalentId(nGroupId, nNormalCount)
local tbTalent = {}
local mapTalent = CacheTable.GetData("_Talent", nGroupId)
for k, v in pairs(mapTalent) do
if v.Type == GameEnum.talentType.OrdinaryNode then
table.insert(tbTalent, {
nId = v.Id,
nSort = v.Sort,
nIndex = v.Index
})
end
end
table.sort(tbTalent, function(a, b)
return a.nSort < b.nSort
end)
local mapTempTalentData = tbTalent[nNormalCount + 1]
if mapTempTalentData ~= nil then
return mapTempTalentData.nId
else
return nil
end
end
function CharTalentTrialCtrl:Awake()
self:SetAllVisibale(false)
self.bUIVisible = true
self.nCurGroupIndex = 1
self.nGroupNum = #self._mapNode.KeyNode
end
function CharTalentTrialCtrl:OnDisable()
Actor2DManager.UnsetActor2D(false, 2, true)
end
function CharTalentTrialCtrl:OnDestroy()
end
function CharTalentTrialCtrl:OnBtnClick_UIShow(btn)
if self.bUIVisible == false then
self.bUIVisible = true
self:SetBtnUIShowHide()
EventManager.Hit("ChangeCharTopBar", true, false)
EventManager.Hit("ChangeCharFgTab", true)
self._mapNode.anim:Play("CharTalent_Root_show")
EventManager.Hit(EventId.TemporaryBlockInput, 1)
end
end
function CharTalentTrialCtrl:OnBtnClick_UIHide(btn)
if self.bUIVisible == true then
self.bUIVisible = false
self:SetBtnUIShowHide()
EventManager.Hit("ChangeCharTopBar", false, false)
EventManager.Hit("ChangeCharFgTab", false)
self._mapNode.anim:Play("CharTalent_Root_hide")
EventManager.Hit(EventId.TemporaryBlockInput, 1)
end
end
function CharTalentTrialCtrl:SetOverview()
for i = 1, self.nGroupNum do
local mapGroupData = self.tbGroup[i]
local mapCfgData_TalentGroup = ConfigTable.GetData("TalentGroup", mapGroupData.nId)
local objCtrlKeyNode = self._mapNode.KeyNode[i]
if mapGroupData ~= nil and mapCfgData_TalentGroup ~= nil and objCtrlKeyNode ~= nil then
local nState = self:CheckGroupState(mapGroupData.bLock, mapGroupData.nNormalCount, mapCfgData_TalentGroup.NodeLimit)
objCtrlKeyNode:Refresh(mapGroupData.nId, i, nState)
end
end
end
function CharTalentTrialCtrl:OnEvent_CharRelatePanelOpen(nNextPanel, nCharId)
local bIsThis = nNextPanel == PanelId.CharTalentTrial
self:SetAllVisibale(bIsThis == true)
self._mapNode.anim:Play(bIsThis == true and "CharTalent_Root_in" or "CharTalent_Root_out")
self:BuildUIData()
self:RefreshAll()
end
function CharTalentTrialCtrl:OnBtnClick_Option(btn, nIndex)
if self.nSelectBgIndex == nIndex then
return
end
local change = function()
self._mapNode.imgOptionOn[self.nSelectBgIndex]:SetActive(false)
self._mapNode.imgOptionOff[self.nSelectBgIndex]:SetActive(true)
self._mapNode.imgOptionOn[nIndex]:SetActive(true)
self._mapNode.imgOptionOff[nIndex]:SetActive(false)
self.nSelectBgIndex = nIndex
end
if nIndex ~= 1 then
local mapGroupCfg = ConfigTable.GetData("TalentGroup", self.tbGroup[nIndex - 1].nId)
if not mapGroupCfg then
return
end
local bMax = self.tbGroup[nIndex - 1].nNormalCount >= mapGroupCfg.NodeLimit
if bMax then
change()
else
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("CharTalent_BackgroundLockTip"))
end
else
change()
end
end
function CharTalentTrialCtrl:OnBtnClick_Key(btn, nIndex)
self.nCurGroupIndex = nIndex
self:SetDetail()
EventManager.Hit("ChangeCharFgTab", false)
EventManager.Hit("ChangeCharTopBar", false, false)
self._mapNode.anim:Play("CharTalent_Root_o2d")
end
function CharTalentTrialCtrl:SetDetail(nUIState)
local mapGroupData = self.tbGroup[self.nCurGroupIndex]
self.nCurGroupId = mapGroupData.nId
local mapCfgData_TalentGroup = ConfigTable.GetData("TalentGroup", self.nCurGroupId)
local nHasNum = PlayerData.Item:GetItemCountByID(self.nItemId)
self.bEnoughNum = nHasNum >= self.nItemNum
local _n = math.floor(nHasNum / self.nItemNum)
if _n > mapCfgData_TalentGroup.NodeLimit - mapGroupData.nNormalCount then
_n = mapCfgData_TalentGroup.NodeLimit - mapGroupData.nNormalCount
end
local nCanActivateNum = self.bEnoughNum == true and _n or 1
local nAsPossibleAsCan = self.bEnoughNum == true and _n * self.nItemNum or self.nItemNum
NovaAPI.SetTMPText(self._mapNode.tmpGroupName, string.format("%02d %s", self.nCurGroupIndex, mapCfgData_TalentGroup.Title))
local nState = self:CheckGroupState(mapGroupData.bLock, mapGroupData.nNormalCount, mapCfgData_TalentGroup.NodeLimit)
self:SetAtlasSprite(self._mapNode.imgGroupNode, "11_ico", "zs_talent_star_l_" .. tostring(nState))
if nUIState ~= 1 then
self._mapNode.animGroupNode:Play("empty")
self._mapNode.imgGroupNode.transform:GetChild(0).localScale = Vector3.zero
end
for i = 1, mapCfgData_TalentGroup.NodeLimit do
if self._mapNode.imgNode[i] ~= nil then
local _name = "zs_talent_progress_1"
if mapGroupData.bLock ~= true then
if i <= mapGroupData.nNormalCount then
_name = "zs_talent_progress_3"
elseif nCanActivateNum >= i - mapGroupData.nNormalCount then
_name = "zs_talent_progress_2"
end
end
self:SetAtlasSprite(self._mapNode.imgNode[i], "11_ico", _name)
end
end
local mapCfgData_Talent = ConfigTable.GetData("Talent", mapGroupData.nKeyTalent)
NovaAPI.SetTMPText(self._mapNode.tmpGroupDesc, UTILS.ParseDesc(mapCfgData_Talent))
if nUIState == 1 then
self._mapNode.animDetailText:Play("CharTalent_Text_in")
end
if nUIState == 2 then
self._mapNode.animRoot:Play("CharTalent_Switch_in")
end
end
function CharTalentTrialCtrl:_PlayFX(anim, n)
local tbAnimName = {
"TalentNode_Unlock",
"TalentGroupNode_Unlock",
"CharTalent_Text_out",
"CharTalent_Switch_out"
}
anim:Play(tbAnimName[n])
if n == 2 then
WwiseAudioManager:PostEvent("ui_charInfo_talent_active_large_part2")
end
end
function CharTalentTrialCtrl:PlaySwitchGroupPrevNxtAnim()
local sequence = DOTween.Sequence()
sequence:AppendInterval(0.1)
sequence:AppendCallback(dotween_callback_handler(self, self._PlayFX, self._mapNode.animRoot, 4))
sequence:AppendInterval(0.3)
sequence:AppendCallback(dotween_callback_handler(self, self.SetDetail, 2))
EventManager.Hit(EventId.TemporaryBlockInput, 1)
end
function CharTalentTrialCtrl:OnBtnClick_Back(btn)
EventManager.Hit("ChangeCharFgTab", true)
EventManager.Hit("ChangeCharTopBar", true, false)
self._mapNode.anim:Play("CharTalent_Root_d2o")
end
function CharTalentTrialCtrl:OnBtnClick_PrevGroup(btn)
self.nCurGroupIndex = self.nCurGroupIndex - 1
if self.nCurGroupIndex < 1 then
self.nCurGroupIndex = self.nGroupNum
end
self:PlaySwitchGroupPrevNxtAnim()
end
function CharTalentTrialCtrl:OnBtnClick_NextGroup(btn)
self.nCurGroupIndex = self.nCurGroupIndex + 1
if self.nCurGroupIndex > self.nGroupNum then
self.nCurGroupIndex = 1
end
self:PlaySwitchGroupPrevNxtAnim()
end
function CharTalentTrialCtrl:OnBtnClick_Word(link, sWordId)
UTILS.ClickWordLink(link, sWordId)
end
return CharTalentTrialCtrl
@@ -0,0 +1,16 @@
local CharTalentTrialPanel = class("CharTalentTrialPanel", BasePanel)
CharTalentTrialPanel._tbDefine = {
{
sPrefabPath = "CharacterInfoTrial/CharTalentTrialPanel.prefab",
sCtrlName = "Game.UI.CharacterInfoTrial.CharTalentTrialCtrl"
}
}
function CharTalentTrialPanel:Awake()
end
function CharTalentTrialPanel:OnEnable()
end
function CharTalentTrialPanel:OnDisable()
end
function CharTalentTrialPanel:OnDestroy()
end
return CharTalentTrialPanel