Update - 1.13.0.124
EN: 1.13.0.124 CN: 1.13.0.124 JP: 1.13.0.128 KR: 1.13.0.130
This commit is contained in:
@@ -0,0 +1,167 @@
|
||||
local SkillDisplayCtrl = class("SkillDisplayCtrl", BaseCtrl)
|
||||
local WwiseAudioMgr = CS.WwiseAudioManager.Instance
|
||||
SkillDisplayCtrl._mapNodeConfig = {
|
||||
rtDisplay = {
|
||||
nCount = 2,
|
||||
sCtrlName = "Game.UI.Battle.SubSkillDisplay.UltimateDisplayCtrl"
|
||||
},
|
||||
rtSubSkill = {
|
||||
nCount = 2,
|
||||
sCtrlName = "Game.UI.Battle.SubSkillDisplay.SkillDisplayCtrl"
|
||||
}
|
||||
}
|
||||
SkillDisplayCtrl._mapEventConfig = {
|
||||
SoldierSkillDisPlay = "OnEvent_CastAssistSkill",
|
||||
[EventId.SubSkillDisplayInit] = "OnEvent_Init",
|
||||
InputEnable = "OnEvent_InputEnable"
|
||||
}
|
||||
function SkillDisplayCtrl:Awake()
|
||||
end
|
||||
function SkillDisplayCtrl:FadeIn()
|
||||
end
|
||||
function SkillDisplayCtrl:FadeOut()
|
||||
end
|
||||
function SkillDisplayCtrl:OnEnable()
|
||||
local wait = function()
|
||||
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
||||
NovaAPI.ForceUpdateCanvases()
|
||||
end
|
||||
cs_coroutine.start(wait)
|
||||
end
|
||||
function SkillDisplayCtrl:OnDisable()
|
||||
for _, mapData in pairs(self.mapChar) do
|
||||
Actor2DManager.UnsetActor2D(false, mapData.Idx, true)
|
||||
end
|
||||
end
|
||||
function SkillDisplayCtrl:OnDestroy()
|
||||
end
|
||||
function SkillDisplayCtrl:OnRelease()
|
||||
end
|
||||
function SkillDisplayCtrl:OnEvent_Init(tbTeam)
|
||||
self.mapChar = {}
|
||||
if #tbTeam < 3 then
|
||||
printWarn("人数小于3")
|
||||
return
|
||||
end
|
||||
for i = 2, 3 do
|
||||
local charTid = tbTeam[i]
|
||||
if charTid ~= nil and charTid ~= 0 then
|
||||
local nSkillId = ConfigTable.GetData_Character(charTid).AssistSkillId
|
||||
self.mapChar[charTid] = {
|
||||
Idx = i,
|
||||
nSkillId = nSkillId,
|
||||
bPlaying = false,
|
||||
rtIdx = i - 1,
|
||||
nSkillShowIdx = 0
|
||||
}
|
||||
end
|
||||
self._mapNode.rtDisplay[i - 1]:InitL2dRes(charTid, i)
|
||||
end
|
||||
end
|
||||
function SkillDisplayCtrl:OnEvent_CastAssistSkill(nCharId)
|
||||
if self.mapChar[nCharId] ~= nil then
|
||||
local nSkillId = self.mapChar[nCharId].nSkillId
|
||||
local checkType = self:CheckPlayType(nCharId)
|
||||
if checkType == 0 then
|
||||
return
|
||||
elseif checkType == 1 then
|
||||
self:UltimateDisplay(nCharId)
|
||||
elseif checkType == 2 then
|
||||
self:SkillDisplay(nCharId, nSkillId)
|
||||
end
|
||||
end
|
||||
end
|
||||
function SkillDisplayCtrl:OnEvent_InputEnable(bEnable)
|
||||
if not bEnable then
|
||||
self:InterrputAllDisplay()
|
||||
end
|
||||
end
|
||||
function SkillDisplayCtrl:InterrputAllDisplay()
|
||||
self._mapNode.rtDisplay[1]:InterrputAnim()
|
||||
self._mapNode.rtDisplay[2]:InterrputAnim()
|
||||
self._mapNode.rtSubSkill[1]:InterrputAnim()
|
||||
self._mapNode.rtSubSkill[2]:InterrputAnim()
|
||||
for _, mapSkill in pairs(self.mapChar) do
|
||||
mapSkill.bPlaying = false
|
||||
mapSkill.nSkillShowIdx = 0
|
||||
end
|
||||
end
|
||||
function SkillDisplayCtrl:SkillDisplay(nCharId, nSkillId)
|
||||
local mapData = self.mapChar[nCharId]
|
||||
if mapData == nil then
|
||||
return
|
||||
end
|
||||
local Callback = function()
|
||||
mapData.nSkillShowIdx = 0
|
||||
end
|
||||
if mapData.nSkillShowIdx == 0 then
|
||||
for nIdx, skillCtrl in ipairs(self._mapNode.rtSubSkill) do
|
||||
if not skillCtrl.bPlaying then
|
||||
skillCtrl:ShowSkillTips(nSkillId, nCharId, Callback)
|
||||
mapData.nSkillShowIdx = nIdx
|
||||
return
|
||||
end
|
||||
end
|
||||
printError("没有槽位播放技能展示")
|
||||
else
|
||||
self._mapNode.rtSubSkill[mapData.nSkillShowIdx]:ShowSkillTips(nSkillId, nCharId, Callback)
|
||||
WwiseAudioMgr:PostEvent("ui_tip_feadback")
|
||||
end
|
||||
end
|
||||
function SkillDisplayCtrl:UltimateDisplay(nCharId)
|
||||
local mapData = self.mapChar[nCharId]
|
||||
if mapData == nil then
|
||||
return
|
||||
end
|
||||
local Callback = function()
|
||||
mapData.bPlaying = false
|
||||
end
|
||||
if mapData.bPlaying then
|
||||
self._mapNode.rtDisplay[mapData.rtIdx]:ReShowSkill(Callback, mapData.Idx)
|
||||
else
|
||||
self._mapNode.rtDisplay[mapData.rtIdx]:ShowSkill(nCharId, mapData.Idx, Callback)
|
||||
mapData.bPlaying = true
|
||||
end
|
||||
self._mapNode.rtDisplay[mapData.rtIdx % 2 + 1]:Set2SecondSkill()
|
||||
end
|
||||
function SkillDisplayCtrl:CheckPlayType(nCharId)
|
||||
local bForce = self:CheckForcePlay()
|
||||
local nType = LocalSettingData.GetLocalSettingData("AnimationSub")
|
||||
if bForce then
|
||||
nType = 2
|
||||
end
|
||||
if nType == 3 then
|
||||
return 2
|
||||
elseif nType == 2 then
|
||||
if self.mapCharShow[nCharId] == nil then
|
||||
self.mapCharShow[nCharId] = true
|
||||
self:SetLocalData()
|
||||
end
|
||||
return 1
|
||||
elseif nType == 1 then
|
||||
if self.mapCharShow[nCharId] == nil then
|
||||
self.mapCharShow[nCharId] = true
|
||||
self:SetLocalData()
|
||||
return 1
|
||||
else
|
||||
return 2
|
||||
end
|
||||
end
|
||||
end
|
||||
function SkillDisplayCtrl:SetLocalData()
|
||||
local jsonData = {}
|
||||
for nCharId, _ in pairs(self.mapCharShow) do
|
||||
table.insert(jsonData, nCharId)
|
||||
end
|
||||
local sJson = RapidJson.encode(jsonData)
|
||||
LocalData.SetPlayerLocalData("SkillShowCount", sJson)
|
||||
return 1
|
||||
end
|
||||
function SkillDisplayCtrl:CheckForcePlay()
|
||||
local tbDynamic = {
|
||||
[GameEnum.dynamicLevelType.Trial] = true
|
||||
}
|
||||
local tbBattle = {}
|
||||
return tbDynamic[self._panel.DynamicType] or tbBattle[self._panel.BattleType]
|
||||
end
|
||||
return SkillDisplayCtrl
|
||||
@@ -0,0 +1,49 @@
|
||||
local SoldierBattlePanel = class("SoldierBattlePanel", BasePanel)
|
||||
local GamepadUIManager = require("GameCore.Module.GamepadUIManager")
|
||||
SoldierBattlePanel.OpenMinMap = true
|
||||
SoldierBattlePanel._bAddToBackHistory = false
|
||||
SoldierBattlePanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "Soldier/Battle/SoldierRoomInfo.prefab",
|
||||
sCtrlName = "Game.UI.Soldier.Battle.SoldierRoomInfoCtrl"
|
||||
},
|
||||
{
|
||||
sPrefabPath = "Battle/AdventureMainUI/BattlePopupTips.prefab",
|
||||
sCtrlName = "Game.UI.Battle.BattlePopupTipsCtrl"
|
||||
},
|
||||
{
|
||||
sPrefabPath = "Soldier/Battle/SoldierPausePanel.prefab",
|
||||
sCtrlName = "Game.UI.Soldier.Battle.SoldierPauseCtrl"
|
||||
},
|
||||
{
|
||||
sPrefabPath = "Soldier/Battle/SoldierSubSkillDisplay.prefab",
|
||||
sCtrlName = "Game.UI.Soldier.Battle.SoldierSkillDisplayCtrl"
|
||||
}
|
||||
}
|
||||
function SoldierBattlePanel:Awake()
|
||||
self.BattleType = GameEnum.worldLevelType.Dynamic
|
||||
self.DynamicType = GameEnum.dynamicLevelType.SoldierChess
|
||||
self.trUIRoot = GameObject.Find("---- UI ----").transform
|
||||
GamepadUIManager.EnterAdventure()
|
||||
GamepadUIManager.EnableGamepadUI("BattleMenu", {}, nil, true)
|
||||
self.tbChess = self._tbParam[1]
|
||||
self.tbPartner = self._tbParam[2]
|
||||
self.nTotalTime = self._tbParam[3]
|
||||
end
|
||||
function SoldierBattlePanel:OnEnable()
|
||||
local wait = function()
|
||||
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.Hud, false, false)
|
||||
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
||||
end
|
||||
cs_coroutine.start(wait)
|
||||
EventManager.Hit("RefreshSoldierChessList", self.tbChess)
|
||||
end
|
||||
function SoldierBattlePanel:OnAfterEnter()
|
||||
EventManager.Hit(EventId.SubSkillDisplayInit, self._tbParam[1])
|
||||
end
|
||||
function SoldierBattlePanel:OnDisable()
|
||||
GamepadUIManager.DisableGamepadUI("BattleMenu")
|
||||
GamepadUIManager.QuitAdventure()
|
||||
end
|
||||
return SoldierBattlePanel
|
||||
@@ -0,0 +1,451 @@
|
||||
local SoldierBattleResultCtrl = class("SoldierBattleResultCtrl", BaseCtrl)
|
||||
SoldierBattleResultCtrl._mapNodeConfig = {
|
||||
goRoot = {
|
||||
sNodeName = "----SafeAreaRoot----"
|
||||
},
|
||||
Bg = {},
|
||||
BgFail = {},
|
||||
goNodeSuccess = {},
|
||||
goNodeFail = {},
|
||||
goNodeExpansion = {},
|
||||
goNodeExpansionFail = {},
|
||||
goBattleReputation = {},
|
||||
imgNumBarReputation = {sComponentName = "Image"},
|
||||
txtNumPrestige = {sComponentName = "TMP_Text"},
|
||||
txtNumPrestigeAdd = {sComponentName = "TMP_Text"},
|
||||
goBattleRound = {},
|
||||
BarContainer = {
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
txt_NodeIndex = {sComponentName = "TMP_Text"},
|
||||
Partner = {nCount = 2},
|
||||
txt_PartnerBattle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "SoldierNodeType_Event"
|
||||
},
|
||||
txt_PartnerWinning = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Result_WinningTitle"
|
||||
},
|
||||
txt_PartnerWinningNum = {sComponentName = "TMP_Text"},
|
||||
imgNumBar = {sComponentName = "Image"},
|
||||
txtNumRoundPrestige = {sComponentName = "TMP_Text"},
|
||||
txtNumRoundTitle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Result_Prestige"
|
||||
},
|
||||
txtLevel = {sComponentName = "TMP_Text"},
|
||||
txtExp = {sComponentName = "TMP_Text"},
|
||||
txtNumLvTitle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Result_ExperienceTitle"
|
||||
},
|
||||
txtDataStatisticsTitle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Result_StatisticsTitle"
|
||||
},
|
||||
txtNumCoinsTitle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Result_CoinsTitle"
|
||||
},
|
||||
txtCoinsTotalCount = {sComponentName = "TMP_Text"},
|
||||
coinItem = {sComponentName = "Transform"},
|
||||
CoinListRoot = {sComponentName = "Transform"},
|
||||
gosoldierItemRoot = {sComponentName = "Transform"},
|
||||
soldierDamageItem = {sComponentName = "Transform"},
|
||||
goBattleExpansion = {},
|
||||
NumLayout = {sComponentName = "Transform"},
|
||||
NumRootItem = {sComponentName = "Transform"},
|
||||
txtIntegralTitle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Result_Imntergral"
|
||||
},
|
||||
txtAwardTitle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Result_AwardTitle"
|
||||
},
|
||||
txtScoreTitle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Result_ScoreTitle"
|
||||
},
|
||||
txtIntegralNum = {sComponentName = "TMP_Text"},
|
||||
btnConfirm = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Confirm"
|
||||
},
|
||||
txtBtnConfirm = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Level_Select_Continue"
|
||||
},
|
||||
btnSettlement = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Result"
|
||||
},
|
||||
txtBtnSettlement = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Level_Select_GoResult"
|
||||
},
|
||||
Mask = {
|
||||
sComponentName = "CanvasGroup"
|
||||
}
|
||||
}
|
||||
SoldierBattleResultCtrl._mapEventConfig = {
|
||||
SoldierChallengeEnd = "OnEvent_SoldierChallengeEnd"
|
||||
}
|
||||
SoldierBattleResultCtrl._mapRedDotConfig = {}
|
||||
local CSColor = Color(1.0, 0.8392156862745098, 0.5333333333333333, 1)
|
||||
local CFColor = Color(0.9137254901960784, 0.9294117647058824, 0.9490196078431372, 1)
|
||||
local _NS = AllEnum.SoldierResultType.NodeSuccess
|
||||
local _NF = AllEnum.SoldierResultType.NodeFail
|
||||
local _CS = AllEnum.SoldierResultType.ChallengeSuccess
|
||||
local _CF = AllEnum.SoldierResultType.ChallengeFail
|
||||
function SoldierBattleResultCtrl:RefreshResult()
|
||||
self._mapNode.BgFail.gameObject:SetActive(self.nResultType == _NF or self.nResultType == _CF)
|
||||
self._mapNode.Bg.gameObject:SetActive(self.nResultType == _NS or self.nResultType == _CS)
|
||||
self._mapNode.goNodeSuccess.gameObject:SetActive(self.nResultType == _NS)
|
||||
self._mapNode.goNodeFail.gameObject:SetActive(self.nResultType == _NF)
|
||||
self._mapNode.goNodeExpansion.gameObject:SetActive(self.nResultType == _CS)
|
||||
self._mapNode.goNodeExpansionFail.gameObject:SetActive(self.nResultType == _CF)
|
||||
self.levelData = PlayerData.SoldierData:GetCurLevelData()
|
||||
if self.nResultType == _NS or self.nResultType == _NF then
|
||||
self:SetGoBattleReputationMsg()
|
||||
self:SetGoBattleRoundMsg()
|
||||
self._mapNode.goBattleReputation:SetActive(true)
|
||||
self._mapNode.goBattleRound:SetActive(true)
|
||||
self._mapNode.goBattleExpansion:SetActive(false)
|
||||
if self.levelData:GetHp() > 0 then
|
||||
self._mapNode.btnConfirm.gameObject:SetActive(true)
|
||||
self._mapNode.btnSettlement.gameObject:SetActive(false)
|
||||
else
|
||||
self._mapNode.btnConfirm.gameObject:SetActive(false)
|
||||
self._mapNode.btnSettlement.gameObject:SetActive(true)
|
||||
end
|
||||
elseif self.nResultType == _CS or self.nResultType == _CF then
|
||||
self.challengeColor = self.nResultType == _CS and CSColor or CFColor
|
||||
self:SetGoBattleExpansionMsg()
|
||||
self._mapNode.goBattleReputation:SetActive(false)
|
||||
self._mapNode.goBattleRound:SetActive(false)
|
||||
self._mapNode.goBattleExpansion:SetActive(true)
|
||||
self._mapNode.btnConfirm.gameObject:SetActive(true)
|
||||
self._mapNode.btnSettlement.gameObject:SetActive(false)
|
||||
end
|
||||
self:AddTimer(1, 0.1, function()
|
||||
if self.nResultType == _NS then
|
||||
self.nAnimator:Play("SoldierResult_successfulchallenge01")
|
||||
elseif self.nResultType == _NF then
|
||||
self.nAnimator:Play("SoldierResult_failchallenge01")
|
||||
elseif self.nResultType == _CS then
|
||||
self.nAnimator:Play("SoldierResult_successfulexpansion02")
|
||||
elseif self.nResultType == _CF then
|
||||
self.nAnimator:Play("SoldierResult_failexpansion02")
|
||||
end
|
||||
end, true, true, true)
|
||||
end
|
||||
function SoldierBattleResultCtrl:ClosePanel()
|
||||
CS.AdventureModuleHelper.ResumeLogic()
|
||||
if NovaAPI.GetCurrentModuleName() == "MainMenuModuleScene" then
|
||||
EventManager.Hit(EventId.CloesCurPanel)
|
||||
PlayerData.Base:OnBackToMainMenuModule()
|
||||
else
|
||||
NovaAPI.SetCanvasGroupAlpha(self._mapNode.Mask, 0)
|
||||
self._mapNode.Mask.gameObject:SetActive(true)
|
||||
EventManager.Hit(EventId.TemporaryBlockInput, 0.5)
|
||||
local sequence = DOTween.Sequence()
|
||||
sequence:Append(self._mapNode.Mask:DOFade(1, 0.5):SetUpdate(true))
|
||||
sequence:AppendCallback(function()
|
||||
local function levelEndCallback()
|
||||
EventManager.Remove("ADVENTURE_LEVEL_UNLOAD_COMPLETE", self, levelEndCallback)
|
||||
NovaAPI.EnterModule("MainMenuModuleScene", true, 17)
|
||||
end
|
||||
EventManager.Add("ADVENTURE_LEVEL_UNLOAD_COMPLETE", self, levelEndCallback)
|
||||
CS.AdventureModuleHelper.LevelStateChanged(true, 0, true)
|
||||
end)
|
||||
sequence:SetUpdate(true)
|
||||
end
|
||||
end
|
||||
function SoldierBattleResultCtrl:Awake()
|
||||
end
|
||||
function SoldierBattleResultCtrl:OnEnable()
|
||||
self.mapNextData = nil
|
||||
CS.AdventureModuleHelper.PauseLogic()
|
||||
self.nAnimator = self.gameObject:GetComponent("Animator")
|
||||
local tbParam = self:GetPanelParam()
|
||||
if type(tbParam) == "table" then
|
||||
self.nResultType = tbParam[1]
|
||||
self.mapData = tbParam[2]
|
||||
self.callback = tbParam[3]
|
||||
self:RefreshResult()
|
||||
end
|
||||
end
|
||||
function SoldierBattleResultCtrl:OnDisable()
|
||||
if self.callback ~= nil then
|
||||
self.callback()
|
||||
end
|
||||
end
|
||||
function SoldierBattleResultCtrl:OnDestroy()
|
||||
if self.tbSoldierGridCtrl ~= nil then
|
||||
for nInstanceId, objCtrl in pairs(self.tbSoldierGridCtrl) do
|
||||
self:UnbindCtrlByNode(objCtrl)
|
||||
self.tbSoldierGridCtrl[nInstanceId] = nil
|
||||
end
|
||||
self.tbSoldierGridCtrl = {}
|
||||
end
|
||||
if self.ReputationTweener ~= nil then
|
||||
self.ReputationTweener:Kill()
|
||||
self.ReputationTweener = nil
|
||||
end
|
||||
if self.tbScoreDigitTweeners ~= nil then
|
||||
for _, tw in ipairs(self.tbScoreDigitTweeners) do
|
||||
if tw ~= nil then
|
||||
tw:Kill()
|
||||
end
|
||||
end
|
||||
self.tbScoreDigitTweeners = nil
|
||||
end
|
||||
end
|
||||
function SoldierBattleResultCtrl:OnBtnClick_Confirm()
|
||||
if self.mapNextData ~= nil then
|
||||
self.nResultType = self.mapNextData.nType
|
||||
self.mapData = self.mapNextData.mapData
|
||||
self.callback = self.mapNextData.callback
|
||||
self:RefreshResult()
|
||||
self.mapNextData = nil
|
||||
else
|
||||
self:ClosePanel()
|
||||
end
|
||||
end
|
||||
function SoldierBattleResultCtrl:OnBtnClick_Result()
|
||||
self:ClosePanel()
|
||||
end
|
||||
function SoldierBattleResultCtrl:OnEvent_SoldierChallengeEnd(nType, mapData, callback)
|
||||
self.mapNextData = {
|
||||
nType = nType,
|
||||
mapData = mapData,
|
||||
callback = callback
|
||||
}
|
||||
end
|
||||
function SoldierBattleResultCtrl:SetGoBattleReputationMsg()
|
||||
NovaAPI.SetTMPText(self._mapNode.txtNumPrestige, self.levelData:GetHp())
|
||||
if self.mapData.tbChange.nHpChange >= 0 then
|
||||
NovaAPI.SetTMPText(self._mapNode.txtNumPrestigeAdd, ConfigTable.GetUIText("Soldier_Result_Prestige") .. " +" .. self.mapData.tbChange.nHpChange)
|
||||
else
|
||||
NovaAPI.SetTMPText(self._mapNode.txtNumPrestigeAdd, ConfigTable.GetUIText("Soldier_Result_Prestige") .. " " .. self.mapData.tbChange.nHpChange)
|
||||
end
|
||||
CS.WwiseAudioManager.Instance:PostEvent("mode_900001_chess_result_reputationUp")
|
||||
local imgBar = self._mapNode.imgNumBarReputation
|
||||
local nHpEnd = self.levelData:GetHp()
|
||||
local nFullHp = 100
|
||||
imgBar.fillAmount = 0
|
||||
self:AddTimer(1, 1, function()
|
||||
local nTarget = nHpEnd / nFullHp
|
||||
if nTarget < 0 then
|
||||
nTarget = 0
|
||||
end
|
||||
if 1 < nTarget then
|
||||
nTarget = 1
|
||||
end
|
||||
self.reputationBarTweener = DOTween.To(function()
|
||||
return imgBar.fillAmount
|
||||
end, function(value)
|
||||
imgBar.fillAmount = value
|
||||
end, nTarget, 0.5):SetUpdate(true)
|
||||
end, true, true, true)
|
||||
end
|
||||
function SoldierBattleResultCtrl:GetCurChallengeState()
|
||||
if PlayerData.SoldierData.curChallengeData == nil then
|
||||
return 0, 0
|
||||
end
|
||||
if PlayerData.SoldierData.curChallengeData.nGradeChallengeId == 0 then
|
||||
return 0, 0
|
||||
end
|
||||
local curChallengeCfg = ConfigTable.GetData("SoldierGradeChallenge", PlayerData.SoldierData.curChallengeData.nGradeChallengeId)
|
||||
if not curChallengeCfg then
|
||||
return 0, 0
|
||||
end
|
||||
local tbAllNodeList = {}
|
||||
local func_ForEach_SoldierNodePlan = function(mapLine)
|
||||
if curChallengeCfg.NodeGroupId == mapLine.NodeGroupId then
|
||||
table.insert(tbAllNodeList, mapLine)
|
||||
end
|
||||
end
|
||||
ForEachTableLine(DataTable.SoldierNodePlan, func_ForEach_SoldierNodePlan)
|
||||
table.sort(tbAllNodeList, function(a, b)
|
||||
return a.Index < b.Index
|
||||
end)
|
||||
local mapCfg = ConfigTable.GetData("SoldierNodePlan", self.mapData.tbChange.tbNodeChange.nLastNodeId)
|
||||
local nNodexIndex = mapCfg.Index
|
||||
local nStage = self.mapData.tbChange.tbNodeChange.nLastStageId
|
||||
for i = 1, #tbAllNodeList do
|
||||
local nodeCfg = tbAllNodeList[i]
|
||||
if nStage > nodeCfg.Stage then
|
||||
nNodexIndex = nNodexIndex - 1
|
||||
end
|
||||
end
|
||||
return nStage, nNodexIndex
|
||||
end
|
||||
function SoldierBattleResultCtrl:SetGoBattleRoundMsg()
|
||||
local nStage, nNodexIndex = self:GetCurChallengeState()
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_NodeIndex, nStage .. "-" .. nNodexIndex)
|
||||
if self.mapData.bEventBattle then
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_PartnerBattle, ConfigTable.GetUIText("SoldierNodeType_Event"))
|
||||
self._mapNode.Partner[2]:SetActive(false)
|
||||
else
|
||||
local nWiningStreak, nLosingStreak = self.levelData:GetStreakCount()
|
||||
if 0 < nWiningStreak then
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_PartnerWinning, ConfigTable.GetUIText("Soldier_Result_WinningTitle"))
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_PartnerWinningNum, "x" .. nWiningStreak)
|
||||
elseif 0 < nLosingStreak then
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_PartnerWinning, ConfigTable.GetUIText("Soldier_Result_LosingingTitle"))
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_PartnerWinningNum, "x" .. nLosingStreak)
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_PartnerBattle, ConfigTable.GetUIText("SoldierNodeType_Battle"))
|
||||
self._mapNode.Partner[2]:SetActive(true)
|
||||
end
|
||||
local nCurLevel, nMaxLevel = self.levelData:GetShopLevel()
|
||||
NovaAPI.SetTMPText(self._mapNode.txtNumRoundPrestige, self.levelData:GetHp())
|
||||
self._mapNode.imgNumBar.fillAmount = self.levelData:GetHp() / 100
|
||||
NovaAPI.SetTMPText(self._mapNode.txtLevel, "<size=20>LV</size>" .. tostring(nCurLevel))
|
||||
if nCurLevel == nMaxLevel then
|
||||
self._mapNode.BarContainer.sizeDelta = Vector2(134, 28)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtExp, ConfigTable.GetUIText("Soldier_Sandtable_MaxLevel"))
|
||||
else
|
||||
local nNeedExp = ConfigTable.GetData("SoldierShopLevel", nCurLevel).Exp
|
||||
local nCurExp = self.levelData:GetExp()
|
||||
self._mapNode.BarContainer.sizeDelta = Vector2(134 * (nCurExp / nNeedExp), 28)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtExp, tostring(nCurExp) .. "/" .. tostring(nNeedExp))
|
||||
end
|
||||
self._mapNode.coinItem.gameObject:SetActive(false)
|
||||
local totalC = self.mapData.tbCoinReward.base + self.mapData.tbCoinReward.interest + self.mapData.tbCoinReward.winningStreak + self.mapData.tbCoinReward.losingStreak + self.mapData.tbCoinReward.other
|
||||
NovaAPI.SetTMPText(self._mapNode.txtCoinsTotalCount, totalC)
|
||||
self:SetRewardItem(self.mapData.tbCoinReward.base, "Soldier_GoldTips_BasicReward")
|
||||
self:SetRewardItem(self.mapData.tbCoinReward.interest, "Soldier_GoldTips_Interest")
|
||||
self:SetRewardItem(self.mapData.tbCoinReward.winningStreak, "Soldier_GoldTips_Winningstreak")
|
||||
self:SetRewardItem(self.mapData.tbCoinReward.losingStreak, "Soldier_GoldTips_Losingingstreak")
|
||||
self:SetRewardItem(self.mapData.tbCoinReward.other, "Soldier_GoldTips_Other")
|
||||
local maxDamage = 0
|
||||
self.tbSoldierGridCtrl = {}
|
||||
local tbSortedDamage = {}
|
||||
for i, v in pairs(self.mapData.tbDamage) do
|
||||
if maxDamage < v.nDamage then
|
||||
maxDamage = v.nDamage
|
||||
end
|
||||
table.insert(tbSortedDamage, {id = i, data = v})
|
||||
end
|
||||
table.sort(tbSortedDamage, function(a, b)
|
||||
return a.data.nDamage > b.data.nDamage
|
||||
end)
|
||||
self._mapNode.soldierDamageItem.gameObject:SetActive(false)
|
||||
for _, item in ipairs(tbSortedDamage) do
|
||||
self:SetSoldierDamageItem(item.id, item.data, maxDamage)
|
||||
end
|
||||
end
|
||||
function SoldierBattleResultCtrl:SetRewardItem(count, languageId)
|
||||
if count == nil or count == 0 then
|
||||
return
|
||||
end
|
||||
local goR = instantiate(self._mapNode.coinItem, self._mapNode.CoinListRoot)
|
||||
goR.gameObject:SetActive(true)
|
||||
local txt_name = goR:Find("txt_name"):GetComponent("TMP_Text")
|
||||
local txRefreshCount = goR:Find("txRefreshCount"):GetComponent("TMP_Text")
|
||||
NovaAPI.SetTMPText(txt_name, ConfigTable.GetUIText(languageId))
|
||||
NovaAPI.SetTMPText(txRefreshCount, count)
|
||||
end
|
||||
function SoldierBattleResultCtrl:SetSoldierDamageItem(id, damageData, maxDamage)
|
||||
local goR = instantiate(self._mapNode.soldierDamageItem, self._mapNode.gosoldierItemRoot)
|
||||
goR.gameObject:SetActive(true)
|
||||
local imgNumLine = goR:Find("imgNumLine"):GetComponent("RectTransform")
|
||||
local txDamageCount = goR:Find("imgNumLine/goNumLayout/txDamageCount"):GetComponent("TMP_Text")
|
||||
local objSoldier = goR:Find("tc_char_small").gameObject
|
||||
local cData = ConfigTable.GetData("SoldierCharacter", id)
|
||||
local cSkin = ConfigTable.GetData("SoldierSkin", id)
|
||||
local ctrl = self:BindCtrlByNode(objSoldier, "Game.UI.Soldier.Template.SoldierCharGridCtrl")
|
||||
ctrl:SetItem(cData.Rarity, 0, cSkin.Icon .. AllEnum.SoldierChessIconSurfix.S, damageData.nStar)
|
||||
self.tbSoldierGridCtrl[id] = ctrl
|
||||
local ratio = 0
|
||||
if maxDamage and 0 < maxDamage then
|
||||
ratio = damageData.nDamage / maxDamage
|
||||
end
|
||||
imgNumLine.sizeDelta = Vector2(20, 76 * ratio)
|
||||
NovaAPI.SetTMPText(txDamageCount, damageData.nDamage)
|
||||
end
|
||||
function SoldierBattleResultCtrl:SetGoBattleExpansionMsg()
|
||||
local totalScore = self.mapData.nTotalScore
|
||||
if totalScore ~= nil and 0 < totalScore then
|
||||
CS.WwiseAudioManager.Instance:PostEvent("mode_900001_chess_result_countPoint")
|
||||
end
|
||||
self:RefreshScoreDigits(totalScore)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtIntegralNum, self.mapData.nRewardScore)
|
||||
end
|
||||
function SoldierBattleResultCtrl:RefreshScoreDigits(nTotalScore)
|
||||
local trLayout = self._mapNode.NumLayout
|
||||
local goTemplate = self._mapNode.NumRootItem
|
||||
if trLayout == nil or goTemplate == nil then
|
||||
return
|
||||
end
|
||||
goTemplate.gameObject:SetActive(false)
|
||||
if self.tbScoreDigitTweeners ~= nil then
|
||||
for _, tw in ipairs(self.tbScoreDigitTweeners) do
|
||||
if tw ~= nil then
|
||||
tw:Kill()
|
||||
end
|
||||
end
|
||||
end
|
||||
self.tbScoreDigitTweeners = {}
|
||||
local sScore = tostring(math.max(0, math.floor(nTotalScore or 0)))
|
||||
local nLen = #sScore
|
||||
local fBaseDur = 0.6
|
||||
local fStepDur = 0.15
|
||||
local fAnimStepDelay = 0.08
|
||||
local nLoops = 3
|
||||
for i = 1, nLen do
|
||||
local nDigit = tonumber(string.sub(sScore, i, i)) or 0
|
||||
local goItem = instantiate(goTemplate, trLayout)
|
||||
local animator = goItem:GetComponent("Animator")
|
||||
if animator ~= nil then
|
||||
local fDelay = fAnimStepDelay * (nLen - i)
|
||||
if fDelay <= 0 then
|
||||
goItem.gameObject:SetActive(true)
|
||||
animator:Play("NumPos")
|
||||
else
|
||||
local delayedCall = CS.DG.Tweening.DOVirtual.DelayedCall(fDelay, function()
|
||||
if animator ~= nil then
|
||||
goItem.gameObject:SetActive(true)
|
||||
animator:Play("NumPos")
|
||||
end
|
||||
end, false)
|
||||
delayedCall:SetUpdate(true)
|
||||
table.insert(self.tbScoreDigitTweeners, delayedCall)
|
||||
end
|
||||
end
|
||||
local txt = goItem:Find("txtNum"):GetComponent("TMP_Text")
|
||||
if txt ~= nil then
|
||||
NovaAPI.SetTMPColor(txt, self.challengeColor)
|
||||
NovaAPI.SetTMPText(txt, "0")
|
||||
local fEnd = nLoops * 10 + nDigit
|
||||
local fDur = fBaseDur + fStepDur * (nLen - i)
|
||||
local fCurValue = 0
|
||||
local nLastShown = -1
|
||||
local tweener = DOTween.To(function()
|
||||
return fCurValue
|
||||
end, function(value)
|
||||
fCurValue = value
|
||||
local nShown = math.floor(value) % 10
|
||||
if nShown ~= nLastShown then
|
||||
nLastShown = nShown
|
||||
NovaAPI.SetTMPText(txt, tostring(nShown))
|
||||
end
|
||||
end, fEnd, fDur):SetEase(CS.DG.Tweening.Ease.OutCubic):SetUpdate(true)
|
||||
tweener:OnComplete(function()
|
||||
NovaAPI.SetTMPText(txt, tostring(nDigit))
|
||||
end)
|
||||
table.insert(self.tbScoreDigitTweeners, tweener)
|
||||
end
|
||||
if i == 1 then
|
||||
do
|
||||
local objLine = goItem:Find("imgLine").gameObject
|
||||
objLine:SetActive(false)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
return SoldierBattleResultCtrl
|
||||
@@ -0,0 +1,16 @@
|
||||
local SoldierBattleResultPanel = class("SoldierBattleResultPanel", BasePanel)
|
||||
SoldierBattleResultPanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "Soldier/Battle/SoldierResult.prefab",
|
||||
sCtrlName = "Game.UI.Soldier.Battle.SoldierBattleResultCtrl"
|
||||
}
|
||||
}
|
||||
function SoldierBattleResultPanel:Awake()
|
||||
end
|
||||
function SoldierBattleResultPanel:OnEnable()
|
||||
end
|
||||
function SoldierBattleResultPanel:OnDisable()
|
||||
end
|
||||
function SoldierBattleResultPanel:OnDestroy()
|
||||
end
|
||||
return SoldierBattleResultPanel
|
||||
@@ -0,0 +1,176 @@
|
||||
local SoldierMainCharItemCtrl = class("SoldierMainCharItemCtrl", BaseCtrl)
|
||||
local ImgChessRarityColor = {
|
||||
[GameEnum.ChessRarity.Gold] = "#FFF0BB",
|
||||
[GameEnum.ChessRarity.Purple] = "#C099FF",
|
||||
[GameEnum.ChessRarity.Blue] = "#8BF3FF",
|
||||
[GameEnum.ChessRarity.Green] = "#A1FF8D",
|
||||
[GameEnum.ChessRarity.White] = "#DBDBDB"
|
||||
}
|
||||
SoldierMainCharItemCtrl._mapNodeConfig = {
|
||||
imgSkillStart = {sComponentName = "Image"},
|
||||
AnimRoot = {sComponentName = "Animator"},
|
||||
SkillCharge = {
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
btnItem = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Item"
|
||||
},
|
||||
imgRarity = {sComponentName = "Image"},
|
||||
imgIcon = {sComponentName = "Image"},
|
||||
imgStar = {nCount = 5, sComponentName = "Image"},
|
||||
imgDeathMask = {},
|
||||
Fx_Charge = {},
|
||||
Fx_fish = {},
|
||||
Fx_Death = {}
|
||||
}
|
||||
SoldierMainCharItemCtrl._mapEventConfig = {
|
||||
SoldierCharSpawn = "OnEvent_SoldierCharSpawn"
|
||||
}
|
||||
SoldierMainCharItemCtrl._mapRedDotConfig = {}
|
||||
local iconPath = "Icon/SoldierOtherIcon/"
|
||||
local nMaxSize = 0
|
||||
function SoldierMainCharItemCtrl:AddEntityEvent()
|
||||
EventManager.AddEntityEvent("Soldier_EnergyChange", self.nCharId, self, self.OnEvent_EnergyChange)
|
||||
EventManager.AddEntityEvent("Event_SoldierMoYu", self.nCharId, self, self.OnEvent_MoYu)
|
||||
EventManager.AddEntityEvent("Event_SoldierDeath", self.nCharId, self, self.Event_Death)
|
||||
end
|
||||
function SoldierMainCharItemCtrl:RemoveEntityEvent()
|
||||
EventManager.RemoveEntityEvent("Soldier_EnergyChange", self.nCharId, self, self.OnEvent_EnergyChange)
|
||||
EventManager.RemoveEntityEvent("Event_SoldierMoYu", self.nCharId, self, self.OnEvent_MoYu)
|
||||
EventManager.RemoveEntityEvent("Event_SoldierDeath", self.nCharId, self, self.Event_Death)
|
||||
end
|
||||
function SoldierMainCharItemCtrl:InitChar(mapData, tbChess, tbPartner, parent)
|
||||
self.isDeath = false
|
||||
self.isEnergyMax = false
|
||||
self._mapNode.imgSkillStart.gameObject:SetActive(false)
|
||||
self.tmpMapData = mapData
|
||||
self.bAddEvent = false
|
||||
self.nDataId = mapData.nId
|
||||
self.tbChess = tbChess
|
||||
self.tbPartner = tbPartner
|
||||
self.parent = parent
|
||||
nMaxSize = self._mapNode.SkillCharge.sizeDelta.x
|
||||
local mapCfg = ConfigTable.GetData("SoldierCharacter", self.nDataId)
|
||||
if mapCfg ~= nil then
|
||||
local sIcon = AllEnum.SoldierChessRarityIcon[mapCfg.Rarity]
|
||||
sIcon = iconPath .. sIcon .. AllEnum.SoldierChessIconSurfix.Fight
|
||||
self:SetPngSprite(self._mapNode.imgRarity, sIcon)
|
||||
local skinCfg = ConfigTable.GetData("SoldierSkin", mapCfg.Skin)
|
||||
if skinCfg then
|
||||
self:SetPngSprite(self._mapNode.imgIcon, skinCfg.Icon .. AllEnum.SoldierChessIconSurfix.M)
|
||||
end
|
||||
local _, color = ColorUtility.TryParseHtmlString(ImgChessRarityColor[mapCfg.Rarity])
|
||||
NovaAPI.SetImageColor(self._mapNode.imgSkillStart, color)
|
||||
end
|
||||
self._mapNode.SkillCharge.sizeDelta = Vector2(nMaxSize, 0)
|
||||
for k, v in ipairs(self._mapNode.imgStar) do
|
||||
v.gameObject:SetActive(k <= mapData.nStar)
|
||||
end
|
||||
end
|
||||
function SoldierMainCharItemCtrl:CloseUI()
|
||||
self:RemoveEntityEvent()
|
||||
self.bAddEvent = false
|
||||
self.nCharId = 0
|
||||
end
|
||||
function SoldierMainCharItemCtrl:Awake()
|
||||
end
|
||||
function SoldierMainCharItemCtrl:OnEnable()
|
||||
end
|
||||
function SoldierMainCharItemCtrl:OnDisable()
|
||||
end
|
||||
function SoldierMainCharItemCtrl:OnDestroy()
|
||||
end
|
||||
function SoldierMainCharItemCtrl:SetTipsRoot(tr)
|
||||
self.tipsRoot = tr
|
||||
end
|
||||
function SoldierMainCharItemCtrl:OnBtnClick_Item()
|
||||
if self.isDeath == true then
|
||||
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Soldier_Death_Tips"))
|
||||
return
|
||||
end
|
||||
local chessData = {
|
||||
nPositionType = GameEnum.SoldierPositionType.FightPosition,
|
||||
nId = self.tmpMapData.nId,
|
||||
nStar = math.max(self.tmpMapData.nStar, 1)
|
||||
}
|
||||
local Info = CS.AdventureModuleHelper.GetSoldierActorInfo(self.nDataId)
|
||||
local HealthInfo = CS.AdventureModuleHelper.GetSoldierHealthInfo(self.nDataId)
|
||||
local atk = Info ~= nil and Info.atk:AsFloat() or 0
|
||||
local def = Info ~= nil and Info.def:AsFloat() or 0
|
||||
local critRate = Info ~= nil and Info.critRate:AsFloat() or 0
|
||||
local critPower = Info ~= nil and Info.critPower:AsFloat() or 0
|
||||
local attackSpeed = Info ~= nil and Info.normalAttackSpd:AsFloat() or 0
|
||||
local hp = HealthInfo ~= nil and HealthInfo.hp or 0
|
||||
local hpMax = HealthInfo ~= nil and HealthInfo.hpMax or 0
|
||||
local tab = {}
|
||||
tab.atk = atk
|
||||
tab.def = def
|
||||
tab.critRate = critRate
|
||||
tab.critPower = critPower
|
||||
tab.attackSpeed = attackSpeed
|
||||
tab.hp = hp
|
||||
tab.hpMax = hpMax
|
||||
tab.nEnergy = self.nEnergy
|
||||
tab.nMaxEnergy = self.nMaxEnergy
|
||||
tab.nRecoverRate = self.nRecoverRate
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierCharCardTips, self.tipsRoot, chessData, self.tbChess, self.tbPartner, tab)
|
||||
EventManager.Hit("OnSetTipsPosition", self.tipsRoot:GetChild(0).position, self.tipsRoot:GetChild(1).position, self.tipsRoot:GetChild(2).position)
|
||||
end
|
||||
function SoldierMainCharItemCtrl:OnEvent_EnergyChange(nEnergy, nMaxEnergy, nRecoverRate)
|
||||
local nValue = nEnergy / nMaxEnergy
|
||||
self.nEnergy = nEnergy
|
||||
self.nMaxEnergy = nMaxEnergy
|
||||
self.nRecoverRate = nRecoverRate
|
||||
if self.parent ~= nil then
|
||||
self.parent:CacheSoldierEnergyData(self.nCharId, nEnergy, nMaxEnergy, nRecoverRate, self.isDeath)
|
||||
end
|
||||
self._mapNode.SkillCharge.sizeDelta = Vector2(nMaxSize, nMaxSize * nValue)
|
||||
if self.isEnergyMax == false then
|
||||
if nEnergy == nMaxEnergy then
|
||||
self.isEnergyMax = true
|
||||
self._mapNode.imgSkillStart.gameObject:SetActive(true)
|
||||
self._mapNode.Fx_Charge:SetActive(true)
|
||||
self:AddTimer(1, 1, function()
|
||||
if self == nil or self._mapNode == nil then
|
||||
return
|
||||
end
|
||||
self._mapNode.imgSkillStart.gameObject:SetActive(false)
|
||||
self._mapNode.Fx_Charge:SetActive(false)
|
||||
end, true, true, true)
|
||||
end
|
||||
elseif nEnergy ~= nMaxEnergy then
|
||||
self.isEnergyMax = false
|
||||
end
|
||||
end
|
||||
function SoldierMainCharItemCtrl:OnEvent_MoYu(isMoYu)
|
||||
self._mapNode.Fx_fish:SetActive(isMoYu)
|
||||
end
|
||||
function SoldierMainCharItemCtrl:Event_Death()
|
||||
self.isDeath = true
|
||||
self._mapNode.imgDeathMask:SetActive(true)
|
||||
self._mapNode.Fx_Death:SetActive(true)
|
||||
self._mapNode.Fx_Charge:SetActive(false)
|
||||
self._mapNode.Fx_fish:SetActive(false)
|
||||
self._mapNode.AnimRoot:Play("SoldierMainCharItem_death")
|
||||
if self.parent ~= nil then
|
||||
self.parent:CacheSoldierEnergyData(self.nCharId, self.nEnergy, self.nMaxEnergy, self.nRecoverRate, self.isDeath)
|
||||
end
|
||||
end
|
||||
function SoldierMainCharItemCtrl:OnEvent_SoldierCharSpawn(nDataId, nUId)
|
||||
if nDataId == self.nDataId and not self.bAddEvent then
|
||||
self.nEnergy = 0
|
||||
self.nMaxEnergy = 0
|
||||
self.nRecoverRate = 0
|
||||
self.bAddEvent = true
|
||||
self.nCharId = nUId
|
||||
self.isDeath = false
|
||||
self.isEnergyMax = false
|
||||
self._mapNode.imgDeathMask:SetActive(false)
|
||||
self._mapNode.Fx_Death:SetActive(false)
|
||||
self._mapNode.Fx_Charge:SetActive(false)
|
||||
self._mapNode.Fx_fish:SetActive(false)
|
||||
self:AddEntityEvent()
|
||||
end
|
||||
end
|
||||
return SoldierMainCharItemCtrl
|
||||
@@ -0,0 +1,508 @@
|
||||
local SoldierPauseCtrl = class("SoldierPauseCtrl", BaseCtrl)
|
||||
local GamepadUIManager = require("GameCore.Module.GamepadUIManager")
|
||||
local SoldierAttrData = require("GameCore.Data.DataClass.Soldier.SoldierAttrData")
|
||||
SoldierPauseCtrl._mapNodeConfig = {
|
||||
goBlur = {
|
||||
sNodeName = "t_fullscreen_blur_01"
|
||||
},
|
||||
aniBlur = {
|
||||
sNodeName = "t_fullscreen_blur_01",
|
||||
sComponentName = "Animator"
|
||||
},
|
||||
safeAreaRoot = {
|
||||
sNodeName = "----SafeAreaRoot----"
|
||||
},
|
||||
txtWindowTitle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Battle_Pause"
|
||||
},
|
||||
btnClose = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Close"
|
||||
},
|
||||
snapshot = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Close"
|
||||
},
|
||||
btnRestart = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Restart"
|
||||
},
|
||||
txtBtnRestart = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Btn_Restart"
|
||||
},
|
||||
btnResult = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Result"
|
||||
},
|
||||
txtBtnResult = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Btn_Result"
|
||||
},
|
||||
btnLeave = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Leave"
|
||||
},
|
||||
txtBtnLeave = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Btn_Leave"
|
||||
},
|
||||
goNodeInfo = {},
|
||||
Node = {nCount = 8},
|
||||
txtProgress = {sComponentName = "TMP_Text"},
|
||||
txtLevel = {sComponentName = "TMP_Text"},
|
||||
txtExp = {sComponentName = "TMP_Text"},
|
||||
txtHp = {sComponentName = "TMP_Text"},
|
||||
txtCoin = {sComponentName = "TMP_Text"},
|
||||
btnCoin = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_CoinTips"
|
||||
},
|
||||
BarContainer = {
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
goChar = {},
|
||||
goCharItem = {},
|
||||
goCharList = {nCount = 2, sComponentName = "Transform"},
|
||||
txtCharTitle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Battle_Char_Title"
|
||||
},
|
||||
txtPartnerTitle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Battle_Partner_Title"
|
||||
},
|
||||
goPartnerList = {sComponentName = "Transform"},
|
||||
goPartnerItem = {sComponentName = "Transform"},
|
||||
txtCardTitle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Battle_Card_Title"
|
||||
},
|
||||
btnStarterCard = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_StarterCard"
|
||||
},
|
||||
imgCardStarter = {sComponentName = "Image"},
|
||||
imgCardIconStarter = {sComponentName = "Image"},
|
||||
imgemptyStarter = {},
|
||||
goStrategyCardList = {sComponentName = "Transform"},
|
||||
btnStrategyCardItem = {sComponentName = "Transform"},
|
||||
btnSetting = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Setting"
|
||||
},
|
||||
charDetialRoot = {sComponentName = "Transform"},
|
||||
parnterDetialRoot = {sComponentName = "Transform"}
|
||||
}
|
||||
SoldierPauseCtrl._mapEventConfig = {
|
||||
OpenSoldierPause = "OnEvent_OpenSoldierPause",
|
||||
RefreshSoldierCoin = "OnEvent_RefreshCoin"
|
||||
}
|
||||
SoldierPauseCtrl._mapRedDotConfig = {}
|
||||
local iconPath = "Icon/SoldierOtherIcon/"
|
||||
local iconCardPath = "Icon/SoldierBuffCard/"
|
||||
local iconPartnerPath = "Icon/SoldierPartner/"
|
||||
function SoldierPauseCtrl:OpenUI()
|
||||
self._mapNode.goBlur:SetActive(true)
|
||||
local wait = function()
|
||||
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
||||
if self.bShow then
|
||||
self._mapNode.safeAreaRoot:SetActive(true)
|
||||
end
|
||||
end
|
||||
cs_coroutine.start(wait)
|
||||
end
|
||||
function SoldierPauseCtrl:Refresh()
|
||||
local nStage, nNodexIndex = PlayerData.SoldierData:GetCurChallengeState()
|
||||
NovaAPI.SetTMPText(self._mapNode.txtProgress, orderedFormat(ConfigTable.GetUIText("Soldier_Pause_Schedule"), nStage .. "-" .. nNodexIndex))
|
||||
local nLevel, nMaxLevel = self.levelData:GetShopLevel()
|
||||
NovaAPI.SetTMPText(self._mapNode.txtLevel, orderedFormat(ConfigTable.GetUIText("Soldier_Battle_LevelPause"), nLevel))
|
||||
local mapLevelCfg = ConfigTable.GetData("SoldierShopLevel", nLevel)
|
||||
local nNeedExp = 0
|
||||
if mapLevelCfg ~= nil then
|
||||
nNeedExp = mapLevelCfg.Exp
|
||||
end
|
||||
local nExp = self.levelData:GetExp()
|
||||
NovaAPI.SetTMPText(self._mapNode.txtExp, string.format("%s/%s", nExp, nNeedExp))
|
||||
local nHp = self.levelData:GetHp()
|
||||
NovaAPI.SetTMPText(self._mapNode.txtHp, nHp)
|
||||
local nCount = self.levelData:GetItem(AllEnum.CoinItemId.SoldierCurrency)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtCoin, tostring(nCount))
|
||||
if self.isRefreshMSg then
|
||||
return
|
||||
end
|
||||
self:RefreshShopLv()
|
||||
self:InitNodeList()
|
||||
self:RefreshCharList()
|
||||
self:RefreshCardList()
|
||||
self.isRefreshMSg = true
|
||||
end
|
||||
function SoldierPauseCtrl:RefreshShopLv()
|
||||
local nCurLevel, nMaxLevel = self.levelData:GetShopLevel()
|
||||
NovaAPI.SetTMPText(self._mapNode.txtLevel, orderedFormat(ConfigTable.GetUIText("Soldier_Battle_LevelPause"), nCurLevel))
|
||||
if nCurLevel == nMaxLevel then
|
||||
self._mapNode.BarContainer.sizeDelta = Vector2(134, 22)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtExp, ConfigTable.GetUIText("Soldier_Sandtable_MaxLevel"))
|
||||
else
|
||||
local ShopMsg = ConfigTable.GetData("SoldierShopLevel", nCurLevel)
|
||||
if ShopMsg then
|
||||
local nNeedExp = ShopMsg.Exp
|
||||
local nCurExp = self.levelData:GetExp()
|
||||
self._mapNode.BarContainer.sizeDelta = Vector2(134 * (nCurExp / nNeedExp), 22)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtExp, tostring(nCurExp) .. "/" .. tostring(nNeedExp))
|
||||
else
|
||||
printError("商店表找不到,商店当前等级为 === " .. nCurLevel)
|
||||
end
|
||||
end
|
||||
end
|
||||
function SoldierPauseCtrl:InitNodeList()
|
||||
local nStage, nNodexIndex = PlayerData.SoldierData:GetCurChallengeState()
|
||||
NovaAPI.SetTMPText(self._mapNode.TextPos, tostring(nStage) .. "-" .. tostring(nNodexIndex))
|
||||
local curStageNodeList = self.levelData:GetNodeList()
|
||||
for i = 1, #self._mapNode.Node do
|
||||
local node = self._mapNode.Node[i]
|
||||
if i > #curStageNodeList then
|
||||
node.gameObject:SetActive(false)
|
||||
else
|
||||
local imgIcon = node.transform:Find("imgIcon"):GetComponent("Image")
|
||||
self:SetPngSprite(imgIcon, iconPath .. AllEnum.SoliderNoteTypeCfg[curStageNodeList[i].nNodeType].Icon)
|
||||
local imgCurrent = node.transform:Find("imgCurrent")
|
||||
imgCurrent.gameObject:SetActive(i == nNodexIndex)
|
||||
if nNodexIndex > i then
|
||||
NovaAPI.SetImageColor(imgIcon, Color(0.7098039215686275, 0.7647058823529411, 0.8156862745098039, 0.3))
|
||||
elseif nNodexIndex < i then
|
||||
NovaAPI.SetImageColor(imgIcon, Color(0.7098039215686275, 0.7647058823529411, 0.8156862745098039, 1))
|
||||
elseif i == nNodexIndex then
|
||||
NovaAPI.SetImageColor(imgIcon, Color(1.0, 1.0, 1.0, 1))
|
||||
end
|
||||
node.gameObject:SetActive(true)
|
||||
end
|
||||
end
|
||||
end
|
||||
function SoldierPauseCtrl:RefreshCharList()
|
||||
self._mapNode.goCharItem:SetActive(false)
|
||||
local tabMain = {}
|
||||
local tabSub = {}
|
||||
for k, v in ipairs(self.tChess) do
|
||||
local nIndex = v.nIndex
|
||||
if v.nPositionType == GameEnum.SoldierPositionType.FightPosition then
|
||||
tabMain[nIndex] = v
|
||||
elseif v.nPositionType == GameEnum.SoldierPositionType.SupportPosition then
|
||||
tabSub[nIndex] = v
|
||||
end
|
||||
end
|
||||
local tbActivePartner, tbPartner = SoldierAttrData.CalcActivePartners(self.tChess)
|
||||
for i, v in pairs(tabMain) do
|
||||
local goChar = instantiate(self._mapNode.goCharItem, self._mapNode.goCharList[1])
|
||||
goChar:SetActive(true)
|
||||
if not self.tbMainCtrl[v.nIndex] then
|
||||
self.tbMainCtrl[v.nIndex] = self:BindCtrlByNode(goChar, "Game.UI.Soldier.Template.Character.SoldierCharCardItemCtrl")
|
||||
if v.nId > 0 then
|
||||
self.tbMainCtrl[v.nIndex]:SetItemData(v.nId, GameEnum.SoldierPositionType.FightPosition)
|
||||
self.tbMainCtrl[v.nIndex]:SetStar(v.nStar)
|
||||
self.tbMainCtrl[v.nIndex]:SetAttribute(v.nIndex)
|
||||
self.tbMainCtrl[v.nIndex]:SetClickCallback(_, function()
|
||||
local chessData = {
|
||||
nPositionType = GameEnum.SoldierPositionType.FightPosition,
|
||||
nId = v.nId,
|
||||
nStar = math.max(v.nStar, 1)
|
||||
}
|
||||
self:ClickCharactorTips(v.nUId, v.nId, goChar, chessData, self.tChess, tbActivePartner)
|
||||
end)
|
||||
else
|
||||
self.tbMainCtrl[v.nIndex]:SetItemData(nil)
|
||||
end
|
||||
end
|
||||
end
|
||||
for i, v in pairs(tabSub) do
|
||||
local goChar = instantiate(self._mapNode.goCharItem, self._mapNode.goCharList[2])
|
||||
goChar:SetActive(true)
|
||||
if not self.tbSubCtrl[v.nIndex] then
|
||||
self.tbSubCtrl[v.nIndex] = self:BindCtrlByNode(goChar, "Game.UI.Soldier.Template.Character.SoldierCharCardItemCtrl")
|
||||
if 0 < v.nId then
|
||||
self.tbSubCtrl[v.nIndex]:SetItemData(v.nId, GameEnum.SoldierPositionType.SupportPosition)
|
||||
self.tbSubCtrl[v.nIndex]:SetStar(v.nStar)
|
||||
self.tbSubCtrl[v.nIndex]:SetAttribute(0)
|
||||
self.tbSubCtrl[v.nIndex]:SetClickCallback(_, function()
|
||||
local chessData = {
|
||||
nPositionType = GameEnum.SoldierPositionType.SupportPosition,
|
||||
nId = v.nId,
|
||||
nStar = math.max(v.nStar, 1)
|
||||
}
|
||||
self:ClickCharactorTips(v.nUId, v.nId, goChar, chessData, self.tChess, tbActivePartner)
|
||||
end)
|
||||
else
|
||||
self.tbSubCtrl[v.nIndex]:SetItemData(nil)
|
||||
end
|
||||
end
|
||||
end
|
||||
if tbPartner == nil then
|
||||
return
|
||||
end
|
||||
self._mapNode.goPartnerItem.gameObject:SetActive(false)
|
||||
self:RefreshPartnerList(tbPartner)
|
||||
end
|
||||
function SoldierPauseCtrl:ClickCharactorTips(nUId, nId, obj, chessData, tbChess, tbActivePartner)
|
||||
local tmpEnergy = self.tabCacheSoldierEnergy[nUId]
|
||||
if tmpEnergy.death == true then
|
||||
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Soldier_Death_Tips"))
|
||||
return
|
||||
end
|
||||
local Info = CS.AdventureModuleHelper.GetSoldierActorInfo(nId)
|
||||
local HealthInfo = CS.AdventureModuleHelper.GetSoldierHealthInfo(nId)
|
||||
local atk = Info ~= nil and Info.atk:AsFloat() or 0
|
||||
local def = Info ~= nil and Info.def:AsFloat() or 0
|
||||
local critRate = Info ~= nil and Info.critRate:AsFloat() or 0
|
||||
local critPower = Info ~= nil and Info.critPower:AsFloat() or 0
|
||||
local attackSpeed = Info ~= nil and Info.normalAttackSpd:AsFloat() or 0
|
||||
local hp = HealthInfo ~= nil and HealthInfo.hp or 0
|
||||
local hpMax = HealthInfo ~= nil and HealthInfo.hpMax or 0
|
||||
local tab = {}
|
||||
tab.atk = atk
|
||||
tab.def = def
|
||||
tab.critRate = critRate
|
||||
tab.critPower = critPower
|
||||
tab.attackSpeed = attackSpeed
|
||||
tab.hp = hp
|
||||
tab.hpMax = hpMax
|
||||
tab.nEnergy = tmpEnergy ~= nil and tmpEnergy.energy or 0
|
||||
tab.nMaxEnergy = tmpEnergy ~= nil and tmpEnergy.maxEnergy or 0
|
||||
tab.nRecoverRate = tmpEnergy ~= nil and tmpEnergy.recoverRate or 0
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierCharCardTips, self._mapNode.charDetialRoot, chessData, tbChess, tbActivePartner, tab)
|
||||
EventManager.Hit("OnSetTipsPosition", self._mapNode.charDetialRoot:GetChild(0).position, self._mapNode.charDetialRoot:GetChild(1).position, self._mapNode.charDetialRoot:GetChild(2).position)
|
||||
EventManager.Hit("SoldierCharTips_ShowBg")
|
||||
end
|
||||
function SoldierPauseCtrl:RefreshPartnerList(tbPartner)
|
||||
self.tabPartnerBtn = {}
|
||||
for _, v in ipairs(tbPartner) do
|
||||
local mapPartnerGroupCfg = CacheTable.GetData("_SoldierPartnerGroup", v.nType)
|
||||
if mapPartnerGroupCfg ~= nil then
|
||||
local nPartnerQty = GameEnum.PartnerLevelQuality.None
|
||||
local sBgPath = ""
|
||||
local cfgList = CacheTable.GetData("_SoldierPartner", v.nType)
|
||||
if cfgList == nil then
|
||||
return
|
||||
end
|
||||
local partnerCfg = cfgList[v.nActiveLevel]
|
||||
if partnerCfg == nil then
|
||||
partnerCfg = cfgList[1]
|
||||
end
|
||||
local goU = instantiate(self._mapNode.goPartnerItem, self._mapNode.goPartnerList)
|
||||
goU.gameObject:SetActive(true)
|
||||
local imgPartner = goU:Find("imgPartner"):GetComponent("Image")
|
||||
local imgPartnerIcon = goU:Find("imgPartnerIcon"):GetComponent("Image")
|
||||
local txtPartnerCount = goU:Find("txtPartnerCount"):GetComponent("TMP_Text")
|
||||
if v.nActiveLevel == 0 then
|
||||
self:SetPngSprite(imgPartner, iconPath .. AllEnum.SoldierPartnerLevelIcon[GameEnum.PartnerLevelQuality.None].bg)
|
||||
else
|
||||
self:SetPngSprite(imgPartner, iconPath .. AllEnum.SoldierPartnerLevelIcon[partnerCfg.PartnerLevelQuality].bg)
|
||||
end
|
||||
self:SetPngSprite(imgPartnerIcon, iconPartnerPath .. mapPartnerGroupCfg.Icon .. AllEnum.SoldierChessIconSurfix.M)
|
||||
NovaAPI.SetTMPText(txtPartnerCount, tostring(v.nCurNum or 0))
|
||||
local clickCb = function()
|
||||
local bTrace = PlayerData.SoldierData:GetCurLevelData():CheckPartnerTrace(v.nType)
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierPartnerTips, self._mapNode.parnterDetialRoot, v.nType, v.nActiveLevel, bTrace)
|
||||
EventManager.Hit("OnSetParnterTipsPosition", self._mapNode.parnterDetialRoot:GetChild(0).position, self._mapNode.parnterDetialRoot:GetChild(1).position, self._mapNode.parnterDetialRoot:GetChild(2).position)
|
||||
EventManager.Hit("SoldierCharTips_ShowBg")
|
||||
end
|
||||
local btn = imgPartner.gameObject:GetComponent("UIButton")
|
||||
btn.onClick:RemoveAllListeners()
|
||||
btn.onClick:AddListener(clickCb)
|
||||
table.insert(self.tabPartnerBtn, btn)
|
||||
end
|
||||
end
|
||||
end
|
||||
function SoldierPauseCtrl:RefreshCardList()
|
||||
local starterCard, strategyCard = self.levelData:GetCardData()
|
||||
if starterCard ~= nil then
|
||||
if starterCard[1] ~= nil then
|
||||
self.nStarterCardId = starterCard[1].nId
|
||||
local SoldierStarterCardCfg = ConfigTable.GetData("SoldierStarterCard", self.nStarterCardId)
|
||||
self._mapNode.imgCardStarter.gameObject:SetActive(true)
|
||||
self._mapNode.imgCardIconStarter.gameObject:SetActive(true)
|
||||
self._mapNode.imgemptyStarter.gameObject:SetActive(false)
|
||||
local sBgPath = iconCardPath .. SoldierStarterCardCfg.Icon
|
||||
self:SetPngSprite(self._mapNode.imgCardIconStarter, sBgPath)
|
||||
else
|
||||
self._mapNode.imgCardStarter.gameObject:SetActive(false)
|
||||
self._mapNode.imgCardIconStarter.gameObject:SetActive(false)
|
||||
self._mapNode.imgemptyStarter.gameObject:SetActive(true)
|
||||
end
|
||||
end
|
||||
self._mapNode.btnStrategyCardItem.gameObject:SetActive(false)
|
||||
self.tabStrategyCard = {}
|
||||
if strategyCard ~= nil then
|
||||
for k, v in ipairs(strategyCard) do
|
||||
local goStrategy = instantiate(self._mapNode.btnStrategyCardItem, self._mapNode.goStrategyCardList)
|
||||
goStrategy.gameObject:SetActive(true)
|
||||
local clickCb = function()
|
||||
self:OnBtnClick_StrategyCard(v.nId)
|
||||
end
|
||||
local cardBg = goStrategy:Find("AnimRoot/imgCardStrategy"):GetComponent("Image")
|
||||
local cardIcon = goStrategy:Find("AnimRoot/imgCardIconStrategy"):GetComponent("Image")
|
||||
local btn = goStrategy:GetComponent("UIButton")
|
||||
btn.onClick:RemoveAllListeners()
|
||||
btn.onClick:AddListener(clickCb)
|
||||
table.insert(self.tabStrategyCard, btn)
|
||||
local SoldierStrategyCardCfg = ConfigTable.GetData("SoldierStrategyCard", v.nId)
|
||||
local cardBgPath = iconPath .. AllEnum.SoldierStrategyCardRarityIcon[SoldierStrategyCardCfg.Rarity] .. AllEnum.SoldierChessIconSurfix.S
|
||||
self:SetPngSprite(cardBg, cardBgPath)
|
||||
local cardIconPath = iconCardPath .. SoldierStrategyCardCfg.Icon
|
||||
self:SetPngSprite(cardIcon, cardIconPath)
|
||||
end
|
||||
end
|
||||
end
|
||||
function SoldierPauseCtrl:CloseUI(callback)
|
||||
if self._mapNode == nil then
|
||||
return
|
||||
end
|
||||
self:AddTimer(1, 0.2, "ClosePanel", true, true, true, callback)
|
||||
end
|
||||
function SoldierPauseCtrl:ClosePanel(_, callback)
|
||||
if self._mapNode == nil or not self.bShow then
|
||||
return
|
||||
end
|
||||
self:OnPanelClose(callback)
|
||||
end
|
||||
function SoldierPauseCtrl:OnPanelClose(callback)
|
||||
self.bShow = false
|
||||
PanelManager.InputEnable()
|
||||
GamepadUIManager.DisableGamepadUI("SoldierPauseCtrl")
|
||||
EventManager.Hit(EventId.BattleDashboardVisible, true)
|
||||
self._mapNode.safeAreaRoot:SetActive(false)
|
||||
self._mapNode.goBlur:SetActive(false)
|
||||
if callback then
|
||||
callback()
|
||||
end
|
||||
end
|
||||
function SoldierPauseCtrl:Awake()
|
||||
self.nAllChallengeTime = ConfigTable.GetConfigNumber("JointDrill_Challenge_Time_Max")
|
||||
self.nTotalTime = self._panel.nTotalTime
|
||||
self._mapNode.safeAreaRoot:SetActive(false)
|
||||
self.tbGamepadUINode = self:GetGamepadUINode()
|
||||
self.tbMainCtrl = {}
|
||||
self.tbSubCtrl = {}
|
||||
end
|
||||
function SoldierPauseCtrl:OnEnable()
|
||||
self.nOpenTime = 0
|
||||
self.nRemainTime = 0
|
||||
if self._panel.nType ~= nil then
|
||||
if self._panel.nType == GameEnum.JointDrillMode.JointDrill_Mode_1 then
|
||||
self.nOpenTime = PlayerData.JointDrill_1:GetJointDrillStartTime()
|
||||
elseif self._panel.nType == GameEnum.JointDrillMode.JointDrill_Mode_2 then
|
||||
self.nOpenTime = PlayerData.JointDrill_2:GetJointDrillStartTime()
|
||||
end
|
||||
end
|
||||
end
|
||||
function SoldierPauseCtrl:OnDisable()
|
||||
end
|
||||
function SoldierPauseCtrl:OnDestroy()
|
||||
for nInstanceId, objCtrl in pairs(self.tbMainCtrl) do
|
||||
self:UnbindCtrlByNode(objCtrl)
|
||||
self.tbMainCtrl[nInstanceId] = nil
|
||||
end
|
||||
self.tbMainCtrl = {}
|
||||
for nInstanceId, objCtrl in pairs(self.tbSubCtrl) do
|
||||
self:UnbindCtrlByNode(objCtrl)
|
||||
self.tbSubCtrl[nInstanceId] = nil
|
||||
end
|
||||
self.tbSubCtrl = {}
|
||||
if self.tabPartnerBtn then
|
||||
for i, v in pairs(self.tabPartnerBtn) do
|
||||
v.onClick:RemoveAllListeners()
|
||||
end
|
||||
self.tabPartnerBtn = nil
|
||||
end
|
||||
if self.tabStrategyCard then
|
||||
for i, v in pairs(self.tabStrategyCard) do
|
||||
v.onClick:RemoveAllListeners()
|
||||
end
|
||||
self.tabStrategyCard = nil
|
||||
end
|
||||
end
|
||||
function SoldierPauseCtrl:OnBtnClick_Result()
|
||||
local confirmCallback = function()
|
||||
local callback = function()
|
||||
EventManager.Hit("SettleSoldierBattle")
|
||||
self:CloseUI(function()
|
||||
local function levelEndCallback()
|
||||
EventManager.Remove("ADVENTURE_LEVEL_UNLOAD_COMPLETE", self, levelEndCallback)
|
||||
NovaAPI.EnterModule("MainMenuModuleScene", true, 17)
|
||||
end
|
||||
EventManager.Add("ADVENTURE_LEVEL_UNLOAD_COMPLETE", self, levelEndCallback)
|
||||
CS.AdventureModuleHelper.LevelStateChanged(true, 0, true)
|
||||
EventManager.Hit(EventId.ClosePanel, PanelId.SoldierBattlePanel)
|
||||
end)
|
||||
end
|
||||
PlayerData.SoldierData:SendGiveUp(callback)
|
||||
end
|
||||
local nStage, nNodexIndex = PlayerData.SoldierData:GetCurChallengeState()
|
||||
local str = orderedFormat(ConfigTable.GetUIText("Soldier_Battle_GiveUp"), nStage .. "-" .. nNodexIndex)
|
||||
local msg = {
|
||||
nType = AllEnum.MessageBox.Confirm,
|
||||
sContent = str,
|
||||
callbackConfirm = confirmCallback,
|
||||
bBlur = false
|
||||
}
|
||||
EventManager.Hit(EventId.OpenMessageBox, msg)
|
||||
end
|
||||
function SoldierPauseCtrl:OnBtnClick_Close()
|
||||
self:CloseUI()
|
||||
end
|
||||
function SoldierPauseCtrl:OnBtnClick_Restart()
|
||||
self:CloseUI()
|
||||
EventManager.Hit("RestartSoldier")
|
||||
end
|
||||
function SoldierPauseCtrl:OnBtnClick_Leave()
|
||||
local tabM, tabS, tabO = self.levelData:GetDeploy()
|
||||
local tbMain = {}
|
||||
local tbSup = {}
|
||||
for i, v in pairs(tabM) do
|
||||
if v.nPositionType == GameEnum.SoldierPositionType.FightPosition then
|
||||
table.insert(tbMain, v)
|
||||
elseif v.nPositionType == GameEnum.SoldierPositionType.SupportPosition then
|
||||
table.insert(tbSup, v)
|
||||
end
|
||||
end
|
||||
local callback = function()
|
||||
self:CloseUI(function()
|
||||
local function levelEndCallback()
|
||||
EventManager.Remove("ADVENTURE_LEVEL_UNLOAD_COMPLETE", self, levelEndCallback)
|
||||
NovaAPI.EnterModule("MainMenuModuleScene", true, 17)
|
||||
EventManager.Hit(EventId.ClosePanel, PanelId.SoldierBattlePanel)
|
||||
end
|
||||
EventManager.Add("ADVENTURE_LEVEL_UNLOAD_COMPLETE", self, levelEndCallback)
|
||||
CS.AdventureModuleHelper.LevelStateChanged(true, 0, true)
|
||||
end)
|
||||
end
|
||||
PlayerData.SoldierData:SendStepOut(tbMain, tbSup, tabS, callback)
|
||||
end
|
||||
function SoldierPauseCtrl:OnBtnClick_StarterCard()
|
||||
if self.nStarterCardId and self.nStarterCardId > 0 then
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierSelectStarterCardItem, self.nStarterCardId)
|
||||
end
|
||||
end
|
||||
function SoldierPauseCtrl:OnBtnClick_StrategyCard(StrategyCardId)
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierSelectStrategyCardItem, StrategyCardId)
|
||||
end
|
||||
function SoldierPauseCtrl:OnBtnClick_CoinTips()
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierGoldTips)
|
||||
end
|
||||
function SoldierPauseCtrl:OnBtnClick_Setting()
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.BattleSettings)
|
||||
end
|
||||
function SoldierPauseCtrl:OnEvent_OpenSoldierPause(tabChess, tabCacheSoldierEnergy)
|
||||
self.tChess = tabChess
|
||||
self.tabCacheSoldierEnergy = tabCacheSoldierEnergy
|
||||
self.bShow = true
|
||||
self.levelData = PlayerData.SoldierData:GetCurLevelData()
|
||||
PanelManager.InputDisable()
|
||||
self:OpenUI()
|
||||
self:Refresh()
|
||||
GamepadUIManager.EnableGamepadUI("SoldierPauseCtrl", self.tbGamepadUINode, nil, true)
|
||||
end
|
||||
function SoldierPauseCtrl:OnEvent_RefreshCoin(nCount)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtCoin, nCount)
|
||||
end
|
||||
return SoldierPauseCtrl
|
||||
@@ -0,0 +1,550 @@
|
||||
local SoldierRoomInfoCtrl = class("SoldierRoomInfoCtrl", BaseCtrl)
|
||||
local GamepadUIManager = require("GameCore.Module.GamepadUIManager")
|
||||
local SoldierAttrData = require("GameCore.Data.DataClass.Soldier.SoldierAttrData")
|
||||
SoldierRoomInfoCtrl._mapNodeConfig = {
|
||||
canvas_group = {
|
||||
sComponentName = "CanvasGroup",
|
||||
sNodeName = "----SafeAreaRoot----"
|
||||
},
|
||||
btnPause = {
|
||||
sComponentName = "NaviButton",
|
||||
callback = "OnBtn_Pause"
|
||||
},
|
||||
BtnBg = {},
|
||||
txtNode = {sComponentName = "TMP_Text"},
|
||||
txtProgress = {sComponentName = "TMP_Text"},
|
||||
imgProgressBg = {
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
imgProgress = {sComponentName = "Image"},
|
||||
txtHp = {sComponentName = "TMP_Text"},
|
||||
txtCoin = {sComponentName = "TMP_Text"},
|
||||
btnCoin = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_CoinTips"
|
||||
},
|
||||
goCharList = {},
|
||||
goMainChar = {
|
||||
nCount = 3,
|
||||
sCtrlName = "Game.UI.Soldier.Battle.SoldierMainCharItemCtrl"
|
||||
},
|
||||
goSubChar = {
|
||||
nCount = 6,
|
||||
sCtrlName = "Game.UI.Soldier.Battle.SoldierSubCharItemCtrl"
|
||||
},
|
||||
goDamage = {nCount = 9},
|
||||
txtChessName = {nCount = 9, sComponentName = "TMP_Text"},
|
||||
txtDamage = {nCount = 9, sComponentName = "TMP_Text"},
|
||||
rtChallengeTime = {},
|
||||
TMPChallengeTime = {sComponentName = "TMP_Text"},
|
||||
imgUnfold = {},
|
||||
btnFold = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Fold"
|
||||
},
|
||||
btnPartner = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Partner"
|
||||
},
|
||||
btnCharacter = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Character"
|
||||
},
|
||||
svPartnerUnfold = {sComponentName = "Transform"},
|
||||
svCharUnfold = {sComponentName = "Transform"},
|
||||
goPartnerItem = {sComponentName = "Transform"},
|
||||
goPartnerUnfold = {sComponentName = "Transform"},
|
||||
goCharDamageItem = {sComponentName = "Transform"},
|
||||
goCharUnfold = {sComponentName = "Transform"},
|
||||
imgFold = {},
|
||||
btnUnfold = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Unfold"
|
||||
},
|
||||
btnChange = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Change"
|
||||
},
|
||||
txtBtnPartner = {
|
||||
nCount = 3,
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Battle_Btn_Partner"
|
||||
},
|
||||
txtBtnChar = {
|
||||
nCount = 3,
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Battle_Btn_Char"
|
||||
},
|
||||
svPartnerFold = {sComponentName = "Transform"},
|
||||
svCharFold = {sComponentName = "Transform"},
|
||||
goPartnerItemFold = {sComponentName = "Transform"},
|
||||
goPartnerFold = {sComponentName = "Transform"},
|
||||
goCharItemFold = {sComponentName = "Transform"},
|
||||
goCharFold = {sComponentName = "Transform"},
|
||||
txtBtnAutoBattleOpen = {
|
||||
nCount = 4,
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "AutoBattle_Open"
|
||||
},
|
||||
txtBtnAutoBattleClose = {
|
||||
nCount = 4,
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "AutoBattle_Close"
|
||||
},
|
||||
btnAutoBattleOpen = {
|
||||
sComponentName = "NaviButton",
|
||||
callback = "OnClick_AutoBattleOpen",
|
||||
sAction = "AutoBattle"
|
||||
},
|
||||
btnAutoBattleClose = {
|
||||
sComponentName = "NaviButton",
|
||||
callback = "OnClick_AutoBattleClose",
|
||||
sAction = "AutoBattle"
|
||||
},
|
||||
charDetialRoot = {sComponentName = "Transform"},
|
||||
parnterDetialRoot = {sComponentName = "Transform"}
|
||||
}
|
||||
SoldierRoomInfoCtrl._mapEventConfig = {
|
||||
OpenSoldierRoomInfo = "OnEvent_OpenUI",
|
||||
InputEnable = "OnEvent_InputEnable",
|
||||
LoadLevelRefresh = "OnEvent_LoadLevelRefresh",
|
||||
RefreshSoldierBattleTime = "OnEvent_RefreshTime",
|
||||
RefreshSoldierChessList = "OnEvent_RefreshChessList",
|
||||
RefreshChessDamage = "OnEvent_RefreshChessDamage",
|
||||
RefreshSoldierProgress = "OnEvent_RefreshProgress",
|
||||
RefreshSoldierCoin = "OnEvent_RefreshCoin",
|
||||
RestartSoldier = "OnEvent_ClearSoldier",
|
||||
SettleSoldierBattle = "OnEvent_ClearSoldier",
|
||||
LeaveSoldier = "OnEvent_ClearSoldier",
|
||||
Soldier_Settlement_Ready = "OnEvent_SettlementReady"
|
||||
}
|
||||
local colorWhite = Color(1, 1, 1, 1)
|
||||
local colorRed = Color(0.8470588235294118, 0.3137254901960784, 0.32941176470588235)
|
||||
local nMaxWidth = 0
|
||||
local nHeight = 0
|
||||
local TAB_PARTNER = 1
|
||||
local TAB_CHARACTER = 2
|
||||
local iconPath = "Icon/SoldierOtherIcon/"
|
||||
local iconPartnerPath = "Icon/SoldierPartner/"
|
||||
function SoldierRoomInfoCtrl:OpenUI(nFloorId)
|
||||
self.nFloorId = nFloorId
|
||||
local mapFloorCfg = ConfigTable.GetData("SoldierFloor", nFloorId)
|
||||
if mapFloorCfg ~= nil then
|
||||
self.nTotalTime = mapFloorCfg.BattleTime
|
||||
self.nRemainTime = 0
|
||||
end
|
||||
nMaxWidth = self._mapNode.imgProgressBg.sizeDelta.x
|
||||
nHeight = self._mapNode.imgProgressBg.sizeDelta.y
|
||||
self._mapNode.rtChallengeTime.gameObject:SetActive(false)
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPChallengeTime, "00:00")
|
||||
NovaAPI.SetTMPColor(self._mapNode.TMPChallengeTime, colorWhite)
|
||||
local nHp = self.levelData:GetHp()
|
||||
NovaAPI.SetTMPText(self._mapNode.txtHp, nHp)
|
||||
local nCount = self.levelData:GetItem(AllEnum.CoinItemId.SoldierCurrency)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtCoin, tostring(nCount))
|
||||
local nStage, nNodexIndex = PlayerData.SoldierData:GetCurChallengeState()
|
||||
NovaAPI.SetTMPText(self._mapNode.txtNode, nStage .. "-" .. nNodexIndex)
|
||||
self:ApplyViewState()
|
||||
self._mapNode.btnAutoBattleOpen.gameObject:SetActive(false)
|
||||
self._mapNode.btnAutoBattleClose.gameObject:SetActive(true)
|
||||
end
|
||||
function SoldierRoomInfoCtrl:CloseUI()
|
||||
for _, v in ipairs(self._mapNode.goMainChar) do
|
||||
v:CloseUI()
|
||||
end
|
||||
for _, v in ipairs(self._mapNode.goSubChar) do
|
||||
v:CloseUI()
|
||||
end
|
||||
end
|
||||
function SoldierRoomInfoCtrl:ApplyViewState()
|
||||
self._mapNode.txtBtnPartner[1].gameObject:SetActive(self._nShowTab == TAB_PARTNER)
|
||||
self._mapNode.txtBtnChar[1].gameObject:SetActive(self._nShowTab == TAB_CHARACTER)
|
||||
self._mapNode.imgUnfold.gameObject:SetActive(self._bUnfold)
|
||||
self._mapNode.imgFold.gameObject:SetActive(not self._bUnfold)
|
||||
if self._bUnfold then
|
||||
self._mapNode.svPartnerUnfold.gameObject:SetActive(self._nShowTab == TAB_PARTNER)
|
||||
self._mapNode.svCharUnfold.gameObject:SetActive(self._nShowTab == TAB_CHARACTER)
|
||||
else
|
||||
self._mapNode.svPartnerFold.gameObject:SetActive(self._nShowTab == TAB_PARTNER)
|
||||
self._mapNode.svCharFold.gameObject:SetActive(self._nShowTab == TAB_CHARACTER)
|
||||
end
|
||||
self:ChangeBtnBgState()
|
||||
end
|
||||
function SoldierRoomInfoCtrl:SetTime(nTime)
|
||||
self.nRemainTime = self.nTotalTime - nTime
|
||||
if self.nRemainTime <= 0 then
|
||||
NovaAPI.SetTMPColor(self._mapNode.TMPChallengeTime, colorRed)
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPChallengeTime, ConfigTable.GetUIText("Soldier_Battle_Speed"))
|
||||
else
|
||||
if self.nRemainTime <= 5 then
|
||||
NovaAPI.SetTMPColor(self._mapNode.TMPChallengeTime, colorRed)
|
||||
else
|
||||
NovaAPI.SetTMPColor(self._mapNode.TMPChallengeTime, colorWhite)
|
||||
end
|
||||
local nMin = math.floor(self.nRemainTime / 60)
|
||||
local nSec = math.fmod(self.nRemainTime, 60)
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPChallengeTime, string.format("%02d:%02d", nMin, nSec))
|
||||
end
|
||||
end
|
||||
function SoldierRoomInfoCtrl:RefreshChessList()
|
||||
for _, v in ipairs(self._mapNode.goDamage) do
|
||||
v.gameObject:SetActive(false)
|
||||
end
|
||||
for _, v in ipairs(self._mapNode.goMainChar) do
|
||||
v.gameObject:SetActive(false)
|
||||
end
|
||||
for _, v in ipairs(self._mapNode.goSubChar) do
|
||||
v.gameObject:SetActive(false)
|
||||
end
|
||||
local tbActivePartner, tbPartner = SoldierAttrData.CalcActivePartners(self.tbChess)
|
||||
for k, v in ipairs(self.tbChess) do
|
||||
local nIndex = v.nIndex
|
||||
if v.nPositionType == GameEnum.SoldierPositionType.FightPosition then
|
||||
self._mapNode.goMainChar[nIndex].gameObject:SetActive(v.nId > 0)
|
||||
if v.nId > 0 then
|
||||
self._mapNode.goMainChar[nIndex]:InitChar(v, self.tbChess, tbActivePartner, self)
|
||||
self._mapNode.goMainChar[nIndex]:SetTipsRoot(self._mapNode.charDetialRoot)
|
||||
end
|
||||
elseif v.nPositionType == GameEnum.SoldierPositionType.SupportPosition then
|
||||
self._mapNode.goSubChar[nIndex].gameObject:SetActive(v.nId > 0)
|
||||
if v.nId > 0 then
|
||||
self._mapNode.goSubChar[nIndex]:InitChar(v, self.tbChess, tbActivePartner, self)
|
||||
self._mapNode.goSubChar[nIndex]:SetTipsRoot(self._mapNode.charDetialRoot)
|
||||
end
|
||||
end
|
||||
end
|
||||
self:RefreshPartner(tbPartner)
|
||||
self:BuildCharList(self.tbChess)
|
||||
end
|
||||
function SoldierRoomInfoCtrl:RefreshPartner(tbPartner)
|
||||
if self._bPartnerBuilt then
|
||||
return
|
||||
end
|
||||
self.tabPartnerBtn = {}
|
||||
if tbPartner == nil then
|
||||
return
|
||||
end
|
||||
local index = 0
|
||||
for _, v in ipairs(tbPartner) do
|
||||
index = index + 1
|
||||
local mapPartnerGroupCfg = CacheTable.GetData("_SoldierPartnerGroup", v.nType)
|
||||
if mapPartnerGroupCfg ~= nil then
|
||||
local nPartnerQty = GameEnum.PartnerLevelQuality.None
|
||||
local sBgPath = ""
|
||||
local cfgList = CacheTable.GetData("_SoldierPartner", v.nType)
|
||||
if cfgList == nil then
|
||||
return
|
||||
end
|
||||
local partnerCfg = cfgList[v.nActiveLevel]
|
||||
if partnerCfg == nil then
|
||||
partnerCfg = cfgList[1]
|
||||
end
|
||||
if v.nActiveLevel == 0 then
|
||||
sBgPath = iconPath .. AllEnum.SoldierPartnerLevelIcon[GameEnum.PartnerLevelQuality.None].bg
|
||||
else
|
||||
sBgPath = iconPath .. AllEnum.SoldierPartnerLevelIcon[partnerCfg.PartnerLevelQuality].bg
|
||||
end
|
||||
local clickCb = function()
|
||||
local bTrace = PlayerData.SoldierData:GetCurLevelData():CheckPartnerTrace(v.nType)
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierPartnerTips, self._mapNode.parnterDetialRoot, v.nType, v.nActiveLevel, bTrace)
|
||||
EventManager.Hit("OnSetParnterTipsPosition", self._mapNode.parnterDetialRoot:GetChild(0).position, self._mapNode.parnterDetialRoot:GetChild(1).position, self._mapNode.parnterDetialRoot:GetChild(2).position)
|
||||
end
|
||||
local goU = instantiate(self._mapNode.goPartnerItem, self._mapNode.goPartnerUnfold)
|
||||
goU.gameObject:SetActive(true)
|
||||
local imgQtyU = goU:Find("imgPartner"):GetComponent("Image")
|
||||
local imgIconU = goU:Find("imgPartnerIcon"):GetComponent("Image")
|
||||
local txtName = goU:Find("txtPartnerName"):GetComponent("TMP_Text")
|
||||
local txtLvlU = goU:Find("imgPartnerbg/txtPartner"):GetComponent("TMP_Text")
|
||||
local txtCount = goU:Find("txtPartnerCount"):GetComponent("TMP_Text")
|
||||
self:SetPngSprite(imgQtyU, sBgPath)
|
||||
self:SetPngSprite(imgIconU, iconPartnerPath .. mapPartnerGroupCfg.Icon .. AllEnum.SoldierChessIconSurfix.M)
|
||||
NovaAPI.SetTMPText(txtName, mapPartnerGroupCfg.Name)
|
||||
local strLevel = ""
|
||||
for i = 1, #v.tbNumList do
|
||||
if 1 < i then
|
||||
strLevel = strLevel .. "/"
|
||||
end
|
||||
if i ~= v.nActiveLevel then
|
||||
strLevel = strLevel .. v.tbNumList[i]
|
||||
else
|
||||
strLevel = strLevel .. "<color=#3F4A5E>" .. v.tbNumList[i] .. "</color>"
|
||||
end
|
||||
end
|
||||
NovaAPI.SetTMPText(txtLvlU, strLevel)
|
||||
NovaAPI.SetTMPText(txtCount, v.nCurNum)
|
||||
self._tbPartnerInst.unfold[#self._tbPartnerInst.unfold + 1] = goU
|
||||
local btnU = imgQtyU.gameObject:GetComponent("UIButton")
|
||||
btnU.onClick:RemoveAllListeners()
|
||||
btnU.onClick:AddListener(clickCb)
|
||||
table.insert(self.tabPartnerBtn, btnU)
|
||||
local goF = instantiate(self._mapNode.goPartnerItemFold, self._mapNode.goPartnerFold)
|
||||
goF.gameObject:SetActive(true)
|
||||
local imgQty = goF:Find("imgPartner"):GetComponent("Image")
|
||||
local imgIconF = goF:Find("imgPartnerIcon"):GetComponent("Image")
|
||||
local txtLvlF = goF:Find("txtPartner"):GetComponent("TMP_Text")
|
||||
self:SetPngSprite(imgQty, sBgPath)
|
||||
self:SetPngSprite(imgIconF, iconPartnerPath .. mapPartnerGroupCfg.Icon .. AllEnum.SoldierChessIconSurfix.M)
|
||||
NovaAPI.SetTMPText(txtLvlF, tostring(v.nCurNum or 0))
|
||||
self._tbPartnerInst.fold[#self._tbPartnerInst.fold + 1] = goF
|
||||
local btnF = imgQty.gameObject:GetComponent("UIButton")
|
||||
btnF.onClick:RemoveAllListeners()
|
||||
btnF.onClick:AddListener(clickCb)
|
||||
table.insert(self.tabPartnerBtn, btnF)
|
||||
if index == #tbPartner then
|
||||
goU:Find("imgLine").gameObject:SetActive(false)
|
||||
goF:Find("imgLine").gameObject:SetActive(false)
|
||||
end
|
||||
end
|
||||
end
|
||||
self._bPartnerBuilt = true
|
||||
end
|
||||
function SoldierRoomInfoCtrl:_FillCharCommon(goItem, mapChess, mapCfg)
|
||||
local imgIcon = goItem:Find("imgChar"):GetComponent("Image")
|
||||
local img_icon = goItem:Find("iconMask/img_icon"):GetComponent("Image")
|
||||
local sIcon = AllEnum.SoldierChessRarityIcon[mapCfg.Rarity]
|
||||
sIcon = iconPath .. sIcon .. AllEnum.SoldierChessIconSurfix.S
|
||||
if imgIcon then
|
||||
self:SetPngSprite(imgIcon, sIcon)
|
||||
end
|
||||
local skinCfg = ConfigTable.GetData("SoldierSkin", mapCfg.Skin)
|
||||
if img_icon and skinCfg then
|
||||
self:SetPngSprite(img_icon, skinCfg.Icon .. AllEnum.SoldierChessIconSurfix.S)
|
||||
end
|
||||
for i = 1, 5 do
|
||||
local goStar = goItem:Find("goStarRoot/imgStar" .. i)
|
||||
if goStar then
|
||||
goStar.gameObject:SetActive(i <= mapChess.nStar)
|
||||
end
|
||||
end
|
||||
end
|
||||
function SoldierRoomInfoCtrl:BuildCharList(tbChess)
|
||||
if self._bCharBuilt then
|
||||
return
|
||||
end
|
||||
local index = 0
|
||||
local totalIndex = 0
|
||||
for _, v in ipairs(tbChess or {}) do
|
||||
if v.nId and 0 < v.nId then
|
||||
totalIndex = totalIndex + 1
|
||||
end
|
||||
end
|
||||
for _, v in ipairs(tbChess or {}) do
|
||||
if v.nId and 0 < v.nId then
|
||||
index = index + 1
|
||||
local mapCfg = ConfigTable.GetData("SoldierCharacter", v.nId)
|
||||
if mapCfg ~= nil then
|
||||
local goU = instantiate(self._mapNode.goCharDamageItem, self._mapNode.goCharUnfold)
|
||||
goU.gameObject:SetActive(true)
|
||||
self:_FillCharCommon(goU, v, mapCfg)
|
||||
local trDamage = goU:Find("txtDamage")
|
||||
local imgDamage = goU:Find("imgDamageBg/imgDamage"):GetComponent("RectTransform")
|
||||
local txtDamage = trDamage and trDamage:GetComponent("TMP_Text") or nil
|
||||
if txtDamage then
|
||||
NovaAPI.SetTMPText(txtDamage, "0")
|
||||
end
|
||||
local goF = instantiate(self._mapNode.goCharItemFold, self._mapNode.goCharFold)
|
||||
goF.gameObject:SetActive(true)
|
||||
self:_FillCharCommon(goF, v, mapCfg)
|
||||
self._tbCharInst[v.nId] = {
|
||||
goUnfold = goU,
|
||||
goFold = goF,
|
||||
txtDamage = txtDamage,
|
||||
imgDamage = imgDamage
|
||||
}
|
||||
if self.tbDamage[v.nId] == nil then
|
||||
self.tbDamage[v.nId] = {nDamage = 0}
|
||||
end
|
||||
if index == totalIndex then
|
||||
goU:Find("imgLine").gameObject:SetActive(false)
|
||||
goF:Find("imgLine").gameObject:SetActive(false)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
self._bCharBuilt = true
|
||||
self:_RefreshAllDamageUI()
|
||||
end
|
||||
function SoldierRoomInfoCtrl:_RefreshAllDamageUI()
|
||||
local tbSorted = {}
|
||||
local nMaxDamage = 0
|
||||
for nId, v in pairs(self.tbDamage) do
|
||||
local nDamage = v.nDamage or 0
|
||||
table.insert(tbSorted, {nId = nId, nDamage = nDamage})
|
||||
if nMaxDamage < nDamage then
|
||||
nMaxDamage = nDamage
|
||||
end
|
||||
end
|
||||
table.sort(tbSorted, function(a, b)
|
||||
if a.nDamage == b.nDamage then
|
||||
return a.nId < b.nId
|
||||
end
|
||||
return a.nDamage > b.nDamage
|
||||
end)
|
||||
for nOrder, mapEntry in ipairs(tbSorted) do
|
||||
local inst = self._tbCharInst[mapEntry.nId]
|
||||
if inst then
|
||||
local nPercent = 0 < nMaxDamage and mapEntry.nDamage / nMaxDamage or 0
|
||||
if inst.txtDamage then
|
||||
NovaAPI.SetTMPText(inst.txtDamage, self:ThousandsNumber(mapEntry.nDamage))
|
||||
end
|
||||
if inst.imgDamage then
|
||||
inst.imgDamage.sizeDelta = Vector2(nPercent * 178, 16)
|
||||
end
|
||||
if inst.goUnfold then
|
||||
inst.goUnfold:SetSiblingIndex(nOrder - 1)
|
||||
end
|
||||
if inst.goFold then
|
||||
inst.goFold:SetSiblingIndex(nOrder - 1)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
function SoldierRoomInfoCtrl:RefreshChessDamage(nId, nDamage)
|
||||
if self.tbDamage[nId] == nil then
|
||||
self.tbDamage[nId] = {nDamage = nDamage}
|
||||
else
|
||||
self.tbDamage[nId].nDamage = nDamage
|
||||
end
|
||||
if self._bCharBuilt then
|
||||
self:_RefreshAllDamageUI()
|
||||
end
|
||||
end
|
||||
function SoldierRoomInfoCtrl:OnEnable()
|
||||
self.levelData = PlayerData.SoldierData:GetCurLevelData()
|
||||
self.tbDamage = {}
|
||||
self.tbCacheSoldierEnergy = {}
|
||||
self._mapNode.BtnBg.gameObject:SetActive(false)
|
||||
self._mapNode.goPartnerItem.gameObject:SetActive(false)
|
||||
self._mapNode.goCharDamageItem.gameObject:SetActive(false)
|
||||
self._mapNode.goPartnerItemFold.gameObject:SetActive(false)
|
||||
self._mapNode.goCharItemFold.gameObject:SetActive(false)
|
||||
self._bUnfold = true
|
||||
self._nShowTab = TAB_CHARACTER
|
||||
self._tbPartnerInst = {
|
||||
unfold = {},
|
||||
fold = {}
|
||||
}
|
||||
self._tbCharInst = {}
|
||||
self._bPartnerBuilt = false
|
||||
self._bCharBuilt = false
|
||||
GamepadUIManager.AddGamepadUINode("BattleMenu", self:GetGamepadUINode())
|
||||
end
|
||||
function SoldierRoomInfoCtrl:OnDisable()
|
||||
self:CloseUI()
|
||||
end
|
||||
function SoldierRoomInfoCtrl:OnDestroy()
|
||||
if self.tabPartnerBtn then
|
||||
for i, v in pairs(self.tabPartnerBtn) do
|
||||
v.onClick:RemoveAllListeners()
|
||||
end
|
||||
self.tabPartnerBtn = nil
|
||||
end
|
||||
end
|
||||
function SoldierRoomInfoCtrl:OnBtn_Pause()
|
||||
EventManager.Hit("OpenSoldierPause", self.tbChess, self.tbCacheSoldierEnergy)
|
||||
end
|
||||
function SoldierRoomInfoCtrl:OnBtnClick_CoinTips()
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierGoldTips)
|
||||
end
|
||||
function SoldierRoomInfoCtrl:OnBtnClick_Fold()
|
||||
self._bUnfold = false
|
||||
self:ApplyViewState()
|
||||
end
|
||||
function SoldierRoomInfoCtrl:OnBtnClick_Unfold()
|
||||
self._bUnfold = true
|
||||
self:ApplyViewState()
|
||||
end
|
||||
function SoldierRoomInfoCtrl:OnBtnClick_Partner()
|
||||
self._nShowTab = TAB_PARTNER
|
||||
self:ApplyViewState()
|
||||
end
|
||||
function SoldierRoomInfoCtrl:OnBtnClick_Character()
|
||||
self._nShowTab = TAB_CHARACTER
|
||||
self:ApplyViewState()
|
||||
end
|
||||
function SoldierRoomInfoCtrl:ChangeBtnBgState()
|
||||
local PartnerBg = self._mapNode.btnPartner.transform:Find("AnimRoot/imgBg").gameObject
|
||||
local BtnPartner2 = self._mapNode.btnPartner.transform:Find("AnimRoot/txtBtnPartner2").gameObject
|
||||
local BtnPartner3 = self._mapNode.btnPartner.transform:Find("AnimRoot/txtBtnPartner3").gameObject
|
||||
local CharacterBg = self._mapNode.btnCharacter.transform:Find("AnimRoot/imgBg").gameObject
|
||||
local BtnChar2 = self._mapNode.btnCharacter.transform:Find("AnimRoot/txtBtnChar2").gameObject
|
||||
local BtnChar3 = self._mapNode.btnCharacter.transform:Find("AnimRoot/txtBtnChar3").gameObject
|
||||
PartnerBg:SetActive(self._nShowTab == TAB_PARTNER)
|
||||
BtnPartner2:SetActive(self._nShowTab == TAB_PARTNER)
|
||||
BtnPartner3:SetActive(self._nShowTab ~= TAB_PARTNER)
|
||||
CharacterBg:SetActive(self._nShowTab ~= TAB_PARTNER)
|
||||
BtnChar2:SetActive(self._nShowTab ~= TAB_PARTNER)
|
||||
BtnChar3:SetActive(self._nShowTab == TAB_PARTNER)
|
||||
end
|
||||
function SoldierRoomInfoCtrl:OnBtnClick_Change()
|
||||
self._nShowTab = self._nShowTab == TAB_PARTNER and TAB_CHARACTER or TAB_PARTNER
|
||||
self:ApplyViewState()
|
||||
end
|
||||
function SoldierRoomInfoCtrl:OnEvent_OpenUI(nFloorId)
|
||||
self:OpenUI(nFloorId)
|
||||
end
|
||||
function SoldierRoomInfoCtrl:OnEvent_InputEnable(bEnable)
|
||||
NovaAPI.SetCanvasGroupAlpha(self._mapNode.canvas_group, bEnable == true and 1 or 0)
|
||||
NovaAPI.SetCanvasGroupInteractable(self._mapNode.canvas_group, bEnable == true)
|
||||
NovaAPI.SetCanvasGroupBlocksRaycasts(self._mapNode.canvas_group, bEnable == true)
|
||||
end
|
||||
function SoldierRoomInfoCtrl:OnEvent_LoadLevelRefresh()
|
||||
self._mapNode.BtnBg.gameObject:SetActive(true)
|
||||
end
|
||||
function SoldierRoomInfoCtrl:OnEvent_RefreshChessList(tbChess)
|
||||
self.tbChess = tbChess or {}
|
||||
self:RefreshChessList()
|
||||
end
|
||||
function SoldierRoomInfoCtrl:OnEvent_RefreshChessDamage(nId, nDamage)
|
||||
self:RefreshChessDamage(nId, nDamage)
|
||||
end
|
||||
function SoldierRoomInfoCtrl:OnEvent_RefreshTime(nTime)
|
||||
self._mapNode.rtChallengeTime.gameObject:SetActive(true)
|
||||
if self.nRemainTime < 0 then
|
||||
return
|
||||
end
|
||||
self:SetTime(nTime)
|
||||
end
|
||||
function SoldierRoomInfoCtrl:OnEvent_RefreshProgress(nTotalHp, nHp)
|
||||
local nProgress = nHp / nTotalHp
|
||||
NovaAPI.SetTMPText(self._mapNode.txtProgress, string.format("%.f %%", nProgress * 100))
|
||||
NovaAPI.SetImageFillAmount(self._mapNode.imgProgress, nProgress)
|
||||
end
|
||||
function SoldierRoomInfoCtrl:OnEvent_RefreshCoin(nCount)
|
||||
local nCurCount = self.levelData:GetItem(AllEnum.CoinItemId.SoldierCurrency) or 0
|
||||
NovaAPI.SetTMPText(self._mapNode.txtCoin, tostring(nCount + nCurCount))
|
||||
end
|
||||
function SoldierRoomInfoCtrl:OnEvent_ClearSoldier()
|
||||
for _, v in ipairs(self._mapNode.goMainChar) do
|
||||
v:CloseUI()
|
||||
end
|
||||
for _, v in ipairs(self._mapNode.goSubChar) do
|
||||
v:CloseUI()
|
||||
end
|
||||
for _, inst in pairs(self._tbCharInst) do
|
||||
if inst.txtDamage then
|
||||
NovaAPI.SetTMPText(inst.txtDamage, "0")
|
||||
end
|
||||
if inst.imgDamage then
|
||||
inst.imgDamage.sizeDelta = Vector2(0, 16)
|
||||
end
|
||||
end
|
||||
end
|
||||
function SoldierRoomInfoCtrl:CacheSoldierEnergyData(dataId, nEnergy, nMaxEnergy, nRecoverRate, nDeath)
|
||||
self.tbCacheSoldierEnergy[dataId] = {
|
||||
energy = nEnergy,
|
||||
maxEnergy = nMaxEnergy,
|
||||
recoverRate = nRecoverRate,
|
||||
death = nDeath
|
||||
}
|
||||
end
|
||||
function SoldierRoomInfoCtrl:OnClick_AutoBattleOpen()
|
||||
end
|
||||
function SoldierRoomInfoCtrl:OnClick_AutoBattleClose()
|
||||
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Soldier_AutoBattle_Tips"))
|
||||
end
|
||||
function SoldierRoomInfoCtrl:OnEvent_SettlementReady()
|
||||
self._mapNode.BtnBg.gameObject:SetActive(false)
|
||||
self._mapNode.btnPause.gameObject:SetActive(false)
|
||||
end
|
||||
return SoldierRoomInfoCtrl
|
||||
@@ -0,0 +1,67 @@
|
||||
local SoldierSkillDisplayCtrl = class("SoldierSkillDisplayCtrl", BaseCtrl)
|
||||
local WwiseAudioMgr = CS.WwiseAudioManager.Instance
|
||||
SoldierSkillDisplayCtrl._mapNodeConfig = {
|
||||
rtSubSkill = {
|
||||
nCount = 3,
|
||||
sCtrlName = "Game.UI.Soldier.Battle.SoldierSkillDisplayItemCtrl"
|
||||
}
|
||||
}
|
||||
SoldierSkillDisplayCtrl._mapEventConfig = {
|
||||
SoldierSkillDisPlay = "OnEvent_SkillDisplay",
|
||||
InputEnable = "OnEvent_InputEnable"
|
||||
}
|
||||
function SoldierSkillDisplayCtrl:Awake()
|
||||
self.mapSkillDisplay = {}
|
||||
end
|
||||
function SoldierSkillDisplayCtrl:OnEnable()
|
||||
local wait = function()
|
||||
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
||||
NovaAPI.ForceUpdateCanvases()
|
||||
end
|
||||
cs_coroutine.start(wait)
|
||||
end
|
||||
function SoldierSkillDisplayCtrl:OnDisable()
|
||||
end
|
||||
function SoldierSkillDisplayCtrl:OnDestroy()
|
||||
end
|
||||
function SoldierSkillDisplayCtrl:OnRelease()
|
||||
end
|
||||
function SoldierSkillDisplayCtrl:OnEvent_SkillDisplay(nCharId, nSkillId)
|
||||
local mapCharCfg = ConfigTable.GetData("SoldierCharacter", nCharId)
|
||||
local mapSkillCfg = ConfigTable.GetData("Skill", nSkillId)
|
||||
if mapCharCfg == nil or mapSkillCfg == nil then
|
||||
return
|
||||
end
|
||||
local bPlay = false
|
||||
for nIdx, skillCtrl in ipairs(self._mapNode.rtSubSkill) do
|
||||
if not skillCtrl.bPlaying then
|
||||
bPlay = true
|
||||
skillCtrl:ShowSkillTips(nSkillId, nCharId)
|
||||
return
|
||||
end
|
||||
end
|
||||
if not bPlay then
|
||||
local nIndex = 0
|
||||
local nTmpTime = 0
|
||||
for k, v in ipairs(self._mapNode.rtSubSkill) do
|
||||
if nTmpTime == 0 or nTmpTime > v.nPlayTime then
|
||||
nIndex = k
|
||||
end
|
||||
end
|
||||
if 0 < nIndex then
|
||||
self._mapNode.rtSubSkill[nIndex]:InterrputAnim()
|
||||
self._mapNode.rtSubSkill[nIndex]:ShowSkillTips(nSkillId, nCharId)
|
||||
end
|
||||
end
|
||||
end
|
||||
function SoldierSkillDisplayCtrl:OnEvent_InputEnable(bEnable)
|
||||
if not bEnable then
|
||||
self:InterrputAllDisplay()
|
||||
end
|
||||
end
|
||||
function SoldierSkillDisplayCtrl:InterrputAllDisplay()
|
||||
self._mapNode.rtSubSkill[1]:InterrputAnim()
|
||||
self._mapNode.rtSubSkill[2]:InterrputAnim()
|
||||
self._mapNode.rtSubSkill[3]:InterrputAnim()
|
||||
end
|
||||
return SoldierSkillDisplayCtrl
|
||||
@@ -0,0 +1,83 @@
|
||||
local SoldierSkillDisplayItemCtrl = class("SoldierSkillDisplayItemCtrl", BaseCtrl)
|
||||
SoldierSkillDisplayItemCtrl._mapNodeConfig = {
|
||||
TMP_SkillName = {sComponentName = "TMP_Text"},
|
||||
imgSubSkillIcon = {sComponentName = "Image"}
|
||||
}
|
||||
SoldierSkillDisplayItemCtrl._mapEventConfig = {}
|
||||
function SoldierSkillDisplayItemCtrl:Awake()
|
||||
end
|
||||
function SoldierSkillDisplayItemCtrl:OnEnable()
|
||||
self.nPlayTime = 0
|
||||
self.animRoot = self.gameObject:GetComponent("Animator")
|
||||
self.canvasGroup = self.gameObject:GetComponent("CanvasGroup")
|
||||
local wait = function()
|
||||
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
||||
self.gameObject:SetActive(false)
|
||||
end
|
||||
cs_coroutine.start(wait)
|
||||
end
|
||||
function SoldierSkillDisplayItemCtrl:OnDisable()
|
||||
end
|
||||
function SoldierSkillDisplayItemCtrl:OnDestroy()
|
||||
end
|
||||
function SoldierSkillDisplayItemCtrl:ShowSkillTips(nSkillId, nCharId, callback)
|
||||
if self.timer ~= nil then
|
||||
self.timer:Cancel(false)
|
||||
self.timer = nil
|
||||
end
|
||||
local wait = function()
|
||||
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
||||
self.animRoot.enabled = true
|
||||
self.animRoot:Play("SubSkillDisplay_skill_1")
|
||||
NovaAPI.SetCanvasGroupAlpha(self.canvasGroup, 1)
|
||||
end
|
||||
self.animRoot.enabled = false
|
||||
NovaAPI.SetCanvasGroupAlpha(self.canvasGroup, 0)
|
||||
cs_coroutine.start(wait)
|
||||
local mapSkillCfgData = ConfigTable.GetData_Skill(nSkillId)
|
||||
if mapSkillCfgData == nil then
|
||||
printError("Skill Data Missing:" .. nSkillId)
|
||||
NovaAPI.SetTMPText(self._mapNode.TMP_SkillName, "")
|
||||
else
|
||||
NovaAPI.SetTMPText(self._mapNode.TMP_SkillName, mapSkillCfgData.Title)
|
||||
end
|
||||
local mapChar = ConfigTable.GetData("SoldierCharacter", nCharId)
|
||||
if mapChar ~= nil then
|
||||
local nSkinId = mapChar.Skin
|
||||
local mapSkin = ConfigTable.GetData("SoldierSkin", nSkinId)
|
||||
if mapSkin ~= nil then
|
||||
self:SetPngSprite(self._mapNode.imgSubSkillIcon, mapSkin.Icon .. AllEnum.SoldierChessIconSurfix.S)
|
||||
end
|
||||
end
|
||||
self.ShowEndCallback = callback
|
||||
self.gameObject:SetActive(true)
|
||||
self.timer = self:AddTimer(1, 1.5, "ShowEnd", true, true, true, true)
|
||||
self.bPlaying = true
|
||||
self.nPlayTime = os.time()
|
||||
end
|
||||
function SoldierSkillDisplayItemCtrl:ShowEnd()
|
||||
NovaAPI.SetImageSpriteAsset(self._mapNode.imgSubSkillIcon, nil)
|
||||
NovaAPI.SetTMPText(self._mapNode.TMP_SkillName, "")
|
||||
if self.ShowEndCallback ~= nil and type(self.ShowEndCallback) == "function" then
|
||||
self.ShowEndCallback()
|
||||
end
|
||||
self.ShowEndCallback = nil
|
||||
self.gameObject:SetActive(false)
|
||||
self.timer = nil
|
||||
self.bPlaying = false
|
||||
self.nPlayTime = 0
|
||||
end
|
||||
function SoldierSkillDisplayItemCtrl:InterrputAnim()
|
||||
if self.timer ~= nil then
|
||||
self.timer:Cancel(false)
|
||||
self.timer = nil
|
||||
end
|
||||
NovaAPI.SetImageSpriteAsset(self._mapNode.imgSubSkillIcon, nil)
|
||||
NovaAPI.SetTMPText(self._mapNode.TMP_SkillName, "")
|
||||
self.ShowEndCallback = nil
|
||||
self.gameObject:SetActive(false)
|
||||
self.timer = nil
|
||||
self.bPlaying = false
|
||||
self.nPlayTime = 0
|
||||
end
|
||||
return SoldierSkillDisplayItemCtrl
|
||||
@@ -0,0 +1,181 @@
|
||||
local SoldierSubCharItemCtrl = class("SoldierSubCharItemCtrl", BaseCtrl)
|
||||
local ImgChessRarityColor = {
|
||||
[GameEnum.ChessRarity.Gold] = "#FFF0BB",
|
||||
[GameEnum.ChessRarity.Purple] = "#C099FF",
|
||||
[GameEnum.ChessRarity.Blue] = "#8BF3FF",
|
||||
[GameEnum.ChessRarity.Green] = "#A1FF8D",
|
||||
[GameEnum.ChessRarity.White] = "#DBDBDB"
|
||||
}
|
||||
SoldierSubCharItemCtrl._mapNodeConfig = {
|
||||
imgSkillStart = {sComponentName = "Image"},
|
||||
AnimRoot = {sComponentName = "Animator"},
|
||||
SkillCharge = {
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
btnItem = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Item"
|
||||
},
|
||||
imgRarity = {sComponentName = "Image"},
|
||||
imgIcon = {sComponentName = "Image"},
|
||||
imgStar = {nCount = 5, sComponentName = "Image"},
|
||||
rtBuff = {
|
||||
sCtrlName = "Game.UI.Hud.Buff.BuffCtrl"
|
||||
},
|
||||
imgDeathMask = {},
|
||||
Fx_Charge = {},
|
||||
Fx_fish = {},
|
||||
Fx_Death = {}
|
||||
}
|
||||
SoldierSubCharItemCtrl._mapEventConfig = {
|
||||
SoldierCharSpawn = "OnEvent_SoldierCharSpawn"
|
||||
}
|
||||
SoldierSubCharItemCtrl._mapRedDotConfig = {}
|
||||
local nMaxSize = 0
|
||||
local iconPath = "Icon/SoldierOtherIcon/"
|
||||
function SoldierSubCharItemCtrl:AddEntityEvent()
|
||||
EventManager.AddEntityEvent("Soldier_EnergyChange", self.nCharId, self, self.OnEvent_EnergyChange)
|
||||
EventManager.AddEntityEvent("Event_SoldierMoYu", self.nCharId, self, self.OnEvent_MoYu)
|
||||
EventManager.AddEntityEvent("Event_SoldierDeath", self.nCharId, self, self.Event_Death)
|
||||
self._mapNode.rtBuff:BindEntity(self.nCharId)
|
||||
end
|
||||
function SoldierSubCharItemCtrl:RemoveEntityEvent()
|
||||
EventManager.RemoveEntityEvent("Soldier_EnergyChange", self.nCharId, self, self.OnEvent_EnergyChange)
|
||||
EventManager.RemoveEntityEvent("Event_SoldierMoYu", self.nCharId, self, self.OnEvent_MoYu)
|
||||
EventManager.RemoveEntityEvent("Event_SoldierDeath", self.nCharId, self, self.Event_Death)
|
||||
self._mapNode.rtBuff:UnbindEntity()
|
||||
end
|
||||
function SoldierSubCharItemCtrl:InitChar(mapData, tbChess, tbPartner, parent)
|
||||
self.isDeath = false
|
||||
self.isEnergyMax = false
|
||||
self._mapNode.imgSkillStart.gameObject:SetActive(false)
|
||||
self.tmpMapData = mapData
|
||||
self.nCharId = mapData.nUId
|
||||
self.nDataId = mapData.nId
|
||||
self.tbChess = tbChess
|
||||
self.tbPartner = tbPartner
|
||||
self.parent = parent
|
||||
nMaxSize = self._mapNode.SkillCharge.sizeDelta.x
|
||||
local mapCfg = ConfigTable.GetData("SoldierCharacter", self.nDataId)
|
||||
if mapCfg ~= nil then
|
||||
local sIcon = AllEnum.SoldierChessRarityIcon[mapCfg.Rarity]
|
||||
sIcon = iconPath .. sIcon .. AllEnum.SoldierChessIconSurfix.M
|
||||
self:SetPngSprite(self._mapNode.imgRarity, sIcon)
|
||||
local skinCfg = ConfigTable.GetData("SoldierSkin", mapCfg.Skin)
|
||||
if skinCfg then
|
||||
self:SetPngSprite(self._mapNode.imgIcon, skinCfg.Icon .. AllEnum.SoldierChessIconSurfix.M)
|
||||
end
|
||||
local _, color = ColorUtility.TryParseHtmlString(ImgChessRarityColor[mapCfg.Rarity])
|
||||
NovaAPI.SetImageColor(self._mapNode.imgSkillStart, color)
|
||||
end
|
||||
self._mapNode.SkillCharge.sizeDelta = Vector2(nMaxSize, 0)
|
||||
for k, v in ipairs(self._mapNode.imgStar) do
|
||||
v.gameObject:SetActive(k <= mapData.nStar)
|
||||
end
|
||||
end
|
||||
function SoldierSubCharItemCtrl:CloseUI()
|
||||
self:RemoveEntityEvent()
|
||||
self.bAddEvent = false
|
||||
self.nCharId = 0
|
||||
end
|
||||
function SoldierSubCharItemCtrl:Awake()
|
||||
end
|
||||
function SoldierSubCharItemCtrl:OnEnable()
|
||||
end
|
||||
function SoldierSubCharItemCtrl:OnDisable()
|
||||
end
|
||||
function SoldierSubCharItemCtrl:OnDestroy()
|
||||
end
|
||||
function SoldierSubCharItemCtrl:SetTipsRoot(tr)
|
||||
self.tipsRoot = tr
|
||||
end
|
||||
function SoldierSubCharItemCtrl:OnBtnClick_Item()
|
||||
if self.isDeath == true then
|
||||
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Soldier_Death_Tips"))
|
||||
return
|
||||
end
|
||||
local chessData = {
|
||||
nPositionType = GameEnum.SoldierPositionType.SupportPosition,
|
||||
nId = self.tmpMapData.nId,
|
||||
nStar = math.max(self.tmpMapData.nStar, 1)
|
||||
}
|
||||
local Info = CS.AdventureModuleHelper.GetSoldierActorInfo(self.nDataId)
|
||||
local HealthInfo = CS.AdventureModuleHelper.GetSoldierHealthInfo(self.nDataId)
|
||||
local atk = Info ~= nil and Info.atk:AsFloat() or 0
|
||||
local def = Info ~= nil and Info.def:AsFloat() or 0
|
||||
local critRate = Info ~= nil and Info.critRate:AsFloat() or 0
|
||||
local critPower = Info ~= nil and Info.critPower:AsFloat() or 0
|
||||
local attackSpeed = Info ~= nil and Info.normalAttackSpd:AsFloat() or 0
|
||||
local hp = HealthInfo ~= nil and HealthInfo.hp or 0
|
||||
local hpMax = HealthInfo ~= nil and HealthInfo.hpMax or 0
|
||||
local tab = {}
|
||||
tab.atk = atk
|
||||
tab.def = def
|
||||
tab.critRate = critRate
|
||||
tab.critPower = critPower
|
||||
tab.attackSpeed = attackSpeed
|
||||
tab.hp = hp
|
||||
tab.hpMax = hpMax
|
||||
tab.nEnergy = self.nEnergy
|
||||
tab.nMaxEnergy = self.nMaxEnergy
|
||||
tab.nRecoverRate = self.nRecoverRate
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierCharCardTips, self.tipsRoot, chessData, self.tbChess, self.tbPartner, tab)
|
||||
EventManager.Hit("OnSetTipsPosition", self.tipsRoot:GetChild(0).position, self.tipsRoot:GetChild(1).position, self.tipsRoot:GetChild(2).position)
|
||||
end
|
||||
function SoldierSubCharItemCtrl:OnEvent_EnergyChange(nEnergy, nMaxEnergy, nRecoverRate)
|
||||
local nValue = nEnergy / nMaxEnergy
|
||||
self.nEnergy = nEnergy
|
||||
self.nMaxEnergy = nMaxEnergy
|
||||
self.nRecoverRate = nRecoverRate
|
||||
if self.parent ~= nil then
|
||||
self.parent:CacheSoldierEnergyData(self.nCharId, nEnergy, nMaxEnergy, nRecoverRate, self.isDeath)
|
||||
end
|
||||
self._mapNode.SkillCharge.sizeDelta = Vector2(nMaxSize, nMaxSize * nValue)
|
||||
if self.isEnergyMax == false then
|
||||
if nEnergy == nMaxEnergy then
|
||||
self.isEnergyMax = true
|
||||
self._mapNode.imgSkillStart.gameObject:SetActive(true)
|
||||
self._mapNode.Fx_Charge:SetActive(true)
|
||||
self:AddTimer(1, 1, function()
|
||||
if self == nil or self._mapNode == nil then
|
||||
return
|
||||
end
|
||||
self._mapNode.imgSkillStart.gameObject:SetActive(false)
|
||||
self._mapNode.Fx_Charge:SetActive(false)
|
||||
end, true, true, true)
|
||||
end
|
||||
elseif nEnergy ~= nMaxEnergy then
|
||||
self.isEnergyMax = false
|
||||
end
|
||||
end
|
||||
function SoldierSubCharItemCtrl:OnEvent_MoYu(isMoYu)
|
||||
self._mapNode.Fx_fish:SetActive(isMoYu)
|
||||
end
|
||||
function SoldierSubCharItemCtrl:Event_Death()
|
||||
self.isDeath = true
|
||||
self._mapNode.Fx_Death:SetActive(true)
|
||||
self._mapNode.imgDeathMask:SetActive(true)
|
||||
self._mapNode.Fx_Charge:SetActive(false)
|
||||
self._mapNode.Fx_fish:SetActive(false)
|
||||
self._mapNode.AnimRoot:Play("SoldierMainCharItem_death")
|
||||
if self.parent ~= nil then
|
||||
self.parent:CacheSoldierEnergyData(self.nCharId, self.nEnergy, self.nMaxEnergy, self.nRecoverRate, self.isDeath)
|
||||
end
|
||||
end
|
||||
function SoldierSubCharItemCtrl:OnEvent_SoldierCharSpawn(nDataId, nUId)
|
||||
if nDataId == self.nDataId and not self.bAddEvent then
|
||||
self.nEnergy = 0
|
||||
self.nMaxEnergy = 0
|
||||
self.nRecoverRate = 0
|
||||
self.bAddEvent = true
|
||||
self.nCharId = nUId
|
||||
self.isDeath = false
|
||||
self.isEnergyMax = false
|
||||
self._mapNode.Fx_Death:SetActive(false)
|
||||
self._mapNode.imgDeathMask:SetActive(false)
|
||||
self._mapNode.Fx_Charge:SetActive(false)
|
||||
self._mapNode.Fx_fish:SetActive(false)
|
||||
self:AddEntityEvent()
|
||||
end
|
||||
end
|
||||
return SoldierSubCharItemCtrl
|
||||
@@ -0,0 +1,114 @@
|
||||
local SoldierAddBuffItemCtrl = class("SoldierAddBuffItemCtrl", BaseCtrl)
|
||||
SoldierAddBuffItemCtrl._mapNodeConfig = {
|
||||
btnItem = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Select"
|
||||
},
|
||||
TextDes = {sComponentName = "TMP_Text"},
|
||||
TextName = {sComponentName = "TMP_Text"},
|
||||
imgIcon = {sComponentName = "Image"},
|
||||
btnConfirm = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Confirm"
|
||||
},
|
||||
txtConfirm = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Avg_Btn_Select"
|
||||
},
|
||||
AnimRoot = {sComponentName = "Animator"},
|
||||
BgNormal = {sComponentName = "Image"},
|
||||
imgbg_copper = {},
|
||||
imgbg_silver = {},
|
||||
imgbg_gold = {}
|
||||
}
|
||||
SoldierAddBuffItemCtrl._mapEventConfig = {}
|
||||
SoldierAddBuffItemCtrl._mapRedDotConfig = {}
|
||||
function SoldierAddBuffItemCtrl:Awake()
|
||||
end
|
||||
function SoldierAddBuffItemCtrl:OnEnable()
|
||||
self._bSelected = nil
|
||||
end
|
||||
function SoldierAddBuffItemCtrl:OnDisable()
|
||||
if self.timerBtnConfirm ~= nil then
|
||||
self.timerBtnConfirm:Cancel()
|
||||
self.timerBtnConfirm = nil
|
||||
end
|
||||
end
|
||||
function SoldierAddBuffItemCtrl:SetSelectCallback(obj, fn)
|
||||
self._objSelectCallback = obj
|
||||
self._fnSelectCallback = fn
|
||||
end
|
||||
function SoldierAddBuffItemCtrl:OnBtnClick_Refresh()
|
||||
if self._fnRefreshCallback ~= nil then
|
||||
self._fnRefreshCallback(self._objRefreshCallback, self._nIndex)
|
||||
end
|
||||
end
|
||||
function SoldierAddBuffItemCtrl:SetItemData(tbItem)
|
||||
self._nCardId = tbItem.id or -1
|
||||
self._nIndex = tbItem.index or 0
|
||||
self._mapNode.btnConfirm.gameObject:SetActive(false)
|
||||
local cfg = ConfigTable.GetData("SoldierStrategyCard", self._nCardId)
|
||||
if cfg == nil then
|
||||
return
|
||||
end
|
||||
self:_SetIcon(cfg.Icon)
|
||||
NovaAPI.SetTMPText(self._mapNode.TextName, cfg.Name or "")
|
||||
NovaAPI.SetTMPText(self._mapNode.TextDes, cfg.Des or "")
|
||||
NovaAPI.SetTMPText(self._mapNode.TextRefreshCount, tostring(self._nRefreshCount))
|
||||
self:SetPngSprite(self._mapNode.BgNormal, "Icon/SoldierOtherIcon/" .. AllEnum.SoldierStrategyCardRarityIcon[cfg.Rarity] .. AllEnum.SoldierChessIconSurfix.L)
|
||||
self._mapNode.imgbg_gold:SetActive(cfg.Rarity == GameEnum.itemRarity.R)
|
||||
self._mapNode.imgbg_silver:SetActive(cfg.Rarity == GameEnum.itemRarity.M)
|
||||
self._mapNode.imgbg_copper:SetActive(cfg.Rarity == GameEnum.itemRarity.N)
|
||||
end
|
||||
function SoldierAddBuffItemCtrl:GetCardId()
|
||||
return self._nCardId
|
||||
end
|
||||
function SoldierAddBuffItemCtrl:GetIndex()
|
||||
return self._nIndex
|
||||
end
|
||||
function SoldierAddBuffItemCtrl:SetSelected(bSelected)
|
||||
if self.timerBtnConfirm ~= nil then
|
||||
self.timerBtnConfirm:Cancel()
|
||||
self.timerBtnConfirm = nil
|
||||
end
|
||||
local sSwitchAnimName = ""
|
||||
if bSelected == true then
|
||||
self._mapNode.btnConfirm.gameObject:SetActive(bSelected)
|
||||
sSwitchAnimName = "BuffItem_up"
|
||||
elseif self._bSelected == true then
|
||||
sSwitchAnimName = "BuffItem_down"
|
||||
local nAnimLength = NovaAPI.GetAnimClipLength(self._mapNode.AnimRoot, sSwitchAnimName)
|
||||
self.timerBtnConfirm = self:AddTimer(1, nAnimLength, function()
|
||||
self._mapNode.btnConfirm.gameObject:SetActive(false)
|
||||
end, true, true, true)
|
||||
elseif self._bSelected == false then
|
||||
self._mapNode.btnConfirm.gameObject:SetActive(false)
|
||||
end
|
||||
if sSwitchAnimName ~= "" then
|
||||
self._mapNode.AnimRoot:Play(sSwitchAnimName)
|
||||
end
|
||||
self._bSelected = bSelected == true
|
||||
end
|
||||
function SoldierAddBuffItemCtrl:IsSelected()
|
||||
return self._bSelected
|
||||
end
|
||||
function SoldierAddBuffItemCtrl:_SetIcon(sIconPath)
|
||||
if self._mapNode.imgIcon == nil then
|
||||
return
|
||||
end
|
||||
if sIconPath ~= nil and sIconPath ~= "" then
|
||||
self:SetPngSprite(self._mapNode.imgIcon, "Icon/SoldierBuffCard/" .. sIconPath)
|
||||
self._mapNode.imgIcon.gameObject:SetActive(true)
|
||||
else
|
||||
self._mapNode.imgIcon.gameObject:SetActive(false)
|
||||
end
|
||||
end
|
||||
function SoldierAddBuffItemCtrl:OnBtnClick_Select()
|
||||
EventManager.Hit("SoldierStrategySelect", self._nIndex, self._nCardId)
|
||||
end
|
||||
function SoldierAddBuffItemCtrl:OnBtnClick_Confirm()
|
||||
PlayerData.SoldierData:GetCurLevelData():SendCardSelect(self._nIndex, function()
|
||||
EventManager.Hit(EventId.ClosePanel, PanelId.SoldierBattleEventPanel)
|
||||
end)
|
||||
end
|
||||
return SoldierAddBuffItemCtrl
|
||||
@@ -0,0 +1,252 @@
|
||||
local SoldierBattleEventCtrl = class("SoldierBattleEventCtrl", BaseCtrl)
|
||||
local SELECT_CARD_TYPE_STRATEGY = 2
|
||||
SoldierBattleEventCtrl._mapNodeConfig = {
|
||||
imgBgMain = {},
|
||||
imgBgMain_Fx = {},
|
||||
blur = {},
|
||||
mainRoot = {
|
||||
sNodeName = "----SafeAreaRoot----"
|
||||
},
|
||||
txtLabel = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "SoldierBattleEvent_Label"
|
||||
},
|
||||
txtRemainRewardCount = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_BattleEvent_RemainRewardCount"
|
||||
},
|
||||
txtFinalPoint = {sComponentName = "TMP_Text"},
|
||||
txtBtnBack = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "SoldierBattleEvent_Back"
|
||||
},
|
||||
EventItem = {
|
||||
nCount = 3,
|
||||
sCtrlName = "Game.UI.Soldier.BattleEvent.SoldierBattleEventItemCtrl"
|
||||
},
|
||||
StrategyItem = {
|
||||
nCount = 3,
|
||||
sCtrlName = "Game.UI.Soldier.BattleEvent.SoldierAddBuffItemCtrl"
|
||||
},
|
||||
btnPolicy = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Policy"
|
||||
},
|
||||
btnReturn = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Return"
|
||||
},
|
||||
btnGuide = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Guide"
|
||||
},
|
||||
btnGoToDice = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_btnGoToDice"
|
||||
},
|
||||
txtGoToDice = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "SoldierBattleEvent_GoToDice"
|
||||
},
|
||||
imgFinalPoint = {},
|
||||
ImgNum = {},
|
||||
EventContainers = {},
|
||||
StrategyContainers = {}
|
||||
}
|
||||
SoldierBattleEventCtrl._mapEventConfig = {
|
||||
SoldierSelectEventBattle = "OnEvent_SoldierSelectEventBattle",
|
||||
SoldierShowBattleEventPanel = "OnEvent_ShowBattleEventPanel",
|
||||
SoldierDiceCasted = "RefreshDiceCasted",
|
||||
SoldierStrategySelect = "OnEvent_SoldierStrategySelect",
|
||||
SoldierRecommendPanel_Open = "HidePanel",
|
||||
SoldierRecommendPanel_Close = "ShowPanel",
|
||||
SoldierHandbookPanel_Open = "HidePanel",
|
||||
SoldierHandbookPanel_Close = "ShowPanel"
|
||||
}
|
||||
SoldierBattleEventCtrl._mapRedDotConfig = {}
|
||||
function SoldierBattleEventCtrl:Awake()
|
||||
self.tbStrategyCardData = nil
|
||||
self.nDicePoint = nil
|
||||
self.bSkipEvent = false
|
||||
local tbParams = self:GetPanelParam()
|
||||
if tbParams ~= nil and 0 < #tbParams then
|
||||
self.bSkipEvent = tbParams[1] or false
|
||||
end
|
||||
end
|
||||
function SoldierBattleEventCtrl:OnEnable()
|
||||
self._mapNode.imgFinalPoint.gameObject:SetActive(false)
|
||||
self._mapNode.btnGoToDice.gameObject:SetActive(false)
|
||||
if self.bSkipEvent then
|
||||
self.bSkipEvent = false
|
||||
self:OnSoldierEnterCardSelect()
|
||||
return
|
||||
end
|
||||
self:RefreshBattleEventList()
|
||||
self.nDicePoint = PlayerData.SoldierData:GetCurLevelData():GetEventBattleData().nPoint or 0
|
||||
if self.tbStrategyCardData == nil and self.nDicePoint ~= nil and self.nDicePoint > 0 then
|
||||
self:RefreshEventDicePoint()
|
||||
end
|
||||
end
|
||||
function SoldierBattleEventCtrl:OnDisable()
|
||||
self.tbStrategyCardData = nil
|
||||
self.nDicePoint = nil
|
||||
end
|
||||
function SoldierBattleEventCtrl:GetAddBattleEventList()
|
||||
local selectCardData = PlayerData.SoldierData:GetCurLevelData():GetEventBattleData()
|
||||
local tbList = {}
|
||||
local tbIds = selectCardData.tbIds or {}
|
||||
if next(tbIds) ~= nil then
|
||||
table.sort(tbIds, function(a, b)
|
||||
local mapEventA = ConfigTable.GetData("SoldierEventBattlePool", a)
|
||||
local mapEventB = ConfigTable.GetData("SoldierEventBattlePool", b)
|
||||
return mapEventA.LevelName < mapEventB.LevelName
|
||||
end)
|
||||
end
|
||||
for i = 1, 3 do
|
||||
local nCardId = tbIds[i]
|
||||
if nCardId ~= nil then
|
||||
tbList[i] = {id = nCardId, index = i}
|
||||
end
|
||||
end
|
||||
return tbList
|
||||
end
|
||||
function SoldierBattleEventCtrl:RefreshBattleEventList()
|
||||
local tbList = self:GetAddBattleEventList()
|
||||
if tbList == nil or #tbList <= 0 then
|
||||
return
|
||||
end
|
||||
self._mapNode.btnGoToDice.gameObject:SetActive(true)
|
||||
self._mapNode.EventContainers.gameObject:SetActive(true)
|
||||
self._mapNode.StrategyContainers.gameObject:SetActive(false)
|
||||
self._mapNode.btnPolicy.gameObject:SetActive(false)
|
||||
for i = 1, 3 do
|
||||
local item = self._mapNode.EventItem[i]
|
||||
if item ~= nil then
|
||||
item:SetItemData(tbList[i])
|
||||
end
|
||||
end
|
||||
end
|
||||
function SoldierBattleEventCtrl:RefreshStrategyCard()
|
||||
if self.tbStrategyCardData == nil then
|
||||
return
|
||||
end
|
||||
self._mapNode.EventContainers.gameObject:SetActive(false)
|
||||
self._mapNode.StrategyContainers.gameObject:SetActive(true)
|
||||
self._mapNode.btnGoToDice.gameObject:SetActive(false)
|
||||
self._mapNode.imgFinalPoint.gameObject:SetActive(false)
|
||||
self._mapNode.btnPolicy.gameObject:SetActive(false)
|
||||
self._mapNode.ImgNum.gameObject:SetActive(false)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtLabel, ConfigTable.GetUIText("Soldier_Strategy_Title"))
|
||||
for k, v in ipairs(self._mapNode.StrategyItem) do
|
||||
local tbItem = {
|
||||
id = self.tbStrategyCardData[k],
|
||||
index = k
|
||||
}
|
||||
v:SetItemData(tbItem)
|
||||
end
|
||||
end
|
||||
function SoldierBattleEventCtrl:RefreshDiceCasted()
|
||||
self:RefreshBattleEventList()
|
||||
self.nDicePoint = PlayerData.SoldierData:GetCurLevelData():GetEventBattleData().nPoint or 0
|
||||
if self.tbStrategyCardData == nil and self.nDicePoint ~= nil and self.nDicePoint > 0 then
|
||||
self:RefreshEventDicePoint()
|
||||
end
|
||||
end
|
||||
function SoldierBattleEventCtrl:OnItemSelected(nIndex, nCardId)
|
||||
self._nSelectedIndex = nIndex or 0
|
||||
self._nSelectedCardId = nCardId or -1
|
||||
for k, v in ipairs(self._mapNode.StrategyItem) do
|
||||
v:SetSelected(k == self._nSelectedIndex)
|
||||
end
|
||||
self:_MoveConfirmBtnTo(self._nSelectedIndex)
|
||||
end
|
||||
function SoldierBattleEventCtrl:_MoveConfirmBtnTo(nIndex)
|
||||
local btnConfirm = self._mapNode.btnConfirm
|
||||
if btnConfirm == nil or btnConfirm.transform == nil then
|
||||
return
|
||||
end
|
||||
local item = self._mapNode.EventItem and self._mapNode.EventItem[nIndex]
|
||||
if item == nil then
|
||||
if btnConfirm.gameObject ~= nil then
|
||||
btnConfirm.gameObject:SetActive(false)
|
||||
end
|
||||
return
|
||||
end
|
||||
local v3Pos = item:GetConfirmBtnPosition()
|
||||
if v3Pos == nil then
|
||||
return
|
||||
end
|
||||
btnConfirm.transform.position = v3Pos
|
||||
if btnConfirm.gameObject ~= nil then
|
||||
btnConfirm.gameObject:SetActive(true)
|
||||
end
|
||||
end
|
||||
function SoldierBattleEventCtrl:GetSelectedCardId()
|
||||
return self._nSelectedCardId
|
||||
end
|
||||
function SoldierBattleEventCtrl:GetSelectedIndex()
|
||||
return self._nSelectedIndex
|
||||
end
|
||||
function SoldierBattleEventCtrl:HidePanel()
|
||||
self.bPrevMainRootVisible = self._mapNode.mainRoot.gameObject.activeSelf or false
|
||||
self.bPrevBlurVisible = self._mapNode.blur.gameObject.activeSelf or false
|
||||
self.bPrevImgBgMainVisible = self._mapNode.imgBgMain.gameObject.activeSelf or false
|
||||
self.bPrevImgBgMain_FxVisible = self._mapNode.imgBgMain_Fx.gameObject.activeSelf or false
|
||||
self._mapNode.mainRoot.gameObject:SetActive(false)
|
||||
self._mapNode.blur.gameObject:SetActive(false)
|
||||
self._mapNode.imgBgMain.gameObject:SetActive(false)
|
||||
self._mapNode.imgBgMain_Fx.gameObject:SetActive(false)
|
||||
end
|
||||
function SoldierBattleEventCtrl:ShowPanel()
|
||||
self._mapNode.mainRoot.gameObject:SetActive(self.bPrevMainRootVisible)
|
||||
self._mapNode.blur.gameObject:SetActive(self.bPrevBlurVisible)
|
||||
self._mapNode.imgBgMain.gameObject:SetActive(self.bPrevImgBgMainVisible)
|
||||
self._mapNode.imgBgMain_Fx.gameObject:SetActive(self.bPrevImgBgMain_FxVisible)
|
||||
for k, v in ipairs(self._mapNode.StrategyItem) do
|
||||
v:SetSelected(k == self._nSelectedIndex)
|
||||
end
|
||||
end
|
||||
function SoldierBattleEventCtrl:OnBtnClick_btnGoToDice()
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierResolveadisputePanel)
|
||||
end
|
||||
function SoldierBattleEventCtrl:OnBtnClick_Return()
|
||||
CS.WwiseAudioManager.Instance:PostEvent("mode_900001_chess_ingame_transition")
|
||||
self:HidePanel()
|
||||
end
|
||||
function SoldierBattleEventCtrl:OnBtnClick_Guide()
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierRecommendPanel, true)
|
||||
end
|
||||
function SoldierBattleEventCtrl:OnBtnClick_Policy()
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierHandbookPanel, AllEnum.SoldierHandbookType.StrategyCard)
|
||||
end
|
||||
function SoldierBattleEventCtrl:RefreshEventDicePoint()
|
||||
self._mapNode.imgFinalPoint.gameObject:SetActive(true)
|
||||
self._mapNode.btnGoToDice.gameObject:SetActive(false)
|
||||
local sFinalPoint = ConfigTable.GetUIText("SoldierBattleEvent_FinalPoint")
|
||||
NovaAPI.SetTMPText(self._mapNode.txtFinalPoint, sFinalPoint .. self.nDicePoint)
|
||||
for i = 1, 3 do
|
||||
local item = self._mapNode.EventItem[i]
|
||||
if item ~= nil then
|
||||
item:SetDiceCasted(self.nDicePoint)
|
||||
end
|
||||
end
|
||||
end
|
||||
function SoldierBattleEventCtrl:OnSoldierEnterCardSelect()
|
||||
self.tbStrategyCardData = PlayerData.SoldierData:GetCurLevelData():GetSelectCardData()
|
||||
self:RefreshStrategyCard()
|
||||
end
|
||||
function SoldierBattleEventCtrl:OnEvent_SoldierSelectEventBattle()
|
||||
local bInSelectCard = PlayerData.SoldierData:GetCurLevelData():CheckInSelectCard()
|
||||
if not bInSelectCard then
|
||||
EventManager.Hit(EventId.ClosePanel, PanelId.SoldierBattleEventPanel)
|
||||
else
|
||||
self:OnSoldierEnterCardSelect()
|
||||
end
|
||||
end
|
||||
function SoldierBattleEventCtrl:OnEvent_ShowBattleEventPanel()
|
||||
self:ShowPanel()
|
||||
end
|
||||
function SoldierBattleEventCtrl:OnEvent_SoldierStrategySelect(nIndex, nCardId)
|
||||
self:OnItemSelected(nIndex, nCardId)
|
||||
end
|
||||
return SoldierBattleEventCtrl
|
||||
@@ -0,0 +1,177 @@
|
||||
local SoldierBattleEventItemCtrl = class("SoldierBattleEventItemCtrl", BaseCtrl)
|
||||
SoldierBattleEventItemCtrl._mapNodeConfig = {
|
||||
imgBgNormal = {sComponentName = "Image"},
|
||||
ConfirmBtnLocalPos = {sComponentName = "Transform"},
|
||||
TextName = {sComponentName = "TMP_Text"},
|
||||
TextDes = {sComponentName = "TMP_Text"},
|
||||
btnTakeBuff = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_TakeBuff"
|
||||
},
|
||||
txtTakeBuff = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Btn_EarnReward"
|
||||
},
|
||||
btnChallenge = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Challenge"
|
||||
},
|
||||
txtBtnChallenge = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_BattleEventItem_Challenge"
|
||||
},
|
||||
txtNeedPoint = {sComponentName = "TMP_Text"},
|
||||
txt_charTitle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_BattleEventItem_RewardItem"
|
||||
},
|
||||
gridCoin = {
|
||||
sCtrlName = "Game.UI.Soldier.Template.SoldierItemGridCtrl"
|
||||
},
|
||||
gridChess = {
|
||||
sCtrlName = "Game.UI.Soldier.Template.SoldierItemGridCtrl"
|
||||
},
|
||||
gridBuff = {
|
||||
sCtrlName = "Game.UI.Soldier.Template.SoldierItemGridCtrl"
|
||||
},
|
||||
RewardRoot = {}
|
||||
}
|
||||
SoldierBattleEventItemCtrl._mapEventConfig = {}
|
||||
SoldierBattleEventItemCtrl._mapRedDotConfig = {}
|
||||
function SoldierBattleEventItemCtrl:Awake()
|
||||
end
|
||||
function SoldierBattleEventItemCtrl:OnEnable()
|
||||
end
|
||||
function SoldierBattleEventItemCtrl:OnDisable()
|
||||
end
|
||||
function SoldierBattleEventItemCtrl:OnDestroy()
|
||||
end
|
||||
function SoldierBattleEventItemCtrl:SetRefreshCallback(obj, fn)
|
||||
self._objRefreshCallback = obj
|
||||
self._fnRefreshCallback = fn
|
||||
end
|
||||
function SoldierBattleEventItemCtrl:SetSelectCallback(obj, fn)
|
||||
self._objSelectCallback = obj
|
||||
self._fnSelectCallback = fn
|
||||
end
|
||||
function SoldierBattleEventItemCtrl:OnBtnClick_Select()
|
||||
end
|
||||
function SoldierBattleEventItemCtrl:SetItemData(tbItem)
|
||||
if tbItem == nil then
|
||||
self._nCardId = -1
|
||||
self._nIndex = 0
|
||||
self:SetSelected(false)
|
||||
return
|
||||
end
|
||||
self._nCardId = tbItem.id or -1
|
||||
self._nIndex = tbItem.index or 0
|
||||
local cfg = ConfigTable.GetData("SoldierEventBattlePool", self._nCardId)
|
||||
if cfg == nil then
|
||||
return
|
||||
end
|
||||
self:_SetIcon(cfg.Icon)
|
||||
if self._mapNode.TextName ~= nil then
|
||||
NovaAPI.SetTMPText(self._mapNode.TextName, cfg.Title or "")
|
||||
end
|
||||
if self._mapNode.TextDes ~= nil then
|
||||
NovaAPI.SetTMPText(self._mapNode.TextDes, cfg.Name or "")
|
||||
end
|
||||
self:SetPngSprite(self._mapNode.imgBgNormal, "Icon/SoldierOtherIcon/EventBattleQuality_0" .. cfg.LevelName)
|
||||
self:RefreshCharItems(cfg.coin, cfg.CharacterCount, cfg.StrategyCardCount)
|
||||
local tbDicePointLevel = ConfigTable.GetConfigArray("SoldierChessEventBattle")
|
||||
self.nNeedPoint = tonumber(tbDicePointLevel[self._nIndex]) or 0
|
||||
local sNeedText = orderedFormat(ConfigTable.GetUIText("Soldier_Event_NeedPoint"), self.nNeedPoint)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtNeedPoint, sNeedText or "")
|
||||
end
|
||||
function SoldierBattleEventItemCtrl:RefreshCharItems(nCoinCount, nCharCount, nStrategyCardCount)
|
||||
if nCoinCount <= 0 and nCharCount <= 0 and nStrategyCardCount <= 0 then
|
||||
self._mapNode.RewardRoot.gameObject:SetActive(false)
|
||||
return
|
||||
end
|
||||
self._mapNode.RewardRoot.gameObject:SetActive(true)
|
||||
self.nCoinCount = nCoinCount
|
||||
if 0 >= self.nCoinCount then
|
||||
self._mapNode.gridCoin.gameObject:SetActive(false)
|
||||
else
|
||||
self._mapNode.gridCoin.gameObject:SetActive(true)
|
||||
self._mapNode.gridCoin:SetItem(1, self.nCoinCount, "Icon/Item/item_40", 40)
|
||||
end
|
||||
self.nCharCount = nCharCount
|
||||
if 0 >= self.nCharCount then
|
||||
self._mapNode.gridChess.gameObject:SetActive(false)
|
||||
else
|
||||
self._mapNode.gridChess.gameObject:SetActive(true)
|
||||
self._mapNode.gridChess:SetItem(1, self.nCharCount, "Icon/SoldierOtherIcon/icon_soldier_random_chess", 2701001)
|
||||
end
|
||||
self.nStrategyCardCount = nStrategyCardCount
|
||||
if 0 >= self.nStrategyCardCount then
|
||||
self._mapNode.gridBuff.gameObject:SetActive(false)
|
||||
else
|
||||
self._mapNode.gridBuff.gameObject:SetActive(true)
|
||||
self._mapNode.gridBuff:SetItem(1, self.nStrategyCardCount, "Icon/SoldierOtherIcon/icon_soldier_random_strategycard", 2701002)
|
||||
end
|
||||
self:SetButtonInit()
|
||||
end
|
||||
function SoldierBattleEventItemCtrl:SetButtonInit()
|
||||
self._mapNode.btnTakeBuff.gameObject:SetActive(false)
|
||||
self._mapNode.btnChallenge.gameObject:SetActive(false)
|
||||
self._mapNode.txtNeedPoint.gameObject:SetActive(true)
|
||||
end
|
||||
function SoldierBattleEventItemCtrl:SetDiceCasted(nPoint)
|
||||
self._mapNode.txtNeedPoint.gameObject:SetActive(false)
|
||||
if nPoint < self.nNeedPoint then
|
||||
self._mapNode.btnTakeBuff.gameObject:SetActive(false)
|
||||
self._mapNode.btnChallenge.gameObject:SetActive(true)
|
||||
else
|
||||
self._mapNode.btnTakeBuff.gameObject:SetActive(true)
|
||||
self._mapNode.btnChallenge.gameObject:SetActive(false)
|
||||
end
|
||||
end
|
||||
function SoldierBattleEventItemCtrl:OnGridBtnClick(nIndex)
|
||||
end
|
||||
function SoldierBattleEventItemCtrl:GetCardId()
|
||||
return self._nCardId
|
||||
end
|
||||
function SoldierBattleEventItemCtrl:GetIndex()
|
||||
return self._nIndex
|
||||
end
|
||||
function SoldierBattleEventItemCtrl:SetSelected(bSelected)
|
||||
self._bSelected = bSelected == true
|
||||
if self._mapNode.ImageSelect ~= nil and self._mapNode.ImageSelect.gameObject ~= nil then
|
||||
self._mapNode.ImageSelect.gameObject:SetActive(self._bSelected)
|
||||
end
|
||||
end
|
||||
function SoldierBattleEventItemCtrl:IsSelected()
|
||||
return self._bSelected
|
||||
end
|
||||
function SoldierBattleEventItemCtrl:GetConfirmBtnPosition()
|
||||
local node = self._mapNode.ConfirmBtnLocalPos
|
||||
if node == nil or node.transform == nil then
|
||||
return nil
|
||||
end
|
||||
return node.transform.position
|
||||
end
|
||||
function SoldierBattleEventItemCtrl:_SetIcon(sIconPath)
|
||||
if self._mapNode.img_icon == nil then
|
||||
return
|
||||
end
|
||||
if sIconPath and 0 < #sIconPath then
|
||||
self:SetPngSprite(self._mapNode.img_icon, sIconPath)
|
||||
self._mapNode.img_icon.gameObject:SetActive(true)
|
||||
else
|
||||
self._mapNode.img_icon.gameObject:SetActive(false)
|
||||
end
|
||||
end
|
||||
function SoldierBattleEventItemCtrl:OnBtnClick_TakeBuff()
|
||||
local callback = function()
|
||||
EventManager.Hit("SoldierSelectEventBattle")
|
||||
end
|
||||
PlayerData.SoldierData:GetCurLevelData():SendEventBattleChoose(self._nIndex, callback)
|
||||
end
|
||||
function SoldierBattleEventItemCtrl:OnBtnClick_Challenge()
|
||||
local callback = function()
|
||||
EventManager.Hit("SoldierSelectEventBattle")
|
||||
end
|
||||
PlayerData.SoldierData:GetCurLevelData():SendEventBattleChoose(self._nIndex, callback)
|
||||
end
|
||||
return SoldierBattleEventItemCtrl
|
||||
@@ -0,0 +1,21 @@
|
||||
local SoldierBattleEventPanel = class("SoldierBattleEventPanel", BasePanel)
|
||||
SoldierBattleEventPanel._bIsMainPanel = false
|
||||
SoldierBattleEventPanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "Soldier/Level/SoldierBattleEventPanel.prefab",
|
||||
sCtrlName = "Game.UI.Soldier.BattleEvent.SoldierBattleEventCtrl"
|
||||
}
|
||||
}
|
||||
function SoldierBattleEventPanel:Awake()
|
||||
end
|
||||
function SoldierBattleEventPanel:OnEnable()
|
||||
end
|
||||
function SoldierBattleEventPanel:OnAfterEnter()
|
||||
end
|
||||
function SoldierBattleEventPanel:OnDisable()
|
||||
end
|
||||
function SoldierBattleEventPanel:OnDestroy()
|
||||
end
|
||||
function SoldierBattleEventPanel:OnRelease()
|
||||
end
|
||||
return SoldierBattleEventPanel
|
||||
@@ -0,0 +1,349 @@
|
||||
local SoldierResolveadisputeCtrl = class("SoldierResolveadisputeCtrl", BaseCtrl)
|
||||
local Camera = CS.UnityEngine.Camera
|
||||
local Light = CS.UnityEngine.Light
|
||||
local Animator = CS.UnityEngine.Animator
|
||||
local AudioListener = CS.UnityEngine.AudioListener
|
||||
local RawImage = CS.UnityEngine.UI.RawImage
|
||||
local ClientManager = CS.ClientManager
|
||||
local GameObject = CS.UnityEngine.GameObject
|
||||
local typeof = typeof
|
||||
local DICE_PREFAB_PATH_MAP = {
|
||||
[1] = "UI/Soldier/Dice/Prefab/Dice01.prefab",
|
||||
[2] = "UI/Soldier/Dice/Prefab/Dice02.prefab"
|
||||
}
|
||||
local DICE_RAW_IMAGE_NODE_NAME = "rimgDiceModel"
|
||||
local DICE_LAYER_NAME = "Cam_Layer_1"
|
||||
local DICE_WORLD_ROOT_NAME = "SoldierResolveadisputeDice3DRoot"
|
||||
local DICE_WORLD_ROOT_POSITION = Vector3(10000, 0, 0)
|
||||
local DICE_ROLL_MIN_TIME = 1
|
||||
local DICE_RESULT_TIME = 1.0
|
||||
local DICE_ANIM_NAME = "Soldier_Dice01_Num_"
|
||||
SoldierResolveadisputeCtrl._mapNodeConfig = {
|
||||
btnConfirm = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Confirm"
|
||||
},
|
||||
txtConfirmBtn = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Resolveadispute_Confirm"
|
||||
},
|
||||
btnClose = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Close"
|
||||
},
|
||||
txtTitle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Resolveadispute_Title"
|
||||
},
|
||||
txtSucessTip = {sComponentName = "TMP_Text"},
|
||||
txtBlank = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Tips_Continue"
|
||||
},
|
||||
txtFinalPoint = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "SoldierBattleEvent_FinalPoint"
|
||||
},
|
||||
txtFinalPointNum = {sComponentName = "TMP_Text"},
|
||||
goNodeResultTitle = {},
|
||||
trRawImage = {
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
animFx_Tips = {sNodeName = "Fx_Tips", sComponentName = "Animator"},
|
||||
Win = {},
|
||||
Lose = {}
|
||||
}
|
||||
SoldierResolveadisputeCtrl._mapEventConfig = {}
|
||||
SoldierResolveadisputeCtrl._mapRedDotConfig = {}
|
||||
local function FindChildTransform(trRoot, sName)
|
||||
if trRoot == nil or type(sName) ~= "string" then
|
||||
return nil
|
||||
end
|
||||
if trRoot.name == sName then
|
||||
return trRoot
|
||||
end
|
||||
local nChildCount = trRoot.childCount - 1
|
||||
for i = 0, nChildCount do
|
||||
local trChild = trRoot:GetChild(i)
|
||||
local trResult = FindChildTransform(trChild, sName)
|
||||
if trResult ~= nil then
|
||||
return trResult
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
function SoldierResolveadisputeCtrl:Awake()
|
||||
self.bActive = true
|
||||
self.bDiceCasted = false
|
||||
self.mDice3DData = {}
|
||||
self._mapNode.trRawImage.gameObject:SetActive(true)
|
||||
self:BuildDice3DData()
|
||||
end
|
||||
function SoldierResolveadisputeCtrl:OnEnable()
|
||||
self.bActive = true
|
||||
self.bDiceCasted = false
|
||||
self.bRollMinFinished = false
|
||||
self.nPendingDicePoint = nil
|
||||
self._mapNode.btnClose.gameObject:SetActive(false)
|
||||
self._mapNode.btnConfirm.gameObject:SetActive(true)
|
||||
self._mapNode.txtBlank.gameObject:SetActive(false)
|
||||
self._mapNode.goNodeResultTitle.gameObject:SetActive(false)
|
||||
local tbDicePointLevel = ConfigTable.GetConfigArray("SoldierChessEventBattle")
|
||||
local nPointGreatSuccess = tbDicePointLevel[3]
|
||||
local sText = orderedFormat(ConfigTable.GetUIText("Soldier_Resolveadispute_SucessTip"), nPointGreatSuccess)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtSucessTip, sText)
|
||||
end
|
||||
function SoldierResolveadisputeCtrl:OnDisable()
|
||||
self.bActive = false
|
||||
end
|
||||
function SoldierResolveadisputeCtrl:GetDiceCount()
|
||||
local soldierLevelData = PlayerData.SoldierData:GetCurLevelData()
|
||||
if soldierLevelData == nil then
|
||||
return 1
|
||||
end
|
||||
local eventBattleData = soldierLevelData:GetEventBattleData()
|
||||
if eventBattleData == nil then
|
||||
return 1
|
||||
end
|
||||
local bTwoDice = eventBattleData.bTwoDice
|
||||
return bTwoDice and 2 or 1
|
||||
end
|
||||
function SoldierResolveadisputeCtrl:BuildDice3DData()
|
||||
self.bTwoDice = self:GetDiceCount() == 2
|
||||
local sDicePrefabPath = DICE_PREFAB_PATH_MAP[self:GetDiceCount()]
|
||||
if sDicePrefabPath == nil or sDicePrefabPath == "" then
|
||||
return
|
||||
end
|
||||
if self._mapNode.trRawImage == nil then
|
||||
return
|
||||
end
|
||||
local nLayerIndex = NovaAPI.LayerMaskName2Layer(DICE_LAYER_NAME)
|
||||
local nLayerMask = NovaAPI.LayerMaskGetMask(DICE_LAYER_NAME)
|
||||
local prefab = self:LoadAsset(sDicePrefabPath, typeof(GameObject))
|
||||
if prefab == nil then
|
||||
return
|
||||
end
|
||||
local goWorldRoot = GameObject(DICE_WORLD_ROOT_NAME)
|
||||
goWorldRoot.transform.position = DICE_WORLD_ROOT_POSITION
|
||||
goWorldRoot.transform.localEulerAngles = Vector3(0, 0, 0)
|
||||
goWorldRoot.transform.localScale = Vector3.one
|
||||
self.mDice3DData.worldRoot = goWorldRoot
|
||||
local go = instantiate(prefab, goWorldRoot.transform)
|
||||
if go == nil then
|
||||
return
|
||||
end
|
||||
go.transform.localPosition = Vector3(0, 0, 0)
|
||||
go.transform.localEulerAngles = Vector3(0, 0, 0)
|
||||
go.transform.localScale = Vector3.one
|
||||
go.transform:SetLayerRecursively(nLayerIndex)
|
||||
self.mDice3DData.gameObject = go
|
||||
self.mDice3DData.rawImage = self._mapNode.trRawImage:GetComponent(typeof(RawImage))
|
||||
if self.mDice3DData.rawImage == nil then
|
||||
return
|
||||
end
|
||||
local trCamera = FindChildTransform(go.transform, "Camera")
|
||||
if trCamera == nil then
|
||||
return
|
||||
end
|
||||
self.mDice3DData.camera = trCamera:GetComponent(typeof(Camera))
|
||||
if self.mDice3DData.camera == nil then
|
||||
return
|
||||
end
|
||||
self.mDice3DData.camera.cullingMask = nLayerMask
|
||||
self.mDice3DData.camera:SetCameraVolumeLayerMask(nLayerMask)
|
||||
local tbLight = go:GetComponentsInChildren(typeof(Light), true)
|
||||
for i = 0, tbLight.Length - 1 do
|
||||
tbLight[i].cullingMask = nLayerMask
|
||||
end
|
||||
local tbAudioListener = go:GetComponentsInChildren(typeof(AudioListener), true)
|
||||
for i = 0, tbAudioListener.Length - 1 do
|
||||
tbAudioListener[i].enabled = false
|
||||
end
|
||||
if self.bTwoDice == false then
|
||||
local trNumber = FindChildTransform(go.transform, "Number")
|
||||
local trAnimRotation = FindChildTransform(go.transform, "Anim_Rotation")
|
||||
if trNumber ~= nil then
|
||||
self.mDice3DData.animDice01Num = trNumber:GetComponent(typeof(Animator))
|
||||
end
|
||||
if trAnimRotation ~= nil then
|
||||
self.mDice3DData.animDice01Rot = trAnimRotation:GetComponent(typeof(Animator))
|
||||
end
|
||||
else
|
||||
local trNumber_L = FindChildTransform(go.transform, "Number_L")
|
||||
if trNumber_L ~= nil then
|
||||
self.mDice3DData.animDice02Num_L = trNumber_L:GetComponent(typeof(Animator))
|
||||
end
|
||||
local trNumber_R = FindChildTransform(go.transform, "Number_R")
|
||||
if trNumber_R ~= nil then
|
||||
self.mDice3DData.animDice02Num_R = trNumber_R:GetComponent(typeof(Animator))
|
||||
end
|
||||
local trAnimRotation = FindChildTransform(go.transform, "Anim_Rotation")
|
||||
if trAnimRotation ~= nil then
|
||||
self.mDice3DData.animDice02Rot = trAnimRotation:GetComponent(typeof(Animator))
|
||||
end
|
||||
end
|
||||
local v2Resolution = Vector2(2160, 1080)
|
||||
local nRTSizeX = math.floor(v2Resolution.x * Settings.RENDERTEXTURE_SIZE_FACTOR)
|
||||
local nRTSizeY = math.floor(v2Resolution.y * Settings.RENDERTEXTURE_SIZE_FACTOR)
|
||||
self.mDice3DData.cameraRT = GameUIUtils.GenerateRenderTextureFor3D(nRTSizeX, nRTSizeY)
|
||||
self._mapNode.trRawImage.sizeDelta = v2Resolution
|
||||
self.mDice3DData.camera.targetTexture = self.mDice3DData.cameraRT
|
||||
NovaAPI.SetTexture(self.mDice3DData.rawImage, self.mDice3DData.cameraRT)
|
||||
end
|
||||
function SoldierResolveadisputeCtrl:HasDiceAnim()
|
||||
return self.mDice3DData.animDice01Rot ~= nil or self.mDice3DData.animDice02Rot ~= nil
|
||||
end
|
||||
function SoldierResolveadisputeCtrl:PlayDiceRollAnim()
|
||||
self._mapNode.trRawImage.gameObject:SetActive(true)
|
||||
if self.bTwoDice == false then
|
||||
if self.mDice3DData.animDice01Rot ~= nil then
|
||||
self.mDice3DData.animDice01Rot:Play("Soldier_Dice01_Start")
|
||||
end
|
||||
elseif self.mDice3DData.animDice02Rot ~= nil then
|
||||
self.mDice3DData.animDice02Rot:Play("Soldier_Dice02_Start")
|
||||
end
|
||||
CS.WwiseAudioManager.Instance:PostEvent("mode_900001_chess_result_resolve_tossSwing")
|
||||
end
|
||||
function SoldierResolveadisputeCtrl:OnDiceRollMinFinished()
|
||||
self.bRollMinFinished = true
|
||||
self:TryPlayDiceResultAnim()
|
||||
end
|
||||
function SoldierResolveadisputeCtrl:TryPlayDiceResultAnim()
|
||||
self._mapNode.trRawImage.gameObject:SetActive(true)
|
||||
if self.nPendingDicePoint == nil then
|
||||
return
|
||||
end
|
||||
if self:HasDiceAnim() == false then
|
||||
self:OnDiceResultAnimEnd()
|
||||
return
|
||||
end
|
||||
if self.bRollMinFinished ~= true then
|
||||
return
|
||||
end
|
||||
local nAnimTime = 0
|
||||
if self.bTwoDice == false and self.mDice3DData.animDice01Num ~= nil then
|
||||
local nAnimPoint = math.max(1, math.min(20, self.nPendingDicePoint or 1))
|
||||
local sAnimName = "Soldier_Dice01_Num_" .. nAnimPoint
|
||||
self.mDice3DData.animDice01Num:Play(sAnimName)
|
||||
nAnimTime = NovaAPI.GetAnimClipLength(self.mDice3DData.animDice01Num, {sAnimName})
|
||||
end
|
||||
if self.bTwoDice == true then
|
||||
math.randomseed(os.time())
|
||||
math.random()
|
||||
math.random()
|
||||
math.random()
|
||||
local nFinalPoint = self.nPendingDicePoint or 0
|
||||
local nRandomLeftOrRight = math.random(1, 2)
|
||||
local nDice1 = 0
|
||||
local nDice2 = 0
|
||||
if nRandomLeftOrRight == 1 then
|
||||
nDice1 = nFinalPoint
|
||||
nDice2 = math.random(1, nFinalPoint - 1)
|
||||
else
|
||||
nDice2 = nFinalPoint
|
||||
nDice1 = math.random(1, nFinalPoint - 1)
|
||||
end
|
||||
local nAnimTime_L = 0
|
||||
local nAnimTime_R = 0
|
||||
if self.mDice3DData.animDice02Num_L ~= nil then
|
||||
local sAnimName = "Soldier_Dice02_Num_" .. nDice1
|
||||
self.mDice3DData.animDice02Num_L:Play(sAnimName)
|
||||
nAnimTime_L = NovaAPI.GetAnimClipLength(self.mDice3DData.animDice02Num_L, {sAnimName})
|
||||
end
|
||||
if self.mDice3DData.animDice02Num_R ~= nil then
|
||||
local sAnimName = "Soldier_Dice02_Num_" .. nDice2
|
||||
self.mDice3DData.animDice02Num_R:Play(sAnimName)
|
||||
nAnimTime_R = NovaAPI.GetAnimClipLength(self.mDice3DData.animDice02Num_R, {sAnimName})
|
||||
end
|
||||
nAnimTime = math.max(nAnimTime_L, nAnimTime_R)
|
||||
end
|
||||
self:AddTimer(1, nAnimTime, "OnDiceResultAnimEnd", true, true, true)
|
||||
end
|
||||
function SoldierResolveadisputeCtrl:OnDiceResultAnimEnd()
|
||||
if self.bActive ~= true then
|
||||
return
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.txtFinalPointNum, self.nPendingDicePoint or 0)
|
||||
local tbDicePointLevel = ConfigTable.GetConfigArray("SoldierChessEventBattle")
|
||||
if tbDicePointLevel ~= nil then
|
||||
local nMinPoint = tonumber(tbDicePointLevel[1]) or 0
|
||||
local sAnimName = ""
|
||||
local sSoundName = ""
|
||||
if nMinPoint <= self.nPendingDicePoint then
|
||||
self._mapNode.Win.gameObject:SetActive(true)
|
||||
self._mapNode.Lose.gameObject:SetActive(false)
|
||||
sAnimName = "SoldierResolveadisputeTips_Win"
|
||||
sSoundName = "mode_900001_chess_result_resolve_toss_goodEnd"
|
||||
else
|
||||
self._mapNode.Lose.gameObject:SetActive(true)
|
||||
self._mapNode.Win.gameObject:SetActive(false)
|
||||
sAnimName = "SoldierResolveadisputeTips_Lose"
|
||||
sSoundName = "mode_900001_chess_result_resolve_toss_badEnd"
|
||||
end
|
||||
if sAnimName ~= "" then
|
||||
self._mapNode.animFx_Tips:Play(sAnimName)
|
||||
end
|
||||
if sSoundName ~= "" then
|
||||
CS.WwiseAudioManager.Instance:PostEvent(sSoundName)
|
||||
end
|
||||
end
|
||||
self.bDiceCasted = false
|
||||
self._mapNode.txtBlank.gameObject:SetActive(true)
|
||||
self._mapNode.btnConfirm.gameObject:SetActive(false)
|
||||
self._mapNode.btnClose.gameObject:SetActive(true)
|
||||
self._mapNode.goNodeResultTitle.gameObject:SetActive(true)
|
||||
EventManager.Hit("SoldierDiceCasted")
|
||||
end
|
||||
function SoldierResolveadisputeCtrl:OnBtnClick_Confirm()
|
||||
if self.bDiceCasted == true then
|
||||
return
|
||||
end
|
||||
self._mapNode.btnConfirm.gameObject:SetActive(false)
|
||||
self.bDiceCasted = true
|
||||
self.bRollMinFinished = false
|
||||
self.nPendingDicePoint = nil
|
||||
self:PlayDiceRollAnim()
|
||||
if self:HasDiceAnim() == true then
|
||||
self:AddTimer(1, DICE_ROLL_MIN_TIME, "OnDiceRollMinFinished", true, true, true)
|
||||
else
|
||||
self.bRollMinFinished = true
|
||||
end
|
||||
local soldierLevelData = PlayerData.SoldierData:GetCurLevelData()
|
||||
if soldierLevelData ~= nil then
|
||||
soldierLevelData:SendEventBattleThrowDice(function()
|
||||
if self.bActive ~= true then
|
||||
return
|
||||
end
|
||||
self.nPendingDicePoint = soldierLevelData:GetEventBattleData().nPoint or 0
|
||||
self:TryPlayDiceResultAnim()
|
||||
end)
|
||||
else
|
||||
self.nPendingDicePoint = 0
|
||||
self:TryPlayDiceResultAnim()
|
||||
end
|
||||
end
|
||||
function SoldierResolveadisputeCtrl:OnBtnClick_Close()
|
||||
EventManager.Hit(EventId.ClosePanel, PanelId.SoldierResolveadisputePanel)
|
||||
end
|
||||
function SoldierResolveadisputeCtrl:OnDestroy()
|
||||
if self.mDice3DData.cameraRT ~= nil then
|
||||
if self.mDice3DData.camera ~= nil then
|
||||
self.mDice3DData.camera.targetTexture = nil
|
||||
end
|
||||
if self.mDice3DData.rawImage ~= nil then
|
||||
NovaAPI.SetTexture(self.mDice3DData.rawImage, nil)
|
||||
end
|
||||
GameUIUtils.ReleaseRenderTexture(self.mDice3DData.cameraRT)
|
||||
self.mDice3DData.cameraRT = nil
|
||||
end
|
||||
if self.mDice3DData.worldRoot ~= nil then
|
||||
destroy(self.mDice3DData.worldRoot)
|
||||
self.mDice3DData.worldRoot = nil
|
||||
self.mDice3DData.gameObject = nil
|
||||
elseif self.mDice3DData.gameObject ~= nil then
|
||||
destroy(self.mDice3DData.gameObject)
|
||||
self.mDice3DData.gameObject = nil
|
||||
end
|
||||
self.mDice3DData = {}
|
||||
end
|
||||
return SoldierResolveadisputeCtrl
|
||||
@@ -0,0 +1,21 @@
|
||||
local SoldierResolveadisputePanel = class("SoldierResolveadisputePanel", BasePanel)
|
||||
SoldierResolveadisputePanel._bIsMainPanel = false
|
||||
SoldierResolveadisputePanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "Soldier/Level/SoldierResolveadisputePanel.prefab",
|
||||
sCtrlName = "Game.UI.Soldier.BattleEvent.SoldierResolveadisputeCtrl"
|
||||
}
|
||||
}
|
||||
function SoldierResolveadisputePanel:Awake()
|
||||
end
|
||||
function SoldierResolveadisputePanel:OnEnable()
|
||||
end
|
||||
function SoldierResolveadisputePanel:OnAfterEnter()
|
||||
end
|
||||
function SoldierResolveadisputePanel:OnDisable()
|
||||
end
|
||||
function SoldierResolveadisputePanel:OnDestroy()
|
||||
end
|
||||
function SoldierResolveadisputePanel:OnRelease()
|
||||
end
|
||||
return SoldierResolveadisputePanel
|
||||
@@ -0,0 +1,144 @@
|
||||
local BaseCtrl = require("GameCore.UI.BaseCtrl")
|
||||
local SoldierAttrData = require("GameCore.Data.DataClass.Soldier.SoldierAttrData")
|
||||
local SoldierCharAttriTipsCtrl = class("SoldierCharAttriTipsCtrl", BaseCtrl)
|
||||
SoldierCharAttriTipsCtrl._mapNodeConfig = {
|
||||
snapshot = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Close"
|
||||
},
|
||||
btnClose = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Close"
|
||||
},
|
||||
imgIcon = {sComponentName = "Image"},
|
||||
txt_CharName = {sComponentName = "TMP_Text"},
|
||||
txtStatus = {sNodeName = "TextStatus", sComponentName = "TMP_Text"},
|
||||
imgStatusIcon = {
|
||||
sNodeName = "ImageStatusIcon",
|
||||
sComponentName = "Image"
|
||||
},
|
||||
loopSv = {
|
||||
sComponentName = "LoopScrollView",
|
||||
sNodeName = "Scroll View"
|
||||
},
|
||||
goLevel = {nCount = 3},
|
||||
txtWindowTitle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Handbook_CharDetail"
|
||||
},
|
||||
imgRare = {sComponentName = "Image"}
|
||||
}
|
||||
SoldierCharAttriTipsCtrl._mapEventConfig = {}
|
||||
SoldierCharAttriTipsCtrl._mapRedDotConfig = {}
|
||||
local RootPath = "Icon/SoldierOtherIcon/"
|
||||
function SoldierCharAttriTipsCtrl:Awake()
|
||||
local tbParam = self:GetPanelParam()
|
||||
if type(tbParam) == "table" then
|
||||
self._nCharId = tbParam[1]
|
||||
end
|
||||
end
|
||||
function SoldierCharAttriTipsCtrl:OnEnable()
|
||||
if self._nCharId ~= nil then
|
||||
self:OnRefresh(self._nCharId)
|
||||
end
|
||||
end
|
||||
function SoldierCharAttriTipsCtrl:OnDisable()
|
||||
end
|
||||
function SoldierCharAttriTipsCtrl:OnDestroy()
|
||||
end
|
||||
function SoldierCharAttriTipsCtrl:OnRefresh(nCharId)
|
||||
local cfgChess = ConfigTable.GetData("SoldierCharacter", nCharId)
|
||||
if cfgChess == nil then
|
||||
printError("SoldierCharAttriTips: SoldierCharacter not found, nCharId=" .. tostring(nCharId))
|
||||
return
|
||||
end
|
||||
local cfgSkin = ConfigTable.GetData("SoldierSkin", cfgChess.Skin)
|
||||
if cfgSkin ~= nil and cfgSkin.Icon then
|
||||
self:SetPngSprite(self._mapNode.imgIcon, cfgSkin.Icon .. "_L")
|
||||
end
|
||||
local sName = cfgChess.Name
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_CharName, sName)
|
||||
local nChessType = cfgChess.Type
|
||||
local tbChessTypeConfig = CacheTable.GetData("_SoldierChessType", nChessType)
|
||||
if tbChessTypeConfig ~= nil then
|
||||
local sPath = "Icon/SoldierOtherIcon/" .. tbChessTypeConfig.Icon
|
||||
self:SetPngSprite(self._mapNode.imgStatusIcon, sPath)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtStatus, tbChessTypeConfig.Name)
|
||||
local rarePath = RootPath .. AllEnum.SoldierChessRarityIcon[cfgChess.Rarity] .. AllEnum.SoldierChessIconSurfix.L
|
||||
self:SetPngSprite(self._mapNode.imgRare, rarePath)
|
||||
end
|
||||
self.maxLevel = cfgChess.MaxStar
|
||||
for i = 1, self.maxLevel do
|
||||
local goLevel = self._mapNode.goLevel[i]
|
||||
if goLevel then
|
||||
goLevel:SetActive(i <= self.maxLevel)
|
||||
end
|
||||
end
|
||||
self:_RefreshAttrItems(cfgChess.Id)
|
||||
end
|
||||
function SoldierCharAttriTipsCtrl:_RefreshAttrItems(nCharId)
|
||||
local tbAttr = SoldierAttrData.CalcCharacterAttr(nCharId, 1)
|
||||
self._tbShowAttr = {}
|
||||
for _, attr in ipairs(tbAttr or {}) do
|
||||
if attr.sKey ~= "Energy" and attr.sKey ~= "InitialEnergy" then
|
||||
table.insert(self._tbShowAttr, attr)
|
||||
end
|
||||
end
|
||||
self._mapNode.loopSv:Init(#self._tbShowAttr, self, self.RefreshAttrItem)
|
||||
end
|
||||
function SoldierCharAttriTipsCtrl:RefreshAttrItem(goGird, gridIndex)
|
||||
local index = gridIndex + 1
|
||||
local attr = self._tbShowAttr and self._tbShowAttr[index]
|
||||
if attr == nil then
|
||||
return
|
||||
end
|
||||
local mapAttributeDesc = CacheTable.GetData("_AttributeDesc", attr.sKey)
|
||||
if not mapAttributeDesc then
|
||||
return
|
||||
end
|
||||
local imgIcon = goGird.transform:Find("ImageIcon"):GetComponent("Image")
|
||||
local txtName = goGird.transform:Find("TextName"):GetComponent("TMP_Text")
|
||||
self:SetPngSprite(imgIcon, mapAttributeDesc.Icon)
|
||||
if attr.sLanguageId ~= nil then
|
||||
NovaAPI.SetTMPText(txtName, ConfigTable.GetUIText(attr.sLanguageId))
|
||||
else
|
||||
NovaAPI.SetTMPText(txtName, mapAttributeDesc.Desc)
|
||||
end
|
||||
local tbAttrByLevel = {}
|
||||
for i = 1, self.maxLevel do
|
||||
local tbAttr = SoldierAttrData.CalcCharacterAttr(self._nCharId, i)
|
||||
local curAttr
|
||||
for _, item in ipairs(tbAttr or {}) do
|
||||
if item.sKey == attr.sKey then
|
||||
curAttr = item
|
||||
break
|
||||
end
|
||||
end
|
||||
tbAttrByLevel[i] = curAttr
|
||||
end
|
||||
for i = 1, 3 do
|
||||
local txtValue = goGird.transform:Find("TextValue" .. i):GetComponent("TMP_Text")
|
||||
if i > self.maxLevel then
|
||||
NovaAPI.SetTMPText(txtValue, "")
|
||||
else
|
||||
local curAttr = tbAttrByLevel[i]
|
||||
if curAttr ~= nil then
|
||||
local sValue = self:_TransValueFormat(curAttr.nValue, mapAttributeDesc.isPercent, mapAttributeDesc.Format)
|
||||
NovaAPI.SetTMPText(txtValue, sValue)
|
||||
else
|
||||
NovaAPI.SetTMPText(txtValue, "")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
function SoldierCharAttriTipsCtrl:_TransValueFormat(nValue, bPercent, nFormat, bAdd)
|
||||
local sValue = FormatEffectValue(nValue, bPercent, nFormat)
|
||||
if bAdd then
|
||||
sValue = "+" .. sValue
|
||||
end
|
||||
return sValue
|
||||
end
|
||||
function SoldierCharAttriTipsCtrl:OnBtnClick_Close()
|
||||
EventManager.Hit(EventId.ClosePanel, PanelId.SoldierCharAttriTips)
|
||||
end
|
||||
return SoldierCharAttriTipsCtrl
|
||||
@@ -0,0 +1,22 @@
|
||||
local BasePanel = require("GameCore.UI.BasePanel")
|
||||
local SoldierCharAttriTipsPanel = class("SoldierCharAttriTipsPanel", BasePanel)
|
||||
SoldierCharAttriTipsPanel._bIsMainPanel = false
|
||||
SoldierCharAttriTipsPanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "Soldier/Tips/SoldierCharAttriTipsPanel.prefab",
|
||||
sCtrlName = "Game.UI.Soldier.CharacterAttriTips.SoldierCharAttriTipsCtrl"
|
||||
}
|
||||
}
|
||||
function SoldierCharAttriTipsPanel:Awake()
|
||||
end
|
||||
function SoldierCharAttriTipsPanel:OnEnable()
|
||||
end
|
||||
function SoldierCharAttriTipsPanel:OnAfterEnter()
|
||||
end
|
||||
function SoldierCharAttriTipsPanel:OnDisable()
|
||||
end
|
||||
function SoldierCharAttriTipsPanel:OnDestroy()
|
||||
end
|
||||
function SoldierCharAttriTipsPanel:OnRelease()
|
||||
end
|
||||
return SoldierCharAttriTipsPanel
|
||||
@@ -0,0 +1,91 @@
|
||||
local CommonTipsBaseCtrl = require("Game.UI.CommonTipsEx.CommonTipsBaseCtrl")
|
||||
local SoldierCharPotentialDetailCtrl = class("SoldierCharPotentialDetailCtrl", CommonTipsBaseCtrl)
|
||||
SoldierCharPotentialDetailCtrl._mapNodeConfig = {
|
||||
PotentialItem = {},
|
||||
switch_des = {},
|
||||
switch_img_bg = {
|
||||
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"
|
||||
},
|
||||
btnClosePanel = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_ClosePanel"
|
||||
},
|
||||
safeAreaRoot = {
|
||||
sNodeName = "----SafeAreaRoot----",
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
rtContent = {
|
||||
sComponentName = "RectTransform"
|
||||
}
|
||||
}
|
||||
SoldierCharPotentialDetailCtrl._mapEventConfig = {}
|
||||
SoldierCharPotentialDetailCtrl._mapRedDotConfig = {}
|
||||
function SoldierCharPotentialDetailCtrl:Awake()
|
||||
local param = self:GetPanelParam()
|
||||
if type(param) == "table" then
|
||||
self.rtTarget = param[1]
|
||||
self.nPotentialId = param[2] or 0
|
||||
end
|
||||
end
|
||||
function SoldierCharPotentialDetailCtrl:OnEnable()
|
||||
self:SetData(self.nPotentialId)
|
||||
self:SetTipsPosition(self.rtTarget, self._mapNode.rtContent, self._mapNode.safeAreaRoot)
|
||||
local pos = self._mapNode.rtContent.transform.localPosition
|
||||
pos.z = 0
|
||||
self._mapNode.rtContent.transform.localPosition = pos
|
||||
end
|
||||
function SoldierCharPotentialDetailCtrl:OnDisable()
|
||||
end
|
||||
function SoldierCharPotentialDetailCtrl:OnDestroy()
|
||||
end
|
||||
function SoldierCharPotentialDetailCtrl:SetData(nPotentialId)
|
||||
if nPotentialId == nil or nPotentialId == 0 then
|
||||
return
|
||||
end
|
||||
local potentialItemRoot = self._mapNode.PotentialItem.transform:Find("AnimRoot/goPotentialNormal")
|
||||
local txtName = potentialItemRoot:Find("txtName"):GetComponent("TMP_Text")
|
||||
local imgIcon = potentialItemRoot:Find("goIcon/imgIcon3"):GetComponent("Image")
|
||||
local txtDesc = potentialItemRoot:Find("ScrollView/Viewport/Content/txtDesc"):GetComponent("TMP_Text")
|
||||
local potentialConfig = ConfigTable.GetData("SoldierPotential", nPotentialId)
|
||||
NovaAPI.SetTMPText(txtName, potentialConfig.Name)
|
||||
self:SetPngSprite(imgIcon, potentialConfig.Icon)
|
||||
NovaAPI.SetTMPText(txtDesc, potentialConfig.Des)
|
||||
end
|
||||
function SoldierCharPotentialDetailCtrl:OnBtnClick_SetSimpleDes()
|
||||
self:_ApplySimple(true)
|
||||
end
|
||||
function SoldierCharPotentialDetailCtrl:OnBtnClick_SetDes()
|
||||
self:_ApplySimple(false)
|
||||
end
|
||||
function SoldierCharPotentialDetailCtrl:_ApplySimple(bSimple)
|
||||
self.bSimple = bSimple
|
||||
PlayerData.StarTower:SetPotentialDescSimple(bSimple)
|
||||
self:_RefreshSwitch()
|
||||
if self._mapNode.PotentialItem ~= nil then
|
||||
self._mapNode.PotentialItem:ChangeDesc(bSimple)
|
||||
end
|
||||
end
|
||||
function SoldierCharPotentialDetailCtrl:_RefreshSwitch()
|
||||
if self._mapNode.btnSwitch_on ~= nil then
|
||||
self._mapNode.btnSwitch_on.gameObject:SetActive(self.bSimple)
|
||||
end
|
||||
if self._mapNode.btnSwitch_off ~= nil then
|
||||
self._mapNode.btnSwitch_off.gameObject:SetActive(not self.bSimple)
|
||||
end
|
||||
end
|
||||
function SoldierCharPotentialDetailCtrl:OnBtnClick_ClosePanel()
|
||||
EventManager.Hit(EventId.ClosePanel, PanelId.SoldierCharPontentialDetailPanel)
|
||||
end
|
||||
return SoldierCharPotentialDetailCtrl
|
||||
@@ -0,0 +1,22 @@
|
||||
local BasePanel = require("GameCore.UI.BasePanel")
|
||||
local SoldierCharTalentDetailPanel = class("SoldierCharTalentDetailPanel", BasePanel)
|
||||
SoldierCharTalentDetailPanel._bIsMainPanel = false
|
||||
SoldierCharTalentDetailPanel._bAddToBackHistory = false
|
||||
SoldierCharTalentDetailPanel._sSortingLayerName = AllEnum.SortingLayerName.UI_Top
|
||||
SoldierCharTalentDetailPanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "Soldier/Tips/CharacterCardTips/SoldierCharPontentialDetailPanel.prefab",
|
||||
sCtrlName = "Game.UI.Soldier.CharacterTips.Components.SoldierCharPotentialDetailCtrl"
|
||||
}
|
||||
}
|
||||
function SoldierCharTalentDetailPanel:Awake()
|
||||
end
|
||||
function SoldierCharTalentDetailPanel:OnEnable()
|
||||
end
|
||||
function SoldierCharTalentDetailPanel:OnDisable()
|
||||
end
|
||||
function SoldierCharTalentDetailPanel:OnDestroy()
|
||||
end
|
||||
function SoldierCharTalentDetailPanel:OnRelease()
|
||||
end
|
||||
return SoldierCharTalentDetailPanel
|
||||
@@ -0,0 +1,46 @@
|
||||
local SoldierCharSkillDetailItemCtrl = class("SoldierCharSkillDetailItemCtrl", BaseCtrl)
|
||||
SoldierCharSkillDetailItemCtrl._mapNodeConfig = {
|
||||
goSkillItem = {
|
||||
sCtrlName = "Game.UI.Soldier.CharacterTips.Items.SoldierCharSkillItemCtrl"
|
||||
},
|
||||
txt_title = {sComponentName = "TMP_Text"},
|
||||
txt_desc = {sComponentName = "TMP_Text"},
|
||||
TMP_Link = {
|
||||
sNodeName = "txt_desc",
|
||||
sComponentName = "TMPHyperLink",
|
||||
callback = "OnLinkClick_Word"
|
||||
},
|
||||
imgLine = {}
|
||||
}
|
||||
SoldierCharSkillDetailItemCtrl._mapEventConfig = {}
|
||||
SoldierCharSkillDetailItemCtrl._mapRedDotConfig = {}
|
||||
function SoldierCharSkillDetailItemCtrl:Awake()
|
||||
end
|
||||
function SoldierCharSkillDetailItemCtrl:OnEnable()
|
||||
end
|
||||
function SoldierCharSkillDetailItemCtrl:OnDisable()
|
||||
end
|
||||
function SoldierCharSkillDetailItemCtrl:OnDestroy()
|
||||
end
|
||||
function SoldierCharSkillDetailItemCtrl:SetData(nSkillId, nSkillIndex, nSkillLevel, bLast)
|
||||
if nSkillId == nil or nSkillId == 0 then
|
||||
self.gameObject:SetActive(false)
|
||||
return
|
||||
end
|
||||
self.gameObject:SetActive(true)
|
||||
self.nSkillId = nSkillId
|
||||
self._mapNode.goSkillItem:SetData(nSkillId, nSkillIndex)
|
||||
local skillCfg = ConfigTable.GetData("Skill", nSkillId)
|
||||
if skillCfg == nil then
|
||||
printError("[SoldierCharSkillDetailItemCtrl] Skill 表找不到数据,id:" .. tostring(nSkillId))
|
||||
return
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_title, skillCfg.Title)
|
||||
local sDesc = UTILS.ParseDesc(skillCfg, GameEnum.levelTypeData.SoldierLevel, nil, false, nSkillLevel)
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_desc, sDesc)
|
||||
self._mapNode.imgLine:SetActive(not bLast)
|
||||
end
|
||||
function SoldierCharSkillDetailItemCtrl:OnLinkClick_Word(link, sWordId)
|
||||
UTILS.ClickWordLink(link, sWordId)
|
||||
end
|
||||
return SoldierCharSkillDetailItemCtrl
|
||||
@@ -0,0 +1,34 @@
|
||||
local SoldierCharSkillItemCtrl = class("SoldierCharSkillItemCtrl", BaseCtrl)
|
||||
SoldierCharSkillItemCtrl._mapNodeConfig = {
|
||||
imgBg = {nCount = 2, sComponentName = "Image"},
|
||||
imgIcon = {sComponentName = "Image"},
|
||||
imgType = {sComponentName = "Image"}
|
||||
}
|
||||
SoldierCharSkillItemCtrl._mapEventConfig = {}
|
||||
SoldierCharSkillItemCtrl._mapRedDotConfig = {}
|
||||
function SoldierCharSkillItemCtrl:Awake()
|
||||
end
|
||||
function SoldierCharSkillItemCtrl:OnEnable()
|
||||
end
|
||||
function SoldierCharSkillItemCtrl:OnDisable()
|
||||
end
|
||||
function SoldierCharSkillItemCtrl:OnDestroy()
|
||||
end
|
||||
function SoldierCharSkillItemCtrl:SetData(nSkillId, nSkillIndex)
|
||||
local skillCfg = ConfigTable.GetData_Skill(nSkillId)
|
||||
if nil == skillCfg then
|
||||
printError("找不到技能配置!!技能id = " .. nSkillId)
|
||||
return
|
||||
end
|
||||
local skillShowCfg = AllEnum.SkillTypeShow[nSkillIndex]
|
||||
local bgIconIndex = skillShowCfg.bgIconIndex
|
||||
self:SetAtlasSprite(self._mapNode.imgBg[2], "10_ico", "zs_character_skill_" .. bgIconIndex)
|
||||
local _, color = ColorUtility.TryParseHtmlString(skillShowCfg.bgColor)
|
||||
NovaAPI.SetImageColor(self._mapNode.imgBg[2], Color(color.r, color.g, color.b, 0.19607843137254902))
|
||||
self:SetAtlasSprite(self._mapNode.imgBg[1], "12_rare", "rare_character_skill_6")
|
||||
local skillTypeIconIdx = skillShowCfg.iconIndex
|
||||
self:SetAtlasSprite(self._mapNode.imgType, "05_language", "zs_character_skill_text_" .. skillTypeIconIdx)
|
||||
NovaAPI.SetImageNativeSize(self._mapNode.imgType)
|
||||
self:SetPngSprite(self._mapNode.imgIcon, skillCfg.Icon)
|
||||
end
|
||||
return SoldierCharSkillItemCtrl
|
||||
@@ -0,0 +1,138 @@
|
||||
local CommonTipsBaseCtrl = require("Game.UI.CommonTipsEx.CommonTipsBaseCtrl")
|
||||
local LayoutRebuilder = CS.UnityEngine.UI.LayoutRebuilder
|
||||
local SoldierCharSkillDetailCtrl = class("SoldierCharSkillDetailCtrl", CommonTipsBaseCtrl)
|
||||
SoldierCharSkillDetailCtrl._mapNodeConfig = {
|
||||
btnCloseTips = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_ClosePanel"
|
||||
},
|
||||
rtContent = {
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
safeAreaRoot = {
|
||||
sNodeName = "----SafeAreaRoot----",
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
btnCloseWordTip = {
|
||||
sComponentName = "Button",
|
||||
callback = "OnBtnClick_CloseWord"
|
||||
},
|
||||
imgWordTipBg = {},
|
||||
TMPWordDesc = {sComponentName = "TMP_Text"},
|
||||
TMPWordTipsTitle = {sComponentName = "TMP_Text"},
|
||||
imgTipsBg = {
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
TipsContent = {
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
TipsView = {sComponentName = "ScrollRect"},
|
||||
goSkillDetailItem = {
|
||||
sNodeName = "SoldierCharSkillDetailItem",
|
||||
ComponentName = "Transform"
|
||||
}
|
||||
}
|
||||
SoldierCharSkillDetailCtrl._mapEventConfig = {}
|
||||
SoldierCharSkillDetailCtrl._mapRedDotConfig = {}
|
||||
SoldierCharSkillDetailCtrl.maxTipHeight = 896
|
||||
function SoldierCharSkillDetailCtrl:Awake()
|
||||
self._tbItems = {}
|
||||
self._nCharId = 0
|
||||
self._nStar = 1
|
||||
self._mapNode.goSkillDetailItem.gameObject:SetActive(false)
|
||||
end
|
||||
function SoldierCharSkillDetailCtrl:OnEnable()
|
||||
local tbParam = self:GetPanelParam()
|
||||
if type(tbParam) == "table" then
|
||||
self.rtTarget = tbParam[1]
|
||||
self._nCharId = tbParam[2]
|
||||
self._nStar = tbParam[3] or 1
|
||||
self._bFront = tbParam[4] or false
|
||||
end
|
||||
self._mapNode.btnCloseWordTip.gameObject:SetActive(false)
|
||||
self._mapNode.imgWordTipBg:SetActive(false)
|
||||
if self._mapNode.btnShortcutClose ~= nil then
|
||||
self:EnableGamepadUI(self._mapNode.btnShortcutClose, true)
|
||||
end
|
||||
self:_RefreshSkillList()
|
||||
local wait = function()
|
||||
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
||||
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
||||
if self._mapNode == nil then
|
||||
return
|
||||
end
|
||||
LayoutRebuilder.ForceRebuildLayoutImmediate(self._mapNode.TipsContent)
|
||||
local nContentHeight = self._mapNode.TipsContent.rect.height
|
||||
local bExceed = nContentHeight > self.maxTipHeight
|
||||
if bExceed then
|
||||
nContentHeight = self.maxTipHeight
|
||||
end
|
||||
if self._mapNode.TipsView ~= nil then
|
||||
NovaAPI.SetScrollRectVertical(self._mapNode.TipsView, bExceed)
|
||||
end
|
||||
if self._mapNode.imgTipsBg ~= nil then
|
||||
self._mapNode.imgTipsBg.sizeDelta = Vector2(self._mapNode.imgTipsBg.sizeDelta.x, nContentHeight)
|
||||
end
|
||||
if self.rtTarget ~= nil and self._mapNode.rtContent ~= nil and self._mapNode.safeAreaRoot ~= nil then
|
||||
self:SetTipsPosition(self.rtTarget, self._mapNode.rtContent, self._mapNode.safeAreaRoot)
|
||||
end
|
||||
end
|
||||
cs_coroutine.start(wait)
|
||||
end
|
||||
function SoldierCharSkillDetailCtrl:OnDisable()
|
||||
self:DisableGamepadUI()
|
||||
self:_ClearItems()
|
||||
end
|
||||
function SoldierCharSkillDetailCtrl:OnDestroy()
|
||||
end
|
||||
function SoldierCharSkillDetailCtrl:OnBtnClick_ClosePanel()
|
||||
EventManager.Hit(EventId.ClosePanel, self._panel._nPanelId)
|
||||
end
|
||||
function SoldierCharSkillDetailCtrl:OnBtnClick_CloseWord(btn)
|
||||
self._mapNode.btnCloseWordTip.gameObject:SetActive(false)
|
||||
self._mapNode.imgWordTipBg:SetActive(false)
|
||||
end
|
||||
function SoldierCharSkillDetailCtrl:_RefreshSkillList()
|
||||
if self._nCharId == nil or self._nCharId == 0 then
|
||||
return
|
||||
end
|
||||
local mapCfg = ConfigTable.GetData("SoldierCharacter", self._nCharId)
|
||||
if mapCfg == nil then
|
||||
printError("[SoldierCharSkillDetailCtrl] SoldierCharacter 表找不到数据,id=" .. tostring(self._nCharId))
|
||||
return
|
||||
end
|
||||
local tbSlots = self._bFront and {
|
||||
{
|
||||
nSkillId = mapCfg.Skill,
|
||||
nIndex = 2
|
||||
}
|
||||
} or {
|
||||
{
|
||||
nSkillId = mapCfg.Support,
|
||||
nIndex = 3
|
||||
}
|
||||
}
|
||||
for _, slot in ipairs(tbSlots) do
|
||||
if slot.nSkillId ~= nil and slot.nSkillId ~= 0 then
|
||||
local goItem = instantiate(self._mapNode.goSkillDetailItem.gameObject, self._mapNode.TipsContent)
|
||||
goItem:SetActive(true)
|
||||
local objCtrl = self:BindCtrlByNode(goItem, "Game.UI.Soldier.CharacterTips.Items.SoldierCharSkillDetailItemCtrl")
|
||||
objCtrl:SetData(slot.nSkillId, slot.nIndex, self._nStar)
|
||||
table.insert(self._tbItems, objCtrl)
|
||||
end
|
||||
end
|
||||
end
|
||||
function SoldierCharSkillDetailCtrl:_ClearItems()
|
||||
if type(self._tbItems) ~= "table" then
|
||||
return
|
||||
end
|
||||
for _, objCtrl in ipairs(self._tbItems) do
|
||||
local goItem = objCtrl.gameObject
|
||||
self:UnbindCtrlByNode(objCtrl)
|
||||
if goItem ~= nil and goItem:IsNull() == false then
|
||||
destroy(goItem)
|
||||
end
|
||||
end
|
||||
self._tbItems = {}
|
||||
end
|
||||
return SoldierCharSkillDetailCtrl
|
||||
@@ -0,0 +1,23 @@
|
||||
local SoldierCharSkillDetailPanel = class("SoldierCharSkillDetailPanel", BasePanel)
|
||||
SoldierCharSkillDetailPanel._bIsMainPanel = false
|
||||
SoldierCharSkillDetailPanel._bAddToBackHistory = false
|
||||
SoldierCharSkillDetailPanel._sSortingLayerName = AllEnum.SortingLayerName.UI_Top
|
||||
SoldierCharSkillDetailPanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "Soldier/Tips/SoldierCharSkillDetailPanel.prefab",
|
||||
sCtrlName = "Game.UI.Soldier.CharacterTips.SoldierCharSkillDetailCtrl"
|
||||
}
|
||||
}
|
||||
function SoldierCharSkillDetailPanel:Awake()
|
||||
end
|
||||
function SoldierCharSkillDetailPanel:OnEnable()
|
||||
end
|
||||
function SoldierCharSkillDetailPanel:OnAfterEnter()
|
||||
end
|
||||
function SoldierCharSkillDetailPanel:OnDisable()
|
||||
end
|
||||
function SoldierCharSkillDetailPanel:OnDestroy()
|
||||
end
|
||||
function SoldierCharSkillDetailPanel:OnRelease()
|
||||
end
|
||||
return SoldierCharSkillDetailPanel
|
||||
@@ -0,0 +1,138 @@
|
||||
local SoldierCharSkillPreviewCtrl = class("SoldierCharSkillPreviewCtrl", BaseCtrl)
|
||||
SoldierCharSkillPreviewCtrl._mapNodeConfig = {
|
||||
rtToggleStar = {},
|
||||
btnLevel = {
|
||||
nCount = 3,
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_BtnLevel"
|
||||
},
|
||||
imgOn = {nCount = 3},
|
||||
imgOff = {nCount = 3},
|
||||
ScrollRoot = {
|
||||
sComponentName = "LoopScrollView"
|
||||
},
|
||||
bgClosePanel = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_ClosePanel"
|
||||
},
|
||||
grid = {
|
||||
sComponentName = "RectTransform"
|
||||
}
|
||||
}
|
||||
SoldierCharSkillPreviewCtrl._mapEventConfig = {}
|
||||
SoldierCharSkillPreviewCtrl._mapRedDotConfig = {}
|
||||
function SoldierCharSkillPreviewCtrl:Awake()
|
||||
self._tbItems = {}
|
||||
self._nCharId = 0
|
||||
self._nCurLevel = 0
|
||||
self.mapSkillItemCtrl = {}
|
||||
self._nSkillIndex = 2
|
||||
end
|
||||
function SoldierCharSkillPreviewCtrl:OnEnable()
|
||||
local tbParam = self:GetPanelParam()
|
||||
if type(tbParam) == "table" then
|
||||
self._nCharId = tbParam[1]
|
||||
self._nSkillIndex = tbParam[2]
|
||||
end
|
||||
self:SetData()
|
||||
end
|
||||
function SoldierCharSkillPreviewCtrl:OnDisable()
|
||||
end
|
||||
function SoldierCharSkillPreviewCtrl:OnDestroy()
|
||||
end
|
||||
function SoldierCharSkillPreviewCtrl:SetData()
|
||||
local bShowToggle = self._nCurLevel == nil or self._nCurLevel == 0
|
||||
if bShowToggle then
|
||||
self._nCurLevel = 1
|
||||
end
|
||||
self._mapNode.rtToggleStar.gameObject:SetActive(bShowToggle)
|
||||
if bShowToggle then
|
||||
self:_RefreshLevelTabUI()
|
||||
end
|
||||
self:_RefreshSkillList()
|
||||
end
|
||||
function SoldierCharSkillPreviewCtrl:Show(bShow)
|
||||
if self.gameObject ~= nil and self.gameObject:IsNull() == false then
|
||||
self.gameObject:SetActive(bShow == true)
|
||||
end
|
||||
end
|
||||
function SoldierCharSkillPreviewCtrl:OnBtnClick_BtnLevel(btn, nIdx)
|
||||
if type(nIdx) ~= "number" then
|
||||
return
|
||||
end
|
||||
if nIdx < 1 or 3 < nIdx then
|
||||
return
|
||||
end
|
||||
if self._nCurLevel == nIdx then
|
||||
return
|
||||
end
|
||||
self._nCurLevel = nIdx
|
||||
self:_RefreshLevelTabUI(nIdx)
|
||||
self:_RefreshSkillList(nIdx)
|
||||
end
|
||||
function SoldierCharSkillPreviewCtrl:OnBtnClick_ClosePanel()
|
||||
EventManager.Hit(EventId.ClosePanel, PanelId.SoldierCharSkillPreview)
|
||||
end
|
||||
function SoldierCharSkillPreviewCtrl:_RefreshLevelTabUI()
|
||||
if type(self._mapNode.imgOn) == "table" then
|
||||
for i, goImgOn in ipairs(self._mapNode.imgOn) do
|
||||
goImgOn.gameObject:SetActive(i == self._nCurLevel)
|
||||
end
|
||||
end
|
||||
if type(self._mapNode.imgOff) == "table" then
|
||||
for i, goImgOff in ipairs(self._mapNode.imgOff) do
|
||||
goImgOff.gameObject:SetActive(i ~= self._nCurLevel)
|
||||
end
|
||||
end
|
||||
end
|
||||
function SoldierCharSkillPreviewCtrl:_RefreshSkillList()
|
||||
if self._nCharId == nil or self._nCharId == 0 then
|
||||
return
|
||||
end
|
||||
self.tbAllSkillIds = {}
|
||||
local mapCfg = ConfigTable.GetData("SoldierCharacter", self._nCharId)
|
||||
local tbSkillId = {}
|
||||
if self._nSkillIndex == 2 then
|
||||
tbSkillId = {
|
||||
mapCfg.Skill
|
||||
}
|
||||
else
|
||||
tbSkillId = {
|
||||
mapCfg.Support
|
||||
}
|
||||
end
|
||||
for nIndex, nSkillId in ipairs(tbSkillId) do
|
||||
if nSkillId ~= nil and nSkillId ~= 0 then
|
||||
table.insert(self.tbAllSkillIds, {
|
||||
nId = nSkillId,
|
||||
nIndex = self._nSkillIndex
|
||||
})
|
||||
end
|
||||
end
|
||||
self:CalGridHeight()
|
||||
self._mapNode.ScrollRoot:InitEx(self.tbAllSkillIdHeight, self, self.OnRefreshSkillItem)
|
||||
end
|
||||
function SoldierCharSkillPreviewCtrl:CalGridHeight()
|
||||
self.tbAllSkillIdHeight = {}
|
||||
for _, skill in ipairs(self.tbAllSkillIds) do
|
||||
local nSkillId = skill.nId
|
||||
local skillCfg = ConfigTable.GetData("Skill", nSkillId)
|
||||
local sDesc = UTILS.ParseDesc(skillCfg, GameEnum.levelTypeData.SoldierLevel, nil, false, nil, self._nCurLevel)
|
||||
local txtDesc = self._mapNode.grid.transform:Find("ImgdescBg/txt_desc"):GetComponent("TMP_Text")
|
||||
NovaAPI.SetTMPText(txtDesc, sDesc)
|
||||
CS.UnityEngine.UI.LayoutRebuilder.ForceRebuildLayoutImmediate(self._mapNode.grid)
|
||||
local nHeight = self._mapNode.grid.sizeDelta.y
|
||||
table.insert(self.tbAllSkillIdHeight, nHeight)
|
||||
end
|
||||
end
|
||||
function SoldierCharSkillPreviewCtrl:OnRefreshSkillItem(goGrid, gridIndex)
|
||||
local index = gridIndex + 1
|
||||
local nInstanceId = goGrid:GetInstanceID()
|
||||
local objCtrl = self.mapSkillItemCtrl[nInstanceId]
|
||||
if objCtrl == nil then
|
||||
objCtrl = self:BindCtrlByNode(goGrid, "Game.UI.Soldier.CharacterTips.Items.SoldierCharSkillDetailItemCtrl")
|
||||
self.mapSkillItemCtrl[nInstanceId] = objCtrl
|
||||
end
|
||||
objCtrl:SetData(self.tbAllSkillIds[index].nId, self.tbAllSkillIds[index].nIndex, self._nCurLevel, index == #self.tbAllSkillIds)
|
||||
end
|
||||
return SoldierCharSkillPreviewCtrl
|
||||
@@ -0,0 +1,23 @@
|
||||
local SoldierCharSkillPreviewPanel = class("SoldierCharSkillPreviewPanel", BasePanel)
|
||||
SoldierCharSkillPreviewPanel._bIsMainPanel = false
|
||||
SoldierCharSkillPreviewPanel._bAddToBackHistory = false
|
||||
SoldierCharSkillPreviewPanel._sSortingLayerName = AllEnum.SortingLayerName.UI_Top
|
||||
SoldierCharSkillPreviewPanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "Soldier/Tips/SoldierCharSkillPreviewPanel.prefab",
|
||||
sCtrlName = "Game.UI.Soldier.CharacterTips.SoldierCharSkillPreviewCtrl"
|
||||
}
|
||||
}
|
||||
function SoldierCharSkillPreviewPanel:Awake()
|
||||
end
|
||||
function SoldierCharSkillPreviewPanel:OnEnable()
|
||||
end
|
||||
function SoldierCharSkillPreviewPanel:OnAfterEnter()
|
||||
end
|
||||
function SoldierCharSkillPreviewPanel:OnDisable()
|
||||
end
|
||||
function SoldierCharSkillPreviewPanel:OnDestroy()
|
||||
end
|
||||
function SoldierCharSkillPreviewPanel:OnRelease()
|
||||
end
|
||||
return SoldierCharSkillPreviewPanel
|
||||
@@ -0,0 +1,533 @@
|
||||
local CommonTipsBaseCtrl = require("Game.UI.CommonTipsEx.CommonTipsBaseCtrl")
|
||||
local SoldierAttrData = require("GameCore.Data.DataClass.Soldier.SoldierAttrData")
|
||||
local LayoutRebuilder = CS.UnityEngine.UI.LayoutRebuilder
|
||||
local SoldierCharTipsCtrl = class("SoldierCharTipsCtrl", CommonTipsBaseCtrl)
|
||||
SoldierCharTipsCtrl._mapNodeConfig = {
|
||||
btnCloseTips = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_ClosePanel"
|
||||
},
|
||||
rtContent = {
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
safeAreaRoot = {
|
||||
sNodeName = "----SafeAreaRoot----",
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
btnCloseWordTip = {
|
||||
sComponentName = "Button",
|
||||
callback = "OnBtnClick_CloseWord"
|
||||
},
|
||||
imgWordTipBg = {},
|
||||
TMPWordDesc = {sComponentName = "TMP_Text"},
|
||||
TMPWordTipsTitle = {sComponentName = "TMP_Text"},
|
||||
imgTipsBg = {
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
TipsContent = {
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
ScrollView = {sComponentName = "ScrollRect"},
|
||||
rtDescContent = {
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
srDesc = {
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
tc_char_small = {
|
||||
sCtrlName = "Game.UI.Soldier.Template.Character.SoldierCharItemCtrl"
|
||||
},
|
||||
txtTitleName = {sComponentName = "TMP_Text"},
|
||||
txtCost = {sComponentName = "TMP_Text"},
|
||||
txtChessType = {sComponentName = "TMP_Text"},
|
||||
goStar = {sNodeName = "Star", nCount = 5},
|
||||
goPartnerRootLayout = {sComponentName = "Transform"},
|
||||
goPartnerItem = {sComponentName = "Transform"},
|
||||
imgHpBar = {
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
imgHpFill = {sComponentName = "Image"},
|
||||
txtHp = {sComponentName = "TMP_Text"},
|
||||
imgEnergyBar = {
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
imgEnergyFill = {sComponentName = "Image"},
|
||||
txtEnergy = {sComponentName = "TMP_Text"},
|
||||
goAttrGridLayout = {sComponentName = "Transform"},
|
||||
goPropertyItem = {sComponentName = "Transform"},
|
||||
goBaseInfo = {
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
btnTabFront = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Front"
|
||||
},
|
||||
btnTabSupport = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Support"
|
||||
},
|
||||
txtTitleSkill = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Handbook_SkillTitle"
|
||||
},
|
||||
goSkillItem = {
|
||||
nCount = 3,
|
||||
sCtrlName = "Game.UI.Soldier.CharacterTips.Items.SoldierCharSkillItemCtrl"
|
||||
},
|
||||
btnSkillItem = {
|
||||
nCount = 3,
|
||||
sNodeName = "goSkillItem",
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_SkillItem"
|
||||
},
|
||||
txtTitlePotential = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Handbook_PotentialTitle"
|
||||
},
|
||||
goPotentialList = {sComponentName = "Transform"},
|
||||
goPotentialItem = {sComponentName = "Transform"},
|
||||
go_Vanguard_on = {},
|
||||
go_Vanguard_off = {},
|
||||
go_Support_on = {},
|
||||
go_Support_off = {},
|
||||
txt_Vanguard_on = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Vanguard_Skill"
|
||||
},
|
||||
txt_Vanguard_off = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Vanguard_Skill"
|
||||
},
|
||||
txt_Support_on = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Support_Skill"
|
||||
},
|
||||
txt_Support_off = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Support_Skill"
|
||||
},
|
||||
icon_Position = {sComponentName = "Image"},
|
||||
btnShortcutClose = {
|
||||
callback = "OnBtnClick_ClosePanel"
|
||||
},
|
||||
imgBg_Rare = {sComponentName = "Image"},
|
||||
img_Rare = {sComponentName = "Image"},
|
||||
trSkillDetail = {sComponentName = "Transform"},
|
||||
trPontentialDetail = {sComponentName = "Transform"},
|
||||
trPartnerDetail = {sComponentName = "Transform"},
|
||||
imgBG = {sNodeName = "----BG----", sComponentName = "Image"}
|
||||
}
|
||||
SoldierCharTipsCtrl._mapEventConfig = {
|
||||
OnSetTipsPosition = "OnEvent_SetTipsPosition",
|
||||
SoldierCharTips_ShowBg = "OnEvent_ShowBg"
|
||||
}
|
||||
SoldierCharTipsCtrl._mapRedDotConfig = {}
|
||||
SoldierCharTipsCtrl.minTipHeight = 59.13
|
||||
SoldierCharTipsCtrl.maxTipHeight = 896
|
||||
local iconPath = "Icon/SoldierOtherIcon/"
|
||||
local iconPartnerPath = "Icon/SoldierPartner/"
|
||||
local ImgChessRarity = {
|
||||
[GameEnum.ChessRarity.Gold] = "ChessQuality_05_XL",
|
||||
[GameEnum.ChessRarity.Purple] = "ChessQuality_04_XL",
|
||||
[GameEnum.ChessRarity.Blue] = "ChessQuality_03_XL",
|
||||
[GameEnum.ChessRarity.Green] = "ChessQuality_02_XL",
|
||||
[GameEnum.ChessRarity.White] = "ChessQuality_01_XL"
|
||||
}
|
||||
local tbColor = {
|
||||
"#d5ddec",
|
||||
"#d8e8b6",
|
||||
"#a0c8fe",
|
||||
"#caaefa",
|
||||
"#fecc88"
|
||||
}
|
||||
function SoldierCharTipsCtrl:Awake()
|
||||
self._tbPartnerItems = {}
|
||||
self._tbPropertyItems = {}
|
||||
self._tbPotentialItems = {}
|
||||
local tbParam = self:GetPanelParam()
|
||||
if type(tbParam) == "table" then
|
||||
self.rtTarget = tbParam[1]
|
||||
self.tbData = tbParam[2]
|
||||
self.tbDeployedChess = tbParam[3] or {}
|
||||
self.tbPartner = tbParam[4] or {}
|
||||
self.tbCurAttr = tbParam[5] or {}
|
||||
end
|
||||
end
|
||||
function SoldierCharTipsCtrl:OnEnable()
|
||||
self._mapNode.btnCloseWordTip.gameObject:SetActive(false)
|
||||
self._mapNode.imgWordTipBg:SetActive(false)
|
||||
if self._mapNode.btnShortcutClose ~= nil then
|
||||
self:EnableGamepadUI(self._mapNode.btnShortcutClose, true)
|
||||
end
|
||||
self.nId = self.tbData.nId
|
||||
if self.nId ~= nil then
|
||||
self:Refresh(self.nId, self.tbData)
|
||||
end
|
||||
if self.rtTarget ~= nil and self._mapNode.rtContent ~= nil and self._mapNode.safeAreaRoot ~= nil then
|
||||
local wait = function()
|
||||
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
||||
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
||||
if self._mapNode == nil then
|
||||
return
|
||||
end
|
||||
local nContentHeight = self._mapNode.rtDescContent.sizeDelta.y
|
||||
if nContentHeight > self.maxTipHeight then
|
||||
nContentHeight = self.maxTipHeight
|
||||
NovaAPI.SetScrollRectVertical(self._mapNode.ScrollView, true)
|
||||
end
|
||||
if nContentHeight < self.minTipHeight then
|
||||
nContentHeight = self.minTipHeight
|
||||
NovaAPI.SetScrollRectVertical(self._mapNode.ScrollView, false)
|
||||
end
|
||||
self._mapNode.srDesc.sizeDelta = Vector2(self._mapNode.srDesc.sizeDelta.x, nContentHeight)
|
||||
local nBaseInfoHeight = 0
|
||||
if self._mapNode.goBaseInfo ~= nil then
|
||||
LayoutRebuilder.ForceRebuildLayoutImmediate(self._mapNode.goBaseInfo)
|
||||
nBaseInfoHeight = self._mapNode.goBaseInfo.rect.height
|
||||
end
|
||||
self._mapNode.imgTipsBg.sizeDelta = Vector2(self._mapNode.imgTipsBg.sizeDelta.x, nContentHeight + nBaseInfoHeight)
|
||||
self._mapNode.srDesc.gameObject:SetActive(false)
|
||||
self:SetTipsPosition(self.rtTarget, self._mapNode.rtContent, self._mapNode.safeAreaRoot)
|
||||
self._mapNode.srDesc.gameObject:SetActive(true)
|
||||
if self.bSetTipsPos ~= true then
|
||||
self._mapNode.trSkillDetail.position = self._mapNode.imgTipsBg.position
|
||||
self._mapNode.trPontentialDetail.position = self._mapNode.imgTipsBg.position
|
||||
self._mapNode.trPartnerDetail.position = self._mapNode.imgTipsBg.position
|
||||
end
|
||||
end
|
||||
cs_coroutine.start(wait)
|
||||
end
|
||||
end
|
||||
function SoldierCharTipsCtrl:OnDisable()
|
||||
self:DisableGamepadUI()
|
||||
self:_ClearPartnerTags()
|
||||
self:_ClearPropertyItems()
|
||||
self:_ClearPotentialItems()
|
||||
end
|
||||
function SoldierCharTipsCtrl:OnDestroy()
|
||||
end
|
||||
function SoldierCharTipsCtrl:Refresh(nId, tbData)
|
||||
self.nId = nId
|
||||
self.tbData = tbData
|
||||
local mapCfg = ConfigTable.GetData("SoldierCharacter", nId)
|
||||
if mapCfg == nil then
|
||||
printError("[SoldierCharTipsCtrl] SoldierCharacter 表找不到数据,id:" .. tostring(nId))
|
||||
return
|
||||
end
|
||||
self.mapCfg = mapCfg
|
||||
self:_SetBaseInfo(mapCfg, tbData)
|
||||
self:_SetAttr(mapCfg, tbData)
|
||||
self:_SetPotentials(mapCfg)
|
||||
self:_RefreshTabSelect(self.bChosenFont)
|
||||
self:_SetSkills(mapCfg, self.bChosenFont)
|
||||
end
|
||||
function SoldierCharTipsCtrl:_SetPotentials(mapCfg)
|
||||
self._mapNode.goPotentialItem.gameObject:SetActive(false)
|
||||
local tbList = {}
|
||||
for nStar = 1, 4 do
|
||||
local tbIds = mapCfg["Potential" .. nStar]
|
||||
if type(tbIds) == "table" then
|
||||
for _, nId in ipairs(tbIds) do
|
||||
if nId ~= nil and nId ~= 0 then
|
||||
tbList[#tbList + 1] = {nId = nId, nStar = nStar}
|
||||
end
|
||||
end
|
||||
elseif type(tbIds) == "number" and tbIds ~= 0 then
|
||||
tbList[#tbList + 1] = {nId = tbIds, nStar = nStar}
|
||||
end
|
||||
end
|
||||
for _, tbItem in ipairs(tbList) do
|
||||
local goItem = instantiate(self._mapNode.goPotentialItem, self._mapNode.goPotentialList)
|
||||
goItem.gameObject:SetActive(true)
|
||||
local objCtrl = self:BindCtrlByNode(goItem, "Game.UI.Soldier.Template.SoldierPotentialItemCtrl")
|
||||
if objCtrl ~= nil then
|
||||
local nStar = self.tbData.nStar
|
||||
objCtrl:SetItemData(tbItem.nId, tbItem.nStar)
|
||||
if nStar < tbItem.nStar then
|
||||
objCtrl:SetItemLockData(tbItem.nId, tbItem.nStar)
|
||||
end
|
||||
self._tbPotentialItems[#self._tbPotentialItems + 1] = objCtrl
|
||||
end
|
||||
local btnItem = goItem:GetComponent("UIButton")
|
||||
if btnItem ~= nil then
|
||||
btnItem.onClick:RemoveAllListeners()
|
||||
btnItem.onClick:AddListener(function()
|
||||
self:OnBtnClick_PotentialItem(tbItem)
|
||||
end)
|
||||
end
|
||||
end
|
||||
end
|
||||
function SoldierCharTipsCtrl:_SetSkills(mapCfg, bFront)
|
||||
if mapCfg == nil or type(self._mapNode.goSkillItem) ~= "table" then
|
||||
return
|
||||
end
|
||||
if bFront then
|
||||
local tbSlots = {
|
||||
{
|
||||
nSkillId = mapCfg.Skill,
|
||||
nSkillIndex = 2
|
||||
}
|
||||
}
|
||||
for i, objCtrl in ipairs(self._mapNode.goSkillItem) do
|
||||
local slot = tbSlots[i]
|
||||
if slot ~= nil and slot.nSkillId ~= nil and slot.nSkillId ~= 0 then
|
||||
objCtrl.gameObject:SetActive(true)
|
||||
objCtrl:SetData(slot.nSkillId, slot.nSkillIndex)
|
||||
else
|
||||
objCtrl.gameObject:SetActive(false)
|
||||
end
|
||||
end
|
||||
else
|
||||
local nSkillId = mapCfg.Support
|
||||
for i, objCtrl in ipairs(self._mapNode.goSkillItem) do
|
||||
if i == 1 and nSkillId ~= nil and nSkillId ~= 0 then
|
||||
objCtrl.gameObject:SetActive(true)
|
||||
objCtrl:SetData(nSkillId, 3)
|
||||
else
|
||||
objCtrl.gameObject:SetActive(false)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
function SoldierCharTipsCtrl:_ClearPotentialItems()
|
||||
if type(self._tbPotentialItems) == "table" then
|
||||
for _, objCtrl in ipairs(self._tbPotentialItems) do
|
||||
self:UnbindCtrlByNode(objCtrl)
|
||||
end
|
||||
end
|
||||
self._tbPotentialItems = {}
|
||||
end
|
||||
function SoldierCharTipsCtrl:_SetBaseInfo(mapCfg)
|
||||
self._mapNode.tc_char_small:SetItemData(mapCfg.Id)
|
||||
self._mapNode.tc_char_small:SetCharLevel(self.tbData.nStar)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtTitleName, mapCfg.Name)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtCost, mapCfg.Cost)
|
||||
local nChessType = mapCfg.Type
|
||||
local tbChessTypeConfig = CacheTable.GetData("_SoldierChessType", nChessType)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtChessType, tbChessTypeConfig.Name)
|
||||
self:SetPngSprite(self._mapNode.icon_Position, iconPath .. tbChessTypeConfig.Icon)
|
||||
self:_SetPartnerTags(mapCfg)
|
||||
self:_SetStar(mapCfg)
|
||||
self:SetPngSprite(self._mapNode.imgBg_Rare, iconPath .. ImgChessRarity[mapCfg.Rarity])
|
||||
local _, rareColor = ColorUtility.TryParseHtmlString(tbColor[mapCfg.Rarity])
|
||||
NovaAPI.SetImageColor(self._mapNode.img_Rare, rareColor)
|
||||
if self.tbData.nPositionType == GameEnum.SoldierPositionType.FightPosition then
|
||||
nChessType = GameEnum.ChessType.Vanguard
|
||||
elseif self.tbData.nPositionType == GameEnum.SoldierPositionType.SupportPosition then
|
||||
nChessType = GameEnum.ChessType.Support
|
||||
end
|
||||
if nChessType == GameEnum.ChessType.Balance or nChessType == GameEnum.ChessType.Vanguard then
|
||||
self:OnBtnClick_Front()
|
||||
else
|
||||
self:OnBtnClick_Support()
|
||||
end
|
||||
end
|
||||
local _TransValueFormat = function(nValue, bPercent, nFormat)
|
||||
return FormatEffectValue(nValue, bPercent, nFormat)
|
||||
end
|
||||
function SoldierCharTipsCtrl:_SetAttr(mapCfg)
|
||||
self:_ClearPropertyItems()
|
||||
self._mapNode.goPropertyItem.gameObject:SetActive(false)
|
||||
local nStar = type(self.tbData) == "table" and self.tbData.nStar or mapCfg.MaxStar or 1
|
||||
local tbAttrSortList, tbAttrMap = SoldierAttrData.CalcCharacterAttr(mapCfg.Id, nStar, self.tbDeployedChess, self.tbPartner)
|
||||
if type(tbAttrSortList) ~= "table" then
|
||||
return
|
||||
end
|
||||
if type(self.tbCurAttr) == "table" and next(self.tbCurAttr) ~= nil then
|
||||
local attrKeyMap = {
|
||||
Hp = "hp",
|
||||
HpMax = "hpMax",
|
||||
Energy = "nMaxEnergy",
|
||||
Atk = "atk",
|
||||
Def = "def",
|
||||
Recovery = "nRecoverRate",
|
||||
CritRate = "critRate",
|
||||
CritPower = "critPower",
|
||||
AttackSpeed = "attackSpeed"
|
||||
}
|
||||
for _, mapAttr in ipairs(tbAttrSortList) do
|
||||
local curAttrKey = attrKeyMap[mapAttr.sKey]
|
||||
if curAttrKey ~= nil and self.tbCurAttr[curAttrKey] ~= nil then
|
||||
mapAttr.nValue = self.tbCurAttr[curAttrKey]
|
||||
print("[SoldierCharTipsCtrl] 实时属性覆盖:", mapAttr.sKey, "=", mapAttr.nValue)
|
||||
end
|
||||
end
|
||||
if tbAttrMap and tbAttrMap.InitialEnergy and self.tbCurAttr.nEnergy ~= nil then
|
||||
tbAttrMap.InitialEnergy.nValue = self.tbCurAttr.nEnergy
|
||||
end
|
||||
end
|
||||
for _, mapAttr in ipairs(tbAttrSortList) do
|
||||
local sKey = mapAttr.sKey
|
||||
if sKey == "Hp" then
|
||||
local nHp = type(self.tbCurAttr) == "table" and self.tbCurAttr.hp ~= nil and self.tbCurAttr.hp or mapAttr.nValue or 0
|
||||
local nMaxHp = type(self.tbCurAttr) == "table" and self.tbCurAttr.hpMax ~= nil and self.tbCurAttr.hpMax or mapAttr.nValue or 0
|
||||
self:_SetBar(self._mapNode.imgHpFill, self._mapNode.txtHp, nHp, nMaxHp, self._mapNode.imgHpBar)
|
||||
elseif sKey == "Energy" then
|
||||
local nMaxEnergy = mapAttr.nValue or 0
|
||||
local nInitEnergy = tbAttrMap and tbAttrMap.InitialEnergy and tbAttrMap.InitialEnergy.nValue or 0
|
||||
self:_SetBar(self._mapNode.imgEnergyFill, self._mapNode.txtEnergy, nInitEnergy, nMaxEnergy, self._mapNode.imgEnergyBar)
|
||||
elseif sKey ~= "InitialEnergy" then
|
||||
local mapAttributeDesc = CacheTable.GetData("_AttributeDesc", sKey)
|
||||
if mapAttributeDesc ~= nil then
|
||||
local goItem = instantiate(self._mapNode.goPropertyItem, self._mapNode.goAttrGridLayout)
|
||||
goItem.gameObject:SetActive(true)
|
||||
local trIcon = goItem:Find("imgIcon")
|
||||
if trIcon ~= nil and mapAttributeDesc.Icon and 0 < #mapAttributeDesc.Icon then
|
||||
local img = trIcon:GetComponent("Image")
|
||||
if img ~= nil then
|
||||
self:SetPngSprite(img, mapAttributeDesc.Icon)
|
||||
end
|
||||
end
|
||||
local trName = goItem:Find("txtProperty")
|
||||
if trName ~= nil then
|
||||
local tmp = trName:GetComponent("TMP_Text")
|
||||
if tmp ~= nil then
|
||||
local sName
|
||||
if mapAttr.sLanguageId ~= nil then
|
||||
sName = ConfigTable.GetUIText(mapAttr.sLanguageId)
|
||||
else
|
||||
sName = mapAttributeDesc.Desc or ""
|
||||
end
|
||||
NovaAPI.SetTMPText(tmp, sName)
|
||||
end
|
||||
end
|
||||
local trValue = goItem:Find("txtValue2")
|
||||
if trValue ~= nil then
|
||||
local tmp = trValue:GetComponent("TMP_Text")
|
||||
if tmp ~= nil then
|
||||
local sValue = _TransValueFormat(mapAttr.nValue or 0, mapAttributeDesc.isPercent, mapAttributeDesc.Format)
|
||||
NovaAPI.SetTMPText(tmp, sValue)
|
||||
print("[SoldierCharTipsCtrl] 属性值:", sKey, "=", sValue)
|
||||
end
|
||||
end
|
||||
self._tbPropertyItems[#self._tbPropertyItems + 1] = goItem
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
function SoldierCharTipsCtrl:_ClearPropertyItems()
|
||||
if type(self._tbPropertyItems) == "table" then
|
||||
for _, goItem in ipairs(self._tbPropertyItems) do
|
||||
if goItem ~= nil and goItem:IsNull() == false then
|
||||
destroy(goItem.gameObject)
|
||||
end
|
||||
end
|
||||
end
|
||||
self._tbPropertyItems = {}
|
||||
end
|
||||
function SoldierCharTipsCtrl:_SetPartnerTags(mapCfg)
|
||||
self:_ClearPartnerTags()
|
||||
self._mapNode.goPartnerItem.gameObject:SetActive(false)
|
||||
local tbPartner = mapCfg.PartnerType
|
||||
if type(tbPartner) ~= "table" then
|
||||
return
|
||||
end
|
||||
for _, nPartnerType in ipairs(tbPartner) do
|
||||
local mapGroup = CacheTable.GetData("_SoldierPartnerGroup", nPartnerType)
|
||||
if mapGroup ~= nil then
|
||||
local goItem = instantiate(self._mapNode.goPartnerItem, self._mapNode.goPartnerRootLayout)
|
||||
goItem.gameObject:SetActive(true)
|
||||
local txtPartner = goItem:Find("txtPartner")
|
||||
if txtPartner ~= nil then
|
||||
local tmp = txtPartner:GetComponent("TMP_Text")
|
||||
if tmp ~= nil then
|
||||
NovaAPI.SetTMPText(tmp, mapGroup.Name or "")
|
||||
end
|
||||
local trIcon = goItem:Find("imgIcon")
|
||||
if trIcon ~= nil and mapGroup.Icon and #mapGroup.Icon > 0 then
|
||||
local img = trIcon:GetComponent("Image")
|
||||
if img ~= nil then
|
||||
self:SetPngSprite(img, iconPartnerPath .. mapGroup.Icon .. "_M")
|
||||
end
|
||||
end
|
||||
end
|
||||
local btnPartner = goItem:GetComponent("UIButton")
|
||||
if btnPartner ~= nil then
|
||||
btnPartner.onClick:RemoveAllListeners()
|
||||
btnPartner.onClick:AddListener(function()
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierPartnerTips, self._mapNode.trPartnerDetail, nPartnerType, 0, false, {}, false)
|
||||
end)
|
||||
end
|
||||
self._tbPartnerItems[#self._tbPartnerItems + 1] = goItem
|
||||
end
|
||||
end
|
||||
end
|
||||
function SoldierCharTipsCtrl:_ClearPartnerTags()
|
||||
if type(self._tbPartnerItems) == "table" then
|
||||
for _, goItem in ipairs(self._tbPartnerItems) do
|
||||
if goItem ~= nil and goItem:IsNull() == false then
|
||||
destroy(goItem.gameObject)
|
||||
end
|
||||
end
|
||||
end
|
||||
self._tbPartnerItems = {}
|
||||
end
|
||||
function SoldierCharTipsCtrl:_SetStar(mapCfg)
|
||||
local nStar = type(self.tbData) == "table" and self.tbData.nStar or mapCfg.MaxStar or 0
|
||||
for i = 1, 5 do
|
||||
if self._mapNode.goStar[i] ~= nil then
|
||||
self._mapNode.goStar[i]:SetActive(i <= nStar)
|
||||
end
|
||||
end
|
||||
end
|
||||
function SoldierCharTipsCtrl:_SetBar(imgFill, txt, nCur, nMax, rtBar)
|
||||
nCur = nCur or 0
|
||||
nMax = nMax or 0
|
||||
if imgFill ~= nil and rtBar ~= nil then
|
||||
LayoutRebuilder.ForceRebuildLayoutImmediate(rtBar)
|
||||
local nInitWidth = rtBar.rect.width
|
||||
local rt = imgFill.rectTransform
|
||||
if rt ~= nil then
|
||||
local nPct = 0 < nMax and nCur / nMax or 0
|
||||
rt.sizeDelta = Vector2(nInitWidth * nPct, rt.sizeDelta.y)
|
||||
end
|
||||
end
|
||||
if txt ~= nil then
|
||||
NovaAPI.SetTMPText(txt, string.format("%s/%s", tostring(nCur), tostring(nMax)))
|
||||
end
|
||||
end
|
||||
function SoldierCharTipsCtrl:OnBtnClick_ClosePanel()
|
||||
EventManager.Hit(EventId.ClosePanel, self._panel._nPanelId)
|
||||
end
|
||||
function SoldierCharTipsCtrl:OnBtnClick_Front()
|
||||
self:_RefreshTabSelect(true)
|
||||
self:_SetSkills(self.mapCfg, true)
|
||||
self.bChosenFont = true
|
||||
end
|
||||
function SoldierCharTipsCtrl:OnBtnClick_Support()
|
||||
self:_RefreshTabSelect(false)
|
||||
self:_SetSkills(self.mapCfg, false)
|
||||
self.bChosenFont = false
|
||||
end
|
||||
function SoldierCharTipsCtrl:_RefreshTabSelect(bFront)
|
||||
self._mapNode.go_Vanguard_on.gameObject:SetActive(bFront)
|
||||
self._mapNode.go_Support_on.gameObject:SetActive(not bFront)
|
||||
self._mapNode.go_Vanguard_off.gameObject:SetActive(not bFront)
|
||||
self._mapNode.go_Support_off.gameObject:SetActive(bFront)
|
||||
end
|
||||
function SoldierCharTipsCtrl:OnBtnClick_SkillItem(btn, nIndex)
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierCharSkillDetail, self._mapNode.trSkillDetail, self.nId, self.tbData.nStar, self.bChosenFont)
|
||||
end
|
||||
function SoldierCharTipsCtrl:OnBtnClick_PotentialItem(tbItem)
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierCharPontentialDetailPanel, self._mapNode.trPontentialDetail, tbItem.nId)
|
||||
end
|
||||
function SoldierCharTipsCtrl:OnBtnClick_CloseWord(btn)
|
||||
self._mapNode.btnCloseWordTip.gameObject:SetActive(false)
|
||||
self._mapNode.imgWordTipBg:SetActive(false)
|
||||
end
|
||||
function SoldierCharTipsCtrl:OnEvent_ShowBg()
|
||||
self._mapNode.imgBG.enabled = true
|
||||
end
|
||||
function SoldierCharTipsCtrl:OnEvent_SetTipsPosition(skillTipsPos, pontentialTipsPos, partnerTipsPos)
|
||||
self.bSetTipsPos = true
|
||||
if skillTipsPos ~= nil and self._mapNode.trSkillDetail ~= nil then
|
||||
self._mapNode.trSkillDetail.position = skillTipsPos
|
||||
end
|
||||
if pontentialTipsPos ~= nil and self._mapNode.trPontentialDetail ~= nil then
|
||||
self._mapNode.trPontentialDetail.position = pontentialTipsPos
|
||||
end
|
||||
if partnerTipsPos ~= nil and self._mapNode.trPartnerDetail ~= nil then
|
||||
self._mapNode.trPartnerDetail.position = partnerTipsPos
|
||||
end
|
||||
end
|
||||
return SoldierCharTipsCtrl
|
||||
@@ -0,0 +1,23 @@
|
||||
local SoldierCharTipsPanel = class("SoldierCharTipsPanel", BasePanel)
|
||||
SoldierCharTipsPanel._bIsMainPanel = false
|
||||
SoldierCharTipsPanel._bAddToBackHistory = false
|
||||
SoldierCharTipsPanel._sSortingLayerName = AllEnum.SortingLayerName.UI_Top
|
||||
SoldierCharTipsPanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "Soldier/Tips/SoldierCharCardTipsPanel.prefab",
|
||||
sCtrlName = "Game.UI.Soldier.CharacterTips.SoldierCharTipsCtrl"
|
||||
}
|
||||
}
|
||||
function SoldierCharTipsPanel:Awake()
|
||||
end
|
||||
function SoldierCharTipsPanel:OnEnable()
|
||||
end
|
||||
function SoldierCharTipsPanel:OnAfterEnter()
|
||||
end
|
||||
function SoldierCharTipsPanel:OnDisable()
|
||||
end
|
||||
function SoldierCharTipsPanel:OnDestroy()
|
||||
end
|
||||
function SoldierCharTipsPanel:OnRelease()
|
||||
end
|
||||
return SoldierCharTipsPanel
|
||||
@@ -0,0 +1,195 @@
|
||||
local BaseCtrl = require("GameCore.UI.BaseCtrl")
|
||||
local SoldierGoldTipsCtrl = class("SoldierGoldTipsCtrl", BaseCtrl)
|
||||
SoldierGoldTipsCtrl._mapNodeConfig = {
|
||||
btnClose = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Close"
|
||||
},
|
||||
txt_glodTitle = {
|
||||
sNodeName = "txt_glodTitle",
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_GoldTips_Title"
|
||||
},
|
||||
txt_desc = {sNodeName = "txt_desc", sComponentName = "TMP_Text"},
|
||||
txt_IncomeTitle = {
|
||||
sNodeName = "txt_IncomeTitle",
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_GoldTips_Income"
|
||||
},
|
||||
txt_WinningstreakTitle = {
|
||||
sNodeName = "txt_WinningstreakTitle",
|
||||
sComponentName = "TMP_Text"
|
||||
},
|
||||
IncomeRoot = {sNodeName = "IncomeRoot", sComponentName = "Transform"},
|
||||
IncomeItem = {},
|
||||
WinningstreakRoot = {
|
||||
sNodeName = "WinningstreakRoot",
|
||||
sComponentName = "Transform"
|
||||
},
|
||||
WinningstreakItem = {}
|
||||
}
|
||||
SoldierGoldTipsCtrl._mapEventConfig = {}
|
||||
SoldierGoldTipsCtrl._mapRedDotConfig = {}
|
||||
local RootPath = "UI/Soldier/SpriteAtlas/Sandbox/"
|
||||
function SoldierGoldTipsCtrl:Awake()
|
||||
self:ParseConfig()
|
||||
end
|
||||
function SoldierGoldTipsCtrl:OnEnable()
|
||||
self:OnRefresh()
|
||||
end
|
||||
function SoldierGoldTipsCtrl:OnDisable()
|
||||
end
|
||||
function SoldierGoldTipsCtrl:OnDestroy()
|
||||
end
|
||||
function SoldierGoldTipsCtrl:OnBtnClick_Close()
|
||||
EventManager.Hit(EventId.ClosePanel, PanelId.SoldierGoldTips)
|
||||
end
|
||||
function SoldierGoldTipsCtrl:OnRefresh()
|
||||
self:_RefreshDes()
|
||||
self:_RefreshIncameItems()
|
||||
self:_RefreshStreakItems()
|
||||
end
|
||||
function SoldierGoldTipsCtrl:ParseConfig()
|
||||
local sSoldierCoinWinningStreak = ConfigTable.GetConfigValue("SoldierCoinWinningStreak")
|
||||
self.tbWinningStreak = {}
|
||||
if sSoldierCoinWinningStreak ~= nil then
|
||||
local tbSoldierCoinWinningStreak = decodeJson(sSoldierCoinWinningStreak)
|
||||
for k, v in pairs(tbSoldierCoinWinningStreak) do
|
||||
table.insert(self.tbWinningStreak, {
|
||||
nCount = tonumber(k),
|
||||
nReward = v
|
||||
})
|
||||
end
|
||||
table.sort(self.tbWinningStreak, function(a, b)
|
||||
return a.nCount < b.nCount
|
||||
end)
|
||||
end
|
||||
local sSoldierCoinLosingStreak = ConfigTable.GetConfigValue("SoldierCoinLosingStreak")
|
||||
self.tbLosingStreak = {}
|
||||
if sSoldierCoinLosingStreak ~= nil then
|
||||
local tbSoldierCoinLosingStreak = decodeJson(sSoldierCoinLosingStreak)
|
||||
for k, v in pairs(tbSoldierCoinLosingStreak) do
|
||||
table.insert(self.tbLosingStreak, {
|
||||
nCount = tonumber(k),
|
||||
nReward = v
|
||||
})
|
||||
end
|
||||
table.sort(self.tbLosingStreak, function(a, b)
|
||||
return a.nCount < b.nCount
|
||||
end)
|
||||
end
|
||||
local sSoldierCoinInterest = ConfigTable.GetConfigValue("SoldierCoinInterest")
|
||||
self.nCoinInterestCount = 1
|
||||
self.nCoinInterestRatio = 1
|
||||
self.nCoinInterestMax = 0
|
||||
if sSoldierCoinInterest ~= nil then
|
||||
local tbSoldierCoinInterest = string.split(sSoldierCoinInterest, ",")
|
||||
self.nCoinInterestCount = tonumber(tbSoldierCoinInterest[1]) or 0
|
||||
self.nCoinInterestRatio = tonumber(tbSoldierCoinInterest[2]) or 1
|
||||
self.nCoinInterestMax = tonumber(tbSoldierCoinInterest[3]) or 0
|
||||
end
|
||||
end
|
||||
function SoldierGoldTipsCtrl:_RefreshDes()
|
||||
if self._mapNode.txt_desc == nil then
|
||||
return
|
||||
end
|
||||
local str = orderedFormat(ConfigTable.GetUIText("Soldier_GoldTips_Desc"), self.nCoinInterestCount, self.nCoinInterestRatio, self.nCoinInterestMax)
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_desc, str)
|
||||
end
|
||||
function SoldierGoldTipsCtrl:_RefreshIncameItems()
|
||||
self.tbIncomeItems = {}
|
||||
local curLevelData = PlayerData.SoldierData:GetCurLevelData()
|
||||
local nCurNodeId = curLevelData:GetNodeId()
|
||||
local nodeConfig = ConfigTable.GetData("SoldierNodePlan", nCurNodeId)
|
||||
if nodeConfig ~= nil and nodeConfig.Coin > 0 then
|
||||
table.insert(self.tbIncomeItems, {
|
||||
sDesc = ConfigTable.GetUIText("Soldier_GoldTips_BasicReward"),
|
||||
nCoin = nodeConfig.Coin
|
||||
})
|
||||
end
|
||||
self.nWiningStreak, self.nLosingStreak = curLevelData:GetStreakCount()
|
||||
if 0 < self.nWiningStreak or 0 < self.nLosingStreak then
|
||||
local nCurStreak = 0 < self.nWiningStreak and self.nWiningStreak or self.nLosingStreak
|
||||
local tbTargetStreak = 0 < self.nWiningStreak and self.tbWinningStreak or self.tbLosingStreak
|
||||
local sStreakText = 0 < self.nWiningStreak and ConfigTable.GetUIText("Soldier_GoldTips_Winningstreak") or ConfigTable.GetUIText("Soldier_GoldTips_Losingingstreak")
|
||||
local targetData
|
||||
for _, data in pairs(tbTargetStreak) do
|
||||
if nCurStreak >= data.nCount then
|
||||
targetData = data
|
||||
else
|
||||
break
|
||||
end
|
||||
end
|
||||
if targetData ~= nil then
|
||||
table.insert(self.tbIncomeItems, {
|
||||
sDesc = orderedFormat(sStreakText, targetData.nCount),
|
||||
nCoin = targetData.nReward
|
||||
})
|
||||
end
|
||||
end
|
||||
self.bWinningStreak = 0 < self.nWiningStreak or self.nWiningStreak == 0 and self.nLosingStreak == 0
|
||||
local curTotalCoin = curLevelData:GetItem(AllEnum.CoinItemId.SoldierCurrency)
|
||||
local nInterestCoin = math.floor(curTotalCoin / self.nCoinInterestCount) * self.nCoinInterestRatio
|
||||
nInterestCoin = math.min(nInterestCoin, self.nCoinInterestMax)
|
||||
if 0 < nInterestCoin then
|
||||
table.insert(self.tbIncomeItems, {
|
||||
sDesc = orderedFormat(ConfigTable.GetUIText("Soldier_GoldTips_Interest"), self.nCoinInterestCount, self.nCoinInterestRatio, self.nCoinInterestMax),
|
||||
nCoin = nInterestCoin
|
||||
})
|
||||
end
|
||||
for i = 1, #self.tbIncomeItems do
|
||||
local item = self.tbIncomeItems[i]
|
||||
if self._mapNode.IncomeItem ~= nil then
|
||||
local itemNode = instantiate(self._mapNode.IncomeItem, self._mapNode.IncomeRoot)
|
||||
self:RefreshItems(itemNode, item.nCoin, item.sDesc)
|
||||
end
|
||||
end
|
||||
self._mapNode.IncomeItem.gameObject:SetActive(false)
|
||||
if self.bWinningStreak then
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_WinningstreakTitle, ConfigTable.GetUIText("Soldier_GoldTips_Winningstreak"))
|
||||
else
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_WinningstreakTitle, ConfigTable.GetUIText("Soldier_GoldTips_Losingingstreak"))
|
||||
end
|
||||
end
|
||||
function SoldierGoldTipsCtrl:_RefreshStreakItems()
|
||||
self.tbStreakItems = {}
|
||||
local str = self.bWinningStreak and ConfigTable.GetUIText("Soldier_GoldTips_Winningstreak") or ConfigTable.GetUIText("Soldier_GoldTips_Losingingstreak")
|
||||
NovaAPI.SetTMPText(self._mapNode.WinningstreakTitle, str)
|
||||
local tbStreak = self.bWinningStreak and self.tbWinningStreak or self.tbLosingStreak
|
||||
for i = 1, #tbStreak do
|
||||
local item = tbStreak[i]
|
||||
if self._mapNode.WinningstreakItem ~= nil then
|
||||
local itemNode = instantiate(self._mapNode.WinningstreakItem, self._mapNode.WinningstreakRoot)
|
||||
local sDesc = ""
|
||||
if i < #tbStreak then
|
||||
local minCount = item.nCount
|
||||
local maxCount = tbStreak[i + 1].nCount - 1
|
||||
sDesc = minCount .. "-" .. maxCount
|
||||
else
|
||||
sDesc = item.nCount .. "+"
|
||||
end
|
||||
local nCurStreak = self.bWinningStreak and self.nWiningStreak or self.nLosingStreak
|
||||
local bCurItem = nCurStreak >= item.nCount and (i == #tbStreak or nCurStreak < tbStreak[i + 1].nCount)
|
||||
self:RefreshItems(itemNode, item.nReward, sDesc, true, bCurItem)
|
||||
end
|
||||
end
|
||||
self._mapNode.WinningstreakItem.gameObject:SetActive(false)
|
||||
end
|
||||
function SoldierGoldTipsCtrl:RefreshItems(goItem, nCoinCount, sDesc, bStreak, bCurItem)
|
||||
if goItem == nil then
|
||||
return
|
||||
end
|
||||
goItem:SetActive(true)
|
||||
local txt_Name = goItem.transform:Find("TextName"):GetComponent("TMP_Text")
|
||||
local txRefreshCount = goItem.transform:Find("txRefreshCount"):GetComponent("TMP_Text")
|
||||
NovaAPI.SetTMPText(txt_Name, sDesc)
|
||||
NovaAPI.SetTMPText(txRefreshCount, nCoinCount)
|
||||
if bStreak == true then
|
||||
local imgItemLine = goItem.transform:Find("imgItemLine").gameObject
|
||||
imgItemLine:SetActive(bCurItem)
|
||||
local imgItemIcon = goItem.transform:Find("imgItemIcon"):GetComponent("Image")
|
||||
local sIcon = self.bWinningStreak and "icon_soldier_sandbox_chess_2" or "icon_soldier_sandbox_chess_5"
|
||||
self:SetSprite(imgItemIcon, RootPath .. sIcon)
|
||||
end
|
||||
end
|
||||
return SoldierGoldTipsCtrl
|
||||
@@ -0,0 +1,23 @@
|
||||
local BasePanel = require("GameCore.UI.BasePanel")
|
||||
local SoldierGoldTipsPanel = class("SoldierGoldTipsPanel", BasePanel)
|
||||
SoldierGoldTipsPanel._bIsMainPanel = false
|
||||
SoldierGoldTipsPanel._sSortingLayerName = AllEnum.SortingLayerName.UI
|
||||
SoldierGoldTipsPanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "Soldier/Tips/SoldierGoldTipsPanel.prefab",
|
||||
sCtrlName = "Game.UI.Soldier.GoldTipsPanel.SoldierGoldTipsCtrl"
|
||||
}
|
||||
}
|
||||
function SoldierGoldTipsPanel:Awake()
|
||||
end
|
||||
function SoldierGoldTipsPanel:OnEnable()
|
||||
end
|
||||
function SoldierGoldTipsPanel:OnAfterEnter()
|
||||
end
|
||||
function SoldierGoldTipsPanel:OnDisable()
|
||||
end
|
||||
function SoldierGoldTipsPanel:OnDestroy()
|
||||
end
|
||||
function SoldierGoldTipsPanel:OnRelease()
|
||||
end
|
||||
return SoldierGoldTipsPanel
|
||||
@@ -0,0 +1,148 @@
|
||||
local SoldierHandbookCardDetailCtrl = class("SoldierHandbookCardDetailCtrl", BaseCtrl)
|
||||
local RootPath = "Icon/SoldierBuffCard/"
|
||||
SoldierHandbookCardDetailCtrl._mapNodeConfig = {
|
||||
img_detailIcon = {sComponentName = "Image"},
|
||||
txt_name = {sComponentName = "TMP_Text"},
|
||||
txt_desc = {sComponentName = "TMP_Text"},
|
||||
go_charListRoot = {},
|
||||
txt_charTitle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Detail_CharTitle"
|
||||
},
|
||||
btnListChar = {},
|
||||
charList = {},
|
||||
Btn_ListChar = {nCount = 3},
|
||||
tc_char_small = {
|
||||
nCount = 3,
|
||||
sCtrlName = "Game.UI.Soldier.Template.Character.SoldierCharItemCtrl"
|
||||
},
|
||||
sv_char = {
|
||||
sComponentName = "LoopScrollView"
|
||||
}
|
||||
}
|
||||
SoldierHandbookCardDetailCtrl._mapEventConfig = {}
|
||||
SoldierHandbookCardDetailCtrl._mapRedDotConfig = {}
|
||||
function SoldierHandbookCardDetailCtrl:Awake()
|
||||
self.mapCharItemCtrl = {}
|
||||
end
|
||||
function SoldierHandbookCardDetailCtrl:OnDestroy()
|
||||
self:Clear()
|
||||
end
|
||||
function SoldierHandbookCardDetailCtrl:Clear()
|
||||
if self.mapCharItemCtrl ~= nil then
|
||||
for _, v in ipairs(self.mapCharItemCtrl) do
|
||||
self:UnbindCtrlByNode(v)
|
||||
end
|
||||
self.mapCharItemCtrl = {}
|
||||
end
|
||||
end
|
||||
function SoldierHandbookCardDetailCtrl:RefreshStarterCardDetail(nStarterCardId)
|
||||
if self.animator == nil then
|
||||
self.animator = self.gameObject:GetComponent("Animator")
|
||||
end
|
||||
self.animator:Play("StarterCardDetail_in")
|
||||
self.tbCharList = {}
|
||||
local starterCardConfig = ConfigTable.GetData("SoldierStarterCard", nStarterCardId)
|
||||
if starterCardConfig == nil then
|
||||
return
|
||||
end
|
||||
self:SetPngSprite(self._mapNode.img_detailIcon, RootPath .. starterCardConfig.Icon)
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_name, starterCardConfig.Name)
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_desc, UTILS.ParseDesc(starterCardConfig))
|
||||
self.tbCharList = starterCardConfig.CharacterShow
|
||||
self._mapNode.go_charListRoot:SetActive(#self.tbCharList > 0)
|
||||
if #self.tbCharList > 0 then
|
||||
self._mapNode.charList:SetActive(#self.tbCharList > 3)
|
||||
self._mapNode.btnListChar:SetActive(#self.tbCharList <= 3)
|
||||
if #self.tbCharList > 3 then
|
||||
self._mapNode.sv_char:Init(#self.tbCharList, self, self.OnCharRefreshGrid, self.OnCharGridBtnClick, false)
|
||||
else
|
||||
for i = 1, 3 do
|
||||
local btn_char = self._mapNode.Btn_ListChar[i]
|
||||
if i <= #self.tbCharList then
|
||||
local btn = self._mapNode.tc_char_small[i].gameObject:GetComponent("UIButton")
|
||||
local charId = self.tbCharList[i]
|
||||
self._mapNode.tc_char_small[i]:SetItemData(charId)
|
||||
self._mapNode.tc_char_small[i]:SetCharLevel(0)
|
||||
btn.onClick:RemoveAllListeners()
|
||||
btn.onClick:AddListener(function()
|
||||
local chessData = {nId = charId, nStar = 1}
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierCharCardTips, self._mapNode.tc_char_small[i].gameObject.transform, chessData)
|
||||
end)
|
||||
end
|
||||
btn_char:SetActive(i <= #self.tbCharList)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
function SoldierHandbookCardDetailCtrl:RefreshStrategyCardDetail(nStrategyCardId)
|
||||
if self.animator == nil then
|
||||
self.animator = self.gameObject:GetComponent("Animator")
|
||||
end
|
||||
self.animator:Play("SoldierHandbookPanelStrategyDetail_in")
|
||||
self.tbCharList = {}
|
||||
local strategyCardConfig = ConfigTable.GetData("SoldierStrategyCard", nStrategyCardId)
|
||||
if strategyCardConfig == nil then
|
||||
return
|
||||
end
|
||||
local imgBg_Gold = self.gameObject.transform:Find("AnimRoot/imgBg_Gold")
|
||||
local imgBg_Silver = self.gameObject.transform:Find("AnimRoot/imgBg_Silver")
|
||||
local imgBg_Copper = self.gameObject.transform:Find("AnimRoot/imgBg_Copper")
|
||||
imgBg_Gold.gameObject:SetActive(strategyCardConfig.Rarity == GameEnum.itemRarity.R)
|
||||
imgBg_Silver.gameObject:SetActive(strategyCardConfig.Rarity == GameEnum.itemRarity.M)
|
||||
imgBg_Copper.gameObject:SetActive(strategyCardConfig.Rarity == GameEnum.itemRarity.N)
|
||||
self:SetPngSprite(self._mapNode.img_detailIcon, RootPath .. strategyCardConfig.Icon)
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_name, strategyCardConfig.Name)
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_desc, strategyCardConfig.Desc)
|
||||
self.tbCharList = strategyCardConfig.CharacterShow
|
||||
self._mapNode.go_charListRoot:SetActive(#self.tbCharList > 0)
|
||||
if #self.tbCharList > 0 then
|
||||
self._mapNode.charList:SetActive(#self.tbCharList > 3)
|
||||
self._mapNode.btnListChar:SetActive(#self.tbCharList <= 3)
|
||||
if #self.tbCharList > 3 then
|
||||
self._mapNode.sv_char:Init(#self.tbCharList, self, self.OnCharRefreshGrid, self.OnCharGridBtnClick, false)
|
||||
else
|
||||
for i = 1, 3 do
|
||||
local btn_char = self._mapNode.Btn_ListChar[i]
|
||||
if i <= #self.tbCharList then
|
||||
local btn = self._mapNode.tc_char_small[i].gameObject:GetComponent("UIButton")
|
||||
local charId = self.tbCharList[i]
|
||||
self._mapNode.tc_char_small[i]:SetItemData(charId)
|
||||
self._mapNode.tc_char_small[i]:SetCharLevel(0)
|
||||
btn.onClick:RemoveAllListeners()
|
||||
btn.onClick:AddListener(function()
|
||||
local chessData = {nId = charId, nStar = 1}
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierCharCardTips, self._mapNode.tc_char_small[i].gameObject.transform, chessData)
|
||||
end)
|
||||
end
|
||||
btn_char:SetActive(i <= #self.tbCharList)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
function SoldierHandbookCardDetailCtrl:OnCharRefreshGrid(goGrid, gridIndex)
|
||||
local nIndex = gridIndex + 1
|
||||
local charId = self.tbCharList[nIndex]
|
||||
local go_char = goGrid.transform:Find("tc_char_small")
|
||||
local nInstanceId = go_char:GetInstanceID()
|
||||
if not self.mapCharItemCtrl[nInstanceId] then
|
||||
self.mapCharItemCtrl[nInstanceId] = self:BindCtrlByNode(go_char, "Game.UI.Soldier.Template.Character.SoldierCharItemCtrl")
|
||||
end
|
||||
self.mapCharItemCtrl[nInstanceId]:SetItemData(charId)
|
||||
self.mapCharItemCtrl[nInstanceId]:SetCharLevel(0)
|
||||
local btn = go_char.gameObject:GetComponent("UIButton")
|
||||
btn.onClick:RemoveAllListeners()
|
||||
btn.onClick:AddListener(function()
|
||||
local chessData = {nId = charId, nStar = 1}
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierCharCardTips, goGrid.transform, chessData)
|
||||
end)
|
||||
end
|
||||
function SoldierHandbookCardDetailCtrl:OnCharGridBtnClick(goGrid, gridIndex)
|
||||
local nIndex = gridIndex + 1
|
||||
local charId = self.tbCharList[nIndex]
|
||||
local chessData = {nId = charId, nStar = 1}
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierCharCardTips, goGrid.transform, chessData)
|
||||
end
|
||||
function SoldierHandbookCardDetailCtrl:OnEvent_AAA()
|
||||
end
|
||||
return SoldierHandbookCardDetailCtrl
|
||||
@@ -0,0 +1,147 @@
|
||||
local SoldierHandbookCharCtrl = class("SoldierHandbookCharCtrl", BaseCtrl)
|
||||
local tabType = {
|
||||
All = 1,
|
||||
Gold = 2,
|
||||
Purple = 3,
|
||||
Blue = 4,
|
||||
Green = 5,
|
||||
White = 6
|
||||
}
|
||||
local tab2ChessRarity = {
|
||||
[tabType.All] = 1,
|
||||
[tabType.Gold] = GameEnum.ChessRarity.Gold,
|
||||
[tabType.Purple] = GameEnum.ChessRarity.Purple,
|
||||
[tabType.Blue] = GameEnum.ChessRarity.Blue,
|
||||
[tabType.Green] = GameEnum.ChessRarity.Green,
|
||||
[tabType.White] = GameEnum.ChessRarity.White
|
||||
}
|
||||
SoldierHandbookCharCtrl._mapNodeConfig = {
|
||||
btn_tab = {
|
||||
nCount = 6,
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Tab"
|
||||
},
|
||||
tab_On = {nCount = 6},
|
||||
tab_Off = {nCount = 6},
|
||||
sv_loop = {
|
||||
sComponentName = "LoopScrollView"
|
||||
},
|
||||
DetailCtrl = {
|
||||
sNodeName = "DetailRoot",
|
||||
sCtrlName = "Game.UI.Soldier.Handbook.SoldierHandbookCharDetailCtrl"
|
||||
}
|
||||
}
|
||||
SoldierHandbookCharCtrl._mapEventConfig = {}
|
||||
SoldierHandbookCharCtrl._mapRedDotConfig = {}
|
||||
function SoldierHandbookCharCtrl:OnDestroy()
|
||||
self:Clear()
|
||||
end
|
||||
function SoldierHandbookCharCtrl:Clear()
|
||||
if self.tbItemCtrl ~= nil then
|
||||
for _, v in ipairs(self.tbItemCtrl) do
|
||||
self:UnbindCtrlByNode(v)
|
||||
end
|
||||
self.tbItemCtrl = {}
|
||||
end
|
||||
self._mapNode.DetailCtrl:Clear()
|
||||
end
|
||||
function SoldierHandbookCharCtrl:Init()
|
||||
self.tbItemCtrl = {}
|
||||
self:InitCharList()
|
||||
self:SwitchToTab(tabType.All, true)
|
||||
end
|
||||
function SoldierHandbookCharCtrl:InitCharList()
|
||||
self.tbAllChar = {}
|
||||
self.mapCharByRarity = {}
|
||||
local actData = PlayerData.Activity:GetActivityDataByType(GameEnum.activityType.Soldier)
|
||||
if actData == nil then
|
||||
return
|
||||
end
|
||||
local nActId = actData:GetActId()
|
||||
local seasonConfig = ConfigTable.GetData("SoldierSeason", nActId)
|
||||
if seasonConfig == nil then
|
||||
return
|
||||
end
|
||||
local func_ForEach_Char = function(mapCharData)
|
||||
if mapCharData.BoardChess and seasonConfig.ChessGroupId == mapCharData.GroupId then
|
||||
table.insert(self.tbAllChar, mapCharData)
|
||||
if self.mapCharByRarity[mapCharData.Rarity] == nil then
|
||||
self.mapCharByRarity[mapCharData.Rarity] = {}
|
||||
end
|
||||
table.insert(self.mapCharByRarity[mapCharData.Rarity], mapCharData)
|
||||
end
|
||||
end
|
||||
ForEachTableLine(DataTable.SoldierCharacter, func_ForEach_Char)
|
||||
table.sort(self.tbAllChar, function(a, b)
|
||||
if a.Rarity == b.Rarity then
|
||||
return a.Id < b.Id
|
||||
end
|
||||
return a.Rarity > b.Rarity
|
||||
end)
|
||||
for nRarity, tbChar in pairs(self.mapCharByRarity) do
|
||||
table.sort(tbChar, function(a, b)
|
||||
return a.Id < b.Id
|
||||
end)
|
||||
end
|
||||
end
|
||||
function SoldierHandbookCharCtrl:RefreshCharList()
|
||||
if self.tbItemCtrl ~= nil then
|
||||
for _, v in ipairs(self.tbItemCtrl) do
|
||||
self:UnbindCtrlByNode(v)
|
||||
end
|
||||
self.tbItemCtrl = nil
|
||||
end
|
||||
self.tbItemCtrl = {}
|
||||
self.tbCurCharList = {}
|
||||
self.nSelectIndex = 1
|
||||
if self.nCurTab == tabType.All then
|
||||
self.tbCurCharList = self.tbAllChar
|
||||
else
|
||||
self.tbCurCharList = self.mapCharByRarity[tab2ChessRarity[self.nCurTab]]
|
||||
end
|
||||
self._mapNode.sv_loop:Init(#self.tbCurCharList, self, self.OnCharRefreshGrid, self.OnCharGridBtnClick, false)
|
||||
EventManager.Hit("SoldierHandbookChar_Selected", self.tbCurCharList[self.nSelectIndex].Id)
|
||||
self:RefreshDetail()
|
||||
end
|
||||
function SoldierHandbookCharCtrl:OnCharRefreshGrid(goGrid, gridIndex)
|
||||
local nIndex = gridIndex + 1
|
||||
local nInstanceId = goGrid:GetInstanceID()
|
||||
if not self.tbItemCtrl[nInstanceId] then
|
||||
self.tbItemCtrl[nInstanceId] = self:BindCtrlByNode(goGrid, "Game.UI.Soldier.Handbook.SoldierHandbookCharItemCtrl")
|
||||
end
|
||||
self.tbItemCtrl[nInstanceId]:SetItemData(self.tbCurCharList[nIndex], self.nSelectIndex == nIndex)
|
||||
end
|
||||
function SoldierHandbookCharCtrl:OnCharGridBtnClick(goGrid, gridIndex)
|
||||
local nIndex = gridIndex + 1
|
||||
self.nSelectIndex = nIndex
|
||||
EventManager.Hit("SoldierHandbookChar_Selected", self.tbCurCharList[self.nSelectIndex].Id)
|
||||
self:RefreshDetail()
|
||||
end
|
||||
function SoldierHandbookCharCtrl:SwitchToTab(nTab, bForce)
|
||||
if self.nCurTab == nTab and not bForce then
|
||||
return
|
||||
end
|
||||
if self.nCurTab ~= nil then
|
||||
self._mapNode.tab_Off[self.nCurTab]:SetActive(true)
|
||||
self._mapNode.tab_On[self.nCurTab]:SetActive(false)
|
||||
else
|
||||
for i = 1, 6 do
|
||||
self._mapNode.tab_Off[i]:SetActive(true)
|
||||
self._mapNode.tab_On[i]:SetActive(false)
|
||||
end
|
||||
end
|
||||
self.nCurTab = nTab
|
||||
self._mapNode.tab_On[self.nCurTab]:SetActive(true)
|
||||
self._mapNode.tab_Off[self.nCurTab]:SetActive(false)
|
||||
self:RefreshCharList()
|
||||
end
|
||||
function SoldierHandbookCharCtrl:RefreshDetail()
|
||||
self._mapNode.DetailCtrl:RefreshDetail(self.tbCurCharList[self.nSelectIndex].Id)
|
||||
end
|
||||
function SoldierHandbookCharCtrl:OnBtnClick_Tab(btn, nIndex)
|
||||
if nIndex == self.nCurTab then
|
||||
return
|
||||
end
|
||||
self:SwitchToTab(nIndex)
|
||||
end
|
||||
return SoldierHandbookCharCtrl
|
||||
@@ -0,0 +1,274 @@
|
||||
local SoldierHandbookCharDetailCtrl = class("SoldierHandbookCharDetailCtrl", BaseCtrl)
|
||||
local SoldierAttrData = require("GameCore.Data.DataClass.Soldier.SoldierAttrData")
|
||||
local RootPath = "Icon/SoldierOtherIcon/"
|
||||
local PartnerPath = "Icon/SoldierPartner/"
|
||||
local tabType = {Vanguard = 1, Support = 2}
|
||||
local barMax = 512
|
||||
local ColorChessRarity = {
|
||||
[GameEnum.ChessRarity.Gold] = Color(0.996078431372549, 0.8, 0.5333333333333333, 1),
|
||||
[GameEnum.ChessRarity.Purple] = Color(0.792156862745098, 0.6823529411764706, 0.9803921568627451, 1),
|
||||
[GameEnum.ChessRarity.Blue] = Color(0.6274509803921569, 0.7843137254901961, 0.996078431372549, 1),
|
||||
[GameEnum.ChessRarity.Green] = Color(0.8470588235294118, 0.9098039215686274, 0.7137254901960784, 1),
|
||||
[GameEnum.ChessRarity.White] = Color(0.8352941176470589, 0.8666666666666667, 0.9254901960784314, 1)
|
||||
}
|
||||
SoldierHandbookCharDetailCtrl._mapNodeConfig = {
|
||||
imgBg_Rare = {sComponentName = "Image"},
|
||||
img_Rare = {sComponentName = "Image"},
|
||||
txt_name = {sComponentName = "TMP_Text"},
|
||||
txt_cost = {sComponentName = "TMP_Text"},
|
||||
icon_Position = {sComponentName = "Image"},
|
||||
txt_Position = {sComponentName = "TMP_Text"},
|
||||
Partner = {nCount = 3},
|
||||
property_hp = {},
|
||||
property_sp = {},
|
||||
property_atk = {},
|
||||
property_def = {},
|
||||
btn_Vanguard = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Vanguard"
|
||||
},
|
||||
go_Vanguard_on = {},
|
||||
go_Vanguard_off = {},
|
||||
txt_Vanguard = {
|
||||
nCount = 2,
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Vanguard_Skill"
|
||||
},
|
||||
btn_Support = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Support"
|
||||
},
|
||||
go_Support_on = {},
|
||||
go_Support_off = {},
|
||||
txt_Support = {
|
||||
nCount = 2,
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Support_Skill"
|
||||
},
|
||||
txt_skillTitle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Handbook_SkillTitle"
|
||||
},
|
||||
txt_potentialTitle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Handbook_PotentialTitle"
|
||||
},
|
||||
sv_Skill = {
|
||||
sComponentName = "LoopScrollView"
|
||||
},
|
||||
sv_Potential = {
|
||||
sComponentName = "LoopScrollView"
|
||||
},
|
||||
btn_charDetail = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_CharDetail"
|
||||
},
|
||||
txtBtnCharDetail = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Handbook_CharDetail"
|
||||
},
|
||||
rtTipsPos = {
|
||||
sComponentName = "RectTransform"
|
||||
}
|
||||
}
|
||||
SoldierHandbookCharDetailCtrl._mapEventConfig = {}
|
||||
SoldierHandbookCharDetailCtrl._mapRedDotConfig = {}
|
||||
function SoldierHandbookCharDetailCtrl:Awake()
|
||||
self.tbSkillItemCtrl = {}
|
||||
self.tbPotentialItemCtrl = {}
|
||||
end
|
||||
function SoldierHandbookCharDetailCtrl:OnDestroy()
|
||||
self:Clear()
|
||||
end
|
||||
function SoldierHandbookCharDetailCtrl:Clear()
|
||||
if self.tbSkillItemCtrl ~= nil then
|
||||
for _, v in ipairs(self.tbSkillItemCtrl) do
|
||||
self:UnbindCtrlByNode(v)
|
||||
end
|
||||
self.tbSkillItemCtrl = {}
|
||||
end
|
||||
if self.tbPotentialItemCtrl ~= nil then
|
||||
for _, v in ipairs(self.tbPotentialItemCtrl) do
|
||||
self:UnbindCtrlByNode(v)
|
||||
end
|
||||
self.tbPotentialItemCtrl = {}
|
||||
end
|
||||
end
|
||||
function SoldierHandbookCharDetailCtrl:RefreshDetail(nCharId)
|
||||
if self.animator == nil then
|
||||
self.animator = self.gameObject:GetComponent("Animator")
|
||||
end
|
||||
self.animator:Play("CharDetail_in")
|
||||
if self.tbSkillItemCtrl ~= nil then
|
||||
for _, v in ipairs(self.tbSkillItemCtrl) do
|
||||
self:UnbindCtrlByNode(v)
|
||||
end
|
||||
self.tbSkillItemCtrl = {}
|
||||
end
|
||||
if self.tbPotentialItemCtrl ~= nil then
|
||||
for _, v in ipairs(self.tbPotentialItemCtrl) do
|
||||
self:UnbindCtrlByNode(v)
|
||||
end
|
||||
self.tbPotentialItemCtrl = {}
|
||||
end
|
||||
self.nCharId = nCharId
|
||||
self.charConfig = ConfigTable.GetData("SoldierCharacter", self.nCharId)
|
||||
if self.charConfig == nil then
|
||||
return
|
||||
end
|
||||
self.skinConfig = ConfigTable.GetData("SoldierSkin", self.charConfig.Skin)
|
||||
if self.skinConfig == nil then
|
||||
return
|
||||
end
|
||||
self:SetPngSprite(self._mapNode.imgBg_Rare, RootPath .. AllEnum.SoldierChessRarityIcon[self.charConfig.Rarity] .. AllEnum.SoldierChessIconSurfix.XL)
|
||||
NovaAPI.SetImageColor(self._mapNode.img_Rare, ColorChessRarity[self.charConfig.Rarity])
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_name, self.skinConfig.Name)
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_cost, self.charConfig.Cost)
|
||||
local nChessType = self.charConfig.Type
|
||||
local tbChessTypeConfig = CacheTable.GetData("_SoldierChessType", nChessType)
|
||||
if tbChessTypeConfig ~= nil then
|
||||
self:SetPngSprite(self._mapNode.icon_Position, RootPath .. tbChessTypeConfig.Icon)
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_Position, tbChessTypeConfig.Name)
|
||||
end
|
||||
local _, tbAttrMap = SoldierAttrData.CalcCharacterAttr(self.nCharId, 1, nil, nil)
|
||||
local txt_hp = self._mapNode.property_hp.transform:Find("txtValue"):GetComponent("TMP_Text")
|
||||
local hp = tbAttrMap.Hp
|
||||
NovaAPI.SetTMPText(txt_hp, hp.nValue .. "/" .. hp.nValue)
|
||||
local imgMainBarFill = self._mapNode.property_sp.transform:Find("imgBarBg/rtBarFill/imgMainBarFill"):GetComponent("Image")
|
||||
local txt_sp = self._mapNode.property_sp.transform:Find("txtValue"):GetComponent("TMP_Text")
|
||||
local sp = tbAttrMap.InitialEnergy
|
||||
local spMax = tbAttrMap.Energy
|
||||
NovaAPI.SetTMPText(txt_sp, sp.nValue .. "/" .. spMax.nValue)
|
||||
imgMainBarFill.rectTransform.sizeDelta = Vector2(sp.nValue / spMax.nValue * barMax, imgMainBarFill.rectTransform.sizeDelta.y)
|
||||
local txt_defName = self._mapNode.property_def.transform:Find("txtProperty"):GetComponent("TMP_Text")
|
||||
local txt_def = self._mapNode.property_def.transform:Find("txtValue2"):GetComponent("TMP_Text")
|
||||
local def = tbAttrMap.Def
|
||||
NovaAPI.SetTMPText(txt_def, def.nValue)
|
||||
NovaAPI.SetTMPText(txt_defName, ConfigTable.GetUIText(def.sLanguageId))
|
||||
local txt_atkName = self._mapNode.property_atk.transform:Find("txtProperty"):GetComponent("TMP_Text")
|
||||
local txt_atk = self._mapNode.property_atk.transform:Find("txtValue2"):GetComponent("TMP_Text")
|
||||
local atkValue = tbAttrMap.Atk
|
||||
NovaAPI.SetTMPText(txt_atkName, ConfigTable.GetUIText(atkValue.sLanguageId))
|
||||
NovaAPI.SetTMPText(txt_atk, atkValue.nValue)
|
||||
self:InitPartner()
|
||||
self:SwitchTab(tabType.Vanguard, true)
|
||||
end
|
||||
function SoldierHandbookCharDetailCtrl:InitPartner()
|
||||
local partnerType = self.charConfig.PartnerType
|
||||
for i = 1, 3 do
|
||||
self._mapNode.Partner[i]:SetActive(false)
|
||||
end
|
||||
for i = 1, 3 do
|
||||
if i > #partnerType then
|
||||
return
|
||||
end
|
||||
local configPartner = CacheTable.GetData("_SoldierPartnerGroup", partnerType[i])
|
||||
if configPartner == nil then
|
||||
return
|
||||
end
|
||||
local icon = self._mapNode.Partner[i].transform:Find("imgIcon"):GetComponent("Image")
|
||||
local txt_Partner = self._mapNode.Partner[i].transform:Find("txt_Partner"):GetComponent("TMP_Text")
|
||||
self:SetPngSprite(icon, PartnerPath .. configPartner.Icon .. AllEnum.SoldierChessIconSurfix.M)
|
||||
NovaAPI.SetTMPText(txt_Partner, configPartner.Name)
|
||||
self._mapNode.Partner[i]:SetActive(true)
|
||||
end
|
||||
end
|
||||
function SoldierHandbookCharDetailCtrl:SwitchTab(nTab, bForce)
|
||||
if self.nCurTab == nTab and not bForce then
|
||||
return
|
||||
end
|
||||
self.nCurTab = nTab
|
||||
self._mapNode.go_Vanguard_on:SetActive(self.nCurTab == tabType.Vanguard)
|
||||
self._mapNode.go_Vanguard_off:SetActive(self.nCurTab ~= tabType.Vanguard)
|
||||
self._mapNode.go_Support_on:SetActive(self.nCurTab == tabType.Support)
|
||||
self._mapNode.go_Support_off:SetActive(self.nCurTab ~= tabType.Support)
|
||||
if self.nCurTab == tabType.Vanguard then
|
||||
self:InitVanguard()
|
||||
else
|
||||
self:InitSupport()
|
||||
end
|
||||
end
|
||||
function SoldierHandbookCharDetailCtrl:InitVanguard()
|
||||
self.tbVanguardSkill = {}
|
||||
table.insert(self.tbVanguardSkill, self.charConfig.Skill)
|
||||
self._mapNode.sv_Skill:Init(#self.tbVanguardSkill, self, self.OnSkillRefreshGrid, self.OnSkillBtnClick, false)
|
||||
self.tbVanguardPotential = {}
|
||||
for i = 1, 4 do
|
||||
local potentialList = self.charConfig["Potential" .. tostring(i)]
|
||||
for _, potentialId in ipairs(potentialList) do
|
||||
table.insert(self.tbVanguardPotential, {nId = potentialId, nStar = i})
|
||||
end
|
||||
end
|
||||
self._mapNode.sv_Potential:Init(#self.tbVanguardPotential, self, self.OnPotentialRefreshGrid)
|
||||
end
|
||||
function SoldierHandbookCharDetailCtrl:OnSkillRefreshGrid(goGrid, gridIndex)
|
||||
local nIndex = gridIndex + 1
|
||||
local skillId = 0
|
||||
if self.nCurTab == tabType.Vanguard then
|
||||
skillId = self.tbVanguardSkill[nIndex]
|
||||
else
|
||||
skillId = self.tbSupportSkill[nIndex]
|
||||
end
|
||||
local nInstanceId = goGrid:GetInstanceID()
|
||||
if not self.tbSkillItemCtrl[nInstanceId] then
|
||||
self.tbSkillItemCtrl[nInstanceId] = self:BindCtrlByNode(goGrid, "Game.UI.TemplateEx.TemplateSkillCharCtrl")
|
||||
end
|
||||
local nSkillIndex = 2
|
||||
if self.nCurTab == tabType.Vanguard then
|
||||
nSkillIndex = 2
|
||||
else
|
||||
nSkillIndex = 3
|
||||
end
|
||||
self.tbSkillItemCtrl[nInstanceId]:SetSkill(skillId, nSkillIndex, 1, GameEnum.elementType.DE, false)
|
||||
local btnSkill = goGrid:GetComponent("UIButton")
|
||||
if btnSkill then
|
||||
btnSkill.onClick:RemoveAllListeners()
|
||||
btnSkill.onClick:AddListener(function()
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierCharSkillPreview, self.nCharId, nSkillIndex)
|
||||
end)
|
||||
end
|
||||
end
|
||||
function SoldierHandbookCharDetailCtrl:OnSkillBtnClick(goGrid, gridIndex)
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierCharSkillPreview, self.nCharId)
|
||||
end
|
||||
function SoldierHandbookCharDetailCtrl:OnPotentialRefreshGrid(goGrid, gridIndex)
|
||||
local nIndex = gridIndex + 1
|
||||
local potential = self.tbVanguardPotential[nIndex]
|
||||
local nInstanceId = goGrid:GetInstanceID()
|
||||
if not self.tbPotentialItemCtrl[nInstanceId] then
|
||||
self.tbPotentialItemCtrl[nInstanceId] = self:BindCtrlByNode(goGrid, "Game.UI.Soldier.Template.SoldierPotentialItemCtrl")
|
||||
end
|
||||
self.tbPotentialItemCtrl[nInstanceId]:SetItemData(potential.nId, potential.nStar)
|
||||
local btnPotential = goGrid.transform:Find("btnItem"):GetComponent("UIButton")
|
||||
if btnPotential then
|
||||
btnPotential.onClick:RemoveAllListeners()
|
||||
btnPotential.onClick:AddListener(function()
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierCharPontentialDetailPanel, self._mapNode.rtTipsPos, potential.nId)
|
||||
end)
|
||||
end
|
||||
end
|
||||
function SoldierHandbookCharDetailCtrl:InitSupport()
|
||||
self.tbSupportSkill = {}
|
||||
table.insert(self.tbSupportSkill, self.charConfig.Support)
|
||||
self._mapNode.sv_Skill:Init(#self.tbSupportSkill, self, self.OnSkillRefreshGrid, self.OnSkillBtnClick, false)
|
||||
self.tbVanguardPotential = {}
|
||||
for i = 1, 4 do
|
||||
local potentialList = self.charConfig["Potential" .. tostring(i)]
|
||||
for _, potentialId in ipairs(potentialList) do
|
||||
table.insert(self.tbVanguardPotential, {nId = potentialId, nStar = i})
|
||||
end
|
||||
end
|
||||
self._mapNode.sv_Potential:Init(#self.tbVanguardPotential, self, self.OnPotentialRefreshGrid)
|
||||
end
|
||||
function SoldierHandbookCharDetailCtrl:OnBtnClick_Vanguard()
|
||||
self:SwitchTab(tabType.Vanguard)
|
||||
end
|
||||
function SoldierHandbookCharDetailCtrl:OnBtnClick_Support()
|
||||
self:SwitchTab(tabType.Support)
|
||||
end
|
||||
function SoldierHandbookCharDetailCtrl:OnBtnClick_CharDetail()
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierCharAttriTips, self.nCharId)
|
||||
end
|
||||
function SoldierHandbookCharDetailCtrl:OnEvent_SoldierHandbookChar_Selected(nCharId)
|
||||
end
|
||||
return SoldierHandbookCharDetailCtrl
|
||||
@@ -0,0 +1,33 @@
|
||||
local SoldierHandbookCharItemCtrl = class("SoldierHandbookCharItemCtrl", BaseCtrl)
|
||||
local RootPath = "Icon/SoldierOtherIcon/"
|
||||
SoldierHandbookCharItemCtrl._mapNodeConfig = {
|
||||
imgSelect = {},
|
||||
imageRarity = {sComponentName = "Image"},
|
||||
imageIcon = {sComponentName = "Image"},
|
||||
txtCharName = {sComponentName = "TMP_Text"}
|
||||
}
|
||||
SoldierHandbookCharItemCtrl._mapEventConfig = {
|
||||
SoldierHandbookChar_Selected = "OnEvent_SoldierHandbookChar_Selected"
|
||||
}
|
||||
SoldierHandbookCharItemCtrl._mapRedDotConfig = {}
|
||||
function SoldierHandbookCharItemCtrl:Awake()
|
||||
end
|
||||
function SoldierHandbookCharItemCtrl:SetItemData(mapCharData, bSelect)
|
||||
self.mapCharData = mapCharData
|
||||
local skinData = ConfigTable.GetData("SoldierSkin", mapCharData.Skin)
|
||||
if skinData == nil then
|
||||
return
|
||||
end
|
||||
self:SetPngSprite(self._mapNode.imageIcon, skinData.Icon .. AllEnum.SoldierChessIconSurfix.M)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtCharName, skinData.Name)
|
||||
self:SetPngSprite(self._mapNode.imageRarity, RootPath .. AllEnum.SoldierChessRarityIcon[mapCharData.Rarity] .. AllEnum.SoldierChessIconSurfix.L)
|
||||
self._mapNode.imgSelect.gameObject:SetActive(bSelect)
|
||||
end
|
||||
function SoldierHandbookCharItemCtrl:OnEvent_SoldierHandbookChar_Selected(nCharId)
|
||||
if self.mapCharData.Id == nCharId then
|
||||
self._mapNode.imgSelect.gameObject:SetActive(true)
|
||||
else
|
||||
self._mapNode.imgSelect.gameObject:SetActive(false)
|
||||
end
|
||||
end
|
||||
return SoldierHandbookCharItemCtrl
|
||||
@@ -0,0 +1,127 @@
|
||||
local SoldierHandbookCtrl = class("SoldierHandbookCtrl", BaseCtrl)
|
||||
SoldierHandbookCtrl._mapNodeConfig = {
|
||||
TopBar = {
|
||||
sNodeName = "TopBarPanel",
|
||||
sCtrlName = "Game.UI.TopBarEx.TopBarCtrl"
|
||||
},
|
||||
btn_char = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Char"
|
||||
},
|
||||
go_char_in = {},
|
||||
go_char_off = {},
|
||||
btn_partner = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Partner"
|
||||
},
|
||||
go_partner_in = {},
|
||||
go_partner_off = {},
|
||||
btn_starterCard = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_StarterCard"
|
||||
},
|
||||
go_starterCard_in = {},
|
||||
go_starterCard_off = {},
|
||||
btn_strategyCard = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_StrategyCard"
|
||||
},
|
||||
go_strategyCard_in = {},
|
||||
go_strategyCard_off = {},
|
||||
txt_char = {
|
||||
nCount = 2,
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Handbook_Character"
|
||||
},
|
||||
txt_partner = {
|
||||
nCount = 2,
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Handbook_Partner"
|
||||
},
|
||||
txt_starterCard = {
|
||||
nCount = 2,
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Handbook_StarterCard"
|
||||
},
|
||||
txt_strategyCard = {
|
||||
nCount = 2,
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Handbook_StrategyCard"
|
||||
},
|
||||
CharCtrl = {
|
||||
sNodeName = "CharRoot",
|
||||
sCtrlName = "Game.UI.Soldier.Handbook.SoldierHandbookCharCtrl"
|
||||
},
|
||||
PartnerCtrl = {
|
||||
sNodeName = "PartnerRoot",
|
||||
sCtrlName = "Game.UI.Soldier.Handbook.SoldierHandbookPartnerCtrl"
|
||||
},
|
||||
StarterCardCtrl = {
|
||||
sNodeName = "StarterCardRoot",
|
||||
sCtrlName = "Game.UI.Soldier.Handbook.SoldierHandbookStarterCardCtrl"
|
||||
},
|
||||
StrategyCardCtrl = {
|
||||
sNodeName = "StrategyCardRoot",
|
||||
sCtrlName = "Game.UI.Soldier.Handbook.SoldierHandbookStrategyCardCtrl"
|
||||
}
|
||||
}
|
||||
SoldierHandbookCtrl._mapEventConfig = {}
|
||||
SoldierHandbookCtrl._mapRedDotConfig = {}
|
||||
function SoldierHandbookCtrl:Awake()
|
||||
local param = self:GetPanelParam()
|
||||
local nSelectedType = 0
|
||||
if type(param) == "table" then
|
||||
nSelectedType = param[1]
|
||||
end
|
||||
if nSelectedType == 0 then
|
||||
nSelectedType = AllEnum.SoldierHandbookType.Character
|
||||
end
|
||||
self:SwitchToSelectedType(nSelectedType)
|
||||
end
|
||||
function SoldierHandbookCtrl:OnEnable()
|
||||
EventManager.Hit("SoldierHandbookPanel_Open")
|
||||
end
|
||||
function SoldierHandbookCtrl:OnDisable()
|
||||
EventManager.Hit("SoldierHandbookPanel_Close")
|
||||
end
|
||||
function SoldierHandbookCtrl:SwitchToSelectedType(nSelectedType)
|
||||
self._mapNode.CharCtrl:Clear()
|
||||
self._mapNode.PartnerCtrl:Clear()
|
||||
self._mapNode.StarterCardCtrl:Clear()
|
||||
self._mapNode.StrategyCardCtrl:Clear()
|
||||
self.nSelectedType = nSelectedType
|
||||
self._mapNode.CharCtrl.gameObject:SetActive(self.nSelectedType == AllEnum.SoldierHandbookType.Character)
|
||||
self._mapNode.PartnerCtrl.gameObject:SetActive(self.nSelectedType == AllEnum.SoldierHandbookType.Partner)
|
||||
self._mapNode.StarterCardCtrl.gameObject:SetActive(self.nSelectedType == AllEnum.SoldierHandbookType.StarterCard)
|
||||
self._mapNode.StrategyCardCtrl.gameObject:SetActive(self.nSelectedType == AllEnum.SoldierHandbookType.StrategyCard)
|
||||
self._mapNode.go_char_in.gameObject:SetActive(self.nSelectedType == AllEnum.SoldierHandbookType.Character)
|
||||
self._mapNode.go_char_off.gameObject:SetActive(self.nSelectedType ~= AllEnum.SoldierHandbookType.Character)
|
||||
self._mapNode.go_partner_in.gameObject:SetActive(self.nSelectedType == AllEnum.SoldierHandbookType.Partner)
|
||||
self._mapNode.go_partner_off.gameObject:SetActive(self.nSelectedType ~= AllEnum.SoldierHandbookType.Partner)
|
||||
self._mapNode.go_starterCard_in.gameObject:SetActive(self.nSelectedType == AllEnum.SoldierHandbookType.StarterCard)
|
||||
self._mapNode.go_starterCard_off.gameObject:SetActive(self.nSelectedType ~= AllEnum.SoldierHandbookType.StarterCard)
|
||||
self._mapNode.go_strategyCard_in.gameObject:SetActive(self.nSelectedType == AllEnum.SoldierHandbookType.StrategyCard)
|
||||
self._mapNode.go_strategyCard_off.gameObject:SetActive(self.nSelectedType ~= AllEnum.SoldierHandbookType.StrategyCard)
|
||||
if self.nSelectedType == AllEnum.SoldierHandbookType.Character then
|
||||
self._mapNode.CharCtrl:Init()
|
||||
elseif self.nSelectedType == AllEnum.SoldierHandbookType.Partner then
|
||||
self._mapNode.PartnerCtrl:Init()
|
||||
elseif self.nSelectedType == AllEnum.SoldierHandbookType.StarterCard then
|
||||
self._mapNode.StarterCardCtrl:Init()
|
||||
elseif self.nSelectedType == AllEnum.SoldierHandbookType.StrategyCard then
|
||||
self._mapNode.StrategyCardCtrl:Init()
|
||||
end
|
||||
end
|
||||
function SoldierHandbookCtrl:OnBtnClick_Char()
|
||||
self:SwitchToSelectedType(AllEnum.SoldierHandbookType.Character)
|
||||
end
|
||||
function SoldierHandbookCtrl:OnBtnClick_Partner()
|
||||
self:SwitchToSelectedType(AllEnum.SoldierHandbookType.Partner)
|
||||
end
|
||||
function SoldierHandbookCtrl:OnBtnClick_StarterCard()
|
||||
self:SwitchToSelectedType(AllEnum.SoldierHandbookType.StarterCard)
|
||||
end
|
||||
function SoldierHandbookCtrl:OnBtnClick_StrategyCard()
|
||||
self:SwitchToSelectedType(AllEnum.SoldierHandbookType.StrategyCard)
|
||||
end
|
||||
return SoldierHandbookCtrl
|
||||
@@ -0,0 +1,22 @@
|
||||
local SoldierHandbookPanel = class("SoldierHandbookPanel", BasePanel)
|
||||
SoldierHandbookPanel._bIsMainPanel = true
|
||||
SoldierHandbookPanel._sSortingLayerName = AllEnum.SortingLayerName.UI
|
||||
SoldierHandbookPanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "Soldier/SoldierHandbookPanel.prefab",
|
||||
sCtrlName = "Game.UI.Soldier.Handbook.SoldierHandbookCtrl"
|
||||
}
|
||||
}
|
||||
function SoldierHandbookPanel:Awake()
|
||||
end
|
||||
function SoldierHandbookPanel:OnEnable()
|
||||
end
|
||||
function SoldierHandbookPanel:OnAfterEnter()
|
||||
end
|
||||
function SoldierHandbookPanel:OnDisable()
|
||||
end
|
||||
function SoldierHandbookPanel:OnDestroy()
|
||||
end
|
||||
function SoldierHandbookPanel:OnRelease()
|
||||
end
|
||||
return SoldierHandbookPanel
|
||||
@@ -0,0 +1,85 @@
|
||||
local SoldierHandbookPartnerCtrl = class("SoldierHandbookPartnerCtrl", BaseCtrl)
|
||||
local tabType = {All = 1}
|
||||
SoldierHandbookPartnerCtrl._mapNodeConfig = {
|
||||
sv_partnerGroup = {
|
||||
sComponentName = "LoopScrollView"
|
||||
},
|
||||
txt_DescCalHeight = {sComponentName = "TMP_Text"}
|
||||
}
|
||||
SoldierHandbookPartnerCtrl._mapEventConfig = {}
|
||||
SoldierHandbookPartnerCtrl._mapRedDotConfig = {}
|
||||
function SoldierHandbookPartnerCtrl:Awake()
|
||||
end
|
||||
function SoldierHandbookPartnerCtrl:OnDestroy()
|
||||
self:Clear()
|
||||
end
|
||||
function SoldierHandbookPartnerCtrl:Clear()
|
||||
if self.tbPartnerGroupItemCtrl ~= nil then
|
||||
for _, v in ipairs(self.tbPartnerGroupItemCtrl) do
|
||||
v:Clear()
|
||||
self:UnbindCtrlByNode(v)
|
||||
end
|
||||
self.tbPartnerGroupItemCtrl = nil
|
||||
end
|
||||
end
|
||||
function SoldierHandbookPartnerCtrl:Init()
|
||||
self:Clear()
|
||||
self.tbPartnerGroupItemCtrl = {}
|
||||
self:InitPartnerGroupList()
|
||||
end
|
||||
function SoldierHandbookPartnerCtrl:InitPartnerGroupList()
|
||||
self.tbPartnerGroup = {}
|
||||
local func_ForEach_PartnerGroup = function(mapPartnerGroup)
|
||||
table.insert(self.tbPartnerGroup, mapPartnerGroup)
|
||||
end
|
||||
ForEachTableLine(DataTable.SoldierPartnerGroup, func_ForEach_PartnerGroup)
|
||||
self:InitHeight()
|
||||
self._mapNode.sv_partnerGroup:InitEx(self.tbGridHeight, self, self.OnPartnerGroupRefreshGrid, self.OnPartnerGroupGridBtnClick, false)
|
||||
local wait = function()
|
||||
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
||||
self:PlayGridAnim()
|
||||
end
|
||||
cs_coroutine.start(wait)
|
||||
end
|
||||
function SoldierHandbookPartnerCtrl:PlayGridAnim()
|
||||
local listInUse = self._mapNode.sv_partnerGroup:GetInUseGridIndex()
|
||||
local tbGridInUse = {}
|
||||
for i = 0, listInUse.Count - 1 do
|
||||
table.insert(tbGridInUse, listInUse[i])
|
||||
end
|
||||
for k, v in ipairs(tbGridInUse) do
|
||||
local goGrid = self._mapNode.sv_partnerGroup.transform:Find("Viewport/Content/" .. v)
|
||||
local animRoot = goGrid:GetComponent("Animator")
|
||||
local delayTime = (k - 1) * 0.1
|
||||
if 0 < delayTime then
|
||||
self:AddTimer(1, delayTime, function()
|
||||
animRoot:Play("go")
|
||||
end, true, true, true)
|
||||
else
|
||||
animRoot:Play("go")
|
||||
end
|
||||
end
|
||||
end
|
||||
function SoldierHandbookPartnerCtrl:InitHeight()
|
||||
self.tbGridHeight = {}
|
||||
for _, v in ipairs(self.tbPartnerGroup) do
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_DescCalHeight, UTILS.ParseDesc(v))
|
||||
CS.UnityEngine.UI.LayoutRebuilder.ForceRebuildLayoutImmediate(self._mapNode.txt_DescCalHeight.transform)
|
||||
local nHeight = self._mapNode.txt_DescCalHeight.transform.sizeDelta.y + 76
|
||||
table.insert(self.tbGridHeight, nHeight)
|
||||
end
|
||||
end
|
||||
function SoldierHandbookPartnerCtrl:OnPartnerGroupRefreshGrid(goGrid, gridIndex)
|
||||
local nIndex = gridIndex + 1
|
||||
local nInstanceId = goGrid:GetInstanceID()
|
||||
if not self.tbPartnerGroupItemCtrl[nInstanceId] then
|
||||
self.tbPartnerGroupItemCtrl[nInstanceId] = self:BindCtrlByNode(goGrid, "Game.UI.Soldier.Handbook.SoldierHandbookPartnerItemCtrl")
|
||||
end
|
||||
self.tbPartnerGroupItemCtrl[nInstanceId]:SetItemData(self.tbPartnerGroup[nIndex])
|
||||
end
|
||||
function SoldierHandbookPartnerCtrl:OnPartnerGroupGridBtnClick(goGrid, gridIndex)
|
||||
local nIndex = gridIndex + 1
|
||||
local partnerType = self.tbPartnerGroup[nIndex].PartnerType
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierHandbookPartnerDetailPanel, partnerType)
|
||||
end
|
||||
return SoldierHandbookPartnerCtrl
|
||||
@@ -0,0 +1,134 @@
|
||||
local SoldierHandbookPartnerDetailCtrl = class("SoldierHandbookPartnerDetailCtrl", BaseCtrl)
|
||||
local SoldierAttrData = require("GameCore.Data.DataClass.Soldier.SoldierAttrData")
|
||||
local RootPath = "Icon/SoldierOtherIcon/"
|
||||
local iconPath = "Icon/SoldierPartner/"
|
||||
SoldierHandbookPartnerDetailCtrl._mapNodeConfig = {
|
||||
blur = {},
|
||||
root = {
|
||||
sNodeName = "----SafeAreaRoot---"
|
||||
},
|
||||
btn_Close = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Close"
|
||||
},
|
||||
btnClose = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Close"
|
||||
},
|
||||
txtWindowTitle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Handbook_PartnerDetail"
|
||||
},
|
||||
txt_name = {sComponentName = "TMP_Text"},
|
||||
img_partnerIcon = {sComponentName = "Image"},
|
||||
TMP_Link = {
|
||||
sNodeName = "txt_PartnerDesc",
|
||||
sComponentName = "TMPHyperLink",
|
||||
callback = "OnLinkClick_Word"
|
||||
},
|
||||
txt_PartnerDesc = {sComponentName = "TMP_Text"},
|
||||
partner_desc = {nCount = 6},
|
||||
txt_charListTitle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Handbook_PartnerCharListTitle"
|
||||
},
|
||||
sv_char = {
|
||||
sComponentName = "LoopScrollView"
|
||||
},
|
||||
charDetialRoot = {sComponentName = "Transform"}
|
||||
}
|
||||
SoldierHandbookPartnerDetailCtrl._mapEventConfig = {}
|
||||
SoldierHandbookPartnerDetailCtrl._mapRedDotConfig = {}
|
||||
function SoldierHandbookPartnerDetailCtrl:Awake()
|
||||
self._mapNode.blur:SetActive(true)
|
||||
self._mapNode.root:SetActive(false)
|
||||
self.animator = self._mapNode.root.transform:Find("AnimRoot"):GetComponent("Animator")
|
||||
local wait = function()
|
||||
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
||||
self._mapNode.root:SetActive(true)
|
||||
self.animator:Play("t_window_04_t_in")
|
||||
EventManager.Hit(EventId.TemporaryBlockInput, 0.3)
|
||||
end
|
||||
cs_coroutine.start(wait)
|
||||
local param = self:GetPanelParam()
|
||||
if type(param) == "table" then
|
||||
self.nPartnerType = param[1]
|
||||
end
|
||||
local mapPartnerGroupData = CacheTable.GetData("_SoldierPartnerGroup", self.nPartnerType)
|
||||
if mapPartnerGroupData == nil then
|
||||
return
|
||||
end
|
||||
self.mapPartnerGroupData = mapPartnerGroupData
|
||||
self:Init()
|
||||
end
|
||||
function SoldierHandbookPartnerDetailCtrl:OnDestroy()
|
||||
for _, v in ipairs(self.tbCharItemCtrl) do
|
||||
self:UnbindCtrlByNode(v)
|
||||
end
|
||||
self.tbCharItemCtrl = nil
|
||||
end
|
||||
function SoldierHandbookPartnerDetailCtrl:Init()
|
||||
self.tbCharItemCtrl = {}
|
||||
if self.mapPartnerGroupData == nil then
|
||||
return
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.txtName, self.mapPartnerGroupData.Name)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtDesc, self.mapPartnerGroupData.Des)
|
||||
for i = 1, 6 do
|
||||
self._mapNode.partner_desc[i]:SetActive(false)
|
||||
end
|
||||
self:SetPngSprite(self._mapNode.img_partnerIcon, iconPath .. self.mapPartnerGroupData.Icon .. AllEnum.SoldierChessIconSurfix.M)
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_name, self.mapPartnerGroupData.Name)
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_PartnerDesc, UTILS.ParseDesc(self.mapPartnerGroupData))
|
||||
local tbAttrData = SoldierAttrData.GetPartnerLevelsByType(self.nPartnerType)
|
||||
for i, v in ipairs(tbAttrData) do
|
||||
local mapCfg = ConfigTable.GetData("SoldierPartner", v.nConfigId)
|
||||
if mapCfg ~= nil then
|
||||
local bg_icon = self._mapNode.partner_desc[i].transform:Find("icon_Level"):GetComponent("Image")
|
||||
self:SetPngSprite(bg_icon, RootPath .. AllEnum.SoldierPartnerLevelIcon[mapCfg.PartnerLevelQuality].levelIcon)
|
||||
local txt_desc = self._mapNode.partner_desc[i].transform:Find("txt_desc"):GetComponent("TMP_Text")
|
||||
local txt_level = self._mapNode.partner_desc[i].transform:Find("icon_Level/txt_level"):GetComponent("TMP_Text")
|
||||
local link = txt_desc.transform:GetComponent("TMPHyperLink")
|
||||
NovaAPI.SetTMPText(txt_desc, v.sDesc)
|
||||
NovaAPI.SetTMPText(txt_level, mapCfg.Num)
|
||||
local handler = ui_handler(self, function(_, goLink, sWordId)
|
||||
UTILS.ClickWordLink(goLink, sWordId)
|
||||
end, link)
|
||||
link.onClick:AddListener(handler)
|
||||
self._mapNode.partner_desc[i]:SetActive(true)
|
||||
end
|
||||
end
|
||||
self._mapNode.sv_char:Init(#self.mapPartnerGroupData.ChessCharacterIds, self, self.OnCharRefreshGrid, self.OnCharBtnClick, false)
|
||||
end
|
||||
function SoldierHandbookPartnerDetailCtrl:OnCharRefreshGrid(goGrid, gridIndex)
|
||||
local nIndex = gridIndex + 1
|
||||
local charId = self.mapPartnerGroupData.ChessCharacterIds[nIndex]
|
||||
local go_char = goGrid.transform:Find("tc_char_small")
|
||||
local nInstanceId = go_char:GetInstanceID()
|
||||
if not self.tbCharItemCtrl[nInstanceId] then
|
||||
self.tbCharItemCtrl[nInstanceId] = self:BindCtrlByNode(go_char, "Game.UI.Soldier.Template.Character.SoldierCharItemCtrl")
|
||||
end
|
||||
self.tbCharItemCtrl[nInstanceId]:SetItemData(charId)
|
||||
self.tbCharItemCtrl[nInstanceId]:SetCharLevel(0)
|
||||
end
|
||||
function SoldierHandbookPartnerDetailCtrl:OnCharBtnClick(goGrid, gridIndex)
|
||||
local nIndex = gridIndex + 1
|
||||
local charId = self.mapPartnerGroupData.ChessCharacterIds[nIndex]
|
||||
local chessData = {nId = charId, nStar = 1}
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierCharCardTips, self._mapNode.charDetialRoot, chessData)
|
||||
local tr = self._mapNode.charDetialRoot
|
||||
EventManager.Hit("OnSetTipsPosition", tr:GetChild(0).position, tr:GetChild(1).position, tr:GetChild(2).position)
|
||||
EventManager.Hit("SoldierCharTips_ShowBg")
|
||||
end
|
||||
function SoldierHandbookPartnerDetailCtrl:OnBtnClick_Close()
|
||||
self.animator:Play("t_window_04_t_out")
|
||||
local callback = function()
|
||||
EventManager.Hit(EventId.ClosePanel, PanelId.SoldierHandbookPartnerDetailPanel)
|
||||
end
|
||||
self:AddTimer(1, 0.3, callback, true, true, true)
|
||||
EventManager.Hit(EventId.TemporaryBlockInput, 0.3)
|
||||
end
|
||||
function SoldierHandbookPartnerDetailCtrl:OnLinkClick_Word(link, sWordId)
|
||||
UTILS.ClickWordLink(link, sWordId)
|
||||
end
|
||||
return SoldierHandbookPartnerDetailCtrl
|
||||
@@ -0,0 +1,21 @@
|
||||
local SoldierHandbookPartnerDetailPanel = class("SoldierHandbookPartnerDetailPanel", BasePanel)
|
||||
SoldierHandbookPartnerDetailPanel._bIsMainPanel = false
|
||||
SoldierHandbookPartnerDetailPanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "Soldier/SoldierHandbookPartnerDetailPanel.prefab",
|
||||
sCtrlName = "Game.UI.Soldier.Handbook.SoldierHandbookPartnerDetailCtrl"
|
||||
}
|
||||
}
|
||||
function SoldierHandbookPartnerDetailPanel:Awake()
|
||||
end
|
||||
function SoldierHandbookPartnerDetailPanel:OnEnable()
|
||||
end
|
||||
function SoldierHandbookPartnerDetailPanel:OnAfterEnter()
|
||||
end
|
||||
function SoldierHandbookPartnerDetailPanel:OnDisable()
|
||||
end
|
||||
function SoldierHandbookPartnerDetailPanel:OnDestroy()
|
||||
end
|
||||
function SoldierHandbookPartnerDetailPanel:OnRelease()
|
||||
end
|
||||
return SoldierHandbookPartnerDetailPanel
|
||||
@@ -0,0 +1,59 @@
|
||||
local SoldierHandbookPartnerItemCtrl = class("SoldierHandbookPartnerItemCtrl", BaseCtrl)
|
||||
local iconPath = "Icon/SoldierPartner/"
|
||||
SoldierHandbookPartnerItemCtrl._mapNodeConfig = {
|
||||
partnerCell = {
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
img_partnerIcon = {sComponentName = "Image"},
|
||||
txt_name = {sComponentName = "TMP_Text"},
|
||||
TMP_Link = {
|
||||
sNodeName = "txt_Desc",
|
||||
sComponentName = "TMPHyperLink",
|
||||
callback = "OnLinkClick_Word"
|
||||
},
|
||||
txt_Desc = {sComponentName = "TMP_Text"},
|
||||
sv = {
|
||||
sComponentName = "LoopScrollView"
|
||||
}
|
||||
}
|
||||
SoldierHandbookPartnerItemCtrl._mapEventConfig = {}
|
||||
SoldierHandbookPartnerItemCtrl._mapRedDotConfig = {}
|
||||
function SoldierHandbookPartnerItemCtrl:Awake()
|
||||
self.tbCharItemCtrl = {}
|
||||
end
|
||||
function SoldierHandbookPartnerItemCtrl:OnDestroy()
|
||||
self:Clear()
|
||||
end
|
||||
function SoldierHandbookPartnerItemCtrl:Clear()
|
||||
if self.tbCharItemCtrl ~= nil then
|
||||
for _, v in ipairs(self.tbCharItemCtrl) do
|
||||
self:UnbindCtrlByNode(v)
|
||||
end
|
||||
end
|
||||
self.tbCharItemCtrl = {}
|
||||
end
|
||||
function SoldierHandbookPartnerItemCtrl:SetItemData(mapPartnerGroupData)
|
||||
self.mapPartnerGroupData = mapPartnerGroupData
|
||||
self:SetPngSprite(self._mapNode.img_partnerIcon, iconPath .. self.mapPartnerGroupData.Icon .. AllEnum.SoldierChessIconSurfix.M)
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_name, self.mapPartnerGroupData.Name)
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_Desc, UTILS.ParseDesc(self.mapPartnerGroupData))
|
||||
CS.UnityEngine.UI.LayoutRebuilder.ForceRebuildLayoutImmediate(self._mapNode.txt_Desc.transform)
|
||||
local nHeight = self._mapNode.txt_Desc.transform.sizeDelta.y + 76
|
||||
self._mapNode.partnerCell.sizeDelta = Vector2(self._mapNode.partnerCell.sizeDelta.x, nHeight)
|
||||
self._mapNode.sv:Init(#self.mapPartnerGroupData.ChessCharacterIds, self, self.OnCharRefreshGrid)
|
||||
end
|
||||
function SoldierHandbookPartnerItemCtrl:OnCharRefreshGrid(goGrid, gridIndex)
|
||||
local nIndex = gridIndex + 1
|
||||
local charId = self.mapPartnerGroupData.ChessCharacterIds[nIndex]
|
||||
local go_char = goGrid.transform:Find("tc_char_small")
|
||||
local nInstanceId = go_char:GetInstanceID()
|
||||
if not self.tbCharItemCtrl[nInstanceId] then
|
||||
self.tbCharItemCtrl[nInstanceId] = self:BindCtrlByNode(go_char, "Game.UI.Soldier.Template.Character.SoldierCharItemCtrl")
|
||||
end
|
||||
self.tbCharItemCtrl[nInstanceId]:SetItemData(charId)
|
||||
self.tbCharItemCtrl[nInstanceId]:SetCharLevel(0)
|
||||
end
|
||||
function SoldierHandbookPartnerItemCtrl:OnLinkClick_Word(link, sWordId)
|
||||
UTILS.ClickWordLink(link, sWordId)
|
||||
end
|
||||
return SoldierHandbookPartnerItemCtrl
|
||||
@@ -0,0 +1,109 @@
|
||||
local SoldierHandbookSelectCtrl = class("SoldierHandbookSelectCtrl", BaseCtrl)
|
||||
SoldierHandbookSelectCtrl._mapNodeConfig = {
|
||||
TopBar = {
|
||||
sNodeName = "TopBarPanel",
|
||||
sCtrlName = "Game.UI.TopBarEx.TopBarCtrl"
|
||||
},
|
||||
btn_Char = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Character"
|
||||
},
|
||||
txt_Char = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Handbook_Character"
|
||||
},
|
||||
txt_CharCount = {sComponentName = "TMP_Text"},
|
||||
btn_Partner = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Partner"
|
||||
},
|
||||
txt_Partner = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Handbook_Partner"
|
||||
},
|
||||
txt_PartnerCount = {sComponentName = "TMP_Text"},
|
||||
btn_StarterCard = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_StarterCard"
|
||||
},
|
||||
txt_StarterCard = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Handbook_StarterCard"
|
||||
},
|
||||
txt_StarterCardCount = {sComponentName = "TMP_Text"},
|
||||
btn_StrategyCard = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_StrategyCard"
|
||||
},
|
||||
txt_StrategyCard = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Handbook_StrategyCard"
|
||||
},
|
||||
txt_StrategyCardCount = {sComponentName = "TMP_Text"}
|
||||
}
|
||||
SoldierHandbookSelectCtrl._mapEventConfig = {}
|
||||
SoldierHandbookSelectCtrl._mapRedDotConfig = {}
|
||||
function SoldierHandbookSelectCtrl:Awake()
|
||||
end
|
||||
function SoldierHandbookSelectCtrl:OnEnable()
|
||||
self:RefreshCharCount()
|
||||
self:RefreshPartnerCount()
|
||||
self:RefreshStarterCardCount()
|
||||
self:RefreshStrategyCardCount()
|
||||
end
|
||||
function SoldierHandbookSelectCtrl:RefreshCharCount()
|
||||
local nCount = 0
|
||||
local actData = PlayerData.Activity:GetActivityDataByType(GameEnum.activityType.Soldier)
|
||||
if actData == nil then
|
||||
return
|
||||
end
|
||||
local nActId = actData:GetActId()
|
||||
local seasonConfig = ConfigTable.GetData("SoldierSeason", nActId)
|
||||
if seasonConfig == nil then
|
||||
return
|
||||
end
|
||||
local func_ForEach_Char = function(mapCharData)
|
||||
if mapCharData.BoardChess and seasonConfig.ChessGroupId == mapCharData.GroupId then
|
||||
nCount = nCount + 1
|
||||
end
|
||||
end
|
||||
ForEachTableLine(DataTable.SoldierCharacter, func_ForEach_Char)
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_CharCount, nCount)
|
||||
end
|
||||
function SoldierHandbookSelectCtrl:RefreshPartnerCount()
|
||||
local nCount = 0
|
||||
local func_ForEach_Partner = function(mapPartnerData)
|
||||
nCount = nCount + 1
|
||||
end
|
||||
ForEachTableLine(DataTable.SoldierPartnerGroup, func_ForEach_Partner)
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_PartnerCount, nCount)
|
||||
end
|
||||
function SoldierHandbookSelectCtrl:RefreshStarterCardCount()
|
||||
local nCount = 0
|
||||
local func_ForEach_StarterCard = function(mapStarterCardData)
|
||||
nCount = nCount + 1
|
||||
end
|
||||
ForEachTableLine(DataTable.SoldierStarterCard, func_ForEach_StarterCard)
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_StarterCardCount, nCount)
|
||||
end
|
||||
function SoldierHandbookSelectCtrl:RefreshStrategyCardCount()
|
||||
local nCount = 0
|
||||
local func_ForEach_StrategyCard = function(mapStrategyCardData)
|
||||
nCount = nCount + 1
|
||||
end
|
||||
ForEachTableLine(DataTable.SoldierStrategyCard, func_ForEach_StrategyCard)
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_StrategyCardCount, nCount)
|
||||
end
|
||||
function SoldierHandbookSelectCtrl:OnBtnClick_Character()
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierHandbookPanel, AllEnum.SoldierHandbookType.Character)
|
||||
end
|
||||
function SoldierHandbookSelectCtrl:OnBtnClick_Partner()
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierHandbookPanel, AllEnum.SoldierHandbookType.Partner)
|
||||
end
|
||||
function SoldierHandbookSelectCtrl:OnBtnClick_StarterCard()
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierHandbookPanel, AllEnum.SoldierHandbookType.StarterCard)
|
||||
end
|
||||
function SoldierHandbookSelectCtrl:OnBtnClick_StrategyCard()
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierHandbookPanel, AllEnum.SoldierHandbookType.StrategyCard)
|
||||
end
|
||||
return SoldierHandbookSelectCtrl
|
||||
@@ -0,0 +1,22 @@
|
||||
local SoldierHandbookSelectPanel = class("SoldierHandbookSelectPanel", BasePanel)
|
||||
SoldierHandbookSelectPanel._bIsMainPanel = true
|
||||
SoldierHandbookSelectPanel._sSortingLayerName = AllEnum.SortingLayerName.UI
|
||||
SoldierHandbookSelectPanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "Soldier/SoldierHandbookSelectPanel.prefab",
|
||||
sCtrlName = "Game.UI.Soldier.Handbook.SoldierHandbookSelectCtrl"
|
||||
}
|
||||
}
|
||||
function SoldierHandbookSelectPanel:Awake()
|
||||
end
|
||||
function SoldierHandbookSelectPanel:OnEnable()
|
||||
end
|
||||
function SoldierHandbookSelectPanel:OnAfterEnter()
|
||||
end
|
||||
function SoldierHandbookSelectPanel:OnDisable()
|
||||
end
|
||||
function SoldierHandbookSelectPanel:OnDestroy()
|
||||
end
|
||||
function SoldierHandbookSelectPanel:OnRelease()
|
||||
end
|
||||
return SoldierHandbookSelectPanel
|
||||
@@ -0,0 +1,84 @@
|
||||
local SoldierHandbookStarterCardCtrl = class("SoldierHandbookStarterCardCtrl", BaseCtrl)
|
||||
SoldierHandbookStarterCardCtrl._mapNodeConfig = {
|
||||
sv_loop = {
|
||||
sComponentName = "LoopScrollView"
|
||||
},
|
||||
CardDetailCtrl = {
|
||||
sNodeName = "DetailRoot",
|
||||
sCtrlName = "Game.UI.Soldier.Handbook.SoldierHandbookCardDetailCtrl"
|
||||
}
|
||||
}
|
||||
SoldierHandbookStarterCardCtrl._mapEventConfig = {}
|
||||
SoldierHandbookStarterCardCtrl._mapRedDotConfig = {}
|
||||
function SoldierHandbookStarterCardCtrl:Awake()
|
||||
end
|
||||
function SoldierHandbookStarterCardCtrl:OnEnable()
|
||||
end
|
||||
function SoldierHandbookStarterCardCtrl:OnDisable()
|
||||
end
|
||||
function SoldierHandbookStarterCardCtrl:OnDestroy()
|
||||
self:Clear()
|
||||
end
|
||||
function SoldierHandbookStarterCardCtrl:Clear()
|
||||
if self.tbCardItemCtrl ~= nil then
|
||||
for _, v in ipairs(self.tbCardItemCtrl) do
|
||||
self:UnbindCtrlByNode(v)
|
||||
end
|
||||
self.tbCardItemCtrl = {}
|
||||
end
|
||||
self._mapNode.CardDetailCtrl:Clear()
|
||||
end
|
||||
function SoldierHandbookStarterCardCtrl:Init()
|
||||
self.tbCardItemCtrl = {}
|
||||
self:InitCardList()
|
||||
self:RefreshCardList()
|
||||
end
|
||||
function SoldierHandbookStarterCardCtrl:InitCardList()
|
||||
self.tbAllCard = {}
|
||||
self.mapCardByRarity = {}
|
||||
local func_ForEach_Card = function(mapCardData)
|
||||
table.insert(self.tbAllCard, mapCardData)
|
||||
if self.mapCardByRarity[mapCardData.Rarity] == nil then
|
||||
self.mapCardByRarity[mapCardData.Rarity] = {}
|
||||
end
|
||||
table.insert(self.mapCardByRarity[mapCardData.Rarity], mapCardData)
|
||||
end
|
||||
ForEachTableLine(DataTable.SoldierStarterCard, func_ForEach_Card)
|
||||
table.sort(self.tbAllCard, function(a, b)
|
||||
if a.Rarity == b.Rarity then
|
||||
return a.Id < b.Id
|
||||
end
|
||||
return a.Rarity > b.Rarity
|
||||
end)
|
||||
for nRarity, tbCard in pairs(self.mapCardByRarity) do
|
||||
table.sort(tbCard, function(a, b)
|
||||
return a.Id < b.Id
|
||||
end)
|
||||
end
|
||||
end
|
||||
function SoldierHandbookStarterCardCtrl:RefreshCardList()
|
||||
self.tbCardItemCtrl = {}
|
||||
self.nSelectIndex = 1
|
||||
self.tbCurCardList = self.tbAllCard
|
||||
self._mapNode.sv_loop:Init(#self.tbCurCardList, self, self.OnCardRefreshGrid, self.OnCardGridBtnClick, false)
|
||||
EventManager.Hit("SoldierHandbookStarterCard_Selected", self.tbCurCardList[self.nSelectIndex].Id)
|
||||
self:RefreshDetail()
|
||||
end
|
||||
function SoldierHandbookStarterCardCtrl:RefreshDetail()
|
||||
self._mapNode.CardDetailCtrl:RefreshStarterCardDetail(self.tbCurCardList[self.nSelectIndex].Id)
|
||||
end
|
||||
function SoldierHandbookStarterCardCtrl:OnCardRefreshGrid(goGrid, gridIndex)
|
||||
local nIndex = gridIndex + 1
|
||||
local nInstanceId = goGrid:GetInstanceID()
|
||||
if not self.tbCardItemCtrl[nInstanceId] then
|
||||
self.tbCardItemCtrl[nInstanceId] = self:BindCtrlByNode(goGrid, "Game.UI.Soldier.Template.SoldierStarterCardItemCtrl")
|
||||
end
|
||||
self.tbCardItemCtrl[nInstanceId]:SetItemData(self.tbCurCardList[nIndex], self.nSelectIndex == nIndex)
|
||||
end
|
||||
function SoldierHandbookStarterCardCtrl:OnCardGridBtnClick(goGrid, gridIndex)
|
||||
local nIndex = gridIndex + 1
|
||||
self.nSelectIndex = nIndex
|
||||
EventManager.Hit("SoldierHandbookStarterCard_Selected", self.tbCurCardList[self.nSelectIndex].Id)
|
||||
self:RefreshDetail()
|
||||
end
|
||||
return SoldierHandbookStarterCardCtrl
|
||||
@@ -0,0 +1,132 @@
|
||||
local SoldierHandbookStrategyCardCtrl = class("SoldierHandbookStrategyCardCtrl", BaseCtrl)
|
||||
local tabType = {
|
||||
All = 1,
|
||||
R = 2,
|
||||
M = 3,
|
||||
N = 4
|
||||
}
|
||||
local tab2ItemRarity = {
|
||||
[tabType.All] = 1,
|
||||
[tabType.R] = GameEnum.itemRarity.R,
|
||||
[tabType.M] = GameEnum.itemRarity.M,
|
||||
[tabType.N] = GameEnum.itemRarity.N
|
||||
}
|
||||
SoldierHandbookStrategyCardCtrl._mapNodeConfig = {
|
||||
btn_tab = {
|
||||
nCount = 4,
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Tab"
|
||||
},
|
||||
tab_On = {nCount = 4},
|
||||
tab_Off = {nCount = 4},
|
||||
sv_loop = {
|
||||
sComponentName = "LoopScrollView"
|
||||
},
|
||||
CardDetailCtrl = {
|
||||
sNodeName = "DetailRoot",
|
||||
sCtrlName = "Game.UI.Soldier.Handbook.SoldierHandbookCardDetailCtrl"
|
||||
}
|
||||
}
|
||||
SoldierHandbookStrategyCardCtrl._mapEventConfig = {}
|
||||
SoldierHandbookStrategyCardCtrl._mapRedDotConfig = {}
|
||||
function SoldierHandbookStrategyCardCtrl:Awake()
|
||||
end
|
||||
function SoldierHandbookStrategyCardCtrl:OnEnable()
|
||||
end
|
||||
function SoldierHandbookStrategyCardCtrl:OnDisable()
|
||||
end
|
||||
function SoldierHandbookStrategyCardCtrl:OnDestroy()
|
||||
self:Clear()
|
||||
end
|
||||
function SoldierHandbookStrategyCardCtrl:Clear()
|
||||
if self.tbCardItemCtrl ~= nil then
|
||||
for _, v in ipairs(self.tbCardItemCtrl) do
|
||||
self:UnbindCtrlByNode(v)
|
||||
end
|
||||
self.tbCardItemCtrl = {}
|
||||
end
|
||||
self._mapNode.CardDetailCtrl:Clear()
|
||||
end
|
||||
function SoldierHandbookStrategyCardCtrl:Init()
|
||||
self.tbCardItemCtrl = {}
|
||||
self:InitCardList()
|
||||
self:SwitchToTab(tabType.All, true)
|
||||
end
|
||||
function SoldierHandbookStrategyCardCtrl:InitCardList()
|
||||
self.tbAllCard = {}
|
||||
self.mapCardByRarity = {}
|
||||
local func_ForEach_Card = function(mapCardData)
|
||||
table.insert(self.tbAllCard, mapCardData)
|
||||
if self.mapCardByRarity[mapCardData.Rarity] == nil then
|
||||
self.mapCardByRarity[mapCardData.Rarity] = {}
|
||||
end
|
||||
table.insert(self.mapCardByRarity[mapCardData.Rarity], mapCardData)
|
||||
end
|
||||
ForEachTableLine(DataTable.SoldierStrategyCard, func_ForEach_Card)
|
||||
table.sort(self.tbAllCard, function(a, b)
|
||||
if a.Rarity == b.Rarity then
|
||||
return a.Id < b.Id
|
||||
end
|
||||
return a.Rarity < b.Rarity
|
||||
end)
|
||||
for nRarity, tbCard in pairs(self.mapCardByRarity) do
|
||||
table.sort(tbCard, function(a, b)
|
||||
return a.Id < b.Id
|
||||
end)
|
||||
end
|
||||
end
|
||||
function SoldierHandbookStrategyCardCtrl:SwitchToTab(nTab, bForce)
|
||||
if self.nCurTab == nTab and not bForce then
|
||||
return
|
||||
end
|
||||
if self.nCurTab ~= nil then
|
||||
self._mapNode.tab_Off[self.nCurTab]:SetActive(true)
|
||||
self._mapNode.tab_On[self.nCurTab]:SetActive(false)
|
||||
else
|
||||
for i = 1, 4 do
|
||||
self._mapNode.tab_Off[i]:SetActive(true)
|
||||
self._mapNode.tab_On[i]:SetActive(false)
|
||||
end
|
||||
end
|
||||
self.nCurTab = nTab
|
||||
self._mapNode.tab_On[self.nCurTab]:SetActive(true)
|
||||
self._mapNode.tab_Off[self.nCurTab]:SetActive(false)
|
||||
self:RefreshCardList()
|
||||
end
|
||||
function SoldierHandbookStrategyCardCtrl:RefreshCardList()
|
||||
self.tbCardItemCtrl = {}
|
||||
self.tbCurCardList = {}
|
||||
self.nSelectIndex = 1
|
||||
if self.nCurTab == tabType.All then
|
||||
self.tbCurCardList = self.tbAllCard
|
||||
else
|
||||
self.tbCurCardList = self.mapCardByRarity[tab2ItemRarity[self.nCurTab]]
|
||||
end
|
||||
self._mapNode.sv_loop:Init(#self.tbCurCardList, self, self.OnCardRefreshGrid, self.OnCardGridBtnClick, false)
|
||||
EventManager.Hit("SoldierHandbookStrategyCard_Selected", self.tbCurCardList[self.nSelectIndex].Id)
|
||||
self:RefreshDetail()
|
||||
end
|
||||
function SoldierHandbookStrategyCardCtrl:RefreshDetail()
|
||||
self._mapNode.CardDetailCtrl:RefreshStrategyCardDetail(self.tbCurCardList[self.nSelectIndex].Id)
|
||||
end
|
||||
function SoldierHandbookStrategyCardCtrl:OnCardRefreshGrid(goGrid, gridIndex)
|
||||
local nIndex = gridIndex + 1
|
||||
local nInstanceId = goGrid:GetInstanceID()
|
||||
if not self.tbCardItemCtrl[nInstanceId] then
|
||||
self.tbCardItemCtrl[nInstanceId] = self:BindCtrlByNode(goGrid, "Game.UI.Soldier.Template.SoldierStrategyCardItemCtrl")
|
||||
end
|
||||
self.tbCardItemCtrl[nInstanceId]:SetItemData(self.tbCurCardList[nIndex], self.nSelectIndex == nIndex)
|
||||
end
|
||||
function SoldierHandbookStrategyCardCtrl:OnCardGridBtnClick(goGrid, gridIndex)
|
||||
local nIndex = gridIndex + 1
|
||||
self.nSelectIndex = nIndex
|
||||
EventManager.Hit("SoldierHandbookStrategyCard_Selected", self.tbCurCardList[self.nSelectIndex].Id)
|
||||
self:RefreshDetail()
|
||||
end
|
||||
function SoldierHandbookStrategyCardCtrl:OnBtnClick_Tab(btn, nIndex)
|
||||
if nIndex == self.nCurTab then
|
||||
return
|
||||
end
|
||||
self:SwitchToTab(nIndex)
|
||||
end
|
||||
return SoldierHandbookStrategyCardCtrl
|
||||
@@ -0,0 +1,105 @@
|
||||
local BaseCtrl = require("GameCore.UI.BaseCtrl")
|
||||
local SoldierSelectStarterCardItemCtrl = class("SoldierSelectStarterCardItemCtrl", BaseCtrl)
|
||||
local RootPath = "Icon/SoldierOtherIcon/"
|
||||
SoldierSelectStarterCardItemCtrl._mapNodeConfig = {
|
||||
btnClose = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Close"
|
||||
},
|
||||
img_Selecticon = {sComponentName = "Image"},
|
||||
txt_name = {sComponentName = "TMP_Text"},
|
||||
txt_desc = {sComponentName = "TMP_Text"},
|
||||
txt_charTitle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Detail_CharTitle"
|
||||
},
|
||||
sv_char = {
|
||||
sComponentName = "LoopScrollView"
|
||||
},
|
||||
txt_desc_HyperLink = {
|
||||
sNodeName = "txt_desc",
|
||||
sComponentName = "TMPHyperLink",
|
||||
callback = "OnBtnClick_Word"
|
||||
},
|
||||
txt_Empty = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Tips_Continue"
|
||||
},
|
||||
TextLab = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Solider_Starter_Title"
|
||||
},
|
||||
goChar = {
|
||||
sNodeName = "tc_char_small"
|
||||
},
|
||||
CharContent = {sComponentName = "Transform"}
|
||||
}
|
||||
SoldierSelectStarterCardItemCtrl._mapEventConfig = {}
|
||||
SoldierSelectStarterCardItemCtrl._mapRedDotConfig = {}
|
||||
local iconCardPath = "Icon/SoldierBuffCard/"
|
||||
function SoldierSelectStarterCardItemCtrl:Awake()
|
||||
self.mapCharItemCtrl = {}
|
||||
self.tbCharList = {}
|
||||
self.tbCharItemsCtrl = {}
|
||||
self.animator = self.gameObject:GetComponent("Animator")
|
||||
end
|
||||
function SoldierSelectStarterCardItemCtrl:OnEnable()
|
||||
local tbParam = self:GetPanelParam()
|
||||
if type(tbParam) == "table" and tbParam[1] ~= nil then
|
||||
self:SetData(tbParam[1])
|
||||
end
|
||||
self.animator:Play("SoldierSelectStarterCardItem_in")
|
||||
end
|
||||
function SoldierSelectStarterCardItemCtrl:OnDisable()
|
||||
self:_ClearCharItems()
|
||||
end
|
||||
function SoldierSelectStarterCardItemCtrl:OnDestroy()
|
||||
end
|
||||
function SoldierSelectStarterCardItemCtrl:SetData(nStarterCardId)
|
||||
local starterCardConfig = ConfigTable.GetData("SoldierStarterCard", nStarterCardId)
|
||||
self:SetPngSprite(self._mapNode.img_Selecticon, iconCardPath .. starterCardConfig.Icon)
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_name, starterCardConfig.Name)
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_desc, UTILS.ParseDesc(starterCardConfig))
|
||||
self.tbCharList = starterCardConfig.CharacterShow or {}
|
||||
local bHasChar = #self.tbCharList > 0
|
||||
self._mapNode.txt_charTitle.gameObject:SetActive(bHasChar)
|
||||
self._mapNode.sv_char.gameObject:SetActive(bHasChar)
|
||||
if bHasChar then
|
||||
self:_RefreshCharItems(self.tbCharList)
|
||||
end
|
||||
end
|
||||
function SoldierSelectStarterCardItemCtrl:_RefreshCharItems(tbCharIds)
|
||||
for k, charId in ipairs(tbCharIds) do
|
||||
local itemCtrl = self.tbCharItemsCtrl[k]
|
||||
if itemCtrl == nil then
|
||||
local go = instantiate(self._mapNode.goChar, self._mapNode.CharContent)
|
||||
itemCtrl = self:BindCtrlByNode(go, "Game.UI.Soldier.Template.Character.SoldierCharItemCtrl")
|
||||
table.insert(self.tbCharItemsCtrl, itemCtrl)
|
||||
end
|
||||
itemCtrl.gameObject:SetActive(true)
|
||||
itemCtrl:SetItemData(charId)
|
||||
itemCtrl:SetCharLevel(1)
|
||||
end
|
||||
end
|
||||
function SoldierSelectStarterCardItemCtrl:_ClearCharItems()
|
||||
for _, ctrl in ipairs(self.tbCharItemsCtrl) do
|
||||
local obj = ctrl.gameObject
|
||||
self:UnbindCtrlByNode(ctrl)
|
||||
destroy(obj)
|
||||
end
|
||||
self.tbCharItemsCtrl = {}
|
||||
end
|
||||
function SoldierSelectStarterCardItemCtrl:OnCharGridBtnClick(_goGrid, _gridIndex)
|
||||
end
|
||||
function SoldierSelectStarterCardItemCtrl:OnBtnClick_Close()
|
||||
self.animator:Play("SoldierSelectStarterCardItem_out")
|
||||
local callback = function()
|
||||
EventManager.Hit(EventId.ClosePanel, PanelId.SoldierSelectStarterCardItem)
|
||||
end
|
||||
self:AddTimer(1, 0.3, callback, true, true, true)
|
||||
EventManager.Hit(EventId.TemporaryBlockInput, 0.3)
|
||||
end
|
||||
function SoldierSelectStarterCardItemCtrl:OnBtnClick_Word(link, sWordId)
|
||||
UTILS.ClickWordLink(link, sWordId)
|
||||
end
|
||||
return SoldierSelectStarterCardItemCtrl
|
||||
@@ -0,0 +1,22 @@
|
||||
local SoldierSelectStarterCardItemPanel = class("SoldierSelectStarterCardItemPanel", BasePanel)
|
||||
SoldierSelectStarterCardItemPanel._bIsMainPanel = false
|
||||
SoldierSelectStarterCardItemPanel._sSortingLayerName = AllEnum.SortingLayerName.UI
|
||||
SoldierSelectStarterCardItemPanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "Soldier/Tips/SoldierSelectStarterCardItem.prefab",
|
||||
sCtrlName = "Game.UI.Soldier.Handbook.SoldierSelectStarterCardItemCtrl"
|
||||
}
|
||||
}
|
||||
function SoldierSelectStarterCardItemPanel:Awake()
|
||||
end
|
||||
function SoldierSelectStarterCardItemPanel:OnEnable()
|
||||
end
|
||||
function SoldierSelectStarterCardItemPanel:OnAfterEnter()
|
||||
end
|
||||
function SoldierSelectStarterCardItemPanel:OnDisable()
|
||||
end
|
||||
function SoldierSelectStarterCardItemPanel:OnDestroy()
|
||||
end
|
||||
function SoldierSelectStarterCardItemPanel:OnRelease()
|
||||
end
|
||||
return SoldierSelectStarterCardItemPanel
|
||||
@@ -0,0 +1,108 @@
|
||||
local BaseCtrl = require("GameCore.UI.BaseCtrl")
|
||||
local SoldierSelectStrategyCardItemCtrl = class("SoldierSelectStrategyCardItemCtrl", BaseCtrl)
|
||||
local RootPath = "Icon/SoldierOtherIcon/"
|
||||
SoldierSelectStrategyCardItemCtrl._mapNodeConfig = {
|
||||
btnClose = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Close"
|
||||
},
|
||||
imgBg_Gold = {},
|
||||
imgBg_Silver = {},
|
||||
imgBg_Copper = {},
|
||||
img_Selecticon = {sComponentName = "Image"},
|
||||
txt_name = {sComponentName = "TMP_Text"},
|
||||
txt_desc = {sComponentName = "TMP_Text"},
|
||||
txt_charTitle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Detail_CharTitle"
|
||||
},
|
||||
sv_char = {},
|
||||
txt_desc_HyperLink = {
|
||||
sNodeName = "txt_desc",
|
||||
sComponentName = "TMPHyperLink",
|
||||
callback = "OnBtnClick_Word"
|
||||
},
|
||||
txt_Empty = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Tips_Continue"
|
||||
},
|
||||
TextLab = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Strategy_Title"
|
||||
},
|
||||
goChar = {
|
||||
sNodeName = "tc_char_small"
|
||||
},
|
||||
CharContent = {sComponentName = "Transform"}
|
||||
}
|
||||
SoldierSelectStrategyCardItemCtrl._mapEventConfig = {}
|
||||
SoldierSelectStrategyCardItemCtrl._mapRedDotConfig = {}
|
||||
local iconCardPath = "Icon/SoldierBuffCard/"
|
||||
function SoldierSelectStrategyCardItemCtrl:Awake()
|
||||
self.mapCharItemCtrl = {}
|
||||
self.tbCharList = {}
|
||||
self.tbCharItemsCtrl = {}
|
||||
self.animator = self.gameObject:GetComponent("Animator")
|
||||
end
|
||||
function SoldierSelectStrategyCardItemCtrl:OnEnable()
|
||||
local tbParam = self:GetPanelParam()
|
||||
if type(tbParam) == "table" and tbParam[1] ~= nil then
|
||||
self:SetData(tbParam[1])
|
||||
end
|
||||
self.animator:Play("SoldierSelectStarterCardItem_in")
|
||||
end
|
||||
function SoldierSelectStrategyCardItemCtrl:OnDisable()
|
||||
self:_ClearCharItems()
|
||||
end
|
||||
function SoldierSelectStrategyCardItemCtrl:OnDestroy()
|
||||
end
|
||||
function SoldierSelectStrategyCardItemCtrl:SetData(nStrategyCardId)
|
||||
local strategyCardConfig = ConfigTable.GetData("SoldierStrategyCard", nStrategyCardId)
|
||||
self._mapNode.imgBg_Gold:SetActive(strategyCardConfig.Rarity == GameEnum.itemRarity.R)
|
||||
self._mapNode.imgBg_Silver:SetActive(strategyCardConfig.Rarity == GameEnum.itemRarity.M)
|
||||
self._mapNode.imgBg_Copper:SetActive(strategyCardConfig.Rarity == GameEnum.itemRarity.N)
|
||||
self:SetPngSprite(self._mapNode.img_Selecticon, iconCardPath .. strategyCardConfig.Icon)
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_name, strategyCardConfig.Name)
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_desc, UTILS.ParseDesc(strategyCardConfig))
|
||||
self.tbCharList = strategyCardConfig.CharacterShow or {}
|
||||
local bHasChar = #self.tbCharList > 0
|
||||
self._mapNode.txt_charTitle.gameObject:SetActive(bHasChar)
|
||||
self._mapNode.sv_char.gameObject:SetActive(bHasChar)
|
||||
if bHasChar then
|
||||
self:_RefreshCharItems(self.tbCharList)
|
||||
end
|
||||
end
|
||||
function SoldierSelectStrategyCardItemCtrl:_RefreshCharItems(tbCharIds)
|
||||
for k, charId in ipairs(tbCharIds) do
|
||||
local itemCtrl = self.tbCharItemsCtrl[k]
|
||||
if itemCtrl == nil then
|
||||
local go = instantiate(self._mapNode.goChar, self._mapNode.CharContent)
|
||||
itemCtrl = self:BindCtrlByNode(go, "Game.UI.Soldier.Template.Character.SoldierCharItemCtrl")
|
||||
table.insert(self.tbCharItemsCtrl, itemCtrl)
|
||||
end
|
||||
itemCtrl.gameObject:SetActive(true)
|
||||
itemCtrl:SetItemData(charId)
|
||||
end
|
||||
end
|
||||
function SoldierSelectStrategyCardItemCtrl:_ClearCharItems()
|
||||
for _, ctrl in ipairs(self.tbCharItemsCtrl) do
|
||||
local obj = ctrl.gameObject
|
||||
self:UnbindCtrlByNode(ctrl)
|
||||
destroy(obj)
|
||||
end
|
||||
self.tbCharItemsCtrl = {}
|
||||
end
|
||||
function SoldierSelectStrategyCardItemCtrl:OnCharGridBtnClick(_goGrid, _gridIndex)
|
||||
end
|
||||
function SoldierSelectStrategyCardItemCtrl:OnBtnClick_Close()
|
||||
self.animator:Play("SoldierSelectStarterCardItem_out")
|
||||
local callback = function()
|
||||
EventManager.Hit(EventId.ClosePanel, PanelId.SoldierSelectStrategyCardItem)
|
||||
end
|
||||
self:AddTimer(1, 0.3, callback, true, true, true)
|
||||
EventManager.Hit(EventId.TemporaryBlockInput, 0.3)
|
||||
end
|
||||
function SoldierSelectStrategyCardItemCtrl:OnBtnClick_Word(link, sWordId)
|
||||
UTILS.ClickWordLink(link, sWordId)
|
||||
end
|
||||
return SoldierSelectStrategyCardItemCtrl
|
||||
@@ -0,0 +1,22 @@
|
||||
local SoldierSelectStrategyCardItemPanel = class("SoldierSelectStrategyCardItemPanel", BasePanel)
|
||||
SoldierSelectStrategyCardItemPanel._bIsMainPanel = false
|
||||
SoldierSelectStrategyCardItemPanel._sSortingLayerName = AllEnum.SortingLayerName.UI
|
||||
SoldierSelectStrategyCardItemPanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "Soldier/Tips/SoldierSelectStrategyCardItem.prefab",
|
||||
sCtrlName = "Game.UI.Soldier.Handbook.SoldierSelectStrategyCardItemCtrl"
|
||||
}
|
||||
}
|
||||
function SoldierSelectStrategyCardItemPanel:Awake()
|
||||
end
|
||||
function SoldierSelectStrategyCardItemPanel:OnEnable()
|
||||
end
|
||||
function SoldierSelectStrategyCardItemPanel:OnAfterEnter()
|
||||
end
|
||||
function SoldierSelectStrategyCardItemPanel:OnDisable()
|
||||
end
|
||||
function SoldierSelectStrategyCardItemPanel:OnDestroy()
|
||||
end
|
||||
function SoldierSelectStrategyCardItemPanel:OnRelease()
|
||||
end
|
||||
return SoldierSelectStrategyCardItemPanel
|
||||
@@ -0,0 +1,37 @@
|
||||
local SoldierPartnerTipsCardItemCtrl = class("SoldierPartnerTipsCardItemCtrl", BaseCtrl)
|
||||
SoldierPartnerTipsCardItemCtrl._mapNodeConfig = {
|
||||
btnItem = {
|
||||
sNodeName = "tc_char_small",
|
||||
callback = "OnBtnClick_CharItem"
|
||||
},
|
||||
goCharItem = {
|
||||
sNodeName = "tc_char_small",
|
||||
sCtrlName = "Game.UI.Soldier.Template.Character.SoldierCharItemCtrl"
|
||||
},
|
||||
imgSelect = {},
|
||||
imgMask = {},
|
||||
imgInBattle = {}
|
||||
}
|
||||
SoldierPartnerTipsCardItemCtrl._mapEventConfig = {}
|
||||
SoldierPartnerTipsCardItemCtrl._mapRedDotConfig = {}
|
||||
function SoldierPartnerTipsCardItemCtrl:Awake()
|
||||
end
|
||||
function SoldierPartnerTipsCardItemCtrl:OnEnable()
|
||||
end
|
||||
function SoldierPartnerTipsCardItemCtrl:OnDisable()
|
||||
end
|
||||
function SoldierPartnerTipsCardItemCtrl:OnDestroy()
|
||||
end
|
||||
function SoldierPartnerTipsCardItemCtrl:OnRefresh(nCharId, bActive, bHave)
|
||||
self._nCharId = nCharId
|
||||
self._mapNode.imgInBattle:SetActive(bActive == true)
|
||||
self._mapNode.imgMask:SetActive(bActive ~= true)
|
||||
self._mapNode.goCharItem:SetItemData(nCharId)
|
||||
self:SetCharSelect(false)
|
||||
end
|
||||
function SoldierPartnerTipsCardItemCtrl:SetCharSelect(bSelect)
|
||||
self._mapNode.imgSelect.gameObject:SetActive(bSelect)
|
||||
end
|
||||
function SoldierPartnerTipsCardItemCtrl:OnBtnClick_CharItem()
|
||||
end
|
||||
return SoldierPartnerTipsCardItemCtrl
|
||||
@@ -0,0 +1,302 @@
|
||||
local SoldierAttrData = require("GameCore.Data.DataClass.Soldier.SoldierAttrData")
|
||||
local CommonTipsBaseCtrl = require("Game.UI.CommonTipsEx.CommonTipsBaseCtrl")
|
||||
local SoldierPartnerTipsCtrl = class("SoldierPartnerTipsCtrl", CommonTipsBaseCtrl)
|
||||
SoldierPartnerTipsCtrl._mapNodeConfig = {
|
||||
btnCloseTips = {
|
||||
sComponentName = "Button",
|
||||
callback = "OnBtnClick_ClosePanel"
|
||||
},
|
||||
rtContent = {
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
safeAreaRoot = {
|
||||
sNodeName = "----SafeAreaRoot----",
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
TipsContent = {
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
imgTipsBg = {
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
ScrollView = {sComponentName = "ScrollRect"},
|
||||
rtDescContent = {
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
srDesc = {
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
goCharItem = {sComponentName = "Transform"},
|
||||
goEffectItem = {sComponentName = "Transform"},
|
||||
imgPartnerBg = {sComponentName = "Image"},
|
||||
imgPartnerIcon = {sComponentName = "Image"},
|
||||
txtPartnerName = {sComponentName = "TMP_Text"},
|
||||
btnTrace = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Trace"
|
||||
},
|
||||
btnCancel = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Trace"
|
||||
},
|
||||
txtPartnerDesc = {sComponentName = "TMP_Text"},
|
||||
TMP_Link = {
|
||||
sNodeName = "txtPartnerDesc",
|
||||
sComponentName = "TMPHyperLink",
|
||||
callback = "OnLinkClick_Word"
|
||||
},
|
||||
btnShortcutClose = {
|
||||
sComponentName = "NaviButton",
|
||||
callback = "OnBtnClick_ClosePanel"
|
||||
},
|
||||
btnCloseWordTip = {
|
||||
sComponentName = "Button",
|
||||
callback = "OnBtnClick_CloseWord"
|
||||
},
|
||||
imgWordTipBg = {},
|
||||
TMPWordDesc = {sComponentName = "TMP_Text"},
|
||||
TMPWordTipsTitle = {sComponentName = "TMP_Text"},
|
||||
partner_desc = {nCount = 5},
|
||||
go_Char = {
|
||||
sNodeName = "tc_char_small",
|
||||
sComponentName = "Transform"
|
||||
},
|
||||
goPartnerTitle = {
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
charDetialRoot = {sComponentName = "Transform"},
|
||||
txtBtnTrace = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Solider_Trace"
|
||||
},
|
||||
txtBtnCancel = {sComponentName = "TMP_Text", sLanguageId = "BtnCancel"},
|
||||
imgBG = {sNodeName = "----BG----", sComponentName = "Image"}
|
||||
}
|
||||
SoldierPartnerTipsCtrl._mapEventConfig = {
|
||||
OnSetParnterTipsPosition = "OnEvent_SetParnterTipsPosition",
|
||||
SoldierCharTips_ShowBg = "OnEvent_ShowBg"
|
||||
}
|
||||
SoldierPartnerTipsCtrl._mapRedDotConfig = {}
|
||||
local iconPartnerPath = "Icon/SoldierPartner/"
|
||||
local RootPath = "Icon/SoldierOtherIcon/"
|
||||
local contentHeight = 882
|
||||
SoldierPartnerTipsCtrl.minTipHeight = 59.13
|
||||
SoldierPartnerTipsCtrl.maxTipHeight = 896
|
||||
function SoldierPartnerTipsCtrl:Awake()
|
||||
local tbParam = self:GetPanelParam()
|
||||
if type(tbParam) == "table" then
|
||||
self.rtTarget = tbParam[1]
|
||||
self.partnerType = tbParam[2]
|
||||
self.activityLevel = tbParam[3]
|
||||
self.bTrace = tbParam[4]
|
||||
self.tbChars = tbParam[5]
|
||||
self.bCanCheckCharTips = tbParam[6] or true
|
||||
end
|
||||
self._tbCharItemCtrl = {}
|
||||
end
|
||||
function SoldierPartnerTipsCtrl:OnEnable()
|
||||
self._mapNode.btnCloseWordTip.gameObject:SetActive(false)
|
||||
self._mapNode.imgWordTipBg:SetActive(false)
|
||||
self._mapNode.btnTrace.gameObject:SetActive(not self.bTrace and self.tbChars == nil)
|
||||
self._mapNode.btnCancel.gameObject:SetActive(self.bTrace and self.tbChars == nil)
|
||||
self:EnableGamepadUI(self._mapNode.btnShortcutClose, true)
|
||||
self:RefreshPanel()
|
||||
local wait = function()
|
||||
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
||||
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
||||
if self._mapNode == nil then
|
||||
return
|
||||
end
|
||||
local nContentHeight = self._mapNode.rtDescContent.sizeDelta.y
|
||||
if nContentHeight > self.maxTipHeight then
|
||||
nContentHeight = self.maxTipHeight
|
||||
NovaAPI.SetScrollRectVertical(self._mapNode.ScrollView, true)
|
||||
end
|
||||
if nContentHeight < self.minTipHeight then
|
||||
nContentHeight = self.minTipHeight
|
||||
NovaAPI.SetScrollRectVertical(self._mapNode.ScrollView, false)
|
||||
end
|
||||
self._mapNode.srDesc.sizeDelta = Vector2(self._mapNode.srDesc.sizeDelta.x, nContentHeight)
|
||||
nContentHeight = nContentHeight + self._mapNode.goPartnerTitle.sizeDelta.y + 20
|
||||
local nTipsBgHeight = nContentHeight + 10
|
||||
self._mapNode.imgTipsBg.sizeDelta = Vector2(self._mapNode.imgTipsBg.sizeDelta.x, nTipsBgHeight)
|
||||
if nTipsBgHeight < contentHeight then
|
||||
local nDiff = contentHeight - nTipsBgHeight
|
||||
local rtTargetRect = self.rtTarget:GetComponent("RectTransform")
|
||||
local anchoredPos = rtTargetRect.anchoredPosition
|
||||
self._tbTargetOriginPos = anchoredPos
|
||||
rtTargetRect.anchoredPosition = Vector2(anchoredPos.x, anchoredPos.y + nDiff)
|
||||
end
|
||||
self:SetTipsPosition(self.rtTarget, self._mapNode.rtContent, self._mapNode.safeAreaRoot)
|
||||
if self.bSetTipsPos ~= true then
|
||||
self._mapNode.charDetialRoot.position = self._mapNode.imgTipsBg.position
|
||||
end
|
||||
end
|
||||
cs_coroutine.start(wait)
|
||||
end
|
||||
function SoldierPartnerTipsCtrl:OnDisable()
|
||||
self:DisableGamepadUI()
|
||||
if self._tbTargetOriginPos ~= nil and self.rtTarget ~= nil then
|
||||
local rtTargetRect = self.rtTarget:GetComponent("RectTransform")
|
||||
rtTargetRect.anchoredPosition = self._tbTargetOriginPos
|
||||
self._tbTargetOriginPos = nil
|
||||
end
|
||||
end
|
||||
function SoldierPartnerTipsCtrl:RefreshPanel()
|
||||
self:RefreshTitle()
|
||||
self:RefreshLevelItems()
|
||||
self:RefreshCharItems()
|
||||
end
|
||||
function SoldierPartnerTipsCtrl:RefreshTitle()
|
||||
local partnerGroupCfg = CacheTable.GetData("_SoldierPartnerGroup", self.partnerType)
|
||||
self:SetPngSprite(self._mapNode.imgPartnerIcon, iconPartnerPath .. partnerGroupCfg.Icon .. "_M")
|
||||
local tbAttrData = SoldierAttrData.GetPartnerLevelsByType(self.partnerType)
|
||||
local level = math.max(1, self.activityLevel)
|
||||
local mapCfg = ConfigTable.GetData("SoldierPartner", tbAttrData[level].nConfigId)
|
||||
if mapCfg == nil then
|
||||
return
|
||||
end
|
||||
local sPath = self.activityLevel > 0 and RootPath .. AllEnum.SoldierPartnerLevelIcon[mapCfg.PartnerLevelQuality].bg or RootPath .. AllEnum.SoldierPartnerLevelIcon[GameEnum.PartnerLevelQuality.None].bg
|
||||
self:SetPngSprite(self._mapNode.imgPartnerBg, sPath)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtPartnerName, partnerGroupCfg.Name)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtPartnerDesc, partnerGroupCfg.Desc)
|
||||
end
|
||||
function SoldierPartnerTipsCtrl:RefreshLevelItems()
|
||||
local tbAttrData = SoldierAttrData.GetPartnerLevelsByType(self.partnerType)
|
||||
for i = 1, 5 do
|
||||
self._mapNode.partner_desc[i].gameObject:SetActive(tbAttrData[i] ~= nil)
|
||||
if tbAttrData[i] ~= nil then
|
||||
local canvasGroup = self._mapNode.partner_desc[i]:GetComponent("CanvasGroup")
|
||||
local imgEffectLv = self._mapNode.partner_desc[i].transform:Find("imgEffectLv"):GetComponent("Image")
|
||||
local txtEffectDesc = self._mapNode.partner_desc[i].transform:Find("txtEffectDesc"):GetComponent("TMP_Text")
|
||||
local txt_level = self._mapNode.partner_desc[i].transform:Find("imgEffectLv/txt_level"):GetComponent("TMP_Text")
|
||||
local mapCfg = ConfigTable.GetData("SoldierPartner", tbAttrData[i].nConfigId)
|
||||
if mapCfg == nil then
|
||||
return
|
||||
end
|
||||
self:SetPngSprite(imgEffectLv, RootPath .. AllEnum.SoldierPartnerLevelIcon[mapCfg.PartnerLevelQuality].levelIcon)
|
||||
NovaAPI.SetTMPText(txtEffectDesc, mapCfg.Desc)
|
||||
NovaAPI.SetTMPText(txt_level, mapCfg.Num)
|
||||
NovaAPI.SetCanvasGroupAlpha(canvasGroup, i == self.activityLevel and 1 or 0.5)
|
||||
end
|
||||
end
|
||||
end
|
||||
function SoldierPartnerTipsCtrl:RefreshCharItems()
|
||||
self._mapNode.go_Char.gameObject:SetActive(false)
|
||||
local partnerGroupCfg = CacheTable.GetData("_SoldierPartnerGroup", self.partnerType)
|
||||
if partnerGroupCfg == nil then
|
||||
return
|
||||
end
|
||||
local tbChars = {}
|
||||
for k, v in ipairs(partnerGroupCfg.ChessCharacterIds) do
|
||||
table.insert(tbChars, v)
|
||||
end
|
||||
table.sort(tbChars, function(a, b)
|
||||
local charCfgA = ConfigTable.GetData("SoldierCharacter", a)
|
||||
local charCfgB = ConfigTable.GetData("SoldierCharacter", b)
|
||||
if charCfgA.Rarity ~= charCfgB.Rarity then
|
||||
return charCfgA.Rarity > charCfgB.Rarity
|
||||
end
|
||||
return a < b
|
||||
end)
|
||||
for i = 1, #tbChars do
|
||||
if self._tbCharItemCtrl[i] ~= nil then
|
||||
self:RefreshCharInfo(self._tbCharItemCtrl[i].itemCtrl, tbChars[i], self._tbCharItemCtrl[i].goItem)
|
||||
self._tbCharItemCtrl[i].goItem.gameObject:SetActive(true)
|
||||
else
|
||||
local charItem = instantiate(self._mapNode.go_Char, self._mapNode.goCharItem)
|
||||
local charItemCtrl = self:BindCtrlByNode(charItem, "Game.UI.Soldier.Template.Character.SoldierCharItemCtrl")
|
||||
self:RefreshCharInfo(charItemCtrl, tbChars[i], charItem)
|
||||
charItem.gameObject:SetActive(true)
|
||||
table.insert(self._tbCharItemCtrl, {itemCtrl = charItemCtrl, goItem = charItem})
|
||||
end
|
||||
end
|
||||
for i = #tbChars + 1, #self._tbCharItemCtrl do
|
||||
if self._tbCharItemCtrl[i] ~= nil then
|
||||
self._tbCharItemCtrl[i].goItem.gameObject:SetActive(false)
|
||||
end
|
||||
end
|
||||
end
|
||||
function SoldierPartnerTipsCtrl:RefreshCharInfo(itemCtrl, charId, goChar)
|
||||
local tbDeployChess = {}
|
||||
local tbWaitingChess = {}
|
||||
if self.tbChars == nil or #self.tbChars <= 0 then
|
||||
local curLevelData = PlayerData.SoldierData:GetCurLevelData()
|
||||
if curLevelData ~= nil then
|
||||
tbDeployChess, tbWaitingChess = curLevelData:GetDeploy()
|
||||
end
|
||||
else
|
||||
tbDeployChess = self.tbChars
|
||||
end
|
||||
local bInBattle = false
|
||||
local bInWaiting = false
|
||||
local nStar = 0
|
||||
itemCtrl:SetItemData(charId)
|
||||
for _, char in ipairs(tbDeployChess) do
|
||||
if char.nId == charId then
|
||||
bInBattle = true
|
||||
nStar = math.max(nStar, char.nStar)
|
||||
break
|
||||
end
|
||||
end
|
||||
for _, char in ipairs(tbWaitingChess) do
|
||||
if char.nId == charId then
|
||||
bInWaiting = true
|
||||
nStar = math.max(nStar, char.nStar)
|
||||
break
|
||||
end
|
||||
end
|
||||
itemCtrl:SetItemState(bInBattle, not bInWaiting and not bInBattle)
|
||||
itemCtrl:SetCharLevel(nStar)
|
||||
if self.bCanCheckCharTips then
|
||||
itemCtrl:SetCharItemBtnFunc(function()
|
||||
local chessData = {
|
||||
nPositionType = self.partnerType,
|
||||
nId = charId,
|
||||
nStar = math.max(nStar, 1)
|
||||
}
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierCharCardTips, self._mapNode.charDetialRoot, chessData)
|
||||
EventManager.Hit("OnSetTipsPosition", self.skillTipsPos, self.potentialTipsPos, self.partnerTipsPos)
|
||||
end)
|
||||
end
|
||||
end
|
||||
function SoldierPartnerTipsCtrl:OnBtnClick_ClosePanel()
|
||||
EventManager.Hit(EventId.ClosePanel, PanelId.SoldierPartnerTips)
|
||||
end
|
||||
function SoldierPartnerTipsCtrl:OnBtnClick_Trace()
|
||||
local callback = function()
|
||||
self.bTrace = not self.bTrace
|
||||
self._mapNode.btnTrace.gameObject:SetActive(not self.bTrace)
|
||||
self._mapNode.btnCancel.gameObject:SetActive(self.bTrace)
|
||||
end
|
||||
local curLevelData = PlayerData.SoldierData:GetCurLevelData()
|
||||
if curLevelData ~= nil then
|
||||
curLevelData:SetPartnerTrace(self.partnerType, not self.bTrace, callback)
|
||||
end
|
||||
end
|
||||
function SoldierPartnerTipsCtrl:OnBtnClick_CloseWord(btn)
|
||||
self._mapNode.btnCloseWordTip.gameObject:SetActive(false)
|
||||
self._mapNode.imgWordTipBg:SetActive(false)
|
||||
end
|
||||
function SoldierPartnerTipsCtrl:OnLinkClick_Word(link, sWordId)
|
||||
UTILS.ClickWordLink(link, sWordId)
|
||||
end
|
||||
function SoldierPartnerTipsCtrl:OnEvent_ShowBg()
|
||||
self._mapNode.imgBG.enabled = true
|
||||
end
|
||||
function SoldierPartnerTipsCtrl:OnEvent_SetParnterTipsPosition(charTipsPos, skillTipsPos, pontentialTipsPos, partnerTipsPos)
|
||||
self.bSetTipsPos = true
|
||||
if charTipsPos ~= nil and self._mapNode.charDetialRoot ~= nil then
|
||||
self._mapNode.charDetialRoot.position = charTipsPos
|
||||
end
|
||||
if skillTipsPos ~= nil then
|
||||
self.skillTipsPos = skillTipsPos
|
||||
end
|
||||
if pontentialTipsPos ~= nil then
|
||||
self.potentialTipsPos = pontentialTipsPos
|
||||
end
|
||||
if partnerTipsPos ~= nil then
|
||||
self.partnerTipsPos = partnerTipsPos
|
||||
end
|
||||
end
|
||||
return SoldierPartnerTipsCtrl
|
||||
@@ -0,0 +1,37 @@
|
||||
local SoldierPartnerTipsDesItemCtrl = class("SoldierPartnerTipsDesItemCtrl", BaseCtrl)
|
||||
SoldierPartnerTipsDesItemCtrl._mapNodeConfig = {
|
||||
imgEffectLv = {sComponentName = "Image"},
|
||||
btnImgEffectLv = {
|
||||
sNodeName = "imgEffectLv",
|
||||
sComponentName = "Button"
|
||||
},
|
||||
txtEffectDesc = {sComponentName = "TMP_Text"}
|
||||
}
|
||||
SoldierPartnerTipsDesItemCtrl._mapEventConfig = {}
|
||||
SoldierPartnerTipsDesItemCtrl._mapRedDotConfig = {}
|
||||
local COLOR_ACTIVE_HEX = "#5fdc6e"
|
||||
local COLOR_INACTIVE_HEX = "#9b3a3a"
|
||||
local iconPath = "Icon/SoldierOtherIcon/"
|
||||
function SoldierPartnerTipsDesItemCtrl:Awake()
|
||||
end
|
||||
function SoldierPartnerTipsDesItemCtrl:OnEnable()
|
||||
end
|
||||
function SoldierPartnerTipsDesItemCtrl:OnDisable()
|
||||
end
|
||||
function SoldierPartnerTipsDesItemCtrl:OnDestroy()
|
||||
end
|
||||
function SoldierPartnerTipsDesItemCtrl:OnRefresh(cfg, bActive)
|
||||
if cfg == nil then
|
||||
return
|
||||
end
|
||||
self._mapCfg = cfg
|
||||
local iconCfg = AllEnum.SoldierPartnerLevelIcon[self._mapCfg.PartnerLevelQuality]
|
||||
if iconCfg ~= nil then
|
||||
local sPath = iconPath .. iconCfg.levelIcon
|
||||
self:SetPngSprite(self._mapNode.imgEffectLv, sPath)
|
||||
end
|
||||
local sHex = bActive and COLOR_ACTIVE_HEX or COLOR_INACTIVE_HEX
|
||||
NovaAPI.SetTMPText(self._mapNode.txtEffectDesc, string.format("<color=%s>%s</color>", sHex, cfg.Desc))
|
||||
self._mapNode.btnImgEffectLv.interactable = bActive == true
|
||||
end
|
||||
return SoldierPartnerTipsDesItemCtrl
|
||||
@@ -0,0 +1,24 @@
|
||||
local BasePanel = require("GameCore.UI.BasePanel")
|
||||
local SoldierPartnerTipsPanel = class("SoldierPartnerTipsPanel", BasePanel)
|
||||
SoldierPartnerTipsPanel._bIsMainPanel = false
|
||||
SoldierPartnerTipsPanel._sSortingLayerName = AllEnum.SortingLayerName.UI
|
||||
SoldierPartnerTipsPanel._sSortingLayerName = AllEnum.SortingLayerName.UI_Top
|
||||
SoldierPartnerTipsPanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "Soldier/Tips/SoldierPartnerTipsPanel.prefab",
|
||||
sCtrlName = "Game.UI.Soldier.PartnerTipsPanel.SoldierPartnerTipsCtrl"
|
||||
}
|
||||
}
|
||||
function SoldierPartnerTipsPanel:Awake()
|
||||
end
|
||||
function SoldierPartnerTipsPanel:OnEnable()
|
||||
end
|
||||
function SoldierPartnerTipsPanel:OnAfterEnter()
|
||||
end
|
||||
function SoldierPartnerTipsPanel:OnDisable()
|
||||
end
|
||||
function SoldierPartnerTipsPanel:OnDestroy()
|
||||
end
|
||||
function SoldierPartnerTipsPanel:OnRelease()
|
||||
end
|
||||
return SoldierPartnerTipsPanel
|
||||
@@ -0,0 +1,98 @@
|
||||
local SoldierRecommendCellCtrl = class("SoldierRecommendCellCtrl", BaseCtrl)
|
||||
SoldierRecommendCellCtrl._mapNodeConfig = {
|
||||
txt_title = {sComponentName = "TMP_Text"},
|
||||
sv_char = {
|
||||
sComponentName = "LoopScrollView"
|
||||
},
|
||||
img_Char = {sComponentName = "Image"},
|
||||
btn_Apply = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Apply"
|
||||
},
|
||||
txt_Apply = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Recommend_Apply"
|
||||
},
|
||||
btn_Cancel = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Cancel"
|
||||
},
|
||||
txt_Cancel = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Recommend_Cancel"
|
||||
},
|
||||
img_Use = {},
|
||||
txt_Use = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Recommend_Use"
|
||||
}
|
||||
}
|
||||
SoldierRecommendCellCtrl._mapEventConfig = {
|
||||
SoldierRecommend_Update = "OnEvent_SoldierRecommendCell_Update"
|
||||
}
|
||||
SoldierRecommendCellCtrl._mapRedDotConfig = {}
|
||||
function SoldierRecommendCellCtrl:Awake()
|
||||
self.tbCharItemCtrl = {}
|
||||
end
|
||||
function SoldierRecommendCellCtrl:OnEnable()
|
||||
end
|
||||
function SoldierRecommendCellCtrl:OnDisable()
|
||||
for _, v in ipairs(self.tbCharItemCtrl) do
|
||||
self:UnbindCtrlByNode(v)
|
||||
end
|
||||
self.tbCharItemCtrl = nil
|
||||
end
|
||||
function SoldierRecommendCellCtrl:OnDestroy()
|
||||
end
|
||||
function SoldierRecommendCellCtrl:SetItemData(mapRecommendData, bInSoldier)
|
||||
self.bInSoldier = bInSoldier
|
||||
self.mapRecommendData = mapRecommendData
|
||||
self.cfg = ConfigTable.GetData("SoldierRecommendBuilds", self.mapRecommendData.nRecommendId)
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_title, self.cfg.Title)
|
||||
local nMainCharId = self.cfg.CharacterId
|
||||
local mainCharCfg = ConfigTable.GetData("SoldierCharacter", nMainCharId)
|
||||
if mainCharCfg ~= nil then
|
||||
local skinConfig = ConfigTable.GetData("SoldierSkin", mainCharCfg.Skin)
|
||||
if skinConfig then
|
||||
self:SetPngSprite(self._mapNode.img_Char, skinConfig.Icon .. AllEnum.SoldierChessIconSurfix.S)
|
||||
end
|
||||
end
|
||||
self._mapNode.sv_char:Init(#self.mapRecommendData.charList, self, self.OnCharRefreshGrid, self.OnCharGridBtnClick, false)
|
||||
self:SetApplyStatus()
|
||||
end
|
||||
function SoldierRecommendCellCtrl:OnCharRefreshGrid(goGrid, gridIndex)
|
||||
local nIndex = gridIndex + 1
|
||||
local charData = self.mapRecommendData.charList[nIndex]
|
||||
local go_char = goGrid.transform:Find("AnimRoot/SoldierCharCardItem")
|
||||
local nInstanceId = go_char:GetInstanceID()
|
||||
if not self.tbCharItemCtrl[nInstanceId] then
|
||||
self.tbCharItemCtrl[nInstanceId] = self:BindCtrlByNode(go_char, "Game.UI.Soldier.Template.Character.SoldierCharCardItemCtrl")
|
||||
end
|
||||
self.tbCharItemCtrl[nInstanceId]:SetItemData(charData.nId)
|
||||
self.tbCharItemCtrl[nInstanceId]:SetStar(charData.nStar)
|
||||
self.tbCharItemCtrl[nInstanceId]:SetAttribute(nIndex)
|
||||
end
|
||||
function SoldierRecommendCellCtrl:SetApplyStatus()
|
||||
local bApply = false
|
||||
local recommendData = PlayerData.SoldierData:GetRecommendData(self.bInSoldier)
|
||||
if recommendData ~= nil and recommendData.nRecommendId == self.mapRecommendData.nRecommendId then
|
||||
bApply = true
|
||||
end
|
||||
self._mapNode.btn_Apply.gameObject:SetActive(not bApply)
|
||||
self._mapNode.btn_Cancel.gameObject:SetActive(bApply)
|
||||
self._mapNode.img_Use.gameObject:SetActive(bApply)
|
||||
end
|
||||
function SoldierRecommendCellCtrl:OnCharGridBtnClick(goGrid, gridIndex)
|
||||
local nIndex = gridIndex + 1
|
||||
local charId = self.mapRecommendData.charList[nIndex].nId
|
||||
end
|
||||
function SoldierRecommendCellCtrl:OnBtnClick_Apply()
|
||||
PlayerData.SoldierData:SetRecommendData(self.mapRecommendData.nRecommendId, self.bInSoldier)
|
||||
end
|
||||
function SoldierRecommendCellCtrl:OnBtnClick_Cancel()
|
||||
PlayerData.SoldierData:SetRecommendData(0, self.bInSoldier)
|
||||
end
|
||||
function SoldierRecommendCellCtrl:OnEvent_SoldierRecommendCell_Update()
|
||||
self:SetApplyStatus()
|
||||
end
|
||||
return SoldierRecommendCellCtrl
|
||||
@@ -0,0 +1,84 @@
|
||||
local SoldierRecommendCtrl = class("SoldierRecommendCtrl", BaseCtrl)
|
||||
SoldierRecommendCtrl._mapNodeConfig = {
|
||||
Topbar = {
|
||||
sNodeName = "TopBarPanel",
|
||||
sCtrlName = "Game.UI.TopBarEx.TopBarCtrl"
|
||||
},
|
||||
btnHome = {},
|
||||
txt_tips = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Recommend_Tips"
|
||||
},
|
||||
sv_recommend = {
|
||||
sComponentName = "LoopScrollView"
|
||||
}
|
||||
}
|
||||
SoldierRecommendCtrl._mapEventConfig = {}
|
||||
SoldierRecommendCtrl._mapRedDotConfig = {}
|
||||
function SoldierRecommendCtrl:Awake()
|
||||
local param = self:GetPanelParam()
|
||||
if type(param) == "table" then
|
||||
self.bInSoldier = param[1]
|
||||
end
|
||||
self.bInSoldier = self.bInSoldier or false
|
||||
self.animator = self.gameObject:GetComponent("Animator")
|
||||
end
|
||||
function SoldierRecommendCtrl:OnEnable()
|
||||
self.tbRecommendCellCtrl = {}
|
||||
self.tbRecommendData = {}
|
||||
self:InitData()
|
||||
EventManager.Hit("SoldierRecommendPanel_Open")
|
||||
local wait = function()
|
||||
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
||||
self._mapNode.btnHome.gameObject:SetActive(not self.bInSoldier)
|
||||
end
|
||||
cs_coroutine.start(wait)
|
||||
end
|
||||
function SoldierRecommendCtrl:OnDisable()
|
||||
for _, v in ipairs(self.tbRecommendCellCtrl) do
|
||||
self:UnbindCtrlByNode(v)
|
||||
end
|
||||
self.tbRecommendCellCtrl = nil
|
||||
EventManager.Hit("SoldierRecommendPanel_Close")
|
||||
end
|
||||
function SoldierRecommendCtrl:InitData()
|
||||
local tbRecommendData = PlayerData.SoldierData:GetAllRecommendData()
|
||||
if tbRecommendData == nil then
|
||||
return
|
||||
end
|
||||
for _, v in ipairs(tbRecommendData) do
|
||||
table.insert(self.tbRecommendData, v)
|
||||
end
|
||||
local nApplyData = PlayerData.SoldierData:GetRecommendData(self.bInSoldier)
|
||||
if nApplyData ~= nil then
|
||||
table.sort(self.tbRecommendData, function(a, b)
|
||||
if a.nRecommendId == nApplyData.nRecommendId then
|
||||
return true
|
||||
end
|
||||
if b.nRecommendId == nApplyData.nRecommendId then
|
||||
return false
|
||||
end
|
||||
return a.nRecommendId < b.nRecommendId
|
||||
end)
|
||||
end
|
||||
self._mapNode.sv_recommend:SetAnim(0.08)
|
||||
self._mapNode.sv_recommend:Init(#self.tbRecommendData, self, self.OnRecommendRefreshGrid, self.OnRecommendGridBtnClick, false)
|
||||
end
|
||||
function SoldierRecommendCtrl:OnRecommendRefreshGrid(goGrid, gridIndex)
|
||||
local nIndex = gridIndex + 1
|
||||
local mapRecommendData = self.tbRecommendData[nIndex]
|
||||
local nInstanceID = goGrid:GetInstanceID()
|
||||
if not self.tbRecommendCellCtrl[nInstanceID] then
|
||||
self.tbRecommendCellCtrl[nInstanceID] = self:BindCtrlByNode(goGrid, "Game.UI.Soldier.Recommend.SoldierRecommendCellCtrl")
|
||||
end
|
||||
self.tbRecommendCellCtrl[nInstanceID]:SetItemData(mapRecommendData, self.bInSoldier)
|
||||
end
|
||||
function SoldierRecommendCtrl:OnRecommendGridBtnClick(goGrid, gridIndex)
|
||||
local nIndex = gridIndex + 1
|
||||
local mapRecommendData = self.tbRecommendData[nIndex]
|
||||
self.animator:Play("SoldierRecommendPanel_out")
|
||||
self:AddTimer(1, 0.26, function()
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierRecommendDetailPanel, mapRecommendData, self.bInSoldier)
|
||||
end, true, true, true)
|
||||
end
|
||||
return SoldierRecommendCtrl
|
||||
@@ -0,0 +1,217 @@
|
||||
local SoldierRecommendDetailCtrl = class("SoldierRecommendDetailCtrl", BaseCtrl)
|
||||
local iconPath = "Icon/SoldierBuffCard/"
|
||||
local iconPath2 = "Icon/SoldierOtherIcon/"
|
||||
SoldierRecommendDetailCtrl._mapNodeConfig = {
|
||||
Topbar = {
|
||||
sNodeName = "TopBarPanel",
|
||||
sCtrlName = "Game.UI.TopBarEx.TopBarCtrl"
|
||||
},
|
||||
btnHome = {},
|
||||
img_Use = {},
|
||||
txt_Use = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Recommend_Use"
|
||||
},
|
||||
MainChar = {
|
||||
nCount = 3,
|
||||
sCtrlName = "Game.UI.Soldier.Template.Character.SoldierCharSupportCardItemCtrl"
|
||||
},
|
||||
BackChar = {
|
||||
nCount = 6,
|
||||
sCtrlName = "Game.UI.Soldier.Template.Character.SoldierCharSupportCardItemCtrl"
|
||||
},
|
||||
txt_title = {sComponentName = "TMP_Text"},
|
||||
txt_buildTitle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Recommend_BuildTitle"
|
||||
},
|
||||
txt_skillTitle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_RecommendDetail_Tips"
|
||||
},
|
||||
txt_desc = {sComponentName = "TMP_Text"},
|
||||
img_pos = {nCount = 3, sComponentName = "Image"},
|
||||
partnerCtrl = {
|
||||
sNodeName = "PartnerRoot",
|
||||
sCtrlName = "Game.UI.Soldier.Recommend.SpliderRecommendPartnerCtrl"
|
||||
},
|
||||
starterCard = {},
|
||||
strategyCardPrefab = {},
|
||||
buffList = {
|
||||
sNodeName = "BuffListRoot"
|
||||
},
|
||||
btn_Apply = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Apply"
|
||||
},
|
||||
txt_Apply = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Recommend_Apply"
|
||||
},
|
||||
btn_Cancel = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Cancel"
|
||||
},
|
||||
txt_Cancel = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Recommend_Cancel"
|
||||
},
|
||||
charDetialRoot = {sComponentName = "Transform"},
|
||||
parnterDetialRoot = {sComponentName = "Transform"}
|
||||
}
|
||||
SoldierRecommendDetailCtrl._mapEventConfig = {}
|
||||
SoldierRecommendDetailCtrl._mapRedDotConfig = {}
|
||||
function SoldierRecommendDetailCtrl:Awake()
|
||||
local param = self:GetPanelParam()
|
||||
if type(param) == "table" then
|
||||
self.mapRecommendData = param[1]
|
||||
self.bInSoldier = param[2]
|
||||
end
|
||||
self.nRecommendId = self.mapRecommendData.nRecommendId
|
||||
if self.mapRecommendData == nil then
|
||||
return
|
||||
end
|
||||
self.recommendCfg = ConfigTable.GetData("SoldierRecommendBuilds", self.nRecommendId)
|
||||
if self.recommendCfg == nil then
|
||||
return
|
||||
end
|
||||
self:RefreshUI()
|
||||
self:SetApplyStatus()
|
||||
end
|
||||
function SoldierRecommendDetailCtrl:OnEnable()
|
||||
local wait = function()
|
||||
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
||||
self._mapNode.btnHome.gameObject:SetActive(not self.bInSoldier)
|
||||
end
|
||||
cs_coroutine.start(wait)
|
||||
end
|
||||
function SoldierRecommendDetailCtrl:RefreshUI()
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_title, self.recommendCfg.Title)
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_desc, self.recommendCfg.Desc)
|
||||
for i = 1, 3 do
|
||||
local charData = self.mapRecommendData.charList[i]
|
||||
if charData then
|
||||
self._mapNode.MainChar[i]:SetItemData(charData.nId)
|
||||
self._mapNode.MainChar[i]:SetStar(charData.nStar)
|
||||
do
|
||||
local callback = function(obj, nCharId)
|
||||
local chessData = {
|
||||
nId = charData.nId,
|
||||
nStar = charData.nStar
|
||||
}
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierCharCardTips, self._mapNode.charDetialRoot, chessData)
|
||||
EventManager.Hit("OnSetTipsPosition", self._mapNode.charDetialRoot:GetChild(0).position, self._mapNode.charDetialRoot:GetChild(1).position, self._mapNode.charDetialRoot:GetChild(2).position)
|
||||
EventManager.Hit("SoldierCharTips_ShowBg")
|
||||
end
|
||||
self._mapNode.MainChar[i]:SetClickCallback(_, callback)
|
||||
end
|
||||
end
|
||||
end
|
||||
for i = 1, 3 do
|
||||
local img_pos = self._mapNode.img_pos[i]
|
||||
local nCfgId = PlayerData.SoldierData:GetSoldierPositionEffectDataId(i)
|
||||
local cfg = ConfigTable.GetData("SoldierPositionEffect", nCfgId)
|
||||
if cfg then
|
||||
self:SetPngSprite(img_pos, iconPath2 .. cfg.Icon)
|
||||
end
|
||||
end
|
||||
for i = 4, 9 do
|
||||
local charData = self.mapRecommendData.charList[i]
|
||||
if charData then
|
||||
self._mapNode.BackChar[i - 3]:SetItemData(charData.nId)
|
||||
self._mapNode.BackChar[i - 3]:SetStar(charData.nStar)
|
||||
local callback = function(obj, nCharId)
|
||||
local chessData = {
|
||||
nId = charData.nId,
|
||||
nStar = charData.nStar,
|
||||
nPositionType = nPositionType
|
||||
}
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierCharCardTips, self._mapNode.charDetialRoot, chessData)
|
||||
EventManager.Hit("OnSetTipsPosition", self._mapNode.charDetialRoot:GetChild(0).position, self._mapNode.charDetialRoot:GetChild(1).position, self._mapNode.charDetialRoot:GetChild(2).position)
|
||||
EventManager.Hit("SoldierCharTips_ShowBg")
|
||||
end
|
||||
self._mapNode.BackChar[i - 3]:SetClickCallback(_, callback)
|
||||
else
|
||||
self._mapNode.BackChar[i - 3]:SetItemData(nil)
|
||||
end
|
||||
end
|
||||
local img_starterCardIcon = self._mapNode.starterCard.transform:Find("img_iconBg/img_icon"):GetComponent("Image")
|
||||
local txt_name = self._mapNode.starterCard.transform:Find("txt_name"):GetComponent("TMP_Text")
|
||||
local starterCardConfig = ConfigTable.GetData("SoldierStarterCard", self.recommendCfg.StarterCard)
|
||||
if starterCardConfig then
|
||||
self:SetPngSprite(img_starterCardIcon, iconPath .. starterCardConfig.Icon)
|
||||
NovaAPI.SetTMPText(txt_name, starterCardConfig.Name)
|
||||
local btn_detail = self._mapNode.starterCard.transform:Find("btn_detail"):GetComponent("UIButton")
|
||||
btn_detail.onClick:RemoveAllListeners()
|
||||
btn_detail.onClick:AddListener(function()
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierSelectStarterCardItem, self.recommendCfg.StarterCard)
|
||||
end)
|
||||
end
|
||||
local tr = self._mapNode.buffList.transform
|
||||
for i = tr.childCount, 1, -1 do
|
||||
GameObject.Destroy(tr:GetChild(i - 1).gameObject)
|
||||
end
|
||||
for _, buffId in ipairs(self.recommendCfg.StrategyCard) do
|
||||
local buffConfig = ConfigTable.GetData("SoldierStrategyCard", buffId)
|
||||
if buffConfig then
|
||||
local go_buff = instantiate(self._mapNode.strategyCardPrefab, tr)
|
||||
go_buff.transform:SetParent(tr)
|
||||
go_buff.transform.localScale = Vector3.one
|
||||
local img_icon = go_buff.transform:Find("img_iconBg/img_icon"):GetComponent("Image")
|
||||
local img_bg = go_buff.transform:Find("img_iconBg"):GetComponent("Image")
|
||||
local txt_name = go_buff.transform:Find("txt_name"):GetComponent("TMP_Text")
|
||||
local btn_detail = go_buff.transform:Find("btn_detail"):GetComponent("UIButton")
|
||||
btn_detail.onClick:RemoveAllListeners()
|
||||
btn_detail.onClick:AddListener(function()
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierSelectStrategyCardItem, buffId)
|
||||
end)
|
||||
self:SetPngSprite(img_icon, iconPath .. buffConfig.Icon)
|
||||
if buffConfig.Rarity ~= 0 then
|
||||
self:SetPngSprite(img_bg, iconPath2 .. AllEnum.SoldierStrategyCardRarityIcon[buffConfig.Rarity] .. AllEnum.SoldierChessIconSurfix.S)
|
||||
end
|
||||
NovaAPI.SetTMPText(txt_name, buffConfig.Name)
|
||||
go_buff:SetActive(true)
|
||||
end
|
||||
end
|
||||
local tbPartnerAdd = decodeJson(self.recommendCfg.PartnerAdd)
|
||||
local mapExtraPartner = {}
|
||||
for k, v in pairs(tbPartnerAdd) do
|
||||
mapExtraPartner[tonumber(k)] = tonumber(v)
|
||||
end
|
||||
local tbExPartner = {}
|
||||
for partnerId, addLevel in pairs(mapExtraPartner) do
|
||||
local partnerCfg = ConfigTable.GetData("SoldierPartner", partnerId)
|
||||
if partnerCfg then
|
||||
tbExPartner[partnerCfg.PartnerType] = addLevel
|
||||
end
|
||||
end
|
||||
self._mapNode.partnerCtrl:RefreshPartner(self.mapRecommendData.charList, tbExPartner)
|
||||
self._mapNode.partnerCtrl:SetPartnerDetailRoot(self._mapNode.parnterDetialRoot)
|
||||
end
|
||||
function SoldierRecommendDetailCtrl:SetApplyStatus()
|
||||
local bApply = false
|
||||
local recommendData = PlayerData.SoldierData:GetRecommendData(self.bInSoldier)
|
||||
if recommendData ~= nil and recommendData.nRecommendId == self.mapRecommendData.nRecommendId then
|
||||
bApply = true
|
||||
end
|
||||
self._mapNode.btn_Apply.gameObject:SetActive(not bApply)
|
||||
self._mapNode.btn_Cancel.gameObject:SetActive(bApply)
|
||||
self._mapNode.img_Use.gameObject:SetActive(bApply)
|
||||
end
|
||||
function SoldierRecommendDetailCtrl:OnDestroy()
|
||||
end
|
||||
function SoldierRecommendDetailCtrl:OnBtnClick_Apply()
|
||||
PlayerData.SoldierData:SetRecommendData(self.mapRecommendData.nRecommendId, self.bInSoldier)
|
||||
self:SetApplyStatus()
|
||||
end
|
||||
function SoldierRecommendDetailCtrl:OnBtnClick_Cancel()
|
||||
PlayerData.SoldierData:SetRecommendData(0, self.bInSoldier)
|
||||
self:SetApplyStatus()
|
||||
end
|
||||
function SoldierRecommendDetailCtrl:OnBtnClick_StarterCard()
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierSelectStarterCardItem, self.recommendCfg.StarterCard)
|
||||
end
|
||||
function SoldierRecommendDetailCtrl:OnBtnClick_StrategyCard()
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierStrategyCardTips, self.gameObject.transform, nBuffId)
|
||||
end
|
||||
return SoldierRecommendDetailCtrl
|
||||
@@ -0,0 +1,20 @@
|
||||
local SoldierRecommendDetailPanel = class("SoldierRecommendDetailPanel", BasePanel)
|
||||
SoldierRecommendDetailPanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "Soldier/SoldierRecommendDetailPanel.prefab",
|
||||
sCtrlName = "Game.UI.Soldier.Recommend.SoldierRecommendDetailCtrl"
|
||||
}
|
||||
}
|
||||
function SoldierRecommendDetailPanel:Awake()
|
||||
end
|
||||
function SoldierRecommendDetailPanel:OnEnable()
|
||||
end
|
||||
function SoldierRecommendDetailPanel:OnAfterEnter()
|
||||
end
|
||||
function SoldierRecommendDetailPanel:OnDisable()
|
||||
end
|
||||
function SoldierRecommendDetailPanel:OnDestroy()
|
||||
end
|
||||
function SoldierRecommendDetailPanel:OnRelease()
|
||||
end
|
||||
return SoldierRecommendDetailPanel
|
||||
@@ -0,0 +1,20 @@
|
||||
local SoldierRecommendPanel = class("SoldierRecommendPanel", BasePanel)
|
||||
SoldierRecommendPanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "Soldier/SoldierRecommendPanel.prefab",
|
||||
sCtrlName = "Game.UI.Soldier.Recommend.SoldierRecommendCtrl"
|
||||
}
|
||||
}
|
||||
function SoldierRecommendPanel:Awake()
|
||||
end
|
||||
function SoldierRecommendPanel:OnEnable()
|
||||
end
|
||||
function SoldierRecommendPanel:OnAfterEnter()
|
||||
end
|
||||
function SoldierRecommendPanel:OnDisable()
|
||||
end
|
||||
function SoldierRecommendPanel:OnDestroy()
|
||||
end
|
||||
function SoldierRecommendPanel:OnRelease()
|
||||
end
|
||||
return SoldierRecommendPanel
|
||||
@@ -0,0 +1,78 @@
|
||||
local SpliderRecommendPartnerCtrl = class("SpliderRecommendPartnerCtrl", BaseCtrl)
|
||||
local SoldierAttrData = require("GameCore.Data.DataClass.Soldier.SoldierAttrData")
|
||||
local iconPath = "Icon/SoldierOtherIcon/"
|
||||
local partnerPath = "Icon/SoldierPartner/"
|
||||
SpliderRecommendPartnerCtrl._mapNodeConfig = {
|
||||
sv_partner = {
|
||||
sComponentName = "LoopScrollView"
|
||||
}
|
||||
}
|
||||
SpliderRecommendPartnerCtrl._mapEventConfig = {}
|
||||
SpliderRecommendPartnerCtrl._mapRedDotConfig = {}
|
||||
function SpliderRecommendPartnerCtrl:Awake()
|
||||
end
|
||||
function SpliderRecommendPartnerCtrl:OnDestroy()
|
||||
end
|
||||
function SpliderRecommendPartnerCtrl:RefreshPartner(tbCharList, tbExPartner)
|
||||
self.tbCharList = tbCharList
|
||||
local _, tbUIData = SoldierAttrData.CalcActivePartners(self.tbCharList, tbExPartner)
|
||||
self.tbPartner = tbUIData
|
||||
self:RefreshPartnerUI()
|
||||
end
|
||||
function SpliderRecommendPartnerCtrl:RefreshPartnerUI()
|
||||
self._mapNode.sv_partner:Init(#self.tbPartner, self, self.OnPartnerRefreshGrid, self.OnPartnerGridBtnClick, false)
|
||||
end
|
||||
function SpliderRecommendPartnerCtrl:OnPartnerRefreshGrid(goGrid, gridIndex)
|
||||
local nIndex = gridIndex + 1
|
||||
local partner = self.tbPartner[nIndex]
|
||||
local partnerGroupCfg = CacheTable.GetData("_SoldierPartnerGroup", partner.nType)
|
||||
if partnerGroupCfg == nil then
|
||||
return
|
||||
end
|
||||
local nIndex = table.indexof(partner.tbNumList, partner.nActiveNum)
|
||||
local partnerCfgList = CacheTable.GetData("_SoldierPartner", partner.nType)
|
||||
if partnerCfgList == nil then
|
||||
return
|
||||
end
|
||||
local partnerCfg = partnerCfgList[partner.nActiveLevel]
|
||||
if partnerCfg == nil then
|
||||
partnerCfg = partnerCfgList[1]
|
||||
end
|
||||
local img_bg = goGrid.transform:Find("img_icon"):GetComponent("Image")
|
||||
local img_icon = goGrid.transform:Find("img_icon/img_Partnericon"):GetComponent("Image")
|
||||
local txt_name = goGrid.transform:Find("txt_name"):GetComponent("TMP_Text")
|
||||
local txtPartner = goGrid.transform:Find("imgPartnerbg/txt_level"):GetComponent("TMP_Text")
|
||||
local txtPartner2 = goGrid.transform:Find("imgLevelBg/txt_level2"):GetComponent("TMP_Text")
|
||||
if partner.nActiveLevel == 0 then
|
||||
self:SetPngSprite(img_bg, iconPath .. AllEnum.SoldierPartnerLevelIcon[GameEnum.PartnerLevelQuality.None].bg)
|
||||
else
|
||||
self:SetPngSprite(img_bg, iconPath .. AllEnum.SoldierPartnerLevelIcon[partnerCfg.PartnerLevelQuality].bg)
|
||||
end
|
||||
self:SetPngSprite(img_icon, partnerPath .. partnerGroupCfg.Icon .. AllEnum.SoldierChessIconSurfix.M)
|
||||
NovaAPI.SetTMPText(txt_name, partnerCfg.Name)
|
||||
NovaAPI.SetTMPText(txtPartner2, partner.nCurNum)
|
||||
local strLevel = ""
|
||||
for i = 1, #partner.tbNumList do
|
||||
if 1 < i then
|
||||
strLevel = strLevel .. "/"
|
||||
end
|
||||
if i ~= partner.nActiveLevel then
|
||||
strLevel = strLevel .. partner.tbNumList[i]
|
||||
else
|
||||
strLevel = strLevel .. "<color=#EED9BD>" .. partner.tbNumList[i] .. "</color>"
|
||||
end
|
||||
end
|
||||
NovaAPI.SetTMPText(txtPartner, strLevel)
|
||||
end
|
||||
function SpliderRecommendPartnerCtrl:SetPartnerDetailRoot(tr)
|
||||
self.partnerDetailRoot = tr
|
||||
end
|
||||
function SpliderRecommendPartnerCtrl:OnPartnerGridBtnClick(goGrid, gridIndex)
|
||||
local nIndex = gridIndex + 1
|
||||
local mapPartner = self.tbPartner[nIndex]
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierPartnerTips, self.partnerDetailRoot, mapPartner.nType, mapPartner.nActiveLevel, false, self.tbCharList)
|
||||
local tr = self.partnerDetailRoot:GetChild(0)
|
||||
EventManager.Hit("OnSetParnterTipsPosition", tr.position, tr:GetChild(0).position, tr:GetChild(1).position)
|
||||
EventManager.Hit("SoldierCharTips_ShowBg")
|
||||
end
|
||||
return SpliderRecommendPartnerCtrl
|
||||
@@ -0,0 +1,79 @@
|
||||
local BaseCtrl = require("GameCore.UI.BaseCtrl")
|
||||
local SoldierBuffCtrl = class("SoldierBuffCtrl", BaseCtrl)
|
||||
SoldierBuffCtrl._mapNodeConfig = {
|
||||
BigBuffItem = {
|
||||
sNodeName = "BigBuff",
|
||||
sCtrlName = "Game.UI.Soldier.Sandtable.Items.SoldierBuffItemCtrl"
|
||||
},
|
||||
sv_buff = {
|
||||
sComponentName = "LoopScrollView"
|
||||
},
|
||||
smallBuff = {
|
||||
sNodeName = "buff",
|
||||
nCount = 20,
|
||||
sCtrlName = "Game.UI.Soldier.Sandtable.Items.SoldierBuffItemCtrl"
|
||||
},
|
||||
imgLineRoot = {},
|
||||
goBuffRoot = {
|
||||
sComponentName = "RectTransform"
|
||||
}
|
||||
}
|
||||
SoldierBuffCtrl._mapEventConfig = {}
|
||||
SoldierBuffCtrl._mapRedDotConfig = {}
|
||||
function SoldierBuffCtrl:Awake()
|
||||
end
|
||||
function SoldierBuffCtrl:OnEnable()
|
||||
end
|
||||
function SoldierBuffCtrl:OnDisable()
|
||||
end
|
||||
function SoldierBuffCtrl:OnDestroy()
|
||||
end
|
||||
function SoldierBuffCtrl:RefreshBuff()
|
||||
self._nStarterCardId = 0
|
||||
self._tbStrategyCardIds = {}
|
||||
self.tbBuffCfgs = {}
|
||||
if self.btn_detail == nil then
|
||||
self.btn_detail = self.gameObject:GetComponent("UIButton")
|
||||
end
|
||||
local levelData = PlayerData.SoldierData:GetCurLevelData()
|
||||
local tbStarterCard, tbStrategyCard = levelData:GetCardData()
|
||||
if tbStarterCard == nil or #tbStarterCard == 0 then
|
||||
self._mapNode.goBuffRoot.gameObject:SetActive(false)
|
||||
return
|
||||
end
|
||||
self._mapNode.goBuffRoot.gameObject:SetActive(true)
|
||||
self._nStarterCardId = tbStarterCard[1].nId
|
||||
self._tbStrategyCardIds = tbStrategyCard
|
||||
local cfg = ConfigTable.GetData("SoldierStarterCard", self._nStarterCardId)
|
||||
table.insert(self.tbBuffCfgs, cfg)
|
||||
for k, v in ipairs(self._tbStrategyCardIds) do
|
||||
local cfg = ConfigTable.GetData("SoldierStrategyCard", v.nId)
|
||||
table.insert(self.tbBuffCfgs, cfg)
|
||||
end
|
||||
self.btn_detail.onClick:RemoveAllListeners()
|
||||
self.btn_detail.onClick:AddListener(function()
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierBuffTipsPanel, self.tbBuffCfgs)
|
||||
end)
|
||||
self:_RefreshBuffItems()
|
||||
end
|
||||
function SoldierBuffCtrl:_RefreshBuffItems()
|
||||
self._mapNode.imgLineRoot.gameObject:SetActive(#self._tbStrategyCardIds > 0)
|
||||
if self._mapNode.BigBuffItem ~= nil then
|
||||
local cfg = ConfigTable.GetData("SoldierStarterCard", self._nStarterCardId)
|
||||
self._mapNode.BigBuffItem:SetData(cfg)
|
||||
end
|
||||
for k, v in ipairs(self._mapNode.smallBuff) do
|
||||
v.gameObject:SetActive(false)
|
||||
end
|
||||
for k, v in ipairs(self._tbStrategyCardIds) do
|
||||
if self._mapNode.smallBuff[k] ~= nil then
|
||||
local cfg = ConfigTable.GetData("SoldierStrategyCard", v.nId)
|
||||
self._mapNode.smallBuff[k]:SetData(cfg)
|
||||
self._mapNode.smallBuff[k].gameObject:SetActive(true)
|
||||
end
|
||||
end
|
||||
CS.UnityEngine.UI.LayoutRebuilder.ForceRebuildLayoutImmediate(self._mapNode.goBuffRoot)
|
||||
end
|
||||
function SoldierBuffCtrl:RefreshBuffItem(goGrid, gridIndex)
|
||||
end
|
||||
return SoldierBuffCtrl
|
||||
@@ -0,0 +1,72 @@
|
||||
local BaseCtrl = require("GameCore.UI.BaseCtrl")
|
||||
local SoldierBuffTipsCtrl = class("SoldierBuffTipsCtrl", BaseCtrl)
|
||||
SoldierBuffTipsCtrl._mapNodeConfig = {
|
||||
btnClose = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Close"
|
||||
},
|
||||
loopTips = {
|
||||
sComponentName = "LoopScrollView",
|
||||
sNodeName = "sv"
|
||||
},
|
||||
grid = {
|
||||
sComponentName = "RectTransform"
|
||||
}
|
||||
}
|
||||
SoldierBuffTipsCtrl._mapEventConfig = {}
|
||||
local RootPath = "Icon/SoldierBuffCard/"
|
||||
local bgPath = "Icon/SoldierOtherIcon/"
|
||||
local initHeight = 90.85
|
||||
local gridHeight = 224
|
||||
function SoldierBuffTipsCtrl:Awake()
|
||||
local param = self:GetPanelParam()
|
||||
if type(param) == "table" then
|
||||
self.tbBuffCfgs = param[1] or {}
|
||||
end
|
||||
end
|
||||
function SoldierBuffTipsCtrl:OnEnable()
|
||||
self:RefreshBuffTips()
|
||||
end
|
||||
function SoldierBuffTipsCtrl:RefreshBuffTips()
|
||||
self:CalBuffHeight()
|
||||
self._mapNode.loopTips:InitEx(self.tbBuffHeight, self, self.RefreshBuffTipsItem)
|
||||
end
|
||||
function SoldierBuffTipsCtrl:CalBuffHeight()
|
||||
self.tbBuffHeight = {}
|
||||
for i, cfg in ipairs(self.tbBuffCfgs) do
|
||||
local buffItem = self._mapNode.grid.transform:Find("btnGrid/AnimRoot/BuffItem")
|
||||
local TextName = buffItem.transform:Find("imgItemBg/TextName"):GetComponent("TMP_Text")
|
||||
local imgItemBg = buffItem.transform:Find("imgItemBg"):GetComponent("RectTransform")
|
||||
NovaAPI.SetTMPText(TextName, cfg.Desc)
|
||||
CS.UnityEngine.UI.LayoutRebuilder.ForceRebuildLayoutImmediate(imgItemBg)
|
||||
local nHeight = imgItemBg.sizeDelta.y - initHeight
|
||||
table.insert(self.tbBuffHeight, nHeight + gridHeight)
|
||||
end
|
||||
end
|
||||
function SoldierBuffTipsCtrl:RefreshBuffTipsItem(grid, gridIndex)
|
||||
gridIndex = gridIndex + 1
|
||||
local cfg = self.tbBuffCfgs[gridIndex]
|
||||
if cfg then
|
||||
local buffItem = grid.transform:Find("btnGrid/AnimRoot/BuffItem")
|
||||
local txtTitle = buffItem.transform:Find("txtTitle"):GetComponent("TMP_Text")
|
||||
local ImageIcon = buffItem.transform:Find("ImageIcon"):GetComponent("Image")
|
||||
local TextName = buffItem.transform:Find("imgItemBg/TextName"):GetComponent("TMP_Text")
|
||||
local ImageIconBg = buffItem.transform:Find("ImageIconBg"):GetComponent("Image")
|
||||
NovaAPI.SetTMPText(txtTitle, cfg.Name)
|
||||
self:SetPngSprite(ImageIcon, RootPath .. cfg.Icon)
|
||||
NovaAPI.SetTMPText(TextName, cfg.Desc)
|
||||
if cfg.Rarity ~= 0 then
|
||||
self:SetPngSprite(ImageIconBg, bgPath .. AllEnum.SoldierStrategyCardRarityIcon[cfg.Rarity] .. AllEnum.SoldierChessIconSurfix.S)
|
||||
end
|
||||
local ImageLine = buffItem.transform:Find("imgItemBg/imgLine").gameObject
|
||||
ImageLine:SetActive(gridIndex == 1 and 1 < #self.tbBuffCfgs)
|
||||
end
|
||||
end
|
||||
function SoldierBuffTipsCtrl:OnDisable()
|
||||
end
|
||||
function SoldierBuffTipsCtrl:OnDestroy()
|
||||
end
|
||||
function SoldierBuffTipsCtrl:OnBtnClick_Close()
|
||||
EventManager.Hit(EventId.ClosePanel, PanelId.SoldierBuffTipsPanel)
|
||||
end
|
||||
return SoldierBuffTipsCtrl
|
||||
@@ -0,0 +1,20 @@
|
||||
local BasePanel = require("GameCore.UI.BasePanel")
|
||||
local SoldierBuffTipsPanel = class("SoldierBuffTipsPanel", BasePanel)
|
||||
SoldierBuffTipsPanel._bIsMainPanel = false
|
||||
SoldierBuffTipsPanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "Soldier/Tips/SoldierBuffTips.prefab",
|
||||
sCtrlName = "Game.UI.Soldier.Sandtable.Components.SoldierBuffTipsCtrl"
|
||||
}
|
||||
}
|
||||
function SoldierBuffTipsPanel:Awake()
|
||||
end
|
||||
function SoldierBuffTipsPanel:OnEnable()
|
||||
end
|
||||
function SoldierBuffTipsPanel:OnDisable()
|
||||
end
|
||||
function SoldierBuffTipsPanel:OnDestroy()
|
||||
end
|
||||
function SoldierBuffTipsPanel:OnRelease()
|
||||
end
|
||||
return SoldierBuffTipsPanel
|
||||
@@ -0,0 +1,32 @@
|
||||
local iconPath2 = "Icon/SoldierOtherIcon/"
|
||||
local SoldierEffectDesCtrl = class("SoldierEffectDesCtrl", BaseCtrl)
|
||||
SoldierEffectDesCtrl._mapNodeConfig = {
|
||||
txtTitle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Sandtable_PositionEffect"
|
||||
},
|
||||
ImageIcon = {sComponentName = "Image"},
|
||||
TextDes = {sComponentName = "TMP_Text"},
|
||||
btnClose = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Close"
|
||||
}
|
||||
}
|
||||
SoldierEffectDesCtrl._mapEventConfig = {}
|
||||
SoldierEffectDesCtrl._mapRedDotConfig = {}
|
||||
function SoldierEffectDesCtrl:HideTips()
|
||||
self.gameObject:SetActive(false)
|
||||
end
|
||||
function SoldierEffectDesCtrl:ShowTips(nPositionIndex)
|
||||
self.gameObject:SetActive(true)
|
||||
local nCfgId = PlayerData.SoldierData:GetSoldierPositionEffectDataId(nPositionIndex)
|
||||
local cfg = ConfigTable.GetData("SoldierPositionEffect", nCfgId)
|
||||
if cfg then
|
||||
self:SetPngSprite(self._mapNode.ImageIcon, iconPath2 .. cfg.Icon)
|
||||
NovaAPI.SetTMPText(self._mapNode.TextDes, cfg.KeyEffectDes)
|
||||
end
|
||||
end
|
||||
function SoldierEffectDesCtrl:OnBtnClick_Close()
|
||||
self:HideTips()
|
||||
end
|
||||
return SoldierEffectDesCtrl
|
||||
@@ -0,0 +1,37 @@
|
||||
local SoldierNodeTipsCtrl = class("SoldierNodeTipsCtrl", BaseCtrl)
|
||||
local AssetRoot = "Icon/SoldierOtherIcon/"
|
||||
SoldierNodeTipsCtrl._mapNodeConfig = {
|
||||
btnClose = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Close"
|
||||
},
|
||||
txtTitle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "SoldierNodeTips_Title"
|
||||
},
|
||||
Item = {nCount = 4}
|
||||
}
|
||||
SoldierNodeTipsCtrl._mapEventConfig = {}
|
||||
SoldierNodeTipsCtrl._mapRedDotConfig = {}
|
||||
function SoldierNodeTipsCtrl:Awake()
|
||||
for i = 1, 4 do
|
||||
local item = self._mapNode.Item[i]
|
||||
local imageIcon = item.transform:Find("ImageIcon"):GetComponent("Image")
|
||||
local textName = item.transform:Find("TextName"):GetComponent("TMP_Text")
|
||||
local nodeConfig = AllEnum.SoliderNoteTypeCfg[i]
|
||||
if nodeConfig then
|
||||
self:SetPngSprite(imageIcon, AssetRoot .. nodeConfig.Icon)
|
||||
NovaAPI.SetTMPText(textName, ConfigTable.GetUIText(nodeConfig.Language))
|
||||
end
|
||||
end
|
||||
end
|
||||
function SoldierNodeTipsCtrl:OpenNodeTips(nodeInfo)
|
||||
self.gameObject:SetActive(true)
|
||||
end
|
||||
function SoldierNodeTipsCtrl:HideNodeTips()
|
||||
self.gameObject:SetActive(false)
|
||||
end
|
||||
function SoldierNodeTipsCtrl:OnBtnClick_Close()
|
||||
self:HideNodeTips()
|
||||
end
|
||||
return SoldierNodeTipsCtrl
|
||||
@@ -0,0 +1,226 @@
|
||||
local SoldierShopCtrl = class("SoldierShopCtrl", BaseCtrl)
|
||||
SoldierShopCtrl._mapNodeConfig = {
|
||||
btn_CloseShop = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_CloseShop"
|
||||
},
|
||||
SoldierCharCardShopItem = {
|
||||
nCount = 5,
|
||||
sCtrlName = "Game.UI.Soldier.Sandtable.Items.SoldierCharCardShopItemCtrl"
|
||||
},
|
||||
btnRefreshShop = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_RefreshShop"
|
||||
},
|
||||
txtBtnRefreshShop = {sComponentName = "TMP_Text"},
|
||||
imgBtnRefreshShopMask = {},
|
||||
goCoinRaidUnlock = {},
|
||||
txtRefreshCount = {sComponentName = "TMP_Text"},
|
||||
goCoinRaidFree = {},
|
||||
txtRefreshFreeCount = {sComponentName = "TMP_Text"},
|
||||
btnLock = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Lock"
|
||||
},
|
||||
imgLocked = {},
|
||||
imgUnlocked = {},
|
||||
goProbabilityBarItem = {nCount = 5},
|
||||
imgTickets = {},
|
||||
btn_Probability = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Probability"
|
||||
}
|
||||
}
|
||||
SoldierShopCtrl._mapEventConfig = {
|
||||
SoldierItemChange = "OnEvent_SoldierItemChange"
|
||||
}
|
||||
SoldierShopCtrl._mapRedDotConfig = {}
|
||||
function SoldierShopCtrl:OnEnable()
|
||||
self.nFreeCount = 0
|
||||
self.nReRollPrice = 0
|
||||
self.levelData = PlayerData.SoldierData:GetCurLevelData()
|
||||
self.timer = nil
|
||||
end
|
||||
function SoldierShopCtrl:OnDisable()
|
||||
if self.timer ~= nil then
|
||||
self.timer:_Stop()
|
||||
self.timer = nil
|
||||
end
|
||||
end
|
||||
function SoldierShopCtrl:ShowShopPanel()
|
||||
if self.levelData == nil then
|
||||
self.levelData = PlayerData.SoldierData:GetCurLevelData()
|
||||
end
|
||||
self:RefreshShopData()
|
||||
self.gameObject:SetActive(true)
|
||||
end
|
||||
function SoldierShopCtrl:RefreshShopData()
|
||||
local shopData = self.levelData:GetShopData()
|
||||
if shopData == nil then
|
||||
return
|
||||
end
|
||||
self.tbChessData = shopData.tbGoods
|
||||
self.tbProbability = shopData.tbWeightList
|
||||
self.bLock = shopData.bLock
|
||||
self.nFreeCount = shopData.nFreeCount
|
||||
self.nReRollPrice = shopData.nReRollPrice
|
||||
self.bDisablePurchase = shopData.bDisablePurchase
|
||||
self.bDisableRefresh = shopData.bDisableRefresh
|
||||
self:RefreshRefreshBtnState()
|
||||
self:RefreshGoodsData()
|
||||
self:RefreshProbabilityData()
|
||||
self:RefreshTicketsData()
|
||||
self._mapNode.imgLocked:SetActive(self.bLock)
|
||||
self._mapNode.imgUnlocked:SetActive(not self.bLock)
|
||||
EventManager.Hit("RefreshPurchaseExpPrice")
|
||||
end
|
||||
function SoldierShopCtrl:HideShopPanel()
|
||||
self.gameObject:SetActive(false)
|
||||
end
|
||||
function SoldierShopCtrl:RefreshRefreshBtnState()
|
||||
self._mapNode.imgBtnRefreshShopMask.gameObject:SetActive(self.bDisableRefresh)
|
||||
self._mapNode.goCoinRaidUnlock.gameObject:SetActive(self.nFreeCount <= 0 and not self.bDisableRefresh)
|
||||
self._mapNode.goCoinRaidFree.gameObject:SetActive(self.nFreeCount > 0 and not self.bDisableRefresh)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtRefreshFreeCount, self.nFreeCount)
|
||||
local sBtn = ConfigTable.GetUIText("Soldier_Shop_Refresh")
|
||||
if self.bDisableRefresh then
|
||||
sBtn = ConfigTable.GetUIText("Soldier_Shop_Refresh_Disable")
|
||||
elseif self.nFreeCount > 0 then
|
||||
sBtn = ConfigTable.GetUIText("Soldier_Shop_Refresh_Free")
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.txtBtnRefreshShop, sBtn)
|
||||
end
|
||||
function SoldierShopCtrl:RefreshGoodsData()
|
||||
local tbGoodsData = {
|
||||
nil,
|
||||
nil,
|
||||
nil,
|
||||
nil,
|
||||
nil
|
||||
}
|
||||
for i = 1, 5 do
|
||||
if self.tbChessData[i] ~= nil then
|
||||
local bCombine = false
|
||||
local nNextStar = 0
|
||||
if self.tbChessData[i].Id ~= 0 then
|
||||
bCombine, nNextStar = self.levelData:CheckSoldierCombine(self.tbChessData[i].Id, self.tbChessData[i].Star)
|
||||
end
|
||||
if nNextStar == 0 and 1 < self.tbChessData[i].Star then
|
||||
nNextStar = self.tbChessData[i].Star
|
||||
end
|
||||
tbGoodsData[i] = {
|
||||
nCharId = self.tbChessData[i].Id,
|
||||
nStar = nNextStar,
|
||||
nCost = self.tbChessData[i].Price
|
||||
}
|
||||
end
|
||||
end
|
||||
for i = 1, 5 do
|
||||
self._mapNode.SoldierCharCardShopItem[i]:SetData(tbGoodsData[i].nCharId, tbGoodsData[i].nCost, tbGoodsData[i].nStar, self.bDisablePurchase)
|
||||
self._mapNode.SoldierCharCardShopItem[i]:SetClickCallback(_, function()
|
||||
self:OnBtnClick_Char(i)
|
||||
end)
|
||||
end
|
||||
end
|
||||
function SoldierShopCtrl:RefreshProbabilityData()
|
||||
for i = 1, 5 do
|
||||
local TextRatio = self._mapNode.goProbabilityBarItem[i].transform:Find("TextRatio"):GetComponent("TMP_Text")
|
||||
local goFx = self._mapNode.goProbabilityBarItem[i].transform:Find("Fx_Upgrade")
|
||||
local nWeight = self.tbProbability[i].nWeight
|
||||
local bDouble = self.tbProbability[i].bDouble
|
||||
NovaAPI.SetTMPText(TextRatio, tostring(nWeight) .. "%")
|
||||
goFx.gameObject:SetActive(bDouble)
|
||||
end
|
||||
end
|
||||
function SoldierShopCtrl:RefreshTicketsData()
|
||||
self._mapNode.imgTickets:SetActive(self.nFreeCount <= 0)
|
||||
if self.nFreeCount > 0 then
|
||||
NovaAPI.SetTMPText(self._mapNode.txtRefreshCount, tostring(self.nFreeCount))
|
||||
else
|
||||
NovaAPI.SetTMPText(self._mapNode.txtRefreshCount, tostring(self.nReRollPrice))
|
||||
end
|
||||
local coinCount = self.levelData:GetItem(AllEnum.CoinItemId.SoldierCurrency)
|
||||
if coinCount < self.nReRollPrice then
|
||||
NovaAPI.SetTMPColor(self._mapNode.txtRefreshCount, Color(0.8431372549019608, 0.3568627450980392, 0.4392156862745098, 1))
|
||||
else
|
||||
NovaAPI.SetTMPColor(self._mapNode.txtRefreshCount, Color(0.14901960784313725, 0.25882352941176473, 0.47058823529411764, 1))
|
||||
end
|
||||
end
|
||||
function SoldierShopCtrl:OnBtnClick_CloseShop()
|
||||
self:HideShopPanel()
|
||||
EventManager.Hit("SoldierShopClose")
|
||||
end
|
||||
function SoldierShopCtrl:OnBtnClick_Lock()
|
||||
self.levelData:SendShopLock(not self.bLock, function()
|
||||
self.bLock = not self.bLock
|
||||
self._mapNode.imgLocked:SetActive(self.bLock)
|
||||
self._mapNode.imgUnlocked:SetActive(not self.bLock)
|
||||
end)
|
||||
end
|
||||
function SoldierShopCtrl:OnBtnClick_RefreshShop()
|
||||
if self.bDisableRefresh then
|
||||
return
|
||||
end
|
||||
local coinCount = self.levelData:GetItem(AllEnum.CoinItemId.SoldierCurrency)
|
||||
if coinCount < self.nReRollPrice and self.nFreeCount <= 0 then
|
||||
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Soldier_BuyExp_Tips2"))
|
||||
CS.WwiseAudioManager.Instance:PostEvent("mode_900001_chess_shop_refresh_poor")
|
||||
return
|
||||
end
|
||||
self.levelData:SendShopRefresh(function(callbackData)
|
||||
EventManager.Hit("SoldierShopRefresh")
|
||||
CS.WwiseAudioManager.Instance:PostEvent("mode_900001_chess_shop_refresh")
|
||||
if self.timer ~= nil then
|
||||
self.timer:_Stop()
|
||||
self.timer = nil
|
||||
end
|
||||
local data = callbackData.shopBecomeAnother
|
||||
if callbackData.shopBecomeAnother ~= nil then
|
||||
self._mapNode.SoldierCharCardShopItem[data.nGoodsIndex]:PlayRandomRefreshOneShot()
|
||||
end
|
||||
EventManager.Hit("SoldierSandtableRefreshStep", callbackData.tbChessChangeStep)
|
||||
self.timer = self:AddTimer(1, 0.23, function()
|
||||
self:RefreshShopData()
|
||||
end, true, true, true)
|
||||
end)
|
||||
end
|
||||
function SoldierShopCtrl:OnBtnClick_Char(nIndex)
|
||||
local chessData = self.tbChessData[nIndex]
|
||||
if chessData == nil then
|
||||
return
|
||||
end
|
||||
if chessData.Id == 0 then
|
||||
return
|
||||
end
|
||||
local coinCount = self.levelData:GetItem(AllEnum.CoinItemId.SoldierCurrency)
|
||||
if coinCount < chessData.Price then
|
||||
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Soldier_InsufficientCoin_Tips"))
|
||||
CS.WwiseAudioManager.Instance:PostEvent("mode_900001_chess_shop_buy_poor")
|
||||
return
|
||||
end
|
||||
local _, tbWaiting, _ = self.levelData:GetDeploy()
|
||||
local bWaitingMax = true
|
||||
for _, v in ipairs(tbWaiting) do
|
||||
if v.nId == 0 then
|
||||
bWaitingMax = false
|
||||
break
|
||||
end
|
||||
end
|
||||
local bCombine, _ = self.levelData:CheckSoldierCombine(chessData.Id, chessData.Star)
|
||||
if bWaitingMax and not bCombine then
|
||||
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Soldier_OverBench_Tips"))
|
||||
return
|
||||
end
|
||||
self.levelData:SendShopPurchase(nIndex, function(tbChange)
|
||||
CS.WwiseAudioManager.Instance:PostEvent("mode_900001_chess_shop_buy")
|
||||
self:RefreshShopData()
|
||||
EventManager.Hit("SoldierCharItemChange", tbChange.tbChessChangeStep, self._mapNode.SoldierCharCardShopItem[nIndex].gameObject.transform)
|
||||
end)
|
||||
end
|
||||
function SoldierShopCtrl:OnBtnClick_Probability()
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierShopProbabilityPanel)
|
||||
end
|
||||
function SoldierShopCtrl:OnEvent_SoldierItemChange()
|
||||
self:RefreshTicketsData()
|
||||
end
|
||||
return SoldierShopCtrl
|
||||
@@ -0,0 +1,29 @@
|
||||
local SoldierBuffItemCtrl = class("SoldierBuffItemCtrl", BaseCtrl)
|
||||
local RootPath = "Icon/SoldierBuffCard/"
|
||||
local bgPath = "Icon/SoldierOtherIcon/"
|
||||
SoldierBuffItemCtrl._mapNodeConfig = {
|
||||
imgIcon = {sComponentName = "Image"},
|
||||
imgBg = {sComponentName = "Image"}
|
||||
}
|
||||
SoldierBuffItemCtrl._mapEventConfig = {}
|
||||
SoldierBuffItemCtrl._mapRedDotConfig = {}
|
||||
function SoldierBuffItemCtrl:Awake()
|
||||
end
|
||||
function SoldierBuffItemCtrl:OnEnable()
|
||||
end
|
||||
function SoldierBuffItemCtrl:OnDisable()
|
||||
end
|
||||
function SoldierBuffItemCtrl:OnDestroy()
|
||||
end
|
||||
function SoldierBuffItemCtrl:SetData(mapCfg)
|
||||
if mapCfg == nil then
|
||||
return
|
||||
end
|
||||
self:SetPngSprite(self._mapNode.imgIcon, RootPath .. mapCfg.Icon)
|
||||
if mapCfg.Rarity ~= 0 then
|
||||
self:SetPngSprite(self._mapNode.imgBg, bgPath .. AllEnum.SoldierStrategyCardRarityIcon[mapCfg.Rarity] .. AllEnum.SoldierChessIconSurfix.S)
|
||||
end
|
||||
end
|
||||
function SoldierBuffItemCtrl:OnRefresh()
|
||||
end
|
||||
return SoldierBuffItemCtrl
|
||||
@@ -0,0 +1,13 @@
|
||||
local SoldierBuffTipsItemCtrl = class("SoldierBuffTipsItemCtrl", BaseCtrl)
|
||||
SoldierBuffTipsItemCtrl._mapEventConfig = {}
|
||||
SoldierBuffTipsItemCtrl._mapRedDotConfig = {}
|
||||
function SoldierBuffTipsItemCtrl:OnRefresh(mapCfg)
|
||||
if mapCfg == nil then
|
||||
return
|
||||
end
|
||||
self:SetPngSprite(self._mapNode.ImageIcon, mapCfg.Icon)
|
||||
NovaAPI.SetTMPText(self._mapNode.TextName, mapCfg.Name or "")
|
||||
local sDes = mapCfg.Desc or mapCfg.Des or ""
|
||||
NovaAPI.SetTMPText(self._mapNode.TextDes, sDes)
|
||||
end
|
||||
return SoldierBuffTipsItemCtrl
|
||||
@@ -0,0 +1,323 @@
|
||||
local SoldierAttrData = require("GameCore.Data.DataClass.Soldier.SoldierAttrData")
|
||||
local SoldierCharCardShopItemCtrl = class("SoldierCharCardShopItemCtrl", BaseCtrl)
|
||||
local SYNERGY_TEMPLATE_PATH = "Game.UI.Soldier.Sandtable.Items.SoldierCharCardShopPartnerItemCtrl"
|
||||
local _DestroyNode = function(node)
|
||||
if node == nil then
|
||||
return
|
||||
end
|
||||
if node.IsNull ~= nil and node:IsNull() == true then
|
||||
return
|
||||
end
|
||||
destroy(node.gameObject or node)
|
||||
end
|
||||
SoldierCharCardShopItemCtrl._mapNodeConfig = {
|
||||
imgUpgradeStar = {nCount = 5},
|
||||
imgUpgrade = {},
|
||||
btnItem = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnItemClick"
|
||||
},
|
||||
imgSelect = {},
|
||||
imageRarity = {sComponentName = "Image"},
|
||||
imgEmpty = {},
|
||||
Container = {},
|
||||
txtShopName = {sComponentName = "TMP_Text"},
|
||||
txtCharName = {sComponentName = "TMP_Text"},
|
||||
ImageIcon = {sComponentName = "Image"},
|
||||
imgPosition = {},
|
||||
img_Position = {sComponentName = "Image"},
|
||||
imgRecommend = {sComponentName = "Image"},
|
||||
imgUnavailable = {},
|
||||
imgInHand = {},
|
||||
txtCost = {sComponentName = "TMP_Text"},
|
||||
goSynergyRoot = {
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
SynergyTemplate = {},
|
||||
animRoot = {sNodeName = "AnimRoot", sComponentName = "Animator"},
|
||||
FxCard_Random = {sComponentName = "Animator"}
|
||||
}
|
||||
SoldierCharCardShopItemCtrl._mapEventConfig = {
|
||||
SoldierCharCardShopItemClicked = "OnEvent_SoldierCharCardShopItemClicked",
|
||||
SoldierRecommend_Update = "SetTrackAndRecommend",
|
||||
SoldierPartnerTrace = "SetTrackAndRecommend",
|
||||
SoldierShopRefresh = "OnShopRefresh"
|
||||
}
|
||||
SoldierCharCardShopItemCtrl._mapRedDotConfig = {}
|
||||
function SoldierCharCardShopItemCtrl:Awake()
|
||||
self.nSlotIndex = 0
|
||||
self.fnClickHost = nil
|
||||
self.fnClickFunc = nil
|
||||
self._tbSynergyItemCtrl = {}
|
||||
self._tbSynergyItemGo = {}
|
||||
self._mapNode.FxCard_Random.gameObject:SetActive(false)
|
||||
end
|
||||
function SoldierCharCardShopItemCtrl:OnEnable()
|
||||
end
|
||||
function SoldierCharCardShopItemCtrl:OnDisable()
|
||||
self:SetEmpty()
|
||||
end
|
||||
function SoldierCharCardShopItemCtrl:OnDestroy()
|
||||
self._objClickCallback = nil
|
||||
self._fnClickCallback = nil
|
||||
end
|
||||
function SoldierCharCardShopItemCtrl:SetSlotIndex(nIndex)
|
||||
self.nSlotIndex = nIndex
|
||||
end
|
||||
function SoldierCharCardShopItemCtrl:SetClickCallback(host, func)
|
||||
self._objClickCallback = host
|
||||
self._fnClickCallback = func
|
||||
end
|
||||
function SoldierCharCardShopItemCtrl:SetData(nCharId, nCost, nStar, bDisablePurchase)
|
||||
self.nCharId = nCharId
|
||||
if nCharId == nil or nCharId <= 0 then
|
||||
self:SetEmpty()
|
||||
return
|
||||
end
|
||||
local mapChar = ConfigTable.GetData("SoldierCharacter", nCharId)
|
||||
if mapChar == nil then
|
||||
self:SetEmpty()
|
||||
return
|
||||
end
|
||||
self:SetNodeActive(self._mapNode.imgEmpty, false)
|
||||
self:SetNodeActive(self._mapNode.Container, true)
|
||||
self:RefreshBaseCard(mapChar)
|
||||
self:SetInHand(nStar)
|
||||
if nStar ~= nil then
|
||||
self:SetUpgradeHint(nStar or 0)
|
||||
end
|
||||
local mapShopData
|
||||
ForEachTableLine(DataTable.SoldierShopPool, function(mapData)
|
||||
if mapData.ChessCharacterId == nCharId then
|
||||
mapShopData = mapData
|
||||
end
|
||||
end)
|
||||
if mapShopData ~= nil then
|
||||
local nHasMoney = PlayerData.SoldierData:GetCurLevelData():GetItem(AllEnum.CoinItemId.SoldierCurrency)
|
||||
self:SetAvailable(nHasMoney >= (nCost or 0) and not bDisablePurchase)
|
||||
local sCost = tostring(nCost or 0)
|
||||
if nHasMoney < (nCost or 0) then
|
||||
sCost = "<color=#E15C73>" .. sCost .. "</color>"
|
||||
end
|
||||
self:SetCost(sCost)
|
||||
end
|
||||
self:RefreshSynergy()
|
||||
end
|
||||
function SoldierCharCardShopItemCtrl:SetEmpty()
|
||||
self.nCharId = nil
|
||||
self:SetNodeActive(self._mapNode.imgEmpty or self._mapNode.EmptyContainer or self._mapNode.imgEmpty, true)
|
||||
self:SetNodeActive(self._mapNode.Container, false)
|
||||
self:ResetAllStates()
|
||||
end
|
||||
function SoldierCharCardShopItemCtrl:ResetAllStates()
|
||||
self:SetNodeActive(self._mapNode.imgRecommend, false)
|
||||
self:SetNodeActive(self._mapNode.imgUnavailable, false)
|
||||
self:SetNodeActive(self._mapNode.imgInHand, false)
|
||||
self:SetNodeActive(self._mapNode.imgPosition, false)
|
||||
self:SetUpgradeHint(0)
|
||||
self:_ClearSynergyItems()
|
||||
end
|
||||
function SoldierCharCardShopItemCtrl:RefreshBaseCard(mapChar)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtShopName, mapChar.Name or "")
|
||||
NovaAPI.SetTMPText(self._mapNode.txtCharName, mapChar.Name or "")
|
||||
local mapSkin = ConfigTable.GetData("SoldierSkin", mapChar.Skin)
|
||||
if mapSkin ~= nil then
|
||||
self:SetPngSprite(self._mapNode.ImageIcon, mapSkin.Icon .. AllEnum.SoldierChessIconSurfix.L)
|
||||
end
|
||||
self:SetChessPosition(mapChar.Type)
|
||||
self:SetRarity(mapChar.Rarity)
|
||||
self:SetTrackAndRecommend()
|
||||
end
|
||||
function SoldierCharCardShopItemCtrl:SetRarity(nRarity)
|
||||
if nRarity == nil then
|
||||
return
|
||||
end
|
||||
self:SetPngSprite(self._mapNode.imageRarity, "Icon/SoldierOtherIcon/" .. AllEnum.SoldierChessRarityIcon[nRarity] .. AllEnum.SoldierChessIconSurfix.L)
|
||||
end
|
||||
function SoldierCharCardShopItemCtrl:SetChessPosition(nType)
|
||||
self._mapNode.imgPosition.gameObject:SetActive(true)
|
||||
if nType == nil then
|
||||
return
|
||||
end
|
||||
local tbChessTypeConfig = CacheTable.GetData("_SoldierChessType", nType)
|
||||
local sIcon = ""
|
||||
if tbChessTypeConfig ~= nil then
|
||||
sIcon = tbChessTypeConfig.Icon
|
||||
end
|
||||
local sPath = "Icon/SoldierOtherIcon/" .. sIcon
|
||||
self:SetPngSprite(self._mapNode.img_Position, sPath)
|
||||
end
|
||||
function SoldierCharCardShopItemCtrl:SetTrackAndRecommend()
|
||||
if self.nCharId == nil then
|
||||
return
|
||||
end
|
||||
self._mapNode.imgRecommend.gameObject:SetActive(true)
|
||||
local levelData = PlayerData.SoldierData:GetCurLevelData()
|
||||
if levelData == nil then
|
||||
self._mapNode.imgRecommend.gameObject:SetActive(false)
|
||||
return
|
||||
end
|
||||
local bTrack = levelData:CheckChessTrace(self.nCharId)
|
||||
local bRecommend = PlayerData.SoldierData:CheckChessRecommendState(self.nCharId)
|
||||
local sIcon = ""
|
||||
if bRecommend and bTrack then
|
||||
sIcon = "Icon/SoldierOtherIcon/SoldierPartnerBuilds_03"
|
||||
elseif bTrack then
|
||||
sIcon = "Icon/SoldierOtherIcon/SoldierPartnerBuilds_02"
|
||||
elseif bRecommend then
|
||||
sIcon = "Icon/SoldierOtherIcon/SoldierPartnerBuilds_01"
|
||||
else
|
||||
self._mapNode.imgRecommend.gameObject:SetActive(false)
|
||||
end
|
||||
if sIcon ~= "" then
|
||||
self:SetPngSprite(self._mapNode.imgRecommend, sIcon)
|
||||
end
|
||||
end
|
||||
function SoldierCharCardShopItemCtrl:SetInHand(nStar)
|
||||
if nStar ~= nil and 2 <= nStar then
|
||||
self:SetNodeActive(self._mapNode.imgInHand, true)
|
||||
return
|
||||
end
|
||||
local tbDeploy, tbWaiting, _ = PlayerData.SoldierData:GetCurLevelData():GetDeploy()
|
||||
local bInHand = false
|
||||
for k, v in pairs(tbDeploy) do
|
||||
if v.nId == self.nCharId then
|
||||
bInHand = true
|
||||
break
|
||||
end
|
||||
end
|
||||
if bInHand == false then
|
||||
for k, v in pairs(tbWaiting) do
|
||||
if v.nId == self.nCharId then
|
||||
bInHand = true
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
self:SetNodeActive(self._mapNode.imgInHand, bInHand)
|
||||
end
|
||||
function SoldierCharCardShopItemCtrl:SetUpgradeHint(nStar)
|
||||
nStar = nStar or 0
|
||||
if nStar < 2 then
|
||||
nStar = 0
|
||||
end
|
||||
if nStar == 0 then
|
||||
self:SetNodeActive(self._mapNode.imgUpgrade, false)
|
||||
return
|
||||
else
|
||||
self:SetNodeActive(self._mapNode.imgUpgrade, true)
|
||||
end
|
||||
for i = 1, 5 do
|
||||
self:SetNodeActive(self._mapNode.imgUpgradeStar and self._mapNode.imgUpgradeStar[i], nStar >= i)
|
||||
end
|
||||
end
|
||||
function SoldierCharCardShopItemCtrl:SetAvailable(bAvailable)
|
||||
self:SetNodeActive(self._mapNode.imgUnavailable, not bAvailable)
|
||||
end
|
||||
function SoldierCharCardShopItemCtrl:SetCost(sCost)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtCost, sCost)
|
||||
end
|
||||
function SoldierCharCardShopItemCtrl:SetSelect(bSelect)
|
||||
self:SetNodeActive(self._mapNode.imgSelect, bSelect)
|
||||
end
|
||||
function SoldierCharCardShopItemCtrl:GetAnimator()
|
||||
if self._mapNode.animRoot == nil then
|
||||
self._mapNode.animRoot = self.gameObejct.transform:GetChild(0):GetChild(0):GetComponent("Animator")
|
||||
if self._mapNode.animRoot == nil then
|
||||
return nil
|
||||
end
|
||||
end
|
||||
return self._mapNode.animRoot
|
||||
end
|
||||
function SoldierCharCardShopItemCtrl:PlayRandomRefreshOneShot()
|
||||
if self.timerRandomRefresh ~= nil then
|
||||
self.timerRandomRefresh:Cancel()
|
||||
self.timerRandomRefresh = nil
|
||||
self._mapNode.FxCard_Random.gameObject:SetActive(false)
|
||||
end
|
||||
self._mapNode.FxCard_Random.gameObject:SetActive(true)
|
||||
local nAnimLength = NovaAPI.GetAnimClipLength(self._mapNode.FxCard_Random, {
|
||||
"ShopCardItem_random"
|
||||
})
|
||||
self.timerRandomRefresh = self:AddTimer(1, nAnimLength, function()
|
||||
self._mapNode.FxCard_Random.gameObject:SetActive(false)
|
||||
end, true, true, true)
|
||||
end
|
||||
function SoldierCharCardShopItemCtrl:RefreshSynergy()
|
||||
self:_ClearSynergyItems()
|
||||
self:SetNodeActive(self._mapNode.SynergyTemplate, false)
|
||||
local tbPartnerTypes = SoldierAttrData.GetPartnerGroupsByChessId(self.nCharId)
|
||||
if tbPartnerTypes == nil or #tbPartnerTypes == 0 then
|
||||
self:SetNodeActive(self._mapNode.goSynergyRoot, false)
|
||||
return
|
||||
end
|
||||
local goTemplate = self._mapNode.SynergyTemplate
|
||||
local goRoot = self._mapNode.goSynergyRoot
|
||||
if goTemplate == nil or goRoot == nil then
|
||||
return
|
||||
end
|
||||
self:SetNodeActive(goRoot, true)
|
||||
local trParent = goRoot.transform or goRoot
|
||||
local nItemCount = 0
|
||||
for _, nPartnerType in ipairs(tbPartnerTypes) do
|
||||
local mapGroup = CacheTable.GetData("_SoldierPartnerGroup", nPartnerType)
|
||||
if mapGroup ~= nil then
|
||||
local goItem = instantiate(goTemplate, trParent)
|
||||
self:SetNodeActive(goItem, true)
|
||||
local ctrl = self:BindCtrlByNode(goItem, SYNERGY_TEMPLATE_PATH)
|
||||
if ctrl ~= nil then
|
||||
ctrl:OnRefresh(mapGroup)
|
||||
nItemCount = nItemCount + 1
|
||||
self._tbSynergyItemCtrl = self._tbSynergyItemCtrl or {}
|
||||
self._tbSynergyItemGo = self._tbSynergyItemGo or {}
|
||||
table.insert(self._tbSynergyItemCtrl, ctrl)
|
||||
table.insert(self._tbSynergyItemGo, goItem)
|
||||
else
|
||||
_DestroyNode(goItem)
|
||||
end
|
||||
end
|
||||
end
|
||||
self:SetNodeActive(goRoot, 0 < nItemCount)
|
||||
end
|
||||
function SoldierCharCardShopItemCtrl:_ClearSynergyItems()
|
||||
local tbSynergyItemCtrl = self._tbSynergyItemCtrl or {}
|
||||
for _, ctrl in ipairs(tbSynergyItemCtrl) do
|
||||
self:UnbindCtrlByNode(ctrl)
|
||||
end
|
||||
local tbSynergyItemGo = self._tbSynergyItemGo or {}
|
||||
for _, goItem in ipairs(tbSynergyItemGo) do
|
||||
_DestroyNode(goItem)
|
||||
end
|
||||
self._tbSynergyItemCtrl = {}
|
||||
self._tbSynergyItemGo = {}
|
||||
end
|
||||
function SoldierCharCardShopItemCtrl:SetNodeActive(node, bActive)
|
||||
if node == nil then
|
||||
return
|
||||
end
|
||||
if node.gameObject ~= nil then
|
||||
node.gameObject:SetActive(bActive)
|
||||
else
|
||||
node:SetActive(bActive)
|
||||
end
|
||||
end
|
||||
function SoldierCharCardShopItemCtrl:OnBtnItemClick()
|
||||
if self._fnClickCallback ~= nil and self.nCharId ~= nil then
|
||||
self._fnClickCallback(self._objClickCallback, self.nCharId)
|
||||
end
|
||||
end
|
||||
function SoldierCharCardShopItemCtrl:OnEvent_SoldierCharCardShopItemClicked(nCharId)
|
||||
if nCharId == nil then
|
||||
self:SetSelect(false)
|
||||
return
|
||||
end
|
||||
self:SetSelect(nCharId == self.nCharId)
|
||||
end
|
||||
function SoldierCharCardShopItemCtrl:OnShopRefresh(bRandomRefresh)
|
||||
if bRandomRefresh then
|
||||
self:PlayRandomRefreshOneShot()
|
||||
else
|
||||
self:GetAnimator():Play("ShopCardItem_refresh")
|
||||
end
|
||||
end
|
||||
return SoldierCharCardShopItemCtrl
|
||||
@@ -0,0 +1,18 @@
|
||||
local SoldierCharCardShopPartnerItemCtrl = class("SoldierCharCardShopPartnerItemCtrl", BaseCtrl)
|
||||
SoldierCharCardShopPartnerItemCtrl._mapNodeConfig = {
|
||||
txtPartnerName = {sComponentName = "TMP_Text"},
|
||||
imgPartnerIcon = {sComponentName = "Image"}
|
||||
}
|
||||
SoldierCharCardShopPartnerItemCtrl._mapEventConfig = {}
|
||||
SoldierCharCardShopPartnerItemCtrl._mapRedDotConfig = {}
|
||||
function SoldierCharCardShopPartnerItemCtrl:Awake()
|
||||
self._tbTimer = {}
|
||||
end
|
||||
function SoldierCharCardShopPartnerItemCtrl:OnRefresh(mapGroup)
|
||||
if mapGroup == nil then
|
||||
return
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.txtPartnerName, mapGroup.Name or "")
|
||||
self:SetPngSprite(self._mapNode.imgPartnerIcon, "Icon/SoldierPartner/" .. mapGroup.Icon .. AllEnum.SoldierChessIconSurfix.M)
|
||||
end
|
||||
return SoldierCharCardShopPartnerItemCtrl
|
||||
@@ -0,0 +1,13 @@
|
||||
local SoldierEffectDesItemCtrl = class("SoldierEffectDesItemCtrl", BaseCtrl)
|
||||
SoldierEffectDesItemCtrl._mapNodeConfig = {}
|
||||
SoldierEffectDesItemCtrl._mapEventConfig = {}
|
||||
SoldierEffectDesItemCtrl._mapRedDotConfig = {}
|
||||
function SoldierEffectDesItemCtrl:OnRefresh(tbData, nCardId)
|
||||
if self._mapNode.TextName ~= nil then
|
||||
NovaAPI.SetTMPText(self._mapNode.TextName, tbData and tbData.sName or "")
|
||||
end
|
||||
if self._mapNode.TextDes ~= nil then
|
||||
NovaAPI.SetTMPText(self._mapNode.TextDes, tbData and tbData.sDes or "")
|
||||
end
|
||||
end
|
||||
return SoldierEffectDesItemCtrl
|
||||
@@ -0,0 +1,19 @@
|
||||
local SoldierNodeItemCtrl = class("SoldierNodeItemCtrl", BaseCtrl)
|
||||
function SoldierNodeItemCtrl:Awake()
|
||||
self.serverData = PlayerData.SoldierData.ServerData
|
||||
end
|
||||
function SoldierNodeItemCtrl:OnEnable()
|
||||
end
|
||||
function SoldierNodeItemCtrl:OnDisable()
|
||||
end
|
||||
function SoldierNodeItemCtrl:OnDestroy()
|
||||
end
|
||||
function SoldierNodeItemCtrl:OnRefresh(nodeId)
|
||||
local config = ConfigTable.GetData("SoldierNodePlan", nodeId)
|
||||
if config then
|
||||
self:SetPngSprite(self._mapNode.imgIcon, config.NodeIcon)
|
||||
end
|
||||
local curNodeId = self.serverData:GetNodeId()
|
||||
self._mapNode.imgStatus:SetActive(curNodeId == nodeId)
|
||||
end
|
||||
return SoldierNodeItemCtrl
|
||||
@@ -0,0 +1,98 @@
|
||||
local SoldierPartnerListCtrl = class("SoldierPartnerListCtrl", BaseCtrl)
|
||||
local iconPath = "Icon/SoldierOtherIcon/"
|
||||
local partnerPath = "Icon/SoldierPartner/"
|
||||
SoldierPartnerListCtrl._mapNodeConfig = {
|
||||
sv_partner = {
|
||||
sNodeName = "PartnerContainer",
|
||||
sComponentName = "LoopScrollView"
|
||||
}
|
||||
}
|
||||
SoldierPartnerListCtrl._mapEventConfig = {
|
||||
SoldierPartnerTrace = "OnEvent_SoldierPartnerTrace",
|
||||
SoldierPartnerNewActive = "OnEvent_SoldierPartnerNewActive"
|
||||
}
|
||||
SoldierPartnerListCtrl._mapRedDotConfig = {}
|
||||
function SoldierPartnerListCtrl:SetData(tbPartner)
|
||||
self.tbPartner = tbPartner
|
||||
self:RefreshPartnerList()
|
||||
end
|
||||
function SoldierPartnerListCtrl:SetTipsRoot(tr)
|
||||
self.trTipsRoot = tr
|
||||
end
|
||||
function SoldierPartnerListCtrl:RefreshPartnerList()
|
||||
if self.tbPartner == nil or #self.tbPartner == 0 then
|
||||
self._mapNode.sv_partner.gameObject:SetActive(false)
|
||||
return
|
||||
end
|
||||
self._mapNode.sv_partner.gameObject:SetActive(true)
|
||||
self._mapNode.sv_partner:Init(#self.tbPartner, self, self.OnPartnerRefreshGrid, self.OnPartnerGridBtnClick, false)
|
||||
self.tbNewPartner = {}
|
||||
end
|
||||
function SoldierPartnerListCtrl:OnPartnerRefreshGrid(goGrid, gridIndex)
|
||||
local nIndex = gridIndex + 1
|
||||
local partner = self.tbPartner[nIndex]
|
||||
local partnerGroupCfg = CacheTable.GetData("_SoldierPartnerGroup", partner.nType)
|
||||
if partnerGroupCfg == nil then
|
||||
return
|
||||
end
|
||||
local nIndex = table.indexof(partner.tbNumList, partner.nActiveNum)
|
||||
local partnerCfgList = CacheTable.GetData("_SoldierPartner", partner.nType)
|
||||
if partnerCfgList == nil then
|
||||
return
|
||||
end
|
||||
local partnerCfg = partnerCfgList[partner.nActiveLevel]
|
||||
if partnerCfg == nil then
|
||||
partnerCfg = partnerCfgList[1]
|
||||
end
|
||||
local img_bg = goGrid.transform:Find("Common/ImageIcon"):GetComponent("Image")
|
||||
local img_icon = goGrid.transform:Find("Common/imgPartnericon"):GetComponent("Image")
|
||||
local txt_name = goGrid.transform:Find("Common/TextName"):GetComponent("TMP_Text")
|
||||
local txtPartner = goGrid.transform:Find("Common/imgPartnerbg/txtPartner"):GetComponent("TMP_Text")
|
||||
local txtPartner2 = goGrid.transform:Find("Common/txtPartner2"):GetComponent("TMP_Text")
|
||||
local img_Trace = goGrid.transform:Find("Common/imgBuildsIcon")
|
||||
if partner.nActiveLevel == 0 then
|
||||
self:SetPngSprite(img_bg, iconPath .. AllEnum.SoldierPartnerLevelIcon[GameEnum.PartnerLevelQuality.None].bg)
|
||||
else
|
||||
self:SetPngSprite(img_bg, iconPath .. AllEnum.SoldierPartnerLevelIcon[partnerCfg.PartnerLevelQuality].bg)
|
||||
end
|
||||
self:SetPngSprite(img_icon, partnerPath .. partnerGroupCfg.Icon .. AllEnum.SoldierChessIconSurfix.M)
|
||||
NovaAPI.SetTMPText(txt_name, partnerCfg.Name)
|
||||
NovaAPI.SetTMPText(txtPartner2, partner.nCurNum)
|
||||
local bTrace = PlayerData.SoldierData:GetCurLevelData():CheckPartnerTrace(partner.nType)
|
||||
local bRecommend = PlayerData.SoldierData:CheckPartnerRecommendState(partner.nType)
|
||||
img_Trace.gameObject:SetActive(bTrace or bRecommend)
|
||||
local strLevel = ""
|
||||
for i = 1, #partner.tbNumList do
|
||||
if 1 < i then
|
||||
strLevel = strLevel .. "/"
|
||||
end
|
||||
if i ~= partner.nActiveLevel then
|
||||
strLevel = strLevel .. partner.tbNumList[i]
|
||||
else
|
||||
strLevel = strLevel .. "<color=#EED9BD>" .. partner.tbNumList[i] .. "</color>"
|
||||
end
|
||||
end
|
||||
NovaAPI.SetTMPText(txtPartner, strLevel)
|
||||
local animator = goGrid.transform:GetComponent("Animator")
|
||||
if animator ~= nil and self.tbNewPartner ~= nil and 0 < table.indexof(self.tbNewPartner, partner.nType) then
|
||||
animator:Play("PartnerActive")
|
||||
end
|
||||
end
|
||||
function SoldierPartnerListCtrl:OnPartnerGridBtnClick(goGrid, gridIndex)
|
||||
local nIndex = gridIndex + 1
|
||||
local partner = self.tbPartner[nIndex]
|
||||
local bTrace = PlayerData.SoldierData:GetCurLevelData():CheckPartnerTrace(partner.nType)
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierPartnerTips, self.trTipsRoot, partner.nType, partner.nActiveLevel, bTrace)
|
||||
local tr = self.trTipsRoot
|
||||
EventManager.Hit("OnSetParnterTipsPosition", tr:GetChild(0).position, tr:GetChild(1).position, tr:GetChild(2).position, tr:GetChild(3).position)
|
||||
end
|
||||
function SoldierPartnerListCtrl:OnEvent_SoldierPartnerTrace()
|
||||
self:RefreshPartnerList()
|
||||
end
|
||||
function SoldierPartnerListCtrl:OnEvent_SoldierPartnerNewActive(tbActivePartner)
|
||||
self.tbNewPartner = {}
|
||||
for k, v in pairs(tbActivePartner) do
|
||||
table.insert(self.tbNewPartner, k)
|
||||
end
|
||||
end
|
||||
return SoldierPartnerListCtrl
|
||||
@@ -0,0 +1,251 @@
|
||||
local SoldierSandtableCharItemCtrl = class("SoldierSandtableCharItemCtrl", BaseCtrl)
|
||||
local SoldierAttrData = require("GameCore.Data.DataClass.Soldier.SoldierAttrData")
|
||||
local iconPath2 = "Icon/SoldierOtherIcon/"
|
||||
local chessAnimType = {
|
||||
PUTIN = 1,
|
||||
DRAGIN = 2,
|
||||
COMPOUND = 3,
|
||||
COMPOUND_OUT = 4,
|
||||
WARRIOR = 5
|
||||
}
|
||||
local chessAnimName = {
|
||||
[chessAnimType.PUTIN] = "SoldierSupportCard_putin",
|
||||
[chessAnimType.DRAGIN] = "SoldierSupportCard_dragin",
|
||||
[chessAnimType.COMPOUND] = "SoldierSupportCard_compound",
|
||||
[chessAnimType.COMPOUND_OUT] = "SoldierSupportCard_compoundout",
|
||||
[chessAnimType.WARRIOR] = "SoldierSupportCard_warrior"
|
||||
}
|
||||
SoldierSandtableCharItemCtrl._mapNodeConfig = {
|
||||
btn_char = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Char"
|
||||
},
|
||||
HaveStatus = {},
|
||||
drag = {
|
||||
sNodeName = "HaveStatus",
|
||||
sComponentName = "UIDrag",
|
||||
callback = "OnUIDrag_Drag"
|
||||
},
|
||||
trSortItem = {
|
||||
sNodeName = "HaveStatus",
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
raySortItem = {
|
||||
sNodeName = "HaveStatus",
|
||||
sComponentName = "Empty4Raycast"
|
||||
},
|
||||
rayDragEvent = {
|
||||
sComponentName = "Empty4Raycast"
|
||||
},
|
||||
SoldierCharacterCardItem = {},
|
||||
AnimRoot = {},
|
||||
ImgPutLightADD = {}
|
||||
}
|
||||
SoldierSandtableCharItemCtrl._mapEventConfig = {
|
||||
SoldierSandtableCharItemDragStart = "OnSoldierSandtableCharItemDragStart",
|
||||
SoldierSandtableCharItemDragging = "OnSoldierSandtableCharItemDragging",
|
||||
SoldierSandtableCharItemDragEnd = "OnSoldierSandtableCharItemDragEnd",
|
||||
SoldierExtraPartnerTagChange = "OnSoldierExtraPartnerTagChange",
|
||||
SoldierChessCanPutIn = "OneEvent_SoldierChessCanPutIn"
|
||||
}
|
||||
SoldierSandtableCharItemCtrl._mapRedDotConfig = {}
|
||||
function SoldierSandtableCharItemCtrl:Awake()
|
||||
self.chessData = nil
|
||||
self.itemCtrl = nil
|
||||
self.animRoot = self._mapNode.AnimRoot:GetComponent("Animator")
|
||||
end
|
||||
function SoldierSandtableCharItemCtrl:OnDisable()
|
||||
if self.itemCtrl ~= nil then
|
||||
self:UnbindCtrlByNode(self.itemCtrl)
|
||||
self.itemCtrl = nil
|
||||
end
|
||||
end
|
||||
function SoldierSandtableCharItemCtrl:SetData(chessData)
|
||||
self.levelData = PlayerData.SoldierData:GetCurLevelData()
|
||||
self.chessData = chessData
|
||||
self._mapNode.trSortItem.localPosition = Vector3(0, 0, 0)
|
||||
self._mapNode.ImgPutLightADD.gameObject:SetActive(false)
|
||||
if self.chessData == nil or self.chessData.nId == 0 then
|
||||
self._mapNode.HaveStatus.gameObject:SetActive(false)
|
||||
else
|
||||
if self.itemCtrl == nil then
|
||||
if chessData.nPositionType == GameEnum.SoldierPositionType.FightPosition or chessData.nPositionType == GameEnum.SoldierPositionType.SupportPosition then
|
||||
self.itemCtrl = self:BindCtrlByNode(self._mapNode.SoldierCharacterCardItem, "Game.UI.Soldier.Template.Character.SoldierCharSupportCardItemCtrl")
|
||||
else
|
||||
self.itemCtrl = self:BindCtrlByNode(self._mapNode.SoldierCharacterCardItem, "Game.UI.Soldier.Template.Character.SoldierCharCardItemCtrl")
|
||||
end
|
||||
end
|
||||
self._mapNode.HaveStatus.gameObject:SetActive(true)
|
||||
if chessData.nPositionType == GameEnum.SoldierPositionType.FightPosition or chessData.nPositionType == GameEnum.SoldierPositionType.SupportPosition then
|
||||
self.itemCtrl:SetItemData(self.chessData.nId)
|
||||
else
|
||||
self.itemCtrl:SetItemData(self.chessData.nId, true)
|
||||
end
|
||||
self.itemCtrl:SetStar(self.chessData.nStar)
|
||||
if chessData.nPositionType == GameEnum.SoldierPositionType.FightPosition then
|
||||
self.itemCtrl:SetChessPosition(GameEnum.SoldierPositionType.FightPosition)
|
||||
elseif chessData.nPositionType == GameEnum.SoldierPositionType.SupportPosition then
|
||||
self.itemCtrl:SetChessPosition(GameEnum.SoldierPositionType.SupportPosition)
|
||||
end
|
||||
if chessData.nPositionType == GameEnum.SoldierPositionType.FightPosition or chessData.nPositionType == GameEnum.SoldierPositionType.SupportPosition then
|
||||
else
|
||||
end
|
||||
end
|
||||
self.itemCanvas = self.gameObject:GetComponent("Canvas")
|
||||
NovaAPI.SetCanvasOverrideSorting(self.itemCanvas, false)
|
||||
self._mapNode.rayDragEvent.gameObject:SetActive(false)
|
||||
end
|
||||
function SoldierSandtableCharItemCtrl:GetItemBtnInstanceId()
|
||||
return self._mapNode.rayDragEvent.gameObject:GetInstanceID()
|
||||
end
|
||||
function SoldierSandtableCharItemCtrl:SetPositionIndex(nIndex)
|
||||
self.nPositionIndex = nIndex
|
||||
local img_pos = self.gameObject.transform:Find("btn_pos/AnimRoot/img_pos"):GetComponent("Image")
|
||||
local btn_pos = self.gameObject.transform:Find("btn_pos"):GetComponent("UIButton")
|
||||
local nCfgId = PlayerData.SoldierData:GetSoldierPositionEffectDataId(self.nPositionIndex)
|
||||
local cfg = ConfigTable.GetData("SoldierPositionEffect", nCfgId)
|
||||
if cfg then
|
||||
self:SetPngSprite(img_pos, iconPath2 .. cfg.Icon)
|
||||
end
|
||||
btn_pos.onClick:RemoveAllListeners()
|
||||
btn_pos.onClick:AddListener(function()
|
||||
EventManager.Hit("ShowSoldierPositionEffect", self.nPositionIndex)
|
||||
end)
|
||||
end
|
||||
function SoldierSandtableCharItemCtrl:SetDetailRoot(tr)
|
||||
self.trDetailRoot = tr
|
||||
end
|
||||
function SoldierSandtableCharItemCtrl:SetItemPos(dragPos)
|
||||
local localPos = GameUIUtils.ScreenPointToLocalPoint(dragPos, self.gameObject.transform)
|
||||
self._mapNode.trSortItem.localPosition = Vector3(localPos.x, localPos.y, 0)
|
||||
end
|
||||
function SoldierSandtableCharItemCtrl:InitSortingOrder(nSortOrder)
|
||||
self.nInitSortingOrder = nSortOrder
|
||||
end
|
||||
function SoldierSandtableCharItemCtrl:CheckLimitAction()
|
||||
return self.levelData:CheckSandTableDisable()
|
||||
end
|
||||
function SoldierSandtableCharItemCtrl:SetAnimator(nAnimType)
|
||||
if self.itemCtrl == nil then
|
||||
return
|
||||
end
|
||||
local anim = self.itemCtrl:GetAnimator()
|
||||
if anim == nil then
|
||||
return
|
||||
end
|
||||
anim:Play(chessAnimName[nAnimType])
|
||||
end
|
||||
function SoldierSandtableCharItemCtrl:OnUIDrag_Drag(mDrag)
|
||||
if self:CheckLimitAction() then
|
||||
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Soldier_Sandtable_TemporaryReturn_Tips"))
|
||||
return
|
||||
end
|
||||
if self.chessData.nId <= 0 then
|
||||
return
|
||||
end
|
||||
if mDrag.DragEventType == AllEnum.UIDragType.DragStart then
|
||||
self.nLastPointerInsId = nil
|
||||
self:SetItemPos(mDrag.EventData.position)
|
||||
self._mapNode.raySortItem.enabled = false
|
||||
self._mapNode.rayDragEvent.enabled = false
|
||||
self._mapNode.btn_char.gameObject:SetActive(false)
|
||||
EventManager.Hit("SoldierSandtableCharItemDragStart", self:GetItemBtnInstanceId())
|
||||
elseif mDrag.DragEventType == AllEnum.UIDragType.Drag then
|
||||
self:SetItemPos(mDrag.EventData.position)
|
||||
local pointerObj = mDrag.EventData.pointerCurrentRaycast
|
||||
if nil ~= pointerObj and nil ~= pointerObj.gameObject then
|
||||
local nPointerInsId = pointerObj.gameObject:GetInstanceID()
|
||||
if nPointerInsId ~= self.nLastPointerInsId then
|
||||
self.nLastPointerInsId = nPointerInsId
|
||||
EventManager.Hit("SoldierSandtableCharItemDragging", self:GetItemBtnInstanceId(), nPointerInsId)
|
||||
end
|
||||
end
|
||||
elseif mDrag.DragEventType == AllEnum.UIDragType.DragEnd then
|
||||
local pointerObj = mDrag.EventData.pointerCurrentRaycast
|
||||
if nil ~= pointerObj and nil ~= pointerObj.gameObject then
|
||||
local nPointerInsId = pointerObj.gameObject:GetInstanceID()
|
||||
if nPointerInsId ~= self.nLastPointerInsId then
|
||||
self.nLastPointerInsId = nPointerInsId
|
||||
EventManager.Hit("SoldierSandtableCharItemDragEnd", self:GetItemBtnInstanceId(), nPointerInsId)
|
||||
else
|
||||
EventManager.Hit("SoldierSandtableCharItemDragEnd", self:GetItemBtnInstanceId(), nPointerInsId)
|
||||
end
|
||||
else
|
||||
EventManager.Hit("SoldierSandtableCharItemDragEnd", self:GetItemBtnInstanceId(), 0)
|
||||
end
|
||||
NovaAPI.SetCanvasOverrideSorting(self.itemCanvas, false)
|
||||
NovaAPI.SetCanvasSortingOrder(self.itemCanvas, self.nInitSortingOrder)
|
||||
self._mapNode.raySortItem.enabled = true
|
||||
self._mapNode.rayDragEvent.enabled = true
|
||||
self._mapNode.btn_char.gameObject:SetActive(true)
|
||||
end
|
||||
end
|
||||
function SoldierSandtableCharItemCtrl:OnSoldierSandtableCharItemDragStart(objInsId)
|
||||
self._mapNode.rayDragEvent.gameObject:SetActive(true)
|
||||
NovaAPI.SetCanvasOverrideSorting(self.itemCanvas, true)
|
||||
NovaAPI.SetCanvasSortingName(self.itemCanvas, AllEnum.SortingLayerName.UI)
|
||||
if self:GetItemBtnInstanceId() ~= objInsId then
|
||||
NovaAPI.SetCanvasSortingOrder(self.itemCanvas, self.nInitSortingOrder + 1)
|
||||
else
|
||||
NovaAPI.SetCanvasSortingOrder(self.itemCanvas, self.nInitSortingOrder + 2)
|
||||
end
|
||||
end
|
||||
function SoldierSandtableCharItemCtrl:OnSoldierSandtableCharItemDragging(objInsId, targetInsId)
|
||||
if targetInsId == self:GetItemBtnInstanceId() then
|
||||
self._mapNode.ImgPutLightADD.gameObject:SetActive(true)
|
||||
else
|
||||
self._mapNode.ImgPutLightADD.gameObject:SetActive(false)
|
||||
end
|
||||
end
|
||||
function SoldierSandtableCharItemCtrl:OnSoldierSandtableCharItemDragEnd()
|
||||
NovaAPI.SetCanvasSortingOrder(self.itemCanvas, self.nInitSortingOrder + 1)
|
||||
self._mapNode.rayDragEvent.gameObject:SetActive(false)
|
||||
end
|
||||
function SoldierSandtableCharItemCtrl:OnSoldierExtraPartnerTagChange()
|
||||
if self.chessData ~= nil and self.chessData.nId ~= 0 and self.animRoot ~= nil then
|
||||
local tbTags = PlayerData.SoldierData:GetCurLevelData():GetExtraPartnerTags(self.chessData.nId)
|
||||
if tbTags ~= nil then
|
||||
end
|
||||
end
|
||||
end
|
||||
function SoldierSandtableCharItemCtrl:OnBtnClick_Char()
|
||||
if self.chessData.nId <= 0 then
|
||||
return
|
||||
end
|
||||
local nPositionType = self.chessData.nPositionType
|
||||
if nPositionType == 0 or nPositionType == nil then
|
||||
nPositionType = AllEnum.SoldierPositionType.Waiting
|
||||
end
|
||||
local tbDeploy, _, _ = self.levelData:GetDeploy()
|
||||
local tbPartner, tbUIData = SoldierAttrData.CalcActivePartners(tbDeploy)
|
||||
local chessData = {
|
||||
nId = self.chessData.nId,
|
||||
nStar = self.chessData.nStar,
|
||||
nPositionType = nPositionType
|
||||
}
|
||||
local tr = self.trDetailRoot
|
||||
if tr == nil then
|
||||
tr = self.gameObject.transform
|
||||
end
|
||||
if nPositionType == AllEnum.SoldierPositionType.Waiting then
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierCharCardTips, tr, chessData)
|
||||
else
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierCharCardTips, tr, chessData, tbDeploy, tbPartner)
|
||||
end
|
||||
EventManager.Hit("OnSetTipsPosition", tr:GetChild(0).position, tr:GetChild(1).position, tr:GetChild(2).position)
|
||||
end
|
||||
function SoldierSandtableCharItemCtrl:OneEvent_SoldierChessCanPutIn(bCanPutIn)
|
||||
local img_input = self.gameObject.transform:Find("EmptyStatus/imgPut")
|
||||
local ImgPutLight = self.gameObject.transform:Find("EmptyStatus/ImgPutLight")
|
||||
if img_input == nil then
|
||||
return
|
||||
end
|
||||
if bCanPutIn then
|
||||
img_input.gameObject:SetActive(true)
|
||||
ImgPutLight.gameObject:SetActive(true)
|
||||
else
|
||||
img_input.gameObject:SetActive(false)
|
||||
ImgPutLight.gameObject:SetActive(false)
|
||||
end
|
||||
end
|
||||
return SoldierSandtableCharItemCtrl
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,163 @@
|
||||
local SoldierSandtableFxCtrl = class("SoldierSandtableFxCtrl", BaseCtrl)
|
||||
local nTime = 0.5
|
||||
local fxType = {
|
||||
Gray = 1,
|
||||
Green = 2,
|
||||
Blue = 3,
|
||||
Purple = 4,
|
||||
Gold = 5,
|
||||
Coin = 99
|
||||
}
|
||||
SoldierSandtableFxCtrl._mapNodeConfig = {
|
||||
RoleSlide_Coin = {},
|
||||
RoleSlide_Blue = {nCount = 5},
|
||||
RoleSlide_Gold = {nCount = 5},
|
||||
RoleSlide_Gray = {nCount = 6},
|
||||
RoleSlide_Green = {nCount = 5},
|
||||
RoleSlide_Purple = {nCount = 5}
|
||||
}
|
||||
SoldierSandtableFxCtrl._mapEventConfig = {}
|
||||
SoldierSandtableFxCtrl._mapRedDotConfig = {}
|
||||
function SoldierSandtableFxCtrl:Awake()
|
||||
end
|
||||
function SoldierSandtableFxCtrl:OnEnable()
|
||||
self:InitFx()
|
||||
end
|
||||
function SoldierSandtableFxCtrl:InitFx()
|
||||
self._mapNode.RoleSlide_Coin:SetActive(false)
|
||||
self.tbUnUseNode = {
|
||||
[fxType.Coin] = {},
|
||||
[fxType.Blue] = {},
|
||||
[fxType.Gold] = {},
|
||||
[fxType.Gray] = {},
|
||||
[fxType.Green] = {},
|
||||
[fxType.Purple] = {}
|
||||
}
|
||||
self.tbUseNode = {
|
||||
[fxType.Coin] = {},
|
||||
[fxType.Blue] = {},
|
||||
[fxType.Gold] = {},
|
||||
[fxType.Gray] = {},
|
||||
[fxType.Green] = {},
|
||||
[fxType.Purple] = {}
|
||||
}
|
||||
table.insert(self.tbUnUseNode[fxType.Coin], self._mapNode.RoleSlide_Coin)
|
||||
for _, v in ipairs(self._mapNode.RoleSlide_Blue) do
|
||||
v:SetActive(false)
|
||||
table.insert(self.tbUnUseNode[fxType.Blue], v)
|
||||
end
|
||||
for _, v in ipairs(self._mapNode.RoleSlide_Gold) do
|
||||
v:SetActive(false)
|
||||
table.insert(self.tbUnUseNode[fxType.Gold], v)
|
||||
end
|
||||
for _, v in ipairs(self._mapNode.RoleSlide_Gray) do
|
||||
v:SetActive(false)
|
||||
table.insert(self.tbUnUseNode[fxType.Gray], v)
|
||||
end
|
||||
for _, v in ipairs(self._mapNode.RoleSlide_Green) do
|
||||
v:SetActive(false)
|
||||
table.insert(self.tbUnUseNode[fxType.Green], v)
|
||||
end
|
||||
for _, v in ipairs(self._mapNode.RoleSlide_Purple) do
|
||||
v:SetActive(false)
|
||||
table.insert(self.tbUnUseNode[fxType.Purple], v)
|
||||
end
|
||||
end
|
||||
function SoldierSandtableFxCtrl:PlayFx(tbfx, callback)
|
||||
for nType, v in pairs(tbfx) do
|
||||
if nType == fxType.Coin then
|
||||
local go = self:GetUnUseNode(nType)
|
||||
self:PlayFxItem(go, v[1].from, v[1].to, nType)
|
||||
elseif nType == fxType.Blue then
|
||||
for i = 1, #v do
|
||||
local go = self:GetUnUseNode(nType)
|
||||
self:PlayFxItem(go, v[i].from, v[i].to, nType)
|
||||
end
|
||||
elseif nType == fxType.Gold then
|
||||
for i = 1, #v do
|
||||
local go = self:GetUnUseNode(nType)
|
||||
self:PlayFxItem(go, v[i].from, v[i].to, nType)
|
||||
end
|
||||
elseif nType == fxType.Gray then
|
||||
for i = 1, #v do
|
||||
local go = self:GetUnUseNode(nType)
|
||||
self:PlayFxItem(go, v[i].from, v[i].to, nType)
|
||||
end
|
||||
elseif nType == fxType.Green then
|
||||
for i = 1, #v do
|
||||
local go = self:GetUnUseNode(nType)
|
||||
self:PlayFxItem(go, v[i].from, v[i].to, nType)
|
||||
end
|
||||
elseif nType == fxType.Purple then
|
||||
for i = 1, #v do
|
||||
local go = self:GetUnUseNode(nType)
|
||||
self:PlayFxItem(go, v[i].from, v[i].to, nType)
|
||||
end
|
||||
end
|
||||
end
|
||||
self:AddTimer(1, nTime - 0.2, function()
|
||||
if callback ~= nil then
|
||||
callback()
|
||||
end
|
||||
end, true, true, true)
|
||||
end
|
||||
function SoldierSandtableFxCtrl:PlayFxItem(go, from, to, nType)
|
||||
if go == nil then
|
||||
return
|
||||
end
|
||||
go:SetActive(true)
|
||||
go.transform.position = from.position
|
||||
local boomfx = go.transform:Find("P_Ecplor_Cbess")
|
||||
boomfx.gameObject:SetActive(true)
|
||||
local trail = go.transform:Find("P_Slide_Cbess")
|
||||
local animaFunc = function()
|
||||
local beginPos = from.position
|
||||
local endPos = to.position
|
||||
local controlPos = Vector3((beginPos.x + endPos.x) / 2.0, (beginPos.y + endPos.y) / 2.0, 0)
|
||||
local wait = function()
|
||||
local totalMoveTime = nTime - 0.2
|
||||
local moveTime = 0
|
||||
local normalizedTime = 0
|
||||
while normalizedTime < 1 do
|
||||
moveTime = moveTime + CS.UnityEngine.Time.unscaledDeltaTime
|
||||
normalizedTime = moveTime / totalMoveTime
|
||||
normalizedTime = normalizedTime <= 1 and normalizedTime or 1
|
||||
local x, y, z = UTILS.GetBezierPointByT(beginPos, controlPos, endPos, normalizedTime)
|
||||
local angleZ = 100 * normalizedTime * 2
|
||||
angleZ = angleZ <= 100 and angleZ or 100
|
||||
go.transform.localEulerAngles = Vector3(0, 0, angleZ)
|
||||
go.transform.position = Vector3(x, y, z)
|
||||
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
||||
end
|
||||
go:SetActive(false)
|
||||
self:BackUseNode(nType, go)
|
||||
end
|
||||
cs_coroutine.start(wait)
|
||||
end
|
||||
self:AddTimer(1, 0.2, function()
|
||||
boomfx.gameObject:SetActive(false)
|
||||
animaFunc()
|
||||
end, true, true, true)
|
||||
end
|
||||
function SoldierSandtableFxCtrl:GetUnUseNode(nType)
|
||||
if self.tbUnUseNode[nType] == nil then
|
||||
return nil
|
||||
end
|
||||
local go = table.remove(self.tbUnUseNode[nType], 1)
|
||||
if go == nil then
|
||||
return nil
|
||||
end
|
||||
table.insert(self.tbUseNode[nType], go)
|
||||
return go
|
||||
end
|
||||
function SoldierSandtableFxCtrl:BackUseNode(nType, go)
|
||||
if self.tbUseNode[nType] == nil then
|
||||
return nil
|
||||
end
|
||||
local index = table.indexof(self.tbUseNode[nType], go)
|
||||
table.remove(self.tbUseNode[nType], index)
|
||||
table.insert(self.tbUnUseNode[nType], go)
|
||||
end
|
||||
function SoldierSandtableFxCtrl:OnEvent_AAA()
|
||||
end
|
||||
return SoldierSandtableFxCtrl
|
||||
@@ -0,0 +1,131 @@
|
||||
local SoldierSandtableOtherCharItemCtrl = class("SoldierSandtableOtherCharItemCtrl", BaseCtrl)
|
||||
SoldierSandtableOtherCharItemCtrl._mapNodeConfig = {
|
||||
btn_char = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Char"
|
||||
},
|
||||
drag = {
|
||||
sNodeName = "char",
|
||||
sComponentName = "UIDrag",
|
||||
callback = "OnUIDrag_Drag"
|
||||
},
|
||||
trSortItem = {
|
||||
sNodeName = "char",
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
raySortItem = {
|
||||
sNodeName = "char",
|
||||
sComponentName = "Empty4Raycast"
|
||||
},
|
||||
rayDragEvent = {
|
||||
sComponentName = "Empty4Raycast"
|
||||
},
|
||||
charCtrl = {
|
||||
sNodeName = "tc_char_small",
|
||||
sCtrlName = "Game.UI.Soldier.Template.Character.SoldierCharItemCtrl"
|
||||
}
|
||||
}
|
||||
SoldierSandtableOtherCharItemCtrl._mapEventConfig = {
|
||||
SoldierSandtableOtherCharItemDragStart = "OnSoldierSandtableOtherCharItemDragStart",
|
||||
SoldierSandtableOtherCharItemDragEnd = "OnSoldierSandtableOtherCharItemDragEnd"
|
||||
}
|
||||
SoldierSandtableOtherCharItemCtrl._mapRedDotConfig = {}
|
||||
function SoldierSandtableOtherCharItemCtrl:Awake()
|
||||
self.otherChessData = nil
|
||||
self.itemCtrl = nil
|
||||
end
|
||||
function SoldierSandtableOtherCharItemCtrl:OnDisable()
|
||||
if self.itemCtrl ~= nil then
|
||||
self:UnbindCtrlByNode(self.itemCtrl)
|
||||
self.itemCtrl = nil
|
||||
end
|
||||
end
|
||||
function SoldierSandtableOtherCharItemCtrl:SetData(otherChessData, nIndex)
|
||||
self.levelData = PlayerData.SoldierData:GetCurLevelData()
|
||||
self.otherChessData = otherChessData
|
||||
self.nIndex = nIndex
|
||||
self._mapNode.trSortItem.localPosition = Vector3(0, 0, 0)
|
||||
self._mapNode.charCtrl:SetItemData(self.otherChessData.nId)
|
||||
self._mapNode.charCtrl:SetCharLevel(self.otherChessData.nStar or 1)
|
||||
self.itemCanvas = self.gameObject:GetComponent("Canvas")
|
||||
NovaAPI.SetCanvasOverrideSorting(self.itemCanvas, false)
|
||||
self._mapNode.rayDragEvent.gameObject:SetActive(false)
|
||||
end
|
||||
function SoldierSandtableOtherCharItemCtrl:GetItemBtnInstanceId()
|
||||
return self._mapNode.rayDragEvent.gameObject:GetInstanceID()
|
||||
end
|
||||
function SoldierSandtableOtherCharItemCtrl:SetAnimator()
|
||||
end
|
||||
function SoldierSandtableOtherCharItemCtrl:SetItemPos(dragPos)
|
||||
local localPos = GameUIUtils.ScreenPointToLocalPoint(dragPos, self.gameObject.transform)
|
||||
self._mapNode.trSortItem.localPosition = Vector3(localPos.x, localPos.y, 0)
|
||||
end
|
||||
function SoldierSandtableOtherCharItemCtrl:InitSortingOrder(nSortOrder)
|
||||
self.nInitSortingOrder = nSortOrder
|
||||
end
|
||||
function SoldierSandtableOtherCharItemCtrl:CheckLimitAction()
|
||||
return self.levelData:CheckSandTableDisable()
|
||||
end
|
||||
function SoldierSandtableOtherCharItemCtrl:OnUIDrag_Drag(mDrag)
|
||||
if self:CheckLimitAction() then
|
||||
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Soldier_Sandtable_TemporaryReturn_Tips"))
|
||||
return
|
||||
end
|
||||
if self.otherChessData.nId <= 0 then
|
||||
return
|
||||
end
|
||||
if mDrag.DragEventType == AllEnum.UIDragType.DragStart then
|
||||
self.nLastPointerInsId = nil
|
||||
self:SetItemPos(mDrag.EventData.position)
|
||||
self._mapNode.raySortItem.enabled = false
|
||||
self._mapNode.rayDragEvent.enabled = false
|
||||
self._mapNode.btn_char.gameObject:SetActive(false)
|
||||
EventManager.Hit("SoldierSandtableOtherCharItemDragStart", self:GetItemBtnInstanceId(), self.otherChessData, self.nIndex)
|
||||
elseif mDrag.DragEventType == AllEnum.UIDragType.Drag then
|
||||
self:SetItemPos(mDrag.EventData.position)
|
||||
elseif mDrag.DragEventType == AllEnum.UIDragType.DragEnd then
|
||||
local pointerObj = mDrag.EventData.pointerCurrentRaycast
|
||||
if nil ~= pointerObj and nil ~= pointerObj.gameObject then
|
||||
local nPointerInsId = pointerObj.gameObject:GetInstanceID()
|
||||
if nPointerInsId ~= self.nLastPointerInsId then
|
||||
self.nLastPointerInsId = nPointerInsId
|
||||
EventManager.Hit("SoldierSandtableOtherCharItemDragEnd", self.otherChessData, nPointerInsId)
|
||||
else
|
||||
EventManager.Hit("SoldierSandtableOtherCharItemDragEnd", self.otherChessData, nPointerInsId)
|
||||
end
|
||||
else
|
||||
EventManager.Hit("SoldierSandtableOtherCharItemDragEnd", self.otherChessData, 0)
|
||||
end
|
||||
NovaAPI.SetCanvasOverrideSorting(self.itemCanvas, false)
|
||||
NovaAPI.SetCanvasSortingOrder(self.itemCanvas, self.nInitSortingOrder)
|
||||
self._mapNode.raySortItem.enabled = true
|
||||
self._mapNode.rayDragEvent.enabled = true
|
||||
self._mapNode.btn_char.gameObject:SetActive(true)
|
||||
end
|
||||
end
|
||||
function SoldierSandtableOtherCharItemCtrl:OnSoldierSandtableOtherCharItemDragStart(objInsId)
|
||||
self._mapNode.rayDragEvent.gameObject:SetActive(true)
|
||||
NovaAPI.SetCanvasOverrideSorting(self.itemCanvas, true)
|
||||
NovaAPI.SetCanvasSortingName(self.itemCanvas, AllEnum.SortingLayerName.UI)
|
||||
if self:GetItemBtnInstanceId() ~= objInsId then
|
||||
NovaAPI.SetCanvasSortingOrder(self.itemCanvas, self.nInitSortingOrder + 1)
|
||||
else
|
||||
NovaAPI.SetCanvasSortingOrder(self.itemCanvas, self.nInitSortingOrder + 2)
|
||||
end
|
||||
end
|
||||
function SoldierSandtableOtherCharItemCtrl:OnSoldierSandtableOtherCharItemDragEnd()
|
||||
NovaAPI.SetCanvasSortingOrder(self.itemCanvas, self.nInitSortingOrder + 1)
|
||||
self._mapNode.rayDragEvent.gameObject:SetActive(false)
|
||||
end
|
||||
function SoldierSandtableOtherCharItemCtrl:OnBtnClick_Char()
|
||||
if self.otherChessData.nId <= 0 then
|
||||
return
|
||||
end
|
||||
local chessData = {
|
||||
nId = self.otherChessData.nId,
|
||||
nStar = self.otherChessData.nStar,
|
||||
nPositionType = AllEnum.SoldierPositionType.Other
|
||||
}
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierCharCardTips, self.gameObject.transform, chessData)
|
||||
end
|
||||
return SoldierSandtableOtherCharItemCtrl
|
||||
@@ -0,0 +1,48 @@
|
||||
local SoldierSandtablePanel = class("SoldierSandtablePanel", BasePanel)
|
||||
SoldierSandtablePanel._bIsMainPanel = true
|
||||
SoldierSandtablePanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "Soldier/Level/SoldierSandtablePanel.prefab",
|
||||
sCtrlName = "Game.UI.Soldier.Sandtable.SoldierSandtableCtrl"
|
||||
}
|
||||
}
|
||||
function SoldierSandtablePanel:Awake()
|
||||
self.MainChessList = {}
|
||||
self.SupportChessList = {}
|
||||
self.WaitingChessList = {}
|
||||
self.OtherChessList = {}
|
||||
self.bFirstRefreshed = false
|
||||
end
|
||||
function SoldierSandtablePanel:InitChessList()
|
||||
for i = 1, 3 do
|
||||
self.MainChessList[i] = {
|
||||
nId = 0,
|
||||
nStar = 0,
|
||||
nPositionType = GameEnum.SoldierPositionType.FightPosition,
|
||||
nIndex = i
|
||||
}
|
||||
end
|
||||
for i = 1, 6 do
|
||||
self.SupportChessList[i] = {
|
||||
nId = 0,
|
||||
nStar = 0,
|
||||
nPositionType = GameEnum.SoldierPositionType.SupportPosition,
|
||||
nIndex = i
|
||||
}
|
||||
end
|
||||
for i = 1, 9 do
|
||||
self.WaitingChessList[i] = {
|
||||
nId = 0,
|
||||
nStar = 0,
|
||||
nPositionType = 3,
|
||||
nIndex = i
|
||||
}
|
||||
end
|
||||
end
|
||||
function SoldierSandtablePanel:OnEnable()
|
||||
end
|
||||
function SoldierSandtablePanel:OnDisable()
|
||||
end
|
||||
function SoldierSandtablePanel:OnDestroy()
|
||||
end
|
||||
return SoldierSandtablePanel
|
||||
@@ -0,0 +1,129 @@
|
||||
local SoldierPolicyItemCtrl = class("SoldierPolicyItemCtrl", BaseCtrl)
|
||||
SoldierPolicyItemCtrl._mapNodeConfig = {
|
||||
imgIconBg = {sComponentName = "Image"},
|
||||
imgIcon = {sComponentName = "Image"},
|
||||
txtName = {sComponentName = "TMP_Text"},
|
||||
txtDesc = {sComponentName = "TMP_Text"},
|
||||
RewardRoot = {},
|
||||
goChar = {
|
||||
sNodeName = "tc_char_small"
|
||||
},
|
||||
goItem = {
|
||||
sNodeName = "tc_item_small"
|
||||
},
|
||||
goRewardContent = {sComponentName = "Transform"},
|
||||
txtCharTitle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Select_PolicyItem_Effect_Title"
|
||||
},
|
||||
btnConfirm = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Confirm"
|
||||
},
|
||||
txtBtnConfirm = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "DailyInstance_Reward_Select"
|
||||
},
|
||||
AnimRootMain = {sComponentName = "Animator"}
|
||||
}
|
||||
SoldierPolicyItemCtrl._mapEventConfig = {}
|
||||
SoldierPolicyItemCtrl._mapRedDotConfig = {}
|
||||
local CHAR_CTRL = "Game.UI.Soldier.Template.Character.SoldierCharItemCtrl"
|
||||
local iconPath = "Icon/SoldierBuffCard/"
|
||||
function SoldierPolicyItemCtrl:Awake()
|
||||
self._mapNode.goChar.gameObject:SetActive(false)
|
||||
self._mapNode.goItem.gameObject:SetActive(false)
|
||||
self.tbCharItemsCtrl = {}
|
||||
self.nCardId = -1
|
||||
self.nIndex = 0
|
||||
self._bSelected = false
|
||||
end
|
||||
function SoldierPolicyItemCtrl:OnDisable()
|
||||
self:_ClearCharItems()
|
||||
if self.timerBtnConfirm ~= nil then
|
||||
self.timerBtnConfirm:Cancel()
|
||||
self.timerBtnConfirm = nil
|
||||
end
|
||||
end
|
||||
function SoldierPolicyItemCtrl:OnEnable()
|
||||
end
|
||||
function SoldierPolicyItemCtrl:OnDestroy()
|
||||
end
|
||||
function SoldierPolicyItemCtrl:SetItemData(cardId, index)
|
||||
self.nCardId = cardId
|
||||
self.nIndex = index or 0
|
||||
local mapCfg = ConfigTable.GetData("SoldierStarterCard", cardId)
|
||||
if not mapCfg then
|
||||
return
|
||||
end
|
||||
self:SetPngSprite(self._mapNode.imgIcon, iconPath .. mapCfg.Icon)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtName, mapCfg.Name)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtDesc, mapCfg.Des)
|
||||
local hasReward = mapCfg.CharacterShow and 0 < #mapCfg.CharacterShow
|
||||
self._mapNode.RewardRoot:SetActive(hasReward)
|
||||
if hasReward then
|
||||
self:_RefreshCharItems(mapCfg.CharacterShow)
|
||||
end
|
||||
self:SetSelected(false)
|
||||
self._mapNode.btnConfirm.gameObject:SetActive(false)
|
||||
end
|
||||
function SoldierPolicyItemCtrl:SetButtonCallback(fn)
|
||||
self._btnConfirmCallback = fn
|
||||
end
|
||||
function SoldierPolicyItemCtrl:_RefreshCharItems(tbCharIds)
|
||||
for k, charId in ipairs(tbCharIds) do
|
||||
local itemCtrl = self.tbCharItemsCtrl[k]
|
||||
if itemCtrl == nil then
|
||||
local go = instantiate(self._mapNode.goChar, self._mapNode.goRewardContent)
|
||||
itemCtrl = self:BindCtrlByNode(go, CHAR_CTRL)
|
||||
itemCtrl:SetCharLevel(1)
|
||||
table.insert(self.tbCharItemsCtrl, itemCtrl)
|
||||
end
|
||||
itemCtrl:SetCharItemBtnFunc(function()
|
||||
local chessData = {nId = charId, nStar = 1}
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierCharCardTips, self.charTipsRoot, chessData)
|
||||
end)
|
||||
itemCtrl.gameObject:SetActive(true)
|
||||
itemCtrl:SetItemData(charId)
|
||||
end
|
||||
end
|
||||
function SoldierPolicyItemCtrl:_ClearCharItems()
|
||||
for _, ctrl in ipairs(self.tbCharItemsCtrl) do
|
||||
local obj = ctrl.gameObject
|
||||
self:UnbindCtrlByNode(ctrl)
|
||||
destroy(obj)
|
||||
end
|
||||
self.tbCharItemsCtrl = {}
|
||||
end
|
||||
function SoldierPolicyItemCtrl:SetSelected(bSelected)
|
||||
if self.timerBtnConfirm ~= nil then
|
||||
self.timerBtnConfirm:Cancel()
|
||||
self.timerBtnConfirm = nil
|
||||
end
|
||||
local sSwitchAnimName = ""
|
||||
if bSelected == true then
|
||||
self._mapNode.btnConfirm.gameObject:SetActive(bSelected)
|
||||
sSwitchAnimName = "PolicyItem_up"
|
||||
elseif self._bSelected == true then
|
||||
sSwitchAnimName = "PolicyItem_down"
|
||||
local nAnimLength = NovaAPI.GetAnimClipLength(self._mapNode.AnimRootMain, sSwitchAnimName)
|
||||
self.timerBtnConfirm = self:AddTimer(1, nAnimLength, function()
|
||||
self._mapNode.btnConfirm.gameObject:SetActive(false)
|
||||
end, true, true, true)
|
||||
elseif self._bSelected == false then
|
||||
self._mapNode.btnConfirm.gameObject:SetActive(false)
|
||||
end
|
||||
if sSwitchAnimName ~= "" then
|
||||
self._mapNode.AnimRootMain:Play(sSwitchAnimName)
|
||||
end
|
||||
self._bSelected = bSelected == true
|
||||
end
|
||||
function SoldierPolicyItemCtrl:SetCharTipsRoot(tr)
|
||||
self.charTipsRoot = tr
|
||||
end
|
||||
function SoldierPolicyItemCtrl:OnBtnClick_Confirm()
|
||||
if self._btnConfirmCallback then
|
||||
self._btnConfirmCallback()
|
||||
end
|
||||
end
|
||||
return SoldierPolicyItemCtrl
|
||||
@@ -0,0 +1,123 @@
|
||||
local SoldierSelectPolicyCtrl = class("SoldierSelectPolicyCtrl", BaseCtrl)
|
||||
SoldierSelectPolicyCtrl._mapNodeConfig = {
|
||||
trBg = {sNodeName = "----BG----"},
|
||||
imgBgMain_Fx = {},
|
||||
trRoot = {
|
||||
sNodeName = "----SafeAreaRoot----"
|
||||
},
|
||||
goPolicyItem = {
|
||||
nCount = 3,
|
||||
sCtrlName = "Game.UI.Soldier.SelectPolicy.SoldierPolicyItemCtrl"
|
||||
},
|
||||
btnPolicyItem = {
|
||||
nCount = 3,
|
||||
sNodeName = "goPolicyItem",
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_PolicyItem"
|
||||
},
|
||||
btnRecommend = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Recommend"
|
||||
},
|
||||
btnRefreshBuff = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_RefreshBuff"
|
||||
},
|
||||
imgBtnMask = {},
|
||||
txtTitle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Select_Policy_Title"
|
||||
},
|
||||
txtReRollCount = {sComponentName = "TMP_Text"},
|
||||
trCharDetail = {sComponentName = "Transform"}
|
||||
}
|
||||
SoldierSelectPolicyCtrl._mapEventConfig = {
|
||||
SoldierRecommendPanel_Close = "OnEvent_SoldierRecommendPanelClose",
|
||||
SoldierRecommendPanel_Open = "OnEvent_SoldierRecommendPanelOpen"
|
||||
}
|
||||
SoldierSelectPolicyCtrl._mapRedDotConfig = {}
|
||||
function SoldierSelectPolicyCtrl:Awake()
|
||||
self.levelData = PlayerData.SoldierData:GetCurLevelData()
|
||||
self.tbCardList = {}
|
||||
self.nReRollCount = 0
|
||||
self.nSelectCardId = -1
|
||||
self.nSelectIndex = 0
|
||||
end
|
||||
function SoldierSelectPolicyCtrl:OnEnable()
|
||||
self:RefreshContent()
|
||||
end
|
||||
function SoldierSelectPolicyCtrl:OnDisable()
|
||||
end
|
||||
function SoldierSelectPolicyCtrl:OnDestroy()
|
||||
end
|
||||
function SoldierSelectPolicyCtrl:ClosePanel()
|
||||
EventManager.Hit(EventId.ClosePanel, PanelId.SoldierSelectPolicy)
|
||||
end
|
||||
function SoldierSelectPolicyCtrl:RefreshContent()
|
||||
self.nSelectCardId = -1
|
||||
self.nSelectIndex = 0
|
||||
if self.levelData == nil then
|
||||
return
|
||||
end
|
||||
self.tbCardList, self.nReRollCount = self.levelData:GetSelectCardData()
|
||||
for k, v in ipairs(self._mapNode.goPolicyItem) do
|
||||
v.gameObject:SetActive(self.tbCardList[k] ~= nil)
|
||||
if self.tbCardList[k] ~= nil then
|
||||
v:SetItemData(self.tbCardList[k], k)
|
||||
v:SetButtonCallback(function()
|
||||
self:OnBtnClick_Confirm(k)
|
||||
end)
|
||||
end
|
||||
end
|
||||
local sRemain = orderedFormat(ConfigTable.GetUIText("Soldier_Policy_ReRoll_Count"), self.nReRollCount)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtReRollCount, sRemain)
|
||||
self._mapNode.imgBtnMask.gameObject:SetActive(0 >= self.nReRollCount)
|
||||
for k, v in ipairs(self._mapNode.goPolicyItem) do
|
||||
v:SetCharTipsRoot(self._mapNode.trCharDetail)
|
||||
end
|
||||
end
|
||||
function SoldierSelectPolicyCtrl:HidePanel()
|
||||
self._mapNode.trBg.gameObject:SetActive(false)
|
||||
self._mapNode.imgBgMain_Fx.gameObject:SetActive(false)
|
||||
self._mapNode.trRoot.gameObject:SetActive(false)
|
||||
end
|
||||
function SoldierSelectPolicyCtrl:ShowPanel()
|
||||
self._mapNode.trBg.gameObject:SetActive(true)
|
||||
self._mapNode.imgBgMain_Fx.gameObject:SetActive(true)
|
||||
self._mapNode.trRoot.gameObject:SetActive(true)
|
||||
for k, v in ipairs(self._mapNode.goPolicyItem) do
|
||||
v:SetSelected(k == self.nSelectIndex)
|
||||
end
|
||||
end
|
||||
function SoldierSelectPolicyCtrl:OnBtnClick_PolicyItem(btn, nIndex)
|
||||
for k, v in ipairs(self._mapNode.goPolicyItem) do
|
||||
v:SetSelected(k == nIndex)
|
||||
end
|
||||
self.nSelectCardId = self.tbCardList[nIndex]
|
||||
self.nSelectIndex = nIndex
|
||||
end
|
||||
function SoldierSelectPolicyCtrl:OnBtnClick_RefreshBuff()
|
||||
if self.nReRollCount <= 0 then
|
||||
return
|
||||
end
|
||||
local callback = function()
|
||||
self:RefreshContent()
|
||||
end
|
||||
self.levelData:SendCardSelectReRoll(callback)
|
||||
end
|
||||
function SoldierSelectPolicyCtrl:OnBtnClick_Confirm(k)
|
||||
local callback = function()
|
||||
self:ClosePanel()
|
||||
end
|
||||
self.levelData:SendCardSelect(k, callback)
|
||||
end
|
||||
function SoldierSelectPolicyCtrl:OnBtnClick_Recommend()
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierRecommendPanel, true)
|
||||
end
|
||||
function SoldierSelectPolicyCtrl:OnEvent_SoldierRecommendPanelClose()
|
||||
self:ShowPanel()
|
||||
end
|
||||
function SoldierSelectPolicyCtrl:OnEvent_SoldierRecommendPanelOpen()
|
||||
self:HidePanel()
|
||||
end
|
||||
return SoldierSelectPolicyCtrl
|
||||
@@ -0,0 +1,21 @@
|
||||
local SoldierSelectPolicyPanel = class("SoldierSelectPolicyPanel", BasePanel)
|
||||
SoldierSelectPolicyPanel._bIsMainPanel = false
|
||||
SoldierSelectPolicyPanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "Soldier/Level/SoldierSelectPolicyPanel.prefab",
|
||||
sCtrlName = "Game.UI.Soldier.SelectPolicy.SoldierSelectPolicyCtrl"
|
||||
}
|
||||
}
|
||||
function SoldierSelectPolicyPanel:Awake()
|
||||
end
|
||||
function SoldierSelectPolicyPanel:OnEnable()
|
||||
end
|
||||
function SoldierSelectPolicyPanel:OnAfterEnter()
|
||||
end
|
||||
function SoldierSelectPolicyPanel:OnDisable()
|
||||
end
|
||||
function SoldierSelectPolicyPanel:OnDestroy()
|
||||
end
|
||||
function SoldierSelectPolicyPanel:OnRelease()
|
||||
end
|
||||
return SoldierSelectPolicyPanel
|
||||
@@ -0,0 +1,79 @@
|
||||
local SoldierShopProbabilityCtrl = class("SoldierShopProbabilityCtrl", BaseCtrl)
|
||||
SoldierShopProbabilityCtrl._mapNodeConfig = {
|
||||
btnCloseFull = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Close"
|
||||
},
|
||||
btnClose = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Close"
|
||||
},
|
||||
ScrollView = {
|
||||
sComponentName = "LoopScrollView"
|
||||
},
|
||||
txtWindowTitle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_ShopProbability_Title"
|
||||
},
|
||||
TextLv = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "WorldClass_Level"
|
||||
},
|
||||
TextLvCost = {sComponentName = "TMP_Text", nCount = 5}
|
||||
}
|
||||
SoldierShopProbabilityCtrl._mapEventConfig = {}
|
||||
SoldierShopProbabilityCtrl._mapRedDotConfig = {}
|
||||
local ITEM_LUA_PATH = "Game.UI.Soldier.ShopProbability.SoldierShopProbabilityItemCtrl"
|
||||
function SoldierShopProbabilityCtrl:Awake()
|
||||
self._tbItemCtrls = {}
|
||||
if self._mapNode.ListItemTemplate ~= nil then
|
||||
self._mapNode.ListItemTemplate:SetActive(false)
|
||||
end
|
||||
end
|
||||
function SoldierShopProbabilityCtrl:OnEnable()
|
||||
self:_RefreshList()
|
||||
end
|
||||
function SoldierShopProbabilityCtrl:OnDisable()
|
||||
self:UnbindRowItems()
|
||||
self.tbRowsCtrl = nil
|
||||
end
|
||||
function SoldierShopProbabilityCtrl:OnDestroy()
|
||||
end
|
||||
function SoldierShopProbabilityCtrl:_RefreshList()
|
||||
for k, v in pairs(self._mapNode.TextLvCost) do
|
||||
NovaAPI.SetTMPText(v, orderedFormat(ConfigTable.GetUIText("Soldier_ShopProbability_ChessCost"), k))
|
||||
end
|
||||
self.tbRows = {}
|
||||
local _f = function(mapLine)
|
||||
if mapLine ~= nil then
|
||||
table.insert(self.tbRows, mapLine)
|
||||
end
|
||||
end
|
||||
ForEachTableLine(ConfigTable.Get("SoldierShopLevel"), _f)
|
||||
table.sort(self.tbRows, function(a, b)
|
||||
return (a.Level or 0) < (b.Level or 0)
|
||||
end)
|
||||
self:UnbindRowItems()
|
||||
self._mapNode.ScrollView:Init(#self.tbRows, self, self.OnGridRefresh)
|
||||
end
|
||||
function SoldierShopProbabilityCtrl:OnGridRefresh(goGrid, nGridIndex)
|
||||
local nIndex = nGridIndex + 1
|
||||
local ctrl = self:BindCtrlByNode(goGrid, ITEM_LUA_PATH)
|
||||
if ctrl ~= nil then
|
||||
self.tbRowsCtrl[goGrid:GetInstanceID()] = ctrl
|
||||
ctrl:Refresh(self.tbRows[nIndex])
|
||||
end
|
||||
end
|
||||
function SoldierShopProbabilityCtrl:UnbindRowItems()
|
||||
if self.tbRowsCtrl == nil then
|
||||
self.tbRowsCtrl = {}
|
||||
return
|
||||
end
|
||||
for _, ctrl in ipairs(self.tbRowsCtrl) do
|
||||
self:UnbindCtrlByNode(ctrl)
|
||||
end
|
||||
end
|
||||
function SoldierShopProbabilityCtrl:OnBtnClick_Close()
|
||||
EventManager.Hit(EventId.ClosePanel, PanelId.SoldierShopProbabilityPanel)
|
||||
end
|
||||
return SoldierShopProbabilityCtrl
|
||||
@@ -0,0 +1,30 @@
|
||||
local SoldierShopProbabilityItemCtrl = class("SoldierShopProbabilityItemCtrl", BaseCtrl)
|
||||
SoldierShopProbabilityItemCtrl._mapNodeConfig = {
|
||||
TextProbability = {nCount = 5, sComponentName = "TMP_Text"},
|
||||
txtLv = {sComponentName = "TMP_Text"}
|
||||
}
|
||||
SoldierShopProbabilityItemCtrl._mapEventConfig = {}
|
||||
SoldierShopProbabilityItemCtrl._mapRedDotConfig = {}
|
||||
local RARITY_COUNT = 5
|
||||
function SoldierShopProbabilityItemCtrl:Awake()
|
||||
end
|
||||
function SoldierShopProbabilityItemCtrl:OnEnable()
|
||||
end
|
||||
function SoldierShopProbabilityItemCtrl:OnDisable()
|
||||
end
|
||||
function SoldierShopProbabilityItemCtrl:OnDestroy()
|
||||
end
|
||||
function SoldierShopProbabilityItemCtrl:Refresh(cfgData)
|
||||
if cfgData == nil then
|
||||
return
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.txtLv, tostring(cfgData.Level or ""))
|
||||
for i = 1, RARITY_COUNT do
|
||||
local txt = self._mapNode.TextProbability[i]
|
||||
if txt ~= nil then
|
||||
local nValue = cfgData["Rarity" .. i] or 0
|
||||
NovaAPI.SetTMPText(txt, tostring(nValue) .. "%")
|
||||
end
|
||||
end
|
||||
end
|
||||
return SoldierShopProbabilityItemCtrl
|
||||
@@ -0,0 +1,22 @@
|
||||
local SoldierShopProbabilityPanel = class("SoldierShopProbabilityPanel", BasePanel)
|
||||
SoldierShopProbabilityPanel._bIsMainPanel = false
|
||||
SoldierShopProbabilityPanel._sSortingLayerName = AllEnum.SortingLayerName.UI
|
||||
SoldierShopProbabilityPanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "Soldier/Level/SoldierShopProbabilityPanel.prefab",
|
||||
sCtrlName = "Game.UI.Soldier.ShopProbability.SoldierShopProbabilityCtrl"
|
||||
}
|
||||
}
|
||||
function SoldierShopProbabilityPanel:Awake()
|
||||
end
|
||||
function SoldierShopProbabilityPanel:OnEnable()
|
||||
end
|
||||
function SoldierShopProbabilityPanel:OnAfterEnter()
|
||||
end
|
||||
function SoldierShopProbabilityPanel:OnDisable()
|
||||
end
|
||||
function SoldierShopProbabilityPanel:OnDestroy()
|
||||
end
|
||||
function SoldierShopProbabilityPanel:OnRelease()
|
||||
end
|
||||
return SoldierShopProbabilityPanel
|
||||
@@ -0,0 +1,151 @@
|
||||
local SoldierLevelSelectCtrl = class("SoldierLevelSelectCtrl", BaseCtrl)
|
||||
SoldierLevelSelectCtrl._mapNodeConfig = {
|
||||
topbar = {
|
||||
sNodeName = "TopBarPanel",
|
||||
sCtrlName = "Game.UI.TopBarEx.TopBarCtrl"
|
||||
},
|
||||
btn_Difficulty = {
|
||||
nCount = 2,
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Difficulty"
|
||||
}
|
||||
}
|
||||
SoldierLevelSelectCtrl._mapEventConfig = {}
|
||||
SoldierLevelSelectCtrl._mapRedDotConfig = {}
|
||||
function SoldierLevelSelectCtrl:Awake()
|
||||
local actData = PlayerData.Activity:GetActivityDataByType(GameEnum.activityType.Soldier)
|
||||
if actData == nil then
|
||||
return
|
||||
end
|
||||
actData:RefreshLevelNew()
|
||||
end
|
||||
function SoldierLevelSelectCtrl:OnEnable()
|
||||
self:Refresh()
|
||||
end
|
||||
function SoldierLevelSelectCtrl:Refresh()
|
||||
local curChallengeData = PlayerData.SoldierData:GetCurChallengeData()
|
||||
self.curChallengeData = curChallengeData
|
||||
self.tbAllChallenge = {}
|
||||
local func_ForEach_Challenge = function(mapLineData)
|
||||
table.insert(self.tbAllChallenge, mapLineData)
|
||||
end
|
||||
ForEachTableLine(DataTable.SoldierGradeChallenge, func_ForEach_Challenge)
|
||||
table.sort(self.tbAllChallenge, function(a, b)
|
||||
if a.KeyGradeId == b.KeyGradeId then
|
||||
return a.GradeLevel < b.GradeLevel
|
||||
end
|
||||
return a.KeyGradeId < b.KeyGradeId
|
||||
end)
|
||||
self.nHighestChallengeId = PlayerData.SoldierData:GetHighestChallengeId()
|
||||
local nIndex = table.indexof(self.tbAllChallenge, function(a)
|
||||
return a.KeyGradeId == self.nHighestChallengeId
|
||||
end)
|
||||
if nIndex == 0 then
|
||||
nIndex = 1
|
||||
end
|
||||
self:OnBtnClick_Difficulty(_, nIndex)
|
||||
for i = 1, 2 do
|
||||
do
|
||||
local config = ConfigTable.GetData("SoldierGradeChallenge", self.tbAllChallenge[i].Id)
|
||||
if config ~= nil then
|
||||
local btnDifficulty = self._mapNode.btn_Difficulty[i]
|
||||
local txt_TitleNormal = btnDifficulty.transform:Find("AnimRoot/txt_TitleNormal"):GetComponent("TMP_Text")
|
||||
local txt_CountNormal = btnDifficulty.transform:Find("AnimRoot/txt_CountNormal"):GetComponent("TMP_Text")
|
||||
local txtGoLevelNormal = btnDifficulty.transform:Find("AnimRoot/imgLevelNormal/txtGoLevelNormal"):GetComponent("TMP_Text")
|
||||
local btnChallenge = btnDifficulty.transform:Find("AnimRoot/btnChallenge"):GetComponent("UIButton")
|
||||
local txtBtnChallenge = btnChallenge.transform:Find("AnimRoot/txtBtnChallenge"):GetComponent("TMP_Text")
|
||||
local goLevelHint = btnDifficulty.transform:Find("AnimRoot/goLevelHint")
|
||||
local btnContinue = btnDifficulty.transform:Find("AnimRoot/btnContinue"):GetComponent("UIButton")
|
||||
local txtBtnContinue = btnContinue.transform:Find("AnimRoot/txtBtnContinue"):GetComponent("TMP_Text")
|
||||
local txt_goLevelHint = btnDifficulty.transform:Find("AnimRoot/goLevelHint/imgContentBg/txt_goLevelHint"):GetComponent("TMP_Text")
|
||||
local btnSettle = btnDifficulty.transform:Find("AnimRoot/btnSettle"):GetComponent("UIButton")
|
||||
local txtBtnSettle = btnSettle.transform:Find("AnimRoot/txtBtnSettle"):GetComponent("TMP_Text")
|
||||
local imgLockRoot = btnDifficulty.transform:Find("AnimRoot/imgLockRoot"):GetComponent("Image")
|
||||
local txtLockHard = btnDifficulty.transform:Find("AnimRoot/imgLockRoot/imgLockHard/txtLockHard"):GetComponent("TMP_Text")
|
||||
NovaAPI.SetTMPText(txt_TitleNormal, config.Name)
|
||||
NovaAPI.SetTMPText(txt_CountNormal, orderedFormat(ConfigTable.GetUIText("Soldier_Level_Select_Reward"), config.Score))
|
||||
NovaAPI.SetTMPText(txtGoLevelNormal, orderedFormat(ConfigTable.GetUIText("Soldier_Battle_Level"), config.OppoLevelShow))
|
||||
NovaAPI.SetTMPText(txtBtnChallenge, ConfigTable.GetUIText("Soldier_Level_Select_Challenge"))
|
||||
NovaAPI.SetTMPText(txtBtnContinue, ConfigTable.GetUIText("Soldier_Level_Select_Continue"))
|
||||
NovaAPI.SetTMPText(txtBtnSettle, ConfigTable.GetUIText("Soldier_Level_Select_DoResult"))
|
||||
btnChallenge.onClick:RemoveAllListeners()
|
||||
btnChallenge.onClick:AddListener(function()
|
||||
self:OnBtnClick_Challenge(i)
|
||||
end)
|
||||
btnContinue.onClick:RemoveAllListeners()
|
||||
btnContinue.onClick:AddListener(function()
|
||||
self:OnBtnClick_Continue(i)
|
||||
end)
|
||||
btnSettle.onClick:RemoveAllListeners()
|
||||
btnSettle.onClick:AddListener(function()
|
||||
local callback = function()
|
||||
self:Refresh()
|
||||
end
|
||||
PlayerData.SoldierData:SendGiveUp(callback)
|
||||
end)
|
||||
goLevelHint.gameObject:SetActive(false)
|
||||
btnContinue.gameObject:SetActive(false)
|
||||
btnSettle.gameObject:SetActive(false)
|
||||
imgLockRoot.gameObject:SetActive(false)
|
||||
btnChallenge.gameObject:SetActive(false)
|
||||
local bUnlocked = PlayerData.SoldierData:CheckChallengeUnlocked(self.tbAllChallenge[i].Id)
|
||||
imgLockRoot.gameObject:SetActive(not bUnlocked)
|
||||
if bUnlocked then
|
||||
if self.curChallengeData.nGradeChallengeId ~= 0 then
|
||||
if self.curChallengeData.nGradeChallengeId == self.tbAllChallenge[i].Id then
|
||||
btnContinue.gameObject:SetActive(true)
|
||||
goLevelHint.gameObject:SetActive(true)
|
||||
btnSettle.gameObject:SetActive(true)
|
||||
local nStage, nNodexIndex = PlayerData.SoldierData:GetCurChallengeState()
|
||||
NovaAPI.SetTMPText(txt_goLevelHint, orderedFormat(ConfigTable.GetUIText("Soldier_Level_Select_NodeIndex"), nStage, nNodexIndex))
|
||||
else
|
||||
imgLockRoot.gameObject:SetActive(true)
|
||||
NovaAPI.SetTMPText(txtLockHard, ConfigTable.GetUIText("Soldier_Level_Select_Lock1"))
|
||||
end
|
||||
else
|
||||
btnChallenge.gameObject:SetActive(true)
|
||||
end
|
||||
else
|
||||
imgLockRoot.gameObject:SetActive(true)
|
||||
NovaAPI.SetTMPText(txtLockHard, ConfigTable.GetUIText("Soldier_Level_Select_Lock2"))
|
||||
end
|
||||
if i == 2 then
|
||||
local chess1 = btnDifficulty.transform:Find("AnimRoot/img_Chess2/img_Chess2").gameObject:GetComponent("DOTweenAnimation")
|
||||
local chess2 = btnDifficulty.transform:Find("AnimRoot/imgIconDb/img_Chess1/img_Chess2").gameObject:GetComponent("DOTweenAnimation")
|
||||
local chess3 = btnDifficulty.transform:Find("AnimRoot/imgIconDb/img_Chess3/img_Chess2").gameObject:GetComponent("DOTweenAnimation")
|
||||
if bUnlocked then
|
||||
chess1:DOPlay()
|
||||
chess2:DOPlay()
|
||||
chess3:DOPlay()
|
||||
else
|
||||
chess1:DOKill()
|
||||
chess2:DOKill()
|
||||
chess3:DOKill()
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
function SoldierLevelSelectCtrl:EnterSoldier(nIndex)
|
||||
local actData = PlayerData.Activity:GetActivityDataByType(GameEnum.activityType.Soldier)
|
||||
if actData == nil then
|
||||
return
|
||||
end
|
||||
local callback = function()
|
||||
self:ClosePanel()
|
||||
end
|
||||
PlayerData.SoldierData:EnterSoldier(actData.nActId, self.tbAllChallenge[nIndex].Id, callback)
|
||||
end
|
||||
function SoldierLevelSelectCtrl:ClosePanel()
|
||||
end
|
||||
function SoldierLevelSelectCtrl:OnBtnClick_Difficulty(_, nIndex)
|
||||
self.nSelectedChallenge = self.tbAllChallenge[nIndex].Id
|
||||
end
|
||||
function SoldierLevelSelectCtrl:OnBtnClick_Challenge(nIndex)
|
||||
self:EnterSoldier(nIndex)
|
||||
end
|
||||
function SoldierLevelSelectCtrl:OnBtnClick_Continue(nIndex)
|
||||
self:EnterSoldier(nIndex)
|
||||
end
|
||||
return SoldierLevelSelectCtrl
|
||||
@@ -0,0 +1,22 @@
|
||||
local SoldierLevelSelectPanel = class("SoldierLevelSelectPanel", BasePanel)
|
||||
SoldierLevelSelectPanel._bIsMainPanel = true
|
||||
SoldierLevelSelectPanel._sSortingLayerName = AllEnum.SortingLayerName.UI
|
||||
SoldierLevelSelectPanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "Soldier/SoldierLevelSelectPanel.prefab",
|
||||
sCtrlName = "Game.UI.Soldier.SoldierLevelSelectCtrl"
|
||||
}
|
||||
}
|
||||
function SoldierLevelSelectPanel:Awake()
|
||||
end
|
||||
function SoldierLevelSelectPanel:OnEnable()
|
||||
end
|
||||
function SoldierLevelSelectPanel:OnAfterEnter()
|
||||
end
|
||||
function SoldierLevelSelectPanel:OnDisable()
|
||||
end
|
||||
function SoldierLevelSelectPanel:OnDestroy()
|
||||
end
|
||||
function SoldierLevelSelectPanel:OnRelease()
|
||||
end
|
||||
return SoldierLevelSelectPanel
|
||||
@@ -0,0 +1,169 @@
|
||||
local SoldierMainViewCtrl = class("SoldierMainViewCtrl", BaseCtrl)
|
||||
local RedDotManager = require("GameCore.RedDot.RedDotManager")
|
||||
local ClientManager = CS.ClientManager
|
||||
SoldierMainViewCtrl._mapNodeConfig = {
|
||||
TopBar = {
|
||||
sNodeName = "TopBarPanel",
|
||||
sCtrlName = "Game.UI.TopBarEx.TopBarCtrl"
|
||||
},
|
||||
btn_Handbook = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Handbook"
|
||||
},
|
||||
txt_Handbook = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Handbook"
|
||||
},
|
||||
txt_HandbookNum = {sComponentName = "TMP_Text"},
|
||||
redDot_Handbook = {},
|
||||
redDot_Handbook_New = {},
|
||||
btn_Quest = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Quest"
|
||||
},
|
||||
txt_Quest = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Quest"
|
||||
},
|
||||
txt_QuestNum = {sComponentName = "TMP_Text"},
|
||||
btn_Recommend = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Recommend"
|
||||
},
|
||||
txt_Recommend = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Recommend"
|
||||
},
|
||||
redDot_Recommend = {},
|
||||
redDot_Recommend_New = {},
|
||||
btn_Go = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Go"
|
||||
},
|
||||
txt_Go = {sComponentName = "TMP_Text", sLanguageId = "Soldier_Go"},
|
||||
txtGoTime = {sComponentName = "TMP_Text"},
|
||||
txtActivityDate = {sComponentName = "TMP_Text"},
|
||||
txtActivityTime = {sComponentName = "TMP_Text"},
|
||||
redDot_Quest = {},
|
||||
redDot_Quest_New = {},
|
||||
redDot_Go = {},
|
||||
redDot_Go_New = {}
|
||||
}
|
||||
SoldierMainViewCtrl._mapEventConfig = {
|
||||
[EventId.ClosePanel] = "OnEvent_ClosePanel"
|
||||
}
|
||||
SoldierMainViewCtrl._mapRedDotConfig = {
|
||||
[RedDotDefine.Solider_Level_New] = {
|
||||
sNodeName = "redDot_Go_New"
|
||||
}
|
||||
}
|
||||
function SoldierMainViewCtrl:Awake()
|
||||
RedDotManager.RegisterNode(RedDotDefine.Solider_AllQuest, nil, self._mapNode.redDot_Quest)
|
||||
self._mapNode.redDot_Handbook:SetActive(false)
|
||||
self._mapNode.redDot_Handbook_New:SetActive(false)
|
||||
local actData = PlayerData.Activity:GetActivityDataByType(GameEnum.activityType.Soldier)
|
||||
if actData == nil then
|
||||
return
|
||||
end
|
||||
self:RefreshDate()
|
||||
self:RefreshTimeout()
|
||||
if nil == self.remainTimer then
|
||||
self.remainTimer = self:AddTimer(0, 1, "RefreshTimeout", true, true, false)
|
||||
end
|
||||
self._mapNode.redDot_Recommend:SetActive(false)
|
||||
self._mapNode.redDot_Recommend_New:SetActive(false)
|
||||
self._mapNode.redDot_Go:SetActive(false)
|
||||
self._mapNode.redDot_Go_New:SetActive(false)
|
||||
end
|
||||
function SoldierMainViewCtrl:OnEnable()
|
||||
self:RefreshQuest()
|
||||
end
|
||||
function SoldierMainViewCtrl:RefreshQuest()
|
||||
local bHasComQuest = RedDotManager.GetValid(RedDotDefine.Solider_AllQuest)
|
||||
local bHasNewQuest = RedDotManager.GetValid(RedDotDefine.Solider_Quest_New)
|
||||
if bHasNewQuest and not bHasComQuest then
|
||||
self._mapNode.redDot_Quest_New:SetActive(true)
|
||||
else
|
||||
self._mapNode.redDot_Quest_New:SetActive(false)
|
||||
end
|
||||
local allQuestCount = PlayerData.SoldierData:GetAllQuestCount()
|
||||
local allReceivedCount = PlayerData.SoldierData:GetAllReceivedCount()
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_QuestNum, string.format("%d/%d", allReceivedCount, allQuestCount))
|
||||
end
|
||||
function SoldierMainViewCtrl:RefreshDate()
|
||||
local actData = PlayerData.Activity:GetActivityDataByType(GameEnum.activityType.Soldier)
|
||||
if actData == nil then
|
||||
return
|
||||
end
|
||||
local actCfg = ConfigTable.GetData("Activity", actData.nActId)
|
||||
local nOpenTime = CS.ClientManager.Instance:ISO8601StrToTimeStamp(actCfg.StartTime)
|
||||
local nEndTime = CS.ClientManager.Instance:ISO8601StrToTimeStamp(actCfg.EndTime)
|
||||
local nOpenYear = tonumber(os.date("%Y", nOpenTime))
|
||||
local nOpenMonth = tonumber(os.date("%m", nOpenTime))
|
||||
local nOpenDay = tonumber(os.date("%d", nOpenTime))
|
||||
local nEndYear = tonumber(os.date("%Y", nEndTime))
|
||||
local nEndMonth = tonumber(os.date("%m", nEndTime))
|
||||
local nEndDay = tonumber(os.date("%d", nEndTime))
|
||||
local strOpenDay = string.format("%d", nOpenDay)
|
||||
local strEndDay = string.format("%d", nEndDay)
|
||||
local dateStr = string.format("%s/%s/%s ~ %s/%s/%s", nOpenYear, nOpenMonth, strOpenDay, nEndYear, nEndMonth, strEndDay)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtActivityDate, dateStr)
|
||||
end
|
||||
function SoldierMainViewCtrl:RefreshTimeout()
|
||||
local actData = PlayerData.Activity:GetActivityDataByType(GameEnum.activityType.Soldier)
|
||||
if actData == nil then
|
||||
return
|
||||
end
|
||||
local endTime = actData:GetActEndTime()
|
||||
local curTime = ClientManager.Instance.serverTimeStamp
|
||||
local remainTime = endTime - curTime
|
||||
if remainTime < 0 then
|
||||
TimerManager.Remove(self.remainTimer)
|
||||
self.remainTimer = nil
|
||||
EventManager.Hit(EventId.OpenMessageBox, {
|
||||
nType = AllEnum.MessageBox.Alert,
|
||||
sContent = ConfigTable.GetUIText("Activity_Invalid_Tip_1"),
|
||||
callbackConfirm = function()
|
||||
EventManager.Hit(EventId.ClosePanel, PanelId.ActivityList)
|
||||
end
|
||||
})
|
||||
return
|
||||
end
|
||||
local sTimeStr = ""
|
||||
if remainTime <= 60 then
|
||||
local sec = math.floor(remainTime)
|
||||
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Sec") or "", sec)
|
||||
elseif 60 < remainTime and remainTime <= 3600 then
|
||||
local min = math.floor(remainTime / 60)
|
||||
local sec = math.floor(remainTime - min * 60)
|
||||
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Min") or "", min, sec)
|
||||
elseif 3600 < remainTime and remainTime <= 86400 then
|
||||
local hour = math.floor(remainTime / 3600)
|
||||
local min = math.floor((remainTime - hour * 3600) / 60)
|
||||
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Hour") or "", hour, min)
|
||||
elseif 86400 < remainTime then
|
||||
local day = math.floor(remainTime / 86400)
|
||||
local hour = math.floor((remainTime - day * 86400) / 3600)
|
||||
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Day") or "", day, hour)
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.txtActivityTime, sTimeStr)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtGoTime, sTimeStr)
|
||||
end
|
||||
function SoldierMainViewCtrl:OnBtnClick_Handbook()
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierHandbookSelectPanel)
|
||||
end
|
||||
function SoldierMainViewCtrl:OnBtnClick_Recommend()
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierRecommendPanel)
|
||||
end
|
||||
function SoldierMainViewCtrl:OnBtnClick_Quest()
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierQuestPanel)
|
||||
end
|
||||
function SoldierMainViewCtrl:OnBtnClick_Go()
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierLevelSelectPanel)
|
||||
end
|
||||
function SoldierMainViewCtrl:OnEvent_ClosePanel(nPanelId)
|
||||
if nPanelId == PanelId.SoldierQuestPanel then
|
||||
self:RefreshQuest()
|
||||
end
|
||||
end
|
||||
return SoldierMainViewCtrl
|
||||
@@ -0,0 +1,22 @@
|
||||
local SoldierMainViewPanel = class("SoldierMainViewPanel", BasePanel)
|
||||
SoldierMainViewPanel._bIsMainPanel = true
|
||||
SoldierMainViewPanel._sSortingLayerName = AllEnum.SortingLayerName.UI
|
||||
SoldierMainViewPanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "Soldier/SoldierMainViewPanel.prefab",
|
||||
sCtrlName = "Game.UI.Soldier.SoldierMainViewCtrl"
|
||||
}
|
||||
}
|
||||
function SoldierMainViewPanel:Awake()
|
||||
end
|
||||
function SoldierMainViewPanel:OnEnable()
|
||||
end
|
||||
function SoldierMainViewPanel:OnAfterEnter()
|
||||
end
|
||||
function SoldierMainViewPanel:OnDisable()
|
||||
end
|
||||
function SoldierMainViewPanel:OnDestroy()
|
||||
end
|
||||
function SoldierMainViewPanel:OnRelease()
|
||||
end
|
||||
return SoldierMainViewPanel
|
||||
@@ -0,0 +1,290 @@
|
||||
local SoldierQuestCtrl = class("SoldierQuestCtrl", BaseCtrl)
|
||||
SoldierQuestCtrl._mapNodeConfig = {
|
||||
animator = {sNodeName = "WindowRoot", sComponentName = "Animator"},
|
||||
btnClose = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Close"
|
||||
},
|
||||
btn_close = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Close"
|
||||
},
|
||||
txtWindowTitle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_QuestPanelTitle"
|
||||
},
|
||||
btnLeft = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Tab1"
|
||||
},
|
||||
btnRight = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Tab2"
|
||||
},
|
||||
sv = {
|
||||
sComponentName = "LoopScrollView"
|
||||
},
|
||||
btn_GetAllReward = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_GetReward"
|
||||
},
|
||||
txt_GetAllReward = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Quest_GetAllReward"
|
||||
},
|
||||
btn_GetAllReward_None = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_GetReward_None"
|
||||
},
|
||||
txt_GetAllReward_None = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_Quest_GetAllReward"
|
||||
}
|
||||
}
|
||||
SoldierQuestCtrl._mapEventConfig = {}
|
||||
SoldierQuestCtrl._mapRedDotConfig = {}
|
||||
function SoldierQuestCtrl:Awake()
|
||||
self._mapNode.animator:Play("t_window_04_t_in")
|
||||
EventManager.Hit(EventId.TemporaryBlockInput, 0.3)
|
||||
self.nTabIndex = 1
|
||||
self.tbQuestGroup = {}
|
||||
self.tbAllQuestData = PlayerData.SoldierData:GetAllQuestData()
|
||||
self.nSelectedGroupId = 0
|
||||
self.tbQuestList = {}
|
||||
end
|
||||
function SoldierQuestCtrl:OnEnable()
|
||||
self:InitQuestGroup()
|
||||
self:InitTab()
|
||||
self:CheckTabPriority()
|
||||
self:SelectTab(self.nTabIndex, true)
|
||||
end
|
||||
function SoldierQuestCtrl:OnDisable()
|
||||
end
|
||||
function SoldierQuestCtrl:OnDestroy()
|
||||
if self.tbItemCtrl ~= nil then
|
||||
for _, ctrl in pairs(self.tbItemCtrl) do
|
||||
self:UnbindCtrlByNode(ctrl)
|
||||
end
|
||||
end
|
||||
end
|
||||
function SoldierQuestCtrl:CheckTabPriority()
|
||||
local bIsLockRight = PlayerData.SoldierData:IsGroupLock(self.tbQuestGroup[2])
|
||||
if bIsLockRight then
|
||||
self.nTabIndex = 1
|
||||
return
|
||||
end
|
||||
local bHasRedDotLeft = RedDotManager.GetValid(RedDotDefine.Solider_Quest_Group, self.tbQuestGroup[1])
|
||||
local bHasRedDotRight = RedDotManager.GetValid(RedDotDefine.Solider_Quest_Group, self.tbQuestGroup[2])
|
||||
if bHasRedDotLeft then
|
||||
self.nTabIndex = 1
|
||||
return
|
||||
elseif bHasRedDotRight then
|
||||
self.nTabIndex = 2
|
||||
return
|
||||
end
|
||||
local tbQuestData = PlayerData.SoldierData:GetQuestDataByGroupId(self.tbQuestGroup[1])
|
||||
self.tbQuestList = {}
|
||||
for _, questData in pairs(tbQuestData) do
|
||||
table.insert(self.tbQuestList, questData)
|
||||
end
|
||||
local nCompleteCount = 0
|
||||
for _, questData in ipairs(self.tbQuestList) do
|
||||
if questData.nStatus == AllEnum.ActQuestStatus.Received then
|
||||
nCompleteCount = nCompleteCount + 1
|
||||
end
|
||||
end
|
||||
if nCompleteCount == #self.tbQuestList then
|
||||
self.nTabIndex = 2
|
||||
return
|
||||
end
|
||||
end
|
||||
function SoldierQuestCtrl:InitQuestGroup()
|
||||
local func_ForEach_QuestGroup = function(mapLineData)
|
||||
if mapLineData.ActivityId == self.nActId then
|
||||
table.insert(self.tbQuestGroup, mapLineData.Id)
|
||||
end
|
||||
end
|
||||
ForEachTableLine(DataTable.SoldierQuestGroup, func_ForEach_QuestGroup)
|
||||
table.sort(self.tbQuestGroup, function(a, b)
|
||||
return a < b
|
||||
end)
|
||||
end
|
||||
function SoldierQuestCtrl:InitTab()
|
||||
if #self.tbQuestGroup < 2 then
|
||||
return
|
||||
end
|
||||
local txtLeft1 = self._mapNode.btnLeft.transform:Find("AnimRoot/imgOff/txtLeft"):GetComponent("TMP_Text")
|
||||
local txtLeft2 = self._mapNode.btnLeft.transform:Find("AnimRoot/imgOn/txtLeft"):GetComponent("TMP_Text")
|
||||
local groupConfig1 = ConfigTable.GetData("SoldierQuestGroup", self.tbQuestGroup[1])
|
||||
local groupConfig2 = ConfigTable.GetData("SoldierQuestGroup", self.tbQuestGroup[2])
|
||||
NovaAPI.SetTMPText(txtLeft1, groupConfig1.Des)
|
||||
NovaAPI.SetTMPText(txtLeft2, groupConfig1.Des)
|
||||
local txtRight1 = self._mapNode.btnRight.transform:Find("AnimRoot/imgOn/txtRight"):GetComponent("TMP_Text")
|
||||
local txtRight2 = self._mapNode.btnRight.transform:Find("AnimRoot/imgOff/txtRight"):GetComponent("TMP_Text")
|
||||
NovaAPI.SetTMPText(txtRight1, groupConfig2.Des)
|
||||
NovaAPI.SetTMPText(txtRight2, groupConfig2.Des)
|
||||
self:RefreshRedDot()
|
||||
local bIsLockLeft = PlayerData.SoldierData:IsGroupLock(self.tbQuestGroup[1])
|
||||
local bIsLockRight = PlayerData.SoldierData:IsGroupLock(self.tbQuestGroup[2])
|
||||
self._mapNode.btnRight.transform:Find("AnimRoot/imgOff/imgLock").gameObject:SetActive(bIsLockRight)
|
||||
end
|
||||
function SoldierQuestCtrl:SelectTab(nTabIndex, bForce)
|
||||
if self.nTabIndex == nTabIndex and not bForce then
|
||||
return
|
||||
end
|
||||
self.nTabIndex = nTabIndex
|
||||
local imgOn1 = self._mapNode.btnLeft.transform:Find("AnimRoot/imgOn")
|
||||
local imgOff1 = self._mapNode.btnLeft.transform:Find("AnimRoot/imgOff")
|
||||
local imgOn2 = self._mapNode.btnRight.transform:Find("AnimRoot/imgOn")
|
||||
local imgOff2 = self._mapNode.btnRight.transform:Find("AnimRoot/imgOff")
|
||||
imgOn1.gameObject:SetActive(self.nTabIndex == 1)
|
||||
imgOff1.gameObject:SetActive(self.nTabIndex ~= 1)
|
||||
imgOn2.gameObject:SetActive(self.nTabIndex == 2)
|
||||
imgOff2.gameObject:SetActive(self.nTabIndex ~= 2)
|
||||
self.nSelectedGroupId = self.tbQuestGroup[self.nTabIndex]
|
||||
local tbQuestData = PlayerData.SoldierData:GetQuestDataByGroupId(self.nSelectedGroupId)
|
||||
if tbQuestData == nil then
|
||||
local actData = PlayerData.Activity:GetActivityDataByType(GameEnum.activityType.Soldier)
|
||||
actData:RefreshAllQuestData(function()
|
||||
self:SelectTab(self.nTabIndex, true)
|
||||
end)
|
||||
return
|
||||
end
|
||||
self.tbQuestList = {}
|
||||
for _, questData in pairs(tbQuestData) do
|
||||
table.insert(self.tbQuestList, questData)
|
||||
end
|
||||
table.sort(self.tbQuestList, function(a, b)
|
||||
if a.nStatus ~= b.nStatus then
|
||||
return a.nStatus < b.nStatus
|
||||
end
|
||||
return a.nId < b.nId
|
||||
end)
|
||||
self.tbItemCtrl = {}
|
||||
self._mapNode.sv:Init(#self.tbQuestList, self, self.OnRefreshQuestGrid)
|
||||
local bHasComplete = false
|
||||
for _, questData in pairs(self.tbQuestList) do
|
||||
if questData.nStatus == AllEnum.ActQuestStatus.Complete then
|
||||
bHasComplete = true
|
||||
break
|
||||
end
|
||||
end
|
||||
self._mapNode.btn_GetAllReward.gameObject:SetActive(bHasComplete)
|
||||
self._mapNode.btn_GetAllReward_None.gameObject:SetActive(not bHasComplete)
|
||||
PlayerData.SoldierData:SetViewedGroupId(self.nSelectedGroupId)
|
||||
self:RefreshRedDot()
|
||||
end
|
||||
function SoldierQuestCtrl:RefreshRedDot()
|
||||
local redDotLeft = self._mapNode.btnLeft.transform:Find("AnimRoot/redDotLeft")
|
||||
local redDotRight = self._mapNode.btnRight.transform:Find("AnimRoot/redDotRight")
|
||||
RedDotManager.RegisterNode(RedDotDefine.Solider_Quest_Group, self.tbQuestGroup[1], redDotLeft.gameObject)
|
||||
RedDotManager.RegisterNode(RedDotDefine.Solider_Quest_Group, self.tbQuestGroup[2], redDotRight.gameObject)
|
||||
local redDotLeftNew = self._mapNode.btnLeft.transform:Find("AnimRoot/redDotLeftNew")
|
||||
local redDotRightNew = self._mapNode.btnRight.transform:Find("AnimRoot/redDotRightNew")
|
||||
local bHasRedDotLeft = RedDotManager.GetValid(RedDotDefine.Solider_Quest_Group, self.tbQuestGroup[1])
|
||||
local bHasRedDotRight = RedDotManager.GetValid(RedDotDefine.Solider_Quest_Group, self.tbQuestGroup[2])
|
||||
local bHasNewQuestLeft = RedDotManager.GetValid(RedDotDefine.Solider_Quest_New_Group, self.tbQuestGroup[1])
|
||||
local bHasNewQuestRight = RedDotManager.GetValid(RedDotDefine.Solider_Quest_New_Group, self.tbQuestGroup[2])
|
||||
if bHasNewQuestLeft and not bHasRedDotLeft then
|
||||
redDotLeftNew.gameObject:SetActive(true)
|
||||
else
|
||||
redDotLeftNew.gameObject:SetActive(false)
|
||||
end
|
||||
if bHasNewQuestRight and not bHasRedDotRight then
|
||||
redDotRightNew.gameObject:SetActive(true)
|
||||
else
|
||||
redDotRightNew.gameObject:SetActive(false)
|
||||
end
|
||||
end
|
||||
function SoldierQuestCtrl:OnRefreshQuestGrid(goGrid, gridIndex)
|
||||
local nIndex = gridIndex + 1
|
||||
local questData = self.tbQuestList[nIndex]
|
||||
local questConfig = ConfigTable.GetData("SoldierQuest", questData.nId)
|
||||
if questConfig == nil then
|
||||
return
|
||||
end
|
||||
for i = 1, 2 do
|
||||
do
|
||||
local index = i
|
||||
local btnItem = goGrid.transform:Find("DetailRoot/AnimRoot/btn_item" .. index):GetComponent("UIButton")
|
||||
local item = btnItem.transform:Find("AnimRoot/item")
|
||||
local instanceId = btnItem:GetInstanceID()
|
||||
if self.tbItemCtrl[instanceId] == nil then
|
||||
self.tbItemCtrl[instanceId] = self:BindCtrlByNode(item.gameObject, "Game.UI.TemplateEx.TemplateItemCtrl")
|
||||
end
|
||||
local itemId = questConfig["Reward" .. index]
|
||||
local itemCount = questConfig["RewardQty" .. index]
|
||||
if 0 < itemId then
|
||||
btnItem.gameObject:SetActive(true)
|
||||
else
|
||||
btnItem.gameObject:SetActive(false)
|
||||
end
|
||||
self.tbItemCtrl[instanceId]:SetItem(itemId, nil, itemCount, false, questData.nstatus == AllEnum.ActQuestStatus.Received, false, false)
|
||||
btnItem.onClick:RemoveAllListeners()
|
||||
btnItem.onClick:AddListener(function()
|
||||
UTILS.ClickItemGridWithTips(itemId, btnItem.transform, true, true, false)
|
||||
end)
|
||||
end
|
||||
end
|
||||
local txt_target = goGrid.transform:Find("DetailRoot/AnimRoot/txt_target"):GetComponent("TMP_Text")
|
||||
NovaAPI.SetTMPText(txt_target, questConfig.Desc)
|
||||
local barFill = goGrid.transform:Find("DetailRoot/AnimRoot/imgBarBg/imgMainBarFill"):GetComponent("Image")
|
||||
NovaAPI.SetImageFillAmount(barFill, questData.Progress[1].Cur / questData.Progress[1].Max)
|
||||
local txt_com = goGrid.transform:Find("DetailRoot/AnimRoot/txt_com"):GetComponent("TMP_Text")
|
||||
local img_Received = goGrid.transform:Find("DetailRoot/AnimRoot/img_Received")
|
||||
img_Received.gameObject:SetActive(questData.nStatus == AllEnum.ActQuestStatus.Received)
|
||||
if questData.nStatus == AllEnum.ActQuestStatus.UnComplete then
|
||||
NovaAPI.SetImageFillAmount(barFill, questData.Progress[1].Cur / questData.Progress[1].Max)
|
||||
NovaAPI.SetTMPText(txt_com, string.format("%d/%d", questData.Progress[1].Cur, questData.Progress[1].Max))
|
||||
else
|
||||
NovaAPI.SetImageFillAmount(barFill, 1)
|
||||
NovaAPI.SetTMPText(txt_com, ConfigTable.GetUIText("Soldier_Quest_Complete"))
|
||||
end
|
||||
local btn_JumpTo = goGrid.transform:Find("DetailRoot/AnimRoot/btn_JumpTo"):GetComponent("UIButton")
|
||||
local txt_JumpTo = btn_JumpTo.transform:Find("AnimRoot/txtBtn"):GetComponent("TMP_Text")
|
||||
local btn_GetReward = goGrid.transform:Find("DetailRoot/AnimRoot/btn_GetReward"):GetComponent("UIButton")
|
||||
local txt_GetReward = btn_GetReward.transform:Find("AnimRoot/txtBtn"):GetComponent("TMP_Text")
|
||||
NovaAPI.SetTMPText(txt_JumpTo, ConfigTable.GetUIText("Soldier_Quest_JumpTo"))
|
||||
NovaAPI.SetTMPText(txt_GetReward, ConfigTable.GetUIText("Soldier_Quest_Receive"))
|
||||
btn_JumpTo.gameObject:SetActive(questData.nStatus == AllEnum.ActQuestStatus.UnComplete)
|
||||
btn_JumpTo.onClick:RemoveAllListeners()
|
||||
btn_JumpTo.onClick:AddListener(function()
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierLevelSelectPanel)
|
||||
self:OnBtnClick_Close()
|
||||
end)
|
||||
btn_GetReward.gameObject:SetActive(questData.nStatus == AllEnum.ActQuestStatus.Complete)
|
||||
btn_GetReward.onClick:RemoveAllListeners()
|
||||
btn_GetReward.onClick:AddListener(function()
|
||||
PlayerData.SoldierData:ReceiveQuestReward(self.nSelectedGroupId, questData.nId, function()
|
||||
self:SelectTab(self.nTabIndex, true)
|
||||
end)
|
||||
end)
|
||||
end
|
||||
function SoldierQuestCtrl:OnBtnClick_Close()
|
||||
EventManager.Hit(EventId.TemporaryBlockInput, 0.2)
|
||||
self._mapNode.animator:Play("t_window_04_t_out")
|
||||
self:AddTimer(1, 0.2, function()
|
||||
EventManager.Hit(EventId.ClosePanel, PanelId.SoldierQuestPanel)
|
||||
end, true, true, true)
|
||||
end
|
||||
function SoldierQuestCtrl:OnBtnClick_GetReward()
|
||||
PlayerData.SoldierData:ReceiveQuestReward(self.nSelectedGroupId, 0, function()
|
||||
self:SelectTab(self.nTabIndex, true)
|
||||
end)
|
||||
end
|
||||
function SoldierQuestCtrl:OnBtnClick_GetReward_None()
|
||||
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Soldier_Quest_ReceiveNone"))
|
||||
end
|
||||
function SoldierQuestCtrl:OnBtnClick_Tab1()
|
||||
if PlayerData.SoldierData:IsGroupLock(self.tbQuestGroup[1]) then
|
||||
return
|
||||
end
|
||||
self:SelectTab(1)
|
||||
end
|
||||
function SoldierQuestCtrl:OnBtnClick_Tab2()
|
||||
if PlayerData.SoldierData:IsGroupLock(self.tbQuestGroup[2]) then
|
||||
return
|
||||
end
|
||||
self:SelectTab(2)
|
||||
end
|
||||
return SoldierQuestCtrl
|
||||
@@ -0,0 +1,23 @@
|
||||
local SoldierMainViewPanel = class("SoldierMainViewPanel", BasePanel)
|
||||
SoldierMainViewPanel._bIsMainPanel = false
|
||||
SoldierMainViewPanel._sSortingLayerName = AllEnum.SortingLayerName.UI
|
||||
SoldierMainViewPanel._nSnapshotPrePanel = 1
|
||||
SoldierMainViewPanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "Soldier/SoldierQuestPanel.prefab",
|
||||
sCtrlName = "Game.UI.Soldier.SoldierQuestCtrl"
|
||||
}
|
||||
}
|
||||
function SoldierMainViewPanel:Awake()
|
||||
end
|
||||
function SoldierMainViewPanel:OnEnable()
|
||||
end
|
||||
function SoldierMainViewPanel:OnAfterEnter()
|
||||
end
|
||||
function SoldierMainViewPanel:OnDisable()
|
||||
end
|
||||
function SoldierMainViewPanel:OnDestroy()
|
||||
end
|
||||
function SoldierMainViewPanel:OnRelease()
|
||||
end
|
||||
return SoldierMainViewPanel
|
||||
@@ -0,0 +1,291 @@
|
||||
local SoldierTestEnterCtrl = class("SoldierTestEnterCtrl", BaseCtrl)
|
||||
local SoldierAttrData = require("GameCore.Data.DataClass.Soldier.SoldierAttrData")
|
||||
SoldierTestEnterCtrl._mapNodeConfig = {
|
||||
TopBar = {
|
||||
sNodeName = "TopBarPanel",
|
||||
sCtrlName = "Game.UI.TopBarEx.TopBarCtrl"
|
||||
},
|
||||
chessId = {
|
||||
nCount = 9,
|
||||
sComponentName = "Dropdown",
|
||||
callback = "OnDropDownChanged_Chess"
|
||||
},
|
||||
chessLv = {
|
||||
nCount = 9,
|
||||
sComponentName = "Dropdown",
|
||||
callback = "OnDropDownChanged_Chess"
|
||||
},
|
||||
btnAttr = {
|
||||
nCount = 9,
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Attr"
|
||||
},
|
||||
txtCharPartner = {nCount = 9, sComponentName = "TMP_Text"},
|
||||
goPartner = {},
|
||||
goAttr = {},
|
||||
btnConfirm = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Confirm"
|
||||
},
|
||||
goAttrList = {},
|
||||
txtAttrTitle = {sComponentName = "TMP_Text"},
|
||||
tc_property = {},
|
||||
goPartnerItem = {},
|
||||
PartnerLayouts = {}
|
||||
}
|
||||
SoldierTestEnterCtrl._mapEventConfig = {}
|
||||
SoldierTestEnterCtrl._mapRedDotConfig = {}
|
||||
local _SortPartner = function(a, b)
|
||||
local aActive = 0 < (a.mapData.nActiveLevel or 0)
|
||||
local bActive = 0 < (b.mapData.nActiveLevel or 0)
|
||||
if aActive ~= bActive then
|
||||
return aActive
|
||||
end
|
||||
local aNum = a.mapData.nCurNum or 0
|
||||
local bNum = b.mapData.nCurNum or 0
|
||||
if aNum ~= bNum then
|
||||
return aNum > bNum
|
||||
end
|
||||
return a.nType < b.nType
|
||||
end
|
||||
function SoldierTestEnterCtrl:RefreshChess()
|
||||
self._tbDeployedChess = {}
|
||||
local tbIdUsed = {}
|
||||
for i = 1, 9 do
|
||||
local nIdIndex = NovaAPI.GetDropDownValue(self._mapNode.chessId[i])
|
||||
local nId = self.tbChessIdList[nIdIndex + 1] or 0
|
||||
if nId ~= 0 then
|
||||
local mapCfg = ConfigTable.GetData("SoldierCharacter", nId)
|
||||
if mapCfg == nil then
|
||||
printError(string.format("格子 %s 棋子Id错误!!!", i))
|
||||
return false
|
||||
end
|
||||
if tbIdUsed[nId] then
|
||||
EventManager.Hit(EventId.OpenMessageBox, "不能选择重复棋子")
|
||||
return false
|
||||
end
|
||||
tbIdUsed[nId] = true
|
||||
end
|
||||
local nLvIndex = NovaAPI.GetDropDownValue(self._mapNode.chessLv[i])
|
||||
local nLevel = nLvIndex + 1
|
||||
nLevel = math.min(nLevel, 3)
|
||||
local nPositionType = i <= 3 and GameEnum.SoldierPositionType.FightPosition or GameEnum.SoldierPositionType.SupportPosition
|
||||
local nIndex = i <= 3 and i or i - 3
|
||||
table.insert(self._tbDeployedChess, {
|
||||
nPositionType = nPositionType,
|
||||
nIndex = nIndex,
|
||||
nId = nId,
|
||||
nStar = nLevel
|
||||
})
|
||||
end
|
||||
return true
|
||||
end
|
||||
function SoldierTestEnterCtrl:InitChessDropdowns()
|
||||
self.tbChessIdList = {0}
|
||||
local tbIds = {}
|
||||
local foreachTable = function(line)
|
||||
table.insert(tbIds, line.Id)
|
||||
end
|
||||
ForEachTableLine(ConfigTable.Get("SoldierCharacter"), foreachTable)
|
||||
for _, nId in ipairs(tbIds) do
|
||||
table.insert(self.tbChessIdList, nId)
|
||||
end
|
||||
local ListString = CS.System.Collections.Generic.List(CS.System.String)
|
||||
local listChessId = ListString()
|
||||
listChessId:Add("无")
|
||||
for _, nId in ipairs(tbIds) do
|
||||
local mapCfg = ConfigTable.GetData("SoldierCharacter", nId)
|
||||
local sName = mapCfg ~= nil and mapCfg.Name or ""
|
||||
listChessId:Add(string.format("%s - %s", nId, sName))
|
||||
end
|
||||
local listChessLv = ListString()
|
||||
listChessLv:Add("1")
|
||||
listChessLv:Add("2")
|
||||
listChessLv:Add("3")
|
||||
for i = 1, 9 do
|
||||
NovaAPI.ClearDropDownOptions(self._mapNode.chessId[i])
|
||||
NovaAPI.DropDownAddOptions(self._mapNode.chessId[i], listChessId)
|
||||
NovaAPI.SetDDValueWithoutNotify(self._mapNode.chessId[i], 0)
|
||||
NovaAPI.ClearDropDownOptions(self._mapNode.chessLv[i])
|
||||
NovaAPI.DropDownAddOptions(self._mapNode.chessLv[i], listChessLv)
|
||||
NovaAPI.SetDDValueWithoutNotify(self._mapNode.chessLv[i], 0)
|
||||
end
|
||||
end
|
||||
function SoldierTestEnterCtrl:RefreshCharPartner()
|
||||
for i = 1, 9 do
|
||||
local chess = self._tbDeployedChess[i]
|
||||
local sText = ""
|
||||
if chess and chess.nId and chess.nId ~= 0 then
|
||||
local tbPartnerTypes = SoldierAttrData.GetPartnerGroupsByChessId(chess.nId)
|
||||
if tbPartnerTypes then
|
||||
local tbNames = {}
|
||||
for _, nType in ipairs(tbPartnerTypes) do
|
||||
local mapCfg = CacheTable.GetData("_SoldierPartnerGroup", nType)
|
||||
if mapCfg and mapCfg.Name then
|
||||
table.insert(tbNames, mapCfg.Name)
|
||||
end
|
||||
end
|
||||
sText = table.concat(tbNames, "/")
|
||||
end
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.txtCharPartner[i], sText)
|
||||
end
|
||||
end
|
||||
function SoldierTestEnterCtrl:RefreshPartner()
|
||||
local tbActivePartner, tbUIData = SoldierAttrData.CalcActivePartners(self._tbDeployedChess)
|
||||
self.tbPartner = tbActivePartner
|
||||
local tbSorted = {}
|
||||
if tbUIData ~= nil then
|
||||
for _, mapData in pairs(tbUIData) do
|
||||
table.insert(tbSorted, {
|
||||
nType = mapData.nType,
|
||||
mapData = mapData
|
||||
})
|
||||
end
|
||||
table.sort(tbSorted, _SortPartner)
|
||||
end
|
||||
self:_RefreshPartnerItems(tbSorted)
|
||||
end
|
||||
function SoldierTestEnterCtrl:_RefreshPartnerItems(tbSorted)
|
||||
self:_ClearPartnerItems()
|
||||
local tmpl = self._mapNode.goPartnerItem
|
||||
local layout = self._mapNode.PartnerLayouts
|
||||
if tmpl == nil or layout == nil then
|
||||
return
|
||||
end
|
||||
if tbSorted == nil or #tbSorted == 0 then
|
||||
return
|
||||
end
|
||||
local trParent = layout.transform
|
||||
for _, info in ipairs(tbSorted) do
|
||||
local goItem = instantiate(tmpl, trParent)
|
||||
goItem:SetActive(true)
|
||||
self:_SetupPartnerItem(goItem, info)
|
||||
table.insert(self._tbPartnerItemGo, goItem)
|
||||
end
|
||||
end
|
||||
function SoldierTestEnterCtrl:_SetupPartnerItem(goItem, info)
|
||||
local trItem = goItem.transform
|
||||
local nType = info.nType
|
||||
local mapData = info.mapData or {}
|
||||
local trName = trItem:Find("btnPartnerItem/AnimRoot/txtPartnerName")
|
||||
if trName ~= nil then
|
||||
local mapCfg = CacheTable.GetData("_SoldierPartnerGroup", nType)
|
||||
local sName = mapCfg and mapCfg.Name or ""
|
||||
NovaAPI.SetTMPText(trName:GetComponent("TMP_Text"), sName)
|
||||
end
|
||||
local trLevel = trItem:Find("btnPartnerItem/AnimRoot/txtPartnerLevel")
|
||||
if trLevel ~= nil then
|
||||
local nActiveLevel = mapData.nActiveLevel or 0
|
||||
local nLevelCount = #(mapData.tbNumList or {})
|
||||
local sLevel = ""
|
||||
for j = 1, nLevelCount do
|
||||
local sPart = j == nActiveLevel and string.format("<color=#D85054>%d</color>", j) or tostring(j)
|
||||
sLevel = j == 1 and sPart or sLevel .. "/" .. sPart
|
||||
end
|
||||
NovaAPI.SetTMPText(trLevel:GetComponent("TMP_Text"), sLevel)
|
||||
end
|
||||
local trBtn = trItem:Find("btnPartnerItem")
|
||||
if trBtn ~= nil then
|
||||
local btn = trBtn:GetComponent("UIButton") or trBtn:GetComponent("Button")
|
||||
if btn ~= nil then
|
||||
btn.onClick:RemoveAllListeners()
|
||||
btn.onClick:AddListener(function()
|
||||
self:OnPartnerItemClicked(trItem, mapData)
|
||||
end)
|
||||
end
|
||||
end
|
||||
end
|
||||
function SoldierTestEnterCtrl:_ClearPartnerItems()
|
||||
if self._tbPartnerItemGo == nil then
|
||||
self._tbPartnerItemGo = {}
|
||||
return
|
||||
end
|
||||
for _, goItem in ipairs(self._tbPartnerItemGo) do
|
||||
destroy(goItem)
|
||||
end
|
||||
self._tbPartnerItemGo = {}
|
||||
end
|
||||
function SoldierTestEnterCtrl:OnPartnerItemClicked(trItem, partnerData)
|
||||
if partnerData == nil then
|
||||
return
|
||||
end
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierPartnerTips, trItem, partnerData.nType, partnerData.nActiveLevel, false)
|
||||
end
|
||||
function SoldierTestEnterCtrl:Awake()
|
||||
self._mapNode.goPartner.gameObject:SetActive(true)
|
||||
self._mapNode.goAttr.gameObject:SetActive(true)
|
||||
self._mapNode.tc_property.gameObject:SetActive(false)
|
||||
if self._mapNode.goPartnerItem ~= nil then
|
||||
self._mapNode.goPartnerItem:SetActive(false)
|
||||
end
|
||||
self._tbPartnerItemGo = {}
|
||||
end
|
||||
function SoldierTestEnterCtrl:OnEnable()
|
||||
self._tbDeployedChess = {}
|
||||
self.tbPartner = {}
|
||||
self:InitChessDropdowns()
|
||||
end
|
||||
function SoldierTestEnterCtrl:OnDisable()
|
||||
self:_ClearPartnerItems()
|
||||
end
|
||||
function SoldierTestEnterCtrl:OnDestroy()
|
||||
self:_ClearPartnerItems()
|
||||
end
|
||||
function SoldierTestEnterCtrl:OnBtnClick_Confirm()
|
||||
if #self._tbDeployedChess > 0 then
|
||||
PlayerData.SoldierData:GMEnterSoldier(self._tbDeployedChess, 0, 1, 10101, 10101)
|
||||
end
|
||||
end
|
||||
function SoldierTestEnterCtrl:OnDropDownChanged_Chess(objComp, nIndex)
|
||||
if nIndex ~= nil and self._mapNode.chessId and self._mapNode.chessId[nIndex] == objComp then
|
||||
local nIdIndex = NovaAPI.GetDropDownValue(objComp)
|
||||
local nId = self.tbChessIdList[nIdIndex + 1] or 0
|
||||
if nId ~= 0 then
|
||||
for i = 1, 9 do
|
||||
if i ~= nIndex then
|
||||
local nOtherIdx = NovaAPI.GetDropDownValue(self._mapNode.chessId[i])
|
||||
local nOtherId = self.tbChessIdList[nOtherIdx + 1] or 0
|
||||
if nOtherId == nId then
|
||||
EventManager.Hit(EventId.OpenMessageBox, "不能选择重复棋子")
|
||||
NovaAPI.SetDDValueWithoutNotify(objComp, 0)
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
if self:RefreshChess() then
|
||||
self:RefreshCharPartner()
|
||||
self:RefreshPartner()
|
||||
end
|
||||
end
|
||||
function SoldierTestEnterCtrl:OnBtnClick_Attr(btn, nIndex)
|
||||
if not self:RefreshChess() then
|
||||
return
|
||||
end
|
||||
local chessData = self._tbDeployedChess[nIndex]
|
||||
if chessData == nil or chessData.nId == 0 then
|
||||
EventManager.Hit(EventId.OpenMessageBox, "该格子未选择棋子")
|
||||
return
|
||||
end
|
||||
self:RefreshPartner()
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierCharCardTips, btn.gameObject, chessData, self._tbDeployedChess, self.tbPartner)
|
||||
end
|
||||
function SoldierTestEnterCtrl:ShowAttr(chessData, attrList)
|
||||
local mapCfg = ConfigTable.GetData("SoldierCharacter", chessData.nId)
|
||||
local sName = mapCfg ~= nil and mapCfg.Name or tostring(chessData.nId)
|
||||
local sTitle = string.format("<color=#43A9F1>%s</color> (%d★)", sName, chessData.nStar)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtAttrTitle, sTitle)
|
||||
delChildren(self._mapNode.goAttrList)
|
||||
if attrList == nil then
|
||||
return
|
||||
end
|
||||
for _, v in ipairs(attrList) do
|
||||
local goItem = instantiate(self._mapNode.tc_property, self._mapNode.goAttrList.transform)
|
||||
goItem:SetActive(true)
|
||||
local ctrlItem = self:BindCtrlByNode(goItem, "Game.UI.TemplateEx.TemplatePropertyCtrl")
|
||||
ctrlItem:SetSoldierAttr(v)
|
||||
end
|
||||
end
|
||||
return SoldierTestEnterCtrl
|
||||
@@ -0,0 +1,20 @@
|
||||
local SoldierTestEnterPanel = class("SoldierTestEnterPanel", BasePanel)
|
||||
SoldierTestEnterPanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "Soldier/SoldierTestEnterPanel.prefab",
|
||||
sCtrlName = "Game.UI.Soldier.SoldierTestEnterCtrl"
|
||||
}
|
||||
}
|
||||
function SoldierTestEnterPanel:Awake()
|
||||
end
|
||||
function SoldierTestEnterPanel:OnEnable()
|
||||
end
|
||||
function SoldierTestEnterPanel:OnAfterEnter()
|
||||
end
|
||||
function SoldierTestEnterPanel:OnDisable()
|
||||
end
|
||||
function SoldierTestEnterPanel:OnDestroy()
|
||||
end
|
||||
function SoldierTestEnterPanel:OnRelease()
|
||||
end
|
||||
return SoldierTestEnterPanel
|
||||
@@ -0,0 +1,209 @@
|
||||
local SoldierCharCardItemCtrl = class("SoldierCharCardItemCtrl", BaseCtrl)
|
||||
local iconPath2 = "Icon/SoldierOtherIcon/"
|
||||
SoldierCharCardItemCtrl._mapNodeConfig = {
|
||||
btnItem = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnItemClick"
|
||||
},
|
||||
Star = {nCount = 5},
|
||||
FxStar = {nCount = 5},
|
||||
StarRoot = {sComponentName = "Transform"},
|
||||
goChar = {},
|
||||
imgEmpty = {},
|
||||
imgSelect = {},
|
||||
imgLock = {},
|
||||
imgPut = {},
|
||||
imageIcon = {sComponentName = "Image"},
|
||||
imageRarity = {sComponentName = "Image"},
|
||||
imgRecommend = {sComponentName = "Image"},
|
||||
img_Position = {sComponentName = "Image"},
|
||||
imgAttribute = {sComponentName = "Image"},
|
||||
animRoot = {sNodeName = "AnimRoot", sComponentName = "Animator"}
|
||||
}
|
||||
SoldierCharCardItemCtrl._mapEventConfig = {
|
||||
SoldierCharCardItemClicked = "OnEvent_SoldierCharCardItemClicked",
|
||||
SoldierRecommend_Update = "SetTrackAndRecommend",
|
||||
SoldierPartnerTrace = "SetTrackAndRecommend",
|
||||
SoldierExtraPartnerTagChange = "OnEvent_SoldierExtraPartnerTagChange"
|
||||
}
|
||||
SoldierCharCardItemCtrl._mapRedDotConfig = {}
|
||||
SoldierCharCardItemCtrl.MAX_STAR = 5
|
||||
function SoldierCharCardItemCtrl:Awake()
|
||||
self.bActive = false
|
||||
end
|
||||
function SoldierCharCardItemCtrl:OnEnable()
|
||||
self.bActive = true
|
||||
end
|
||||
function SoldierCharCardItemCtrl:OnDisable()
|
||||
self._objClickCallback = nil
|
||||
self._fnClickCallback = nil
|
||||
self.nCharId = nil
|
||||
self.bActive = false
|
||||
end
|
||||
function SoldierCharCardItemCtrl:OnDestroy()
|
||||
self.bActive = false
|
||||
end
|
||||
function SoldierCharCardItemCtrl:OnSelected()
|
||||
end
|
||||
function SoldierCharCardItemCtrl:OnRefresh(nCharId)
|
||||
self.nCharId = nCharId
|
||||
self:SetItemData(nCharId)
|
||||
end
|
||||
function SoldierCharCardItemCtrl:SetItemData(nCharId, bInSandland)
|
||||
bInSandland = bInSandland or false
|
||||
self._mapNode.imgSelect:SetActive(false)
|
||||
self._mapNode.imgPut:SetActive(false)
|
||||
if nCharId == nil then
|
||||
self._mapNode.goChar:SetActive(false)
|
||||
self._mapNode.imgEmpty:SetActive(true)
|
||||
return
|
||||
end
|
||||
self.nCharId = nCharId
|
||||
self._mapNode.imgEmpty:SetActive(false)
|
||||
self._mapNode.goChar:SetActive(true)
|
||||
local soldierCharConfig = ConfigTable.GetData("SoldierCharacter", nCharId)
|
||||
if soldierCharConfig == nil then
|
||||
return
|
||||
end
|
||||
self:SetRarity(soldierCharConfig.Rarity)
|
||||
self:SetStar(soldierCharConfig.Star, nCharId)
|
||||
self:SetChessPosition(soldierCharConfig.Type)
|
||||
self.bInSandland = bInSandland
|
||||
self:SetTrackAndRecommend()
|
||||
local skinConfig = ConfigTable.GetData("SoldierSkin", soldierCharConfig.Skin)
|
||||
if skinConfig then
|
||||
self:SetPngSprite(self._mapNode.imageIcon, skinConfig.Icon .. AllEnum.SoldierChessIconSurfix.M)
|
||||
end
|
||||
end
|
||||
function SoldierCharCardItemCtrl:SetRarity(nRarity)
|
||||
if nRarity == nil then
|
||||
return
|
||||
end
|
||||
self:SetPngSprite(self._mapNode.imageRarity, "Icon/SoldierOtherIcon/" .. AllEnum.SoldierChessRarityIcon[nRarity] .. AllEnum.SoldierChessIconSurfix.M)
|
||||
end
|
||||
function SoldierCharCardItemCtrl:SetAttribute(nIndex)
|
||||
if nIndex == nil or nIndex < 1 or 3 < nIndex then
|
||||
self._mapNode.imgAttribute.gameObject:SetActive(false)
|
||||
return
|
||||
end
|
||||
local nCfgId = PlayerData.SoldierData:GetSoldierPositionEffectDataId(nIndex)
|
||||
local cfg = ConfigTable.GetData("SoldierPositionEffect", nCfgId)
|
||||
if cfg then
|
||||
self._mapNode.imgAttribute.gameObject:SetActive(true)
|
||||
self:SetPngSprite(self._mapNode.imgAttribute, iconPath2 .. cfg.Icon)
|
||||
end
|
||||
end
|
||||
function SoldierCharCardItemCtrl:SetStar(nStar, nCharId)
|
||||
nStar = nStar or 0
|
||||
local bPlayCompoundAnim = false
|
||||
if self.nStar == nil then
|
||||
self.nStar = nStar
|
||||
elseif nStar > self.nStar and self.nCharId == nCharId then
|
||||
self.nStar = nStar
|
||||
bPlayCompoundAnim = true
|
||||
end
|
||||
for i = 1, self.MAX_STAR do
|
||||
local goFxStar = self._mapNode.FxStar[i]
|
||||
if goFxStar then
|
||||
goFxStar:SetActive(i <= nStar)
|
||||
end
|
||||
end
|
||||
if bPlayCompoundAnim == true then
|
||||
CS.WwiseAudioManager.Instance:PostEvent("mode_900001_chess_chair_combine")
|
||||
local nAnimLength = NovaAPI.GetAnimClipLength(self._mapNode.animRoot, {
|
||||
"SoldierSupportCard_compound"
|
||||
})
|
||||
self:AddTimer(1, nAnimLength, function()
|
||||
for i = 1, self.MAX_STAR do
|
||||
local goStar = self._mapNode.Star[i]
|
||||
if goStar then
|
||||
goStar:SetActive(i <= nStar)
|
||||
end
|
||||
end
|
||||
end)
|
||||
else
|
||||
for i = 1, self.MAX_STAR do
|
||||
local goStar = self._mapNode.Star[i]
|
||||
if goStar then
|
||||
goStar:SetActive(nStar >= i)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
function SoldierCharCardItemCtrl:SetTrackAndRecommend()
|
||||
if self.bActive == false then
|
||||
return
|
||||
end
|
||||
if self.bInSandland == nil or self.bInSandland == false then
|
||||
self._mapNode.imgRecommend.gameObject:SetActive(false)
|
||||
return
|
||||
end
|
||||
if self.nCharId == nil then
|
||||
return
|
||||
end
|
||||
self._mapNode.imgRecommend.gameObject:SetActive(true)
|
||||
local levelData = PlayerData.SoldierData:GetCurLevelData()
|
||||
if levelData == nil then
|
||||
self._mapNode.imgRecommend.gameObject:SetActive(false)
|
||||
return
|
||||
end
|
||||
local bTrack = levelData:CheckChessTrace(self.nCharId)
|
||||
local bRecommend = PlayerData.SoldierData:CheckChessRecommendState(self.nCharId)
|
||||
local sIcon = ""
|
||||
if bRecommend and bTrack then
|
||||
sIcon = "Icon/SoldierOtherIcon/SoldierPartnerBuilds_03"
|
||||
elseif bTrack then
|
||||
sIcon = "Icon/SoldierOtherIcon/SoldierPartnerBuilds_02"
|
||||
elseif bRecommend then
|
||||
sIcon = "Icon/SoldierOtherIcon/SoldierPartnerBuilds_01"
|
||||
else
|
||||
self._mapNode.imgRecommend.gameObject:SetActive(false)
|
||||
end
|
||||
if sIcon ~= "" then
|
||||
self:SetPngSprite(self._mapNode.imgRecommend, sIcon)
|
||||
end
|
||||
end
|
||||
function SoldierCharCardItemCtrl:SetChessPosition(nType)
|
||||
if nType == nil then
|
||||
return
|
||||
end
|
||||
local tbChessTypeConfig = CacheTable.GetData("_SoldierChessType", nType)
|
||||
local sIcon = ""
|
||||
if tbChessTypeConfig ~= nil then
|
||||
sIcon = tbChessTypeConfig.Icon
|
||||
end
|
||||
local sPath = "Icon/SoldierOtherIcon/" .. sIcon
|
||||
self:SetPngSprite(self._mapNode.img_Position, sPath)
|
||||
end
|
||||
function SoldierCharCardItemCtrl:SetSelect(bSelect)
|
||||
self._mapNode.ImageSelect.gameObject:SetActive(bSelect)
|
||||
end
|
||||
function SoldierCharCardItemCtrl:SetLock(bLock)
|
||||
self._mapNode.imgLock.gameObject:SetActive(bLock)
|
||||
end
|
||||
function SoldierCharCardItemCtrl:SetClickCallback(obj, fn)
|
||||
self._objClickCallback = obj
|
||||
self._fnClickCallback = fn
|
||||
end
|
||||
function SoldierCharCardItemCtrl:GetAnimator()
|
||||
if self._mapNode.animRoot == nil then
|
||||
self._mapNode.animRoot = self.gameObejct.transform:GetChild(0):GetChild(0):GetComponent("Animator")
|
||||
if self._mapNode.animRoot == nil then
|
||||
return nil
|
||||
end
|
||||
end
|
||||
return self._mapNode.animRoot
|
||||
end
|
||||
function SoldierCharCardItemCtrl:OnBtnItemClick()
|
||||
if self._fnClickCallback ~= nil and self.nCharId ~= nil then
|
||||
self._fnClickCallback(self._objClickCallback, self.nCharId)
|
||||
end
|
||||
end
|
||||
function SoldierCharCardItemCtrl:OnEvent_SoldierCharCardItemClicked(nCharId)
|
||||
if nCharId == nil then
|
||||
self:SetSelect(false)
|
||||
return
|
||||
end
|
||||
self:SetSelect(nCharId == self.nCharId)
|
||||
end
|
||||
return SoldierCharCardItemCtrl
|
||||
@@ -0,0 +1,52 @@
|
||||
local SoldierCharItemCtrl = class("SoldierCharItemCtrl", BaseCtrl)
|
||||
local RootPath = "Icon/SoldierOtherIcon/"
|
||||
SoldierCharItemCtrl._mapNodeConfig = {
|
||||
img_icon = {sComponentName = "Image"},
|
||||
img_rarity = {sComponentName = "Image"},
|
||||
imgInBattle = {},
|
||||
txtInBattle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_InBattle"
|
||||
},
|
||||
imgMask = {},
|
||||
Star = {nCount = 5},
|
||||
StarRoot = {}
|
||||
}
|
||||
SoldierCharItemCtrl._mapEventConfig = {}
|
||||
SoldierCharItemCtrl._mapRedDotConfig = {}
|
||||
function SoldierCharItemCtrl:SetItemData(soldierCharId)
|
||||
self.soldierCharId = soldierCharId
|
||||
local soldierCharConfig = ConfigTable.GetData("SoldierCharacter", self.soldierCharId)
|
||||
if soldierCharConfig == nil then
|
||||
return
|
||||
end
|
||||
local rarity = soldierCharConfig.Rarity
|
||||
self:SetPngSprite(self._mapNode.img_rarity, RootPath .. AllEnum.SoldierChessRarityIcon[rarity] .. AllEnum.SoldierChessIconSurfix.S)
|
||||
local skinId = soldierCharConfig.Skin
|
||||
local skinConfig = ConfigTable.GetData("SoldierSkin", skinId)
|
||||
if skinConfig == nil then
|
||||
return
|
||||
end
|
||||
self:SetPngSprite(self._mapNode.img_icon, skinConfig.Icon .. AllEnum.SoldierChessIconSurfix.S)
|
||||
end
|
||||
function SoldierCharItemCtrl:SetItemState(bInBattle, bNotOwned)
|
||||
self._mapNode.imgInBattle:SetActive(bInBattle)
|
||||
self._mapNode.imgMask:SetActive(bNotOwned)
|
||||
end
|
||||
function SoldierCharItemCtrl:SetCharItemBtnFunc(callback)
|
||||
local btnChar = self.gameObject:GetComponent("UIButton")
|
||||
if btnChar == nil then
|
||||
return
|
||||
end
|
||||
btnChar.onClick:RemoveAllListeners()
|
||||
btnChar.onClick:AddListener(callback)
|
||||
end
|
||||
function SoldierCharItemCtrl:SetCharLevel(nLevel)
|
||||
self._mapNode.StarRoot:SetActive(0 < nLevel)
|
||||
if 0 < nLevel then
|
||||
for i = 1, 5 do
|
||||
self._mapNode.Star[i]:SetActive(i <= nLevel)
|
||||
end
|
||||
end
|
||||
end
|
||||
return SoldierCharItemCtrl
|
||||
@@ -0,0 +1,314 @@
|
||||
local SoldierCharSupportCardItemCtrl = class("SoldierCharSupportCardItemCtrl", BaseCtrl)
|
||||
local SoldierAttrData = require("GameCore.Data.DataClass.Soldier.SoldierAttrData")
|
||||
SoldierCharSupportCardItemCtrl._mapNodeConfig = {
|
||||
btnItem = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnItemClick"
|
||||
},
|
||||
Star = {nCount = 5},
|
||||
FxStar = {nCount = 5},
|
||||
StarRoot = {sComponentName = "Transform"},
|
||||
goChar = {},
|
||||
imgEmpty = {},
|
||||
imgSelect = {},
|
||||
imgPut = {},
|
||||
ImgPutLight = {},
|
||||
imageIcon = {sComponentName = "Image"},
|
||||
imageRarity = {sComponentName = "Image"},
|
||||
img_Position = {sComponentName = "Image"},
|
||||
imgPosition = {},
|
||||
animRoot = {sNodeName = "AnimRoot", sComponentName = "Animator"},
|
||||
HeadRoot = {sComponentName = "Animator"},
|
||||
img_icon = {sComponentName = "Image"},
|
||||
img_iconBg = {sComponentName = "Image"},
|
||||
img_iconBg_Add = {sComponentName = "Image"},
|
||||
Fx_warrior = {}
|
||||
}
|
||||
SoldierCharSupportCardItemCtrl._mapEventConfig = {
|
||||
SoldierCharSupportCardItemClicked = "OnEvent_SoldierCharSupportCardItemClicked",
|
||||
SoldierPartnerNewActive = "OnEvent_SoldierPartnerNewActive",
|
||||
SoldierExtraPartnerTagChange = "OnEvent_SoldierExtraPartnerTagChange"
|
||||
}
|
||||
SoldierCharSupportCardItemCtrl._mapRedDotConfig = {}
|
||||
SoldierCharSupportCardItemCtrl.MAX_STAR = 5
|
||||
function SoldierCharSupportCardItemCtrl:Awake()
|
||||
end
|
||||
function SoldierCharSupportCardItemCtrl:OnEnable()
|
||||
end
|
||||
function SoldierCharSupportCardItemCtrl:OnDisable()
|
||||
self:_StopPartnerActiveAnim()
|
||||
end
|
||||
function SoldierCharSupportCardItemCtrl:OnDestroy()
|
||||
self:_StopPartnerActiveAnim()
|
||||
end
|
||||
function SoldierCharSupportCardItemCtrl:OnSelected()
|
||||
end
|
||||
function SoldierCharSupportCardItemCtrl:OnRefresh(nCharId)
|
||||
if self.nCharId ~= nCharId then
|
||||
self:_StopPartnerActiveAnim()
|
||||
end
|
||||
self.nCharId = nCharId
|
||||
self:SetItemData(nCharId)
|
||||
end
|
||||
function SoldierCharSupportCardItemCtrl:SetItemData(nCharId)
|
||||
if self.nCharId ~= nCharId then
|
||||
self:_StopPartnerActiveAnim()
|
||||
end
|
||||
self._mapNode.imgPut:SetActive(false)
|
||||
self._mapNode.ImgPutLight:SetActive(false)
|
||||
self._mapNode.imgSelect:SetActive(false)
|
||||
if nCharId == nil then
|
||||
self.nCharId = nil
|
||||
self._mapNode.goChar:SetActive(false)
|
||||
self._mapNode.imgEmpty:SetActive(true)
|
||||
return
|
||||
end
|
||||
self.nCharId = nCharId
|
||||
self._mapNode.imgEmpty:SetActive(false)
|
||||
self._mapNode.goChar:SetActive(true)
|
||||
local soldierCharConfig = ConfigTable.GetData("SoldierCharacter", nCharId)
|
||||
if soldierCharConfig == nil then
|
||||
return
|
||||
end
|
||||
self:SetRarity(soldierCharConfig.Rarity)
|
||||
self:SetStar(soldierCharConfig.Star, nCharId)
|
||||
local skinConfig = ConfigTable.GetData("SoldierSkin", soldierCharConfig.Skin)
|
||||
if skinConfig then
|
||||
self:SetPngSprite(self._mapNode.imageIcon, skinConfig.Icon .. AllEnum.SoldierChessIconSurfix.M)
|
||||
end
|
||||
self._mapNode.Fx_warrior.gameObject:SetActive(false)
|
||||
local curLevelData = PlayerData.SoldierData:GetCurLevelData()
|
||||
if curLevelData ~= nil then
|
||||
local bWarrior = curLevelData:GetExtraPartnerTags(self.nCharId)
|
||||
if bWarrior ~= nil then
|
||||
self._mapNode.Fx_warrior.gameObject:SetActive(true)
|
||||
end
|
||||
end
|
||||
end
|
||||
function SoldierCharSupportCardItemCtrl:SetRarity(nRarity)
|
||||
if nRarity == nil then
|
||||
return
|
||||
end
|
||||
self:SetPngSprite(self._mapNode.imageRarity, "Icon/SoldierOtherIcon/" .. AllEnum.SoldierChessRarityIcon[nRarity] .. AllEnum.SoldierChessIconSurfix.M)
|
||||
end
|
||||
function SoldierCharSupportCardItemCtrl:SetChessPosition(nDeployedPos)
|
||||
self._mapNode.imgPosition.gameObject:SetActive(false)
|
||||
if self.nCharId == nil then
|
||||
return
|
||||
end
|
||||
local mapChar = ConfigTable.GetData("SoldierCharacter", self.nCharId)
|
||||
if mapChar == nil then
|
||||
return
|
||||
end
|
||||
local nType = mapChar.Type or GameEnum.ChessType.Balance
|
||||
local tbChessTypeConfig = CacheTable.GetData("_SoldierChessType", nType)
|
||||
local sIcon = ""
|
||||
if tbChessTypeConfig ~= nil then
|
||||
sIcon = tbChessTypeConfig.Icon
|
||||
end
|
||||
self._mapNode.imgPosition.gameObject:SetActive(true)
|
||||
if nType ~= GameEnum.ChessType.Balance and nType ~= nDeployedPos then
|
||||
sIcon = sIcon .. "_00"
|
||||
end
|
||||
local sPath = "Icon/SoldierOtherIcon/" .. sIcon
|
||||
self:SetPngSprite(self._mapNode.img_Position, sPath)
|
||||
end
|
||||
function SoldierCharSupportCardItemCtrl:SetStar(nStar, nCharId)
|
||||
nStar = nStar or 0
|
||||
local bPlayCompoundAnim = false
|
||||
if self.nStar == nil then
|
||||
self.nStar = nStar
|
||||
elseif nStar > self.nStar and self.nCharId == nCharId then
|
||||
self.nStar = nStar
|
||||
bPlayCompoundAnim = true
|
||||
end
|
||||
for i = 1, self.MAX_STAR do
|
||||
local goFxStar = self._mapNode.FxStar[i]
|
||||
if goFxStar then
|
||||
goFxStar:SetActive(i <= nStar)
|
||||
end
|
||||
end
|
||||
if bPlayCompoundAnim == true then
|
||||
CS.WwiseAudioManager.Instance:PostEvent("mode_900001_chess_chair_combine")
|
||||
local nAnimLength = NovaAPI.GetAnimClipLength(self._mapNode.animRoot, {
|
||||
"SoldierSupportCard_compound"
|
||||
})
|
||||
self:AddTimer(1, nAnimLength, function()
|
||||
for i = 1, self.MAX_STAR do
|
||||
local goStar = self._mapNode.Star[i]
|
||||
if goStar then
|
||||
goStar:SetActive(i <= nStar)
|
||||
end
|
||||
end
|
||||
end)
|
||||
else
|
||||
for i = 1, self.MAX_STAR do
|
||||
local goStar = self._mapNode.Star[i]
|
||||
if goStar then
|
||||
goStar:SetActive(nStar >= i)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
function SoldierCharSupportCardItemCtrl:SetSelect(bSelect)
|
||||
self._mapNode.ImageSelect.gameObject:SetActive(bSelect)
|
||||
end
|
||||
function SoldierCharSupportCardItemCtrl:SetLock(bLock)
|
||||
self._mapNode.imgLock.gameObject:SetActive(bLock)
|
||||
end
|
||||
function SoldierCharSupportCardItemCtrl:_CancelPartnerActiveTimer()
|
||||
if self.timerCloseParterNode ~= nil then
|
||||
self.timerCloseParterNode:Cancel()
|
||||
self.timerCloseParterNode = nil
|
||||
end
|
||||
end
|
||||
function SoldierCharSupportCardItemCtrl:_StopPartnerActiveAnim()
|
||||
self:_CancelPartnerActiveTimer()
|
||||
self.tbPartnerActiveAnimQueue = nil
|
||||
self.mapPartnerActiveAnimPending = nil
|
||||
self.bPlayingPartnerActiveAnim = false
|
||||
if self._mapNode ~= nil and self._mapNode.HeadRoot ~= nil then
|
||||
self._mapNode.HeadRoot.gameObject:SetActive(false)
|
||||
end
|
||||
end
|
||||
function SoldierCharSupportCardItemCtrl:_GetPartnerActiveAnimKey(nPartnerType, nPartnerId)
|
||||
return tostring(nPartnerType or 0) .. "_" .. tostring(nPartnerId or 0)
|
||||
end
|
||||
function SoldierCharSupportCardItemCtrl:_TryInsertPartnerActiveAnim(tbQueue, nPartnerType, nPartnerId, nOrder)
|
||||
if nPartnerType == nil then
|
||||
return
|
||||
end
|
||||
local mapGroup = CacheTable.GetData("_SoldierPartnerGroup", nPartnerType)
|
||||
if mapGroup == nil then
|
||||
return
|
||||
end
|
||||
table.insert(tbQueue, {
|
||||
nType = nPartnerType,
|
||||
nId = nPartnerId,
|
||||
nOrder = nOrder
|
||||
})
|
||||
end
|
||||
function SoldierCharSupportCardItemCtrl:_GetMyActivePartnerQueue(tbActivePartner)
|
||||
local tbPartnerTypes = SoldierAttrData.GetPartnerGroupsByChessId(self.nCharId)
|
||||
if tbPartnerTypes == nil or #tbPartnerTypes == 0 then
|
||||
return nil
|
||||
end
|
||||
local tbQueue = {}
|
||||
for nOrder, nPartnerType in ipairs(tbPartnerTypes) do
|
||||
local mapActivePartner = tbActivePartner ~= nil and tbActivePartner[nPartnerType] or nil
|
||||
if mapActivePartner ~= nil then
|
||||
local nPartnerId = type(mapActivePartner) == "table" and mapActivePartner.nId or mapActivePartner
|
||||
self:_TryInsertPartnerActiveAnim(tbQueue, nPartnerType, nPartnerId, nOrder)
|
||||
end
|
||||
end
|
||||
if #tbQueue == 0 then
|
||||
return nil
|
||||
end
|
||||
table.sort(tbQueue, function(a, b)
|
||||
if a.nOrder == b.nOrder then
|
||||
return a.nType < b.nType
|
||||
end
|
||||
return a.nOrder < b.nOrder
|
||||
end)
|
||||
return tbQueue
|
||||
end
|
||||
function SoldierCharSupportCardItemCtrl:_TryAppendPartnerActiveAnimQueue(mapItem)
|
||||
if mapItem == nil then
|
||||
return
|
||||
end
|
||||
local sKey = self:_GetPartnerActiveAnimKey(mapItem.nType, mapItem.nId)
|
||||
self.mapPartnerActiveAnimPending = self.mapPartnerActiveAnimPending or {}
|
||||
if self.mapPartnerActiveAnimPending[sKey] == true then
|
||||
return
|
||||
end
|
||||
self.mapPartnerActiveAnimPending[sKey] = true
|
||||
self.tbPartnerActiveAnimQueue = self.tbPartnerActiveAnimQueue or {}
|
||||
table.insert(self.tbPartnerActiveAnimQueue, mapItem)
|
||||
end
|
||||
function SoldierCharSupportCardItemCtrl:_FinishPartnerActiveAnimItem(mapItem)
|
||||
if mapItem == nil or self.mapPartnerActiveAnimPending == nil then
|
||||
return
|
||||
end
|
||||
local sKey = self:_GetPartnerActiveAnimKey(mapItem.nType, mapItem.nId)
|
||||
self.mapPartnerActiveAnimPending[sKey] = nil
|
||||
end
|
||||
function SoldierCharSupportCardItemCtrl:_PlayNextPartnerActiveAnim()
|
||||
self:_CancelPartnerActiveTimer()
|
||||
if self.tbPartnerActiveAnimQueue == nil or #self.tbPartnerActiveAnimQueue == 0 then
|
||||
self.bPlayingPartnerActiveAnim = false
|
||||
self._mapNode.HeadRoot.gameObject:SetActive(false)
|
||||
return
|
||||
end
|
||||
local mapItem = table.remove(self.tbPartnerActiveAnimQueue, 1)
|
||||
local mapGroup = CacheTable.GetData("_SoldierPartnerGroup", mapItem.nType)
|
||||
local mapPartner = ConfigTable.GetData("SoldierPartner", mapItem.nId)
|
||||
if mapGroup ~= nil and mapPartner ~= nil then
|
||||
self.bPlayingPartnerActiveAnim = true
|
||||
self:SetPngSprite(self._mapNode.img_icon, "Icon/SoldierPartner/" .. mapGroup.Icon .. AllEnum.SoldierChessIconSurfix.M)
|
||||
self:SetPngSprite(self._mapNode.img_iconBg, "Icon/SoldierOtherIcon/PartnerLevelQuality_0" .. mapPartner.PartnerLevelQuality)
|
||||
self:SetPngSprite(self._mapNode.img_iconBg_Add, "Icon/SoldierOtherIcon/PartnerLevelQuality_0" .. mapPartner.PartnerLevelQuality)
|
||||
self._mapNode.HeadRoot.gameObject:SetActive(true)
|
||||
self._mapNode.HeadRoot:Play("HeadActive", 0, 0)
|
||||
local nAnimLength = NovaAPI.GetAnimClipLength(self._mapNode.HeadRoot, {"HeadActive"})
|
||||
if type(nAnimLength) ~= "number" or nAnimLength <= 0 then
|
||||
nAnimLength = 1
|
||||
end
|
||||
self.timerCloseParterNode = self:AddTimer(1, nAnimLength, function()
|
||||
self._mapNode.HeadRoot.gameObject:SetActive(false)
|
||||
self:_FinishPartnerActiveAnimItem(mapItem)
|
||||
self:_PlayNextPartnerActiveAnim()
|
||||
end, true, true)
|
||||
else
|
||||
self:_FinishPartnerActiveAnimItem(mapItem)
|
||||
self:_PlayNextPartnerActiveAnim()
|
||||
end
|
||||
end
|
||||
function SoldierCharSupportCardItemCtrl:OnEvent_SoldierPartnerNewActive(tbActivePartner)
|
||||
local tbQueue = self:_GetMyActivePartnerQueue(tbActivePartner)
|
||||
if tbQueue == nil then
|
||||
return
|
||||
end
|
||||
for _, mapItem in ipairs(tbQueue) do
|
||||
self:_TryAppendPartnerActiveAnimQueue(mapItem)
|
||||
end
|
||||
if self.bPlayingPartnerActiveAnim ~= true then
|
||||
self:_PlayNextPartnerActiveAnim()
|
||||
end
|
||||
end
|
||||
function SoldierCharSupportCardItemCtrl:OnEvent_SoldierExtraPartnerTagChange()
|
||||
local bWarrior = PlayerData.SoldierData:GetCurLevelData():GetExtraPartnerTags(self.nCharId)
|
||||
if bWarrior ~= nil then
|
||||
self._mapNode.Fx_warrior.gameObject:SetActive(true)
|
||||
else
|
||||
self._mapNode.Fx_warrior.gameObject:SetActive(false)
|
||||
end
|
||||
end
|
||||
function SoldierCharSupportCardItemCtrl:GetAnimator()
|
||||
if self._mapNode.animRoot == nil then
|
||||
self._mapNode.animRoot = self.gameObejct.transform:GetChild(0):GetChild(0):GetComponent("Animator")
|
||||
if self._mapNode.animRoot == nil then
|
||||
return nil
|
||||
end
|
||||
end
|
||||
return self._mapNode.animRoot
|
||||
end
|
||||
function SoldierCharSupportCardItemCtrl:OnBtnItemClick()
|
||||
if self._fnClickCallback ~= nil and self.nCharId ~= nil then
|
||||
self._fnClickCallback(self._objClickCallback, self.nCharId)
|
||||
end
|
||||
end
|
||||
function SoldierCharSupportCardItemCtrl:SetClickCallback(obj, fn)
|
||||
self._objClickCallback = obj
|
||||
self._fnClickCallback = fn
|
||||
end
|
||||
function SoldierCharSupportCardItemCtrl:OnEvent_SoldierCharSupportCardItemClicked(nCharId)
|
||||
if nCharId == nil then
|
||||
self:SetSelect(false)
|
||||
return
|
||||
end
|
||||
if self._fnClickCallback ~= nil and self.nCharId ~= nil then
|
||||
self:SetSelect(nCharId == self.nCharId)
|
||||
self._fnClickCallback(self._objClickCallback, self.nCharId)
|
||||
end
|
||||
end
|
||||
return SoldierCharSupportCardItemCtrl
|
||||
@@ -0,0 +1,43 @@
|
||||
local SoldierCharGridCtrl = class("SoldierCharGridCtrl", BaseCtrl)
|
||||
local RootPath = "Icon/SoldierOtherIcon/"
|
||||
SoldierCharGridCtrl._mapNodeConfig = {
|
||||
img_rarity = {sComponentName = "Image"},
|
||||
img_icon = {sComponentName = "Image"},
|
||||
txtCount = {sComponentName = "TMP_Text"},
|
||||
imgInBattle = {},
|
||||
imgMask = {},
|
||||
txtInBattle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Soldier_InBattle"
|
||||
},
|
||||
StarRoot = {},
|
||||
Star = {nCount = 5}
|
||||
}
|
||||
SoldierCharGridCtrl._mapEventConfig = {
|
||||
SoldierHandbookStrategyCard_Selected = "OnEvent_SoldierHandbookStrategyCard_Selected"
|
||||
}
|
||||
SoldierCharGridCtrl._mapRedDotConfig = {}
|
||||
function SoldierCharGridCtrl:SetItem(nRarity, nCount, sIcon, nStar, bMask, bInBattle)
|
||||
self:SetPngSprite(self._mapNode.img_rarity, RootPath .. AllEnum.SoldierChessRarityIcon[nRarity] .. AllEnum.SoldierChessIconSurfix.S)
|
||||
if sIcon ~= nil and sIcon ~= "" then
|
||||
self:SetPngSprite(self._mapNode.img_icon, sIcon)
|
||||
end
|
||||
if 0 < nCount then
|
||||
self._mapNode.txtCount.gameObject:SetActive(true)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtCount, nCount)
|
||||
else
|
||||
self._mapNode.txtCount.gameObject:SetActive(false)
|
||||
end
|
||||
self._mapNode.imgInBattle:SetActive(bInBattle)
|
||||
self._mapNode.imgMask:SetActive(bMask)
|
||||
if nStar ~= nil and 0 < nStar then
|
||||
self._mapNode.StarRoot.gameObject:SetActive(true)
|
||||
for i = 1, #self._mapNode.Star do
|
||||
local star = self._mapNode.Star[i]
|
||||
star.gameObject:SetActive(nStar >= i)
|
||||
end
|
||||
else
|
||||
self._mapNode.StarRoot.gameObject:SetActive(false)
|
||||
end
|
||||
end
|
||||
return SoldierCharGridCtrl
|
||||
@@ -0,0 +1,37 @@
|
||||
local SoldierItemGridCtrl = class("SoldierItemGridCtrl", BaseCtrl)
|
||||
local RootPath = "Icon/SoldierOtherIcon/"
|
||||
SoldierItemGridCtrl._mapNodeConfig = {
|
||||
img_rarity = {sComponentName = "Image"},
|
||||
img_icon = {sComponentName = "Image"},
|
||||
txtCount = {sComponentName = "TMP_Text"}
|
||||
}
|
||||
SoldierItemGridCtrl._mapEventConfig = {
|
||||
SoldierHandbookStrategyCard_Selected = "OnEvent_SoldierHandbookStrategyCard_Selected"
|
||||
}
|
||||
SoldierItemGridCtrl._mapRedDotConfig = {}
|
||||
function SoldierItemGridCtrl:SetItem(nRarity, nCount, sIcon, nItemId)
|
||||
self:SetPngSprite(self._mapNode.img_rarity, RootPath .. AllEnum.SoldierItemRarityIcon[nRarity])
|
||||
if sIcon ~= nil and sIcon ~= "" then
|
||||
self:SetPngSprite(self._mapNode.img_icon, sIcon)
|
||||
end
|
||||
if 0 < nCount then
|
||||
self._mapNode.txtCount.gameObject:SetActive(true)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtCount, nCount)
|
||||
else
|
||||
self._mapNode.txtCount.gameObject:SetActive(false)
|
||||
end
|
||||
self.btnSelf = self.gameObject:GetComponent("UIButton")
|
||||
if self.btnSelf ~= nil then
|
||||
self.btnSelf.onClick:RemoveAllListeners()
|
||||
self.btnSelf.onClick:AddListener(function()
|
||||
UTILS.ClickItemGridWithTips(nItemId, self.gameObject.transform, true)
|
||||
end)
|
||||
end
|
||||
end
|
||||
function SoldierItemGridCtrl:OnDisable()
|
||||
if self.btnSelf ~= nil then
|
||||
self.btnSelf.onClick:RemoveAllListeners()
|
||||
self.btnSelf = nil
|
||||
end
|
||||
end
|
||||
return SoldierItemGridCtrl
|
||||
@@ -0,0 +1,41 @@
|
||||
local SoldierPotentialItemCtrl = class("SoldierPotentialItemCtrl", BaseCtrl)
|
||||
SoldierPotentialItemCtrl._mapNodeConfig = {
|
||||
imgIcon = {sComponentName = "Image"},
|
||||
txtName = {sComponentName = "TMP_Text"},
|
||||
iconStar = {nCount = 4},
|
||||
goLock = {},
|
||||
iconLockStar = {nCount = 4},
|
||||
listStar = {}
|
||||
}
|
||||
SoldierPotentialItemCtrl._mapEventConfig = {}
|
||||
SoldierPotentialItemCtrl._mapRedDotConfig = {}
|
||||
function SoldierPotentialItemCtrl:SetItemData(nPotentialId, nStar)
|
||||
nStar = nStar or 0
|
||||
local potentialConfig = ConfigTable.GetData("SoldierPotential", nPotentialId)
|
||||
if potentialConfig == nil then
|
||||
return
|
||||
end
|
||||
self:SetPngSprite(self._mapNode.imgIcon, potentialConfig.Icon)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtName, potentialConfig.Name)
|
||||
for i = 1, 4 do
|
||||
self._mapNode.iconStar[i]:SetActive(nStar >= i)
|
||||
end
|
||||
self._mapNode.goLock:SetActive(false)
|
||||
self._mapNode.listStar:SetActive(true)
|
||||
end
|
||||
function SoldierPotentialItemCtrl:SetItemLockData(nPotentialId, nStar)
|
||||
nStar = nStar or 0
|
||||
local potentialConfig = ConfigTable.GetData("SoldierPotential", nPotentialId)
|
||||
if potentialConfig == nil then
|
||||
return
|
||||
end
|
||||
self._mapNode.goLock:SetActive(true)
|
||||
for i = 1, 4 do
|
||||
self._mapNode.iconLockStar[i]:SetActive(i <= nStar)
|
||||
end
|
||||
for i = 1, 4 do
|
||||
self._mapNode.iconStar[i]:SetActive(false)
|
||||
end
|
||||
self._mapNode.listStar:SetActive(false)
|
||||
end
|
||||
return SoldierPotentialItemCtrl
|
||||
@@ -0,0 +1,31 @@
|
||||
local SoldierStarterCardItemCtrl = class("SoldierStarterCardItemCtrl", BaseCtrl)
|
||||
local RootPath = "Icon/SoldierBuffCard/"
|
||||
SoldierStarterCardItemCtrl._mapNodeConfig = {
|
||||
imgRare = {sComponentName = "Image"},
|
||||
imgIcon = {sComponentName = "Image"},
|
||||
imgSelect = {},
|
||||
txtName = {sComponentName = "TMP_Text"}
|
||||
}
|
||||
SoldierStarterCardItemCtrl._mapEventConfig = {
|
||||
SoldierHandbookStarterCard_Selected = "OnEvent_SoldierHandbookStarterCard_Selected"
|
||||
}
|
||||
SoldierStarterCardItemCtrl._mapRedDotConfig = {}
|
||||
function SoldierStarterCardItemCtrl:SetItemData(mapStarterCardData, bSelected)
|
||||
self.mapStarterCardData = mapStarterCardData
|
||||
local starterCardConfig = ConfigTable.GetData("SoldierStarterCard", mapStarterCardData.Id)
|
||||
if starterCardConfig == nil then
|
||||
return
|
||||
end
|
||||
self:SetPngSprite(self._mapNode.imgIcon, RootPath .. starterCardConfig.Icon)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtName, starterCardConfig.Name)
|
||||
self._mapNode.imgSelect:SetActive(false)
|
||||
self._mapNode.imgSelect:SetActive(bSelected)
|
||||
end
|
||||
function SoldierStarterCardItemCtrl:OnEvent_SoldierHandbookStarterCard_Selected(nStarterCardId)
|
||||
if self.mapStarterCardData.Id == nStarterCardId then
|
||||
self._mapNode.imgSelect:SetActive(true)
|
||||
else
|
||||
self._mapNode.imgSelect:SetActive(false)
|
||||
end
|
||||
end
|
||||
return SoldierStarterCardItemCtrl
|
||||
@@ -0,0 +1,29 @@
|
||||
local SoldierStrategyCardItemCtrl = class("SoldierStrategyCardItemCtrl", BaseCtrl)
|
||||
local RootPath = "Icon/SoldierOtherIcon/"
|
||||
local iconPath = "Icon/SoldierBuffCard/"
|
||||
SoldierStrategyCardItemCtrl._mapNodeConfig = {
|
||||
imgRare = {sComponentName = "Image"},
|
||||
imgIcon = {sComponentName = "Image"},
|
||||
imgSelect = {},
|
||||
txtName = {sComponentName = "TMP_Text"}
|
||||
}
|
||||
SoldierStrategyCardItemCtrl._mapEventConfig = {
|
||||
SoldierHandbookStrategyCard_Selected = "OnEvent_SoldierHandbookStrategyCard_Selected"
|
||||
}
|
||||
SoldierStrategyCardItemCtrl._mapRedDotConfig = {}
|
||||
function SoldierStrategyCardItemCtrl:SetItemData(mapStrategyCardData, bSelected)
|
||||
self.mapStrategyCardData = mapStrategyCardData
|
||||
local rarity = self.mapStrategyCardData.Rarity
|
||||
self:SetPngSprite(self._mapNode.imgRare, RootPath .. AllEnum.SoldierStrategyCardRarityIcon[rarity] .. AllEnum.SoldierChessIconSurfix.M)
|
||||
self:SetPngSprite(self._mapNode.imgIcon, iconPath .. self.mapStrategyCardData.Icon)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtName, self.mapStrategyCardData.Name)
|
||||
self._mapNode.imgSelect:SetActive(bSelected)
|
||||
end
|
||||
function SoldierStrategyCardItemCtrl:OnEvent_SoldierHandbookStrategyCard_Selected(nStrategyCardId)
|
||||
if self.mapStrategyCardData.Id == nStrategyCardId then
|
||||
self._mapNode.imgSelect:SetActive(true)
|
||||
else
|
||||
self._mapNode.imgSelect:SetActive(false)
|
||||
end
|
||||
end
|
||||
return SoldierStrategyCardItemCtrl
|
||||
Reference in New Issue
Block a user