Update - 1.9.0.107
EN: 1.9.0.107 CN: 1.9.0.108 JP: 1.9.0.112 KR: 1.9.0.112
This commit is contained in:
@@ -0,0 +1,403 @@
|
||||
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
|
||||
Reference in New Issue
Block a user