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