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:
@@ -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
|
||||
Reference in New Issue
Block a user