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:
SL1900
2026-07-21 12:30:00 +09:00
parent a12087abad
commit 8c4bd41668
1334 changed files with 873026 additions and 95164 deletions
@@ -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