eafd8f4088
EN: 1.9.0.107 CN: 1.9.0.108 JP: 1.9.0.112 KR: 1.9.0.112
404 lines
15 KiB
Lua
404 lines
15 KiB
Lua
local BreakOutLevelDetailCtrl = class("BreakOutLevelDetailCtrl", BaseCtrl)
|
|
local DifficultyState = {
|
|
"Entry",
|
|
"Newbie",
|
|
"Advanced",
|
|
"Expert"
|
|
}
|
|
BreakOutLevelDetailCtrl._mapNodeConfig = {
|
|
TopBar = {
|
|
sNodeName = "TopBarPanel",
|
|
sCtrlName = "Game.UI.TopBarEx.TopBarCtrl"
|
|
},
|
|
EnemyInfo = {
|
|
sCtrlName = "Game.UI.MainlineEx.MainlineMonsterInfoCtrl"
|
|
},
|
|
btnHeadItem_ = {
|
|
nCount = 4,
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtn_ClickCharacterItem"
|
|
},
|
|
txtTitleTarget = {
|
|
sNodeName = "txtTitleTarget",
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "ChallengingGoals"
|
|
},
|
|
txt_Reward = {
|
|
sNodeName = "txt_Reward",
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "BreakOut_Act_Reward"
|
|
},
|
|
txt_LevelTitle = {
|
|
sNodeName = "txt_LevelTitle",
|
|
sComponentName = "TMP_Text"
|
|
},
|
|
txt_DifficultyType = {
|
|
sNodeName = "txt_DifficultyType",
|
|
sComponentName = "TMP_Text"
|
|
},
|
|
txt_LevelDesc = {
|
|
sNodeName = "txt_LevelDesc",
|
|
sComponentName = "TMP_Text"
|
|
},
|
|
txt_Target = {sNodeName = "txt_Target", sComponentName = "TMP_Text"},
|
|
item = {
|
|
nCount = 4,
|
|
sCtrlName = "Game.UI.TemplateEx.TemplateItemCtrl"
|
|
},
|
|
btn_item = {
|
|
nCount = 4,
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_RewardItem"
|
|
},
|
|
btn_GoChallenge = {sComponentName = "UIButton", callback = "OnBtn_Go"},
|
|
UnClick = {},
|
|
txt_UnGo = {
|
|
sNodeName = "txt_UnGo",
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "TD_Btn_Challenge"
|
|
},
|
|
CanClick = {},
|
|
txt_Go = {
|
|
sNodeName = "txt_Go",
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "TD_Btn_Challenge"
|
|
},
|
|
btnEnemyInfo = {
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_EnemyInfo"
|
|
},
|
|
txt_EnemyInfo = {
|
|
sNodeName = "txt_EnemyInfo",
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "MonsterInfo"
|
|
},
|
|
txt_title = {
|
|
sNodeName = "txt_title",
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "BreakOut_Act_BattleCount"
|
|
},
|
|
txt_battleCount = {
|
|
sNodeName = "txt_battleCount",
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "BreakOut_Act_DefaultBattleCount"
|
|
},
|
|
goChar = {
|
|
sCtrlName = "Game.UI.FormationEx.FormationCharCtrl"
|
|
},
|
|
UIParallax3DStage = {
|
|
sComponentName = "UIParallaxStageCameraController"
|
|
},
|
|
iconAdd = {},
|
|
CharacterDetails = {},
|
|
txt_Desc = {
|
|
sNodeName = "txt_Desc",
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "BreakOut_Act_DefaultDesc"
|
|
},
|
|
txt_SpDesc = {sNodeName = "txt_SpDesc", sComponentName = "TMP_Text"},
|
|
txt_name = {
|
|
sNodeName = "txt_name",
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "BreakOut_Act_DefaultName_Skill"
|
|
},
|
|
txtProperty_CD = {sComponentName = "TMP_Text", sLanguageId = "Talent_CD"},
|
|
txtValue_CD = {sComponentName = "TMP_Text"},
|
|
SkillIcon = {
|
|
sNodeName = "imgIcon_Skill",
|
|
sComponentName = "Image"
|
|
},
|
|
fxChange = {}
|
|
}
|
|
BreakOutLevelDetailCtrl._mapEventConfig = {
|
|
Event_ReStartBreakOut = "Event_ReStartGoPlay",
|
|
RefreshCharacterBattleTimes = "RefreshCharacterDetail"
|
|
}
|
|
function BreakOutLevelDetailCtrl:Awake()
|
|
local param = self:GetPanelParam()
|
|
if type(param) == "table" then
|
|
self.nActId = param[1]
|
|
self.nLevelId = param[2]
|
|
end
|
|
self.BreakOutData = PlayerData.Activity:GetActivityDataById(self.nActId)
|
|
self.LevelCharacters = {}
|
|
self.LevelData = self.BreakOutData:GetDetailLevelDataById(self.nLevelId)
|
|
local nFloorId = self.LevelData.FloorId
|
|
self.BreakOutFloorData = ConfigTable.GetData("BreakOutFloor", nFloorId)
|
|
self.PreviewMonsterGroupId = self.LevelData.PreviewMonsterGroupId
|
|
self._mapNode.btnEnemyInfo.gameObject:SetActive(self.PreviewMonsterGroupId ~= 0)
|
|
self.BreakOutLevelDetail_Animator = self.gameObject:GetComponent("Animator")
|
|
end
|
|
function BreakOutLevelDetailCtrl:OnEnable()
|
|
self.curCharacter = nil
|
|
self.isOnDefaultClick = true
|
|
self.nCurrentIndex = 1
|
|
self.nCurrentCharacterNid = {}
|
|
self.gameObject:SetActive(false)
|
|
local sSceneName = ConfigTable.GetData("BreakOutControl", self.nActId).SceneName
|
|
local Callback = function(bSuccess)
|
|
self.bOpen = true
|
|
if bSuccess == true then
|
|
local sceneRoot = CS.MainMenuModuleHelper.GetMainMenuSceneRoot(sSceneName)
|
|
self.rtSceneOriginPos = sceneRoot.transform:Find("==== Scene ====")
|
|
self.goSelectRolePrefab = self:CreatePrefabInstance("UI/MainlineFormationEx/SelectRolePrefab.prefab", self.rtSceneOriginPos)
|
|
local goSelectRoleCam = self.goSelectRolePrefab.transform:Find("Camera"):GetComponent("Camera")
|
|
NovaAPI.SetupUIParallaxStageCameraControllerForModelView(self._mapNode.UIParallax3DStage, goSelectRoleCam)
|
|
self:Refresh()
|
|
if #self.nCurrentCharacterNid ~= 0 then
|
|
end
|
|
local wait = function()
|
|
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
|
if PlayerData.Guide:GetGuideState() then
|
|
EventManager.Hit("Guide_LoadFormationSuccess")
|
|
end
|
|
end
|
|
cs_coroutine.start(wait)
|
|
else
|
|
self._mapNode.UIParallax3DStage.gameObject:SetActive(false)
|
|
end
|
|
self._mapNode.goChar:OpenList(false)
|
|
self.bOpen = false
|
|
EventManager.Hit(EventId.SetTransition)
|
|
self.gameObject:SetActive(true)
|
|
self.BreakOutLevelDetail_Animator:Play("BreakOutLevelDetailPanel_in", -1, 0)
|
|
end
|
|
CS.MainMenuModuleHelper.GetActiveScene(sSceneName, Callback)
|
|
self.bOpenTransition = false
|
|
end
|
|
function BreakOutLevelDetailCtrl:OnDisable()
|
|
local sSceneName = ConfigTable.GetData("BreakOutControl", self.nActId).SceneName
|
|
local callback1 = function()
|
|
EventManager.Hit(EventId.SetTransition)
|
|
end
|
|
local callback2 = function()
|
|
end
|
|
CS.MainMenuModuleHelper.DeActiveScene(sSceneName, self.bOpenTransition == true and callback1 or callback2)
|
|
if self.curCharacter ~= nil and self.curCharacter.model ~= nil then
|
|
NovaAPI.UnbindUIParallaxStageCameraControllerModel(self._mapNode.UIParallax3DStage, 0)
|
|
destroy(self.curCharacter.model)
|
|
end
|
|
self._mapNode.goChar.nCharId = nil
|
|
if self.goSelectRolePrefab ~= nil then
|
|
destroy(self.goSelectRolePrefab)
|
|
end
|
|
self.curCharacter = nil
|
|
end
|
|
function BreakOutLevelDetailCtrl:Refresh()
|
|
self:Set_DefaultCharacter()
|
|
self:RefreshLevelDetail()
|
|
self:RefreshLevelCharacter()
|
|
self:RefreshCharacterDetail()
|
|
self:RefreshCharacter()
|
|
end
|
|
function BreakOutLevelDetailCtrl:RefreshLevelDetail()
|
|
NovaAPI.SetTMPText(self._mapNode.txt_LevelTitle, self.LevelData.Name)
|
|
local time = self.BreakOutFloorData.Time
|
|
local score = self.BreakOutFloorData.Score
|
|
NovaAPI.SetTMPText(self._mapNode.txt_Target, orderedFormat(ConfigTable.GetUIText("BreakOut_Act_Target") or "", time, score))
|
|
local sDifficultType = ConfigTable.GetUIText(DifficultyState[self.LevelData.Type])
|
|
NovaAPI.SetTMPText(self._mapNode.txt_DifficultyType, sDifficultType)
|
|
NovaAPI.SetTMPText(self._mapNode.txt_LevelDesc, self.LevelData.Desc)
|
|
self.tbReward = {}
|
|
for i = 1, 4 do
|
|
local nRewardId = self.LevelData["FirstCompleteReward" .. i .. "Tid"]
|
|
local nRewardQty = self.LevelData["FirstCompleteReward" .. i .. "Qty"]
|
|
if nRewardId ~= nil and 0 < nRewardId and nRewardQty ~= nil and 0 < nRewardQty then
|
|
table.insert(self.tbReward, {nRewardId, nRewardQty})
|
|
self._mapNode.btn_item[i].gameObject:SetActive(true)
|
|
else
|
|
self._mapNode.btn_item[i].gameObject:SetActive(false)
|
|
end
|
|
end
|
|
self.tbBtn = self._mapNode.btnRewardItem
|
|
local bIsComplete = self.BreakOutData:IsLevelComplete(self.nLevelId)
|
|
for k, v in pairs(self.tbReward) do
|
|
self._mapNode.item[k]:SetItem(v[1], nil, v[2], nil, bIsComplete)
|
|
end
|
|
self._mapNode.UnClick:SetActive(self.isOnDefaultClick)
|
|
self._mapNode.CanClick:SetActive(not self.isOnDefaultClick)
|
|
end
|
|
function BreakOutLevelDetailCtrl:RefreshLevelCharacter()
|
|
local nCharactersNumber = #self.LevelData.Characters
|
|
for i = 1, nCharactersNumber do
|
|
self._mapNode.btnHeadItem_[i].gameObject:SetActive(true)
|
|
local characterNId = ConfigTable.GetData("BreakOutCharacter", self.LevelData.Characters[i]).Id
|
|
local characterId = ConfigTable.GetData("BreakOutCharacter", self.LevelData.Characters[i]).CharId
|
|
self:RefreshLevelCharacterState(i, characterNId, characterId)
|
|
end
|
|
for i = nCharactersNumber + 1, #self._mapNode.btnHeadItem_ do
|
|
self._mapNode.btnHeadItem_[i].gameObject:SetActive(false)
|
|
end
|
|
end
|
|
function BreakOutLevelDetailCtrl:RefreshLevelCharacterState(index, characterNId, characterId)
|
|
local objTog = self._mapNode.btnHeadItem_[index].gameObject
|
|
local rt_Head_Close = objTog.transform:Find("Head_Close").gameObject
|
|
local rt_SelectIcon = objTog.transform:Find("SelectIcon").gameObject
|
|
local rt_HeadIcon = objTog.transform:Find("img_head").gameObject
|
|
objTog.transform:GetChild(0).name = tostring(characterNId)
|
|
if not self.BreakOutData:CacheIsUnlocked(characterNId) then
|
|
rt_Head_Close:SetActive(true)
|
|
rt_SelectIcon:SetActive(false)
|
|
rt_HeadIcon:SetActive(false)
|
|
local txt_Tip = rt_Head_Close.transform:Find("Tip/txt_Tip"):GetComponent("TMP_Text")
|
|
NovaAPI.SetTMPText(txt_Tip, ConfigTable.GetUIText("BreakOut_Act_CharacterUnOpen"))
|
|
else
|
|
rt_Head_Close:SetActive(false)
|
|
if self.isOnDefaultClick then
|
|
rt_SelectIcon:SetActive(false)
|
|
elseif self.nCurrentIndex == index and self.nCurrentCharacterNid[1] == characterNId then
|
|
rt_SelectIcon:SetActive(true)
|
|
else
|
|
rt_SelectIcon:SetActive(false)
|
|
end
|
|
local img_HeadIcon = rt_HeadIcon.transform:Find("img_headMask/img_headIcon"):GetComponent("Image")
|
|
local sHeadPath = "head_" .. characterId .. "_QM"
|
|
self:SetPngSprite(img_HeadIcon, "Icon/Head/" .. sHeadPath)
|
|
end
|
|
end
|
|
function BreakOutLevelDetailCtrl:RefreshCharacterDetail()
|
|
local DefaultDesc = self._mapNode.CharacterDetails.transform:Find("DefaultDesc"):GetComponent("CanvasGroup")
|
|
local SpScrollView = self._mapNode.CharacterDetails.transform:Find("SpScrollView"):GetComponent("CanvasGroup")
|
|
if self.isOnDefaultClick or self.nCurrentCharacterNid[1] == nil then
|
|
NovaAPI.SetCanvasGroupAlpha(DefaultDesc, 1)
|
|
NovaAPI.SetCanvasGroupAlpha(SpScrollView, 0)
|
|
else
|
|
NovaAPI.SetCanvasGroupAlpha(DefaultDesc, 0)
|
|
NovaAPI.SetCanvasGroupAlpha(SpScrollView, 1)
|
|
NovaAPI.SetTMPText(self._mapNode.txt_battleCount, self.BreakOutData:GetBattleCount(self.nCurrentCharacterNid[1]))
|
|
local characterData = self.BreakOutData:GetDataFromBreakOutCharacter(self.nCurrentCharacterNid[1])
|
|
if characterData == nil then
|
|
return
|
|
end
|
|
local SkillData = ConfigTable.GetData("Skill", characterData.SkillId)
|
|
local sCD = tostring(SkillData.SkillCD) .. ConfigTable.GetUIText("Talent_Sec")
|
|
NovaAPI.SetTMPText(self._mapNode.txtValue_CD, sCD)
|
|
NovaAPI.SetTMPText(self._mapNode.txt_SpDesc, SkillData.Desc)
|
|
self:SetPngSprite(self._mapNode.SkillIcon, SkillData.Icon)
|
|
NovaAPI.SetTMPText(self._mapNode.txt_name, orderedFormat(ConfigTable.GetUIText("BreakOut_Act_Name_Skill") or "", characterData.Name, SkillData.Title))
|
|
self.BreakOutLevelDetail_Animator:Play("BreakOutLevelDetailPanel_switch", -1, 0)
|
|
end
|
|
end
|
|
function BreakOutLevelDetailCtrl:RefreshCharacter()
|
|
if #self.nCurrentCharacterNid == 0 then
|
|
self.nCurrentCharacterNid[1] = 0
|
|
self._mapNode.iconAdd:SetActive(true)
|
|
return
|
|
else
|
|
self._mapNode.iconAdd:SetActive(false)
|
|
local characterId = self.BreakOutData:GetDataFromBreakOutCharacter(self.nCurrentCharacterNid[1]).CharId
|
|
if self.curCharacter == nil or self.curCharacter.nCharId ~= characterId then
|
|
self:LoadCharacter(characterId, self.nCurrentCharacterNid[1], self.bOpen)
|
|
elseif self.curCharacter ~= nil then
|
|
NovaAPI.UnbindUIParallaxStageCameraControllerModel(self._mapNode.UIParallax3DStage, 0)
|
|
destroy(self.curCharacter.model)
|
|
self.curCharacter = nil
|
|
end
|
|
end
|
|
end
|
|
function BreakOutLevelDetailCtrl:LoadCharacter(nCharId, nCharNid, bOpen)
|
|
if self.isOnDefaultClick then
|
|
return
|
|
end
|
|
local mapSkin = self.BreakOutData:GetDataFromBreakOutCharacter(nCharNid)
|
|
if not mapSkin then
|
|
printLog("没有找到皮肤配置" .. nCharId)
|
|
return
|
|
end
|
|
local CharacterSkinOverlapData = ConfigTable.GetData("CharacterSkinOverlap", mapSkin.CharId)
|
|
if not CharacterSkinOverlapData then
|
|
printLog("CharacterSkinOverlap" .. nCharId)
|
|
return
|
|
end
|
|
local nBreakOut_ModelShowScale = CharacterSkinOverlapData.BreakOut_ModelShowScale ~= "" and CharacterSkinOverlapData.BreakOut_ModelShowScale or 1
|
|
local nBreakOut_ModelShow = CharacterSkinOverlapData.BreakOut_Model_Show ~= "" and CharacterSkinOverlapData.BreakOut_Model_Show or mapSkin.Model
|
|
local sFullPath = string.format("%s.prefab", nBreakOut_ModelShow)
|
|
local LoadModelCallback = function(obj)
|
|
if self._mapNode == nil then
|
|
return
|
|
end
|
|
if self.nCurrentCharacterNid[1] == nCharNid then
|
|
if self.curCharacter ~= nil then
|
|
NovaAPI.UnbindUIParallaxStageCameraControllerModel(self._mapNode.UIParallax3DStage, 0)
|
|
destroy(self.curCharacter.model)
|
|
self.curCharacter = nil
|
|
end
|
|
local go = instantiate(obj, self.rtSceneOriginPos)
|
|
self.curCharacter = {nCharId = nCharId, model = go}
|
|
NovaAPI.BindUIParallaxStageCameraControllerModel(self._mapNode.UIParallax3DStage, 0, go)
|
|
if self.rtSceneOriginPos ~= nil then
|
|
go.transform.position = self.rtSceneOriginPos.position
|
|
go.transform.localEulerAngles = Vector3(0, 180, 0)
|
|
go.transform.localScale = Vector3.zero
|
|
GameUIUtils.SetCustomModelMaterialVariant(go, CS.CustomModelMaterialVariantComponent.VariantNames.FormationView)
|
|
local wait = function()
|
|
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
|
go.transform.localScale = Vector3.one * (nBreakOut_ModelShowScale / 10000)
|
|
end
|
|
cs_coroutine.start(wait)
|
|
end
|
|
if not bOpen then
|
|
self:PlayChangeFx()
|
|
end
|
|
end
|
|
end
|
|
self:LoadAssetAsync(sFullPath, typeof(GameObject), LoadModelCallback)
|
|
end
|
|
function BreakOutLevelDetailCtrl:PlayChangeFx()
|
|
GameUIUtils.RestartParticle(self._mapNode.fxChange)
|
|
end
|
|
function BreakOutLevelDetailCtrl:OnBtn_ClickCharacterItem(btn, nIndex)
|
|
local characterNId = tonumber(btn.gameObject.transform:GetChild(0).name)
|
|
if not self.BreakOutData:CacheIsUnlocked(characterNId) then
|
|
return
|
|
end
|
|
if self.isOnDefaultClick or self.nCurrentIndex ~= nIndex or self.nCurrentCharacterNid[1] ~= characterNId then
|
|
self.nCurrentIndex = nIndex
|
|
self.isOnDefaultClick = false
|
|
self.nCurrentCharacterNid[1] = characterNId
|
|
self:Refresh()
|
|
end
|
|
end
|
|
function BreakOutLevelDetailCtrl:OnBtnClick_RewardItem(btn, nIndex)
|
|
local nRewardId
|
|
if self.tbReward ~= nil and self.tbReward[nIndex] ~= nil then
|
|
nRewardId = self.tbReward[nIndex][1]
|
|
end
|
|
if nRewardId ~= nil then
|
|
UTILS.ClickItemGridWithTips(nRewardId, btn.transform, true, true, false)
|
|
end
|
|
end
|
|
function BreakOutLevelDetailCtrl:OnBtn_Go()
|
|
if self.isOnDefaultClick or self.nCurrentCharacterNid[1] == nil or self.nCurrentCharacterNid[1] == 0 then
|
|
local sTip = ConfigTable.GetUIText("BreakOut_Act_DefaultDesc")
|
|
EventManager.Hit(EventId.OpenMessageBox, sTip)
|
|
return
|
|
end
|
|
self.isOnDefaultClick = true
|
|
local sChar = tostring(self.nCurrentCharacterNid[1])
|
|
local param = {}
|
|
table.insert(param, sChar)
|
|
self.BreakOutData.BreakOutLevelData:InitData(self.nLevelId, self.nCurrentCharacterNid[1], self.nActId)
|
|
CS.AdventureModuleHelper.EnterBrickBreakerLevel(self.LevelData.FloorId, param)
|
|
NovaAPI.EnterModule("AdventureModuleScene", true, 17)
|
|
end
|
|
function BreakOutLevelDetailCtrl:Event_ReStartGoPlay(tempData)
|
|
local sChar = tostring(tempData.curChar)
|
|
local param = {}
|
|
table.insert(param, sChar)
|
|
self.BreakOutData.BreakOutLevelData:InitData(tempData.nLevelId, tempData.curChar, tempData.nActId)
|
|
CS.AdventureModuleHelper.EnterBrickBreakerLevel(tempData.FloorId, param)
|
|
NovaAPI.EnterModule("AdventureModuleScene", true, 17)
|
|
end
|
|
function BreakOutLevelDetailCtrl:Set_DefaultCharacter()
|
|
local nCharactersNumber = #self.LevelData.Characters
|
|
if nCharactersNumber == 1 then
|
|
self.nCurrentIndex = nCharactersNumber
|
|
self.isOnDefaultClick = false
|
|
self.nCurrentCharacterNid[1] = ConfigTable.GetData("BreakOutCharacter", self.LevelData.Characters[nCharactersNumber]).Id
|
|
end
|
|
end
|
|
function BreakOutLevelDetailCtrl:OnBtnClick_EnemyInfo()
|
|
EventManager.Hit("OpenActivityLevelsMonsterInfo", self.PreviewMonsterGroupId)
|
|
end
|
|
return BreakOutLevelDetailCtrl
|