Update - 1.12.0.120
EN: 1.12.0.120 CN: 1.12.0.120 JP: 1.12.0.124 KR: 1.12.0.124
This commit is contained in:
@@ -0,0 +1,386 @@
|
||||
local MiningGameCtrl = class("MiningGameCtrl", BaseCtrl)
|
||||
local WwiseAudioMgr = CS.WwiseAudioManager.Instance
|
||||
local listPrefabPath = "UI_Activity/_%s/GridCell/"
|
||||
local assetPath = "UI_Activity/_%s/SpriteAtlas/Sprite/"
|
||||
local signal_typeA = "zs_mining_signal_01"
|
||||
local signal_typeB = "zs_mining_signal_02"
|
||||
local signal_typeC = "zs_mining_signal_03"
|
||||
local signal_typeD = "zs_mining_signal_04"
|
||||
MiningGameCtrl._mapNodeConfig = {
|
||||
TopBar = {
|
||||
sNodeName = "TopBarPanel",
|
||||
sCtrlName = "Game.UI.TopBarEx.TopBarCtrl"
|
||||
},
|
||||
animator = {
|
||||
sNodeName = "----SafeAreaRoot----",
|
||||
sComponentName = "Animator"
|
||||
},
|
||||
GirdListPrefab = {},
|
||||
cellPos = {nCount = 21},
|
||||
txt_scoreTitle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "MiningGame_ScoreTitle"
|
||||
},
|
||||
txt_score = {sComponentName = "TMP_Text"},
|
||||
animator_score = {sNodeName = "bg_score", sComponentName = "Animator"},
|
||||
txt_level = {sComponentName = "TMP_Text"},
|
||||
char = {nCount = 2},
|
||||
imgShovel = {},
|
||||
Btn_Axe = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_OpenAxeTips"
|
||||
},
|
||||
txt_rewardTitle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "MiningGame_ItemTitle"
|
||||
},
|
||||
signal = {nCount = 3},
|
||||
txt_Amount = {sComponentName = "TMP_Text"},
|
||||
btn_guide = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_OpenGuidePanel"
|
||||
},
|
||||
txt_guide = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "MiningGame_Guide"
|
||||
},
|
||||
btn_reward = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_OpenTask"
|
||||
},
|
||||
txt_reward = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "MiningGame_Reward"
|
||||
},
|
||||
reward_reddot = {},
|
||||
FinishPanel = {},
|
||||
txt_finish = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "MiningGame_Finish"
|
||||
},
|
||||
GoNextLevelPanel = {},
|
||||
txt_NextLevel = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "MiningGame_FinishLevel"
|
||||
}
|
||||
}
|
||||
MiningGameCtrl._mapEventConfig = {
|
||||
MiningUpdateLevel = "OnEvent_UpdateLevelData",
|
||||
MiningUpdateCell = "OnEvent_UpdateGridCell",
|
||||
MiningUpdateReward = "OnEvent_UpdateRewardStatus",
|
||||
MiningAxeUpdate = "OnEvent_UpdateAxeCount",
|
||||
MiningKnockResult = "OnEvent_MiningKnockResult",
|
||||
MiningGameUpdateScore = "OnEvent_UpdateScore",
|
||||
MiningGameRewardFxOver = "OnEvent_UpdateScoreFx",
|
||||
MiningShowReward = "OnEvent_ShowReward",
|
||||
Mining_Error = "OnEvent_Error"
|
||||
}
|
||||
MiningGameCtrl._mapRedDotConfig = {}
|
||||
function MiningGameCtrl:Awake()
|
||||
local param = self:GetPanelParam()
|
||||
if type(param) == "table" then
|
||||
self.nActId = param[1]
|
||||
end
|
||||
self.nNewScore = 0
|
||||
self.bInPassAnim = false
|
||||
self.passAnimCb = nil
|
||||
self._mapNode.FinishPanel:SetActive(false)
|
||||
self._mapNode.GoNextLevelPanel:SetActive(false)
|
||||
self.miningData = PlayerData.Activity:GetActivityDataById(self.nActId)
|
||||
if self.miningData:GetIsFirstIn() then
|
||||
local cb = function()
|
||||
local DicConfig = ConfigTable.GetData("TopBar", string.format("MiningGame_%s", self.nActId))
|
||||
if DicConfig ~= nil then
|
||||
local dicId = DicConfig.EntryId
|
||||
if dicId ~= 0 then
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.DictionaryEntry, dicId, true)
|
||||
end
|
||||
end
|
||||
self.miningData:SetIsFirstIn()
|
||||
end
|
||||
self:AddTimer(1, 0.9, cb, true, true, true)
|
||||
EventManager.Hit(EventId.TemporaryBlockInput, 1.1)
|
||||
end
|
||||
end
|
||||
function MiningGameCtrl:OnEnable()
|
||||
if self.miningData:CheckActivityOpen() then
|
||||
self:UpdateLevelData()
|
||||
else
|
||||
NovaAPI.InputDisable()
|
||||
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Activity_MiningEnd"))
|
||||
local wait = function()
|
||||
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
||||
EventManager.Hit(EventId.ClosePanel, self._panel.nPanelId)
|
||||
NovaAPI.InputEnable()
|
||||
end
|
||||
cs_coroutine.start(wait)
|
||||
end
|
||||
local bInActGroup, nActGroupId = PlayerData.Activity:IsActivityInActivityGroup(self.nActId)
|
||||
if bInActGroup then
|
||||
local mapActivityData = ConfigTable.GetData("Activity", self.nActId)
|
||||
local actGroupId = mapActivityData.MidGroupId
|
||||
local actGroupData = PlayerData.Activity:GetActivityGroupDataById(actGroupId)
|
||||
local taskActId = actGroupData:GetActivityDataByIndex(AllEnum.ActivityThemeFuncIndex.Task).ActivityId
|
||||
local taskActData = PlayerData.Activity:GetActivityDataById(taskActId)
|
||||
if taskActData ~= nil and taskActData:CheckActivityOpen() then
|
||||
RedDotManager.RegisterNode(RedDotDefine.Activity_Group_Task_Group, {
|
||||
nActGroupId,
|
||||
taskActId,
|
||||
mapActivityData.MiniGameRedDot
|
||||
}, self._mapNode.reward_reddot)
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
function MiningGameCtrl:OnDisable(...)
|
||||
if self.gridListCtrl ~= nil then
|
||||
self:UnbindCtrlByNode(self.gridListCtrl)
|
||||
end
|
||||
self.gridListCtrl = nil
|
||||
end
|
||||
function MiningGameCtrl:OnDestroy()
|
||||
if PlayerData.Activity:IsActivityInActivityGroup(self.nActId) then
|
||||
local mapActivityData = ConfigTable.GetData("Activity", self.nActId)
|
||||
local actGroupId = mapActivityData.MidGroupId
|
||||
local actGroupData = PlayerData.Activity:GetActivityGroupDataById(actGroupId)
|
||||
local taskActId = actGroupData:GetActivityDataByIndex(AllEnum.ActivityThemeFuncIndex.Task).ActivityId
|
||||
local taskActData = PlayerData.Activity:GetActivityDataById(taskActId)
|
||||
if taskActData ~= nil and taskActData:CheckActivityOpen() then
|
||||
RedDotManager.UnRegisterNode(RedDotDefine.Activity_Group_Task_Group, {
|
||||
actGroupId,
|
||||
taskActId,
|
||||
mapActivityData.MiniGameRedDot
|
||||
}, self._mapNode.reward_reddot)
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
function MiningGameCtrl:InitData()
|
||||
self.tbRewardDataList = {}
|
||||
self.goBgPrefab = nil
|
||||
end
|
||||
function MiningGameCtrl:UpdateLevelData()
|
||||
self:InitData()
|
||||
local config = self.miningData:GetMiningCfg()
|
||||
local prefabPath = string.format(listPrefabPath, self.nActId) .. config.GridListPrefab .. ".prefab"
|
||||
if self.gridListCtrl == nil then
|
||||
for i = 1, 21 do
|
||||
delChildren(self._mapNode.cellPos[i].transform)
|
||||
local goCell = self:CreatePrefabInstance(prefabPath, self._mapNode.cellPos[i].transform)
|
||||
goCell.name = "cell" .. i
|
||||
end
|
||||
self.gridListCtrl = self:BindCtrlByNode(self._mapNode.GirdListPrefab, "Game.UI.Activity.Mining.MiningGridListCtrl")
|
||||
self.gridListCtrl:SetData(self.nActId)
|
||||
end
|
||||
self:UpdateSupData()
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_level, orderedFormat(ConfigTable.GetUIText("MiningGame_Level"), self.miningData:GetLevel()))
|
||||
self:InitRewardList()
|
||||
self.tbRewardDataList = self.miningData:GetCurLevelRewardData()
|
||||
self:UpdateRewardList()
|
||||
local tbCellData = self.miningData:GetCellData()
|
||||
local funcCallback = function(nId)
|
||||
self:KnockCallback(nId)
|
||||
end
|
||||
for _, v in pairs(tbCellData) do
|
||||
self.gridListCtrl:InitGridCell(v, funcCallback)
|
||||
end
|
||||
EventManager.Hit(EventId.BlockInput, true)
|
||||
self:AddTimer(1, 0.55, function()
|
||||
self.gridListCtrl:HideReward()
|
||||
self.gridListCtrl:InitRewardList(self.tbRewardDataList)
|
||||
EventManager.Hit(EventId.BlockInput, false)
|
||||
end, true, true, true, nil)
|
||||
self:UpdateAxeCount(self.miningData:GetAxeCount())
|
||||
self:UpdateScore(self.miningData:GetScore())
|
||||
self.miningData:DoEnterResult()
|
||||
self:CheckPassAllLevel()
|
||||
end
|
||||
function MiningGameCtrl:UpdateSupData()
|
||||
local tbSupIdList = self.miningData:GetSupDataList()
|
||||
if tbSupIdList == nil or #tbSupIdList == 0 then
|
||||
return
|
||||
end
|
||||
for _, char in pairs(self._mapNode.char) do
|
||||
char:SetActive(false)
|
||||
end
|
||||
for i = 1, math.min(#tbSupIdList, 2) do
|
||||
local char = self._mapNode.char[i]
|
||||
local img_head = char.transform:Find("bg/img_head"):GetComponent("Image")
|
||||
local txt_skillName = char.transform:Find("bg/txt_skillName"):GetComponent("TMP_Text")
|
||||
local txt_skillDesc = char.transform:Find("bg/txt_skillDesc"):GetComponent("TMP_Text")
|
||||
local supConfig = ConfigTable.GetData("MiningSupport", tbSupIdList[i].nId)
|
||||
if supConfig ~= nil then
|
||||
NovaAPI.SetTMPText(txt_skillName, supConfig.SkillName)
|
||||
NovaAPI.SetTMPText(txt_skillDesc, supConfig.SkillDes)
|
||||
if supConfig.CharIcon ~= "" then
|
||||
self:SetPngSprite(img_head, supConfig.CharIcon, AllEnum.CharHeadIconSurfix.S)
|
||||
end
|
||||
char:SetActive(true)
|
||||
end
|
||||
end
|
||||
end
|
||||
function MiningGameCtrl:InitRewardList()
|
||||
for _, go in ipairs(self._mapNode.signal) do
|
||||
go:SetActive(false)
|
||||
end
|
||||
end
|
||||
function MiningGameCtrl:UpdateRewardList()
|
||||
for i = 1, math.min(#self.tbRewardDataList, 3) do
|
||||
local rewardData = self.tbRewardDataList[i]
|
||||
local rewardConfig = ConfigTable.GetData("MiningTreasure", rewardData.nId)
|
||||
if rewardConfig ~= nil then
|
||||
local img_get = self._mapNode.signal[i].transform:Find("bg_reward/img_get")
|
||||
local img_signal = self._mapNode.signal[i].transform:Find("bg_reward/img_signal")
|
||||
if rewardConfig.MiningItemType == GameEnum.miningRewardType.RewardTypeA then
|
||||
self:SetPngSprite(img_signal:GetComponent("Image"), string.format(assetPath, self.nActId) .. signal_typeA)
|
||||
elseif rewardConfig.MiningItemType == GameEnum.miningRewardType.RewardTypeB then
|
||||
self:SetPngSprite(img_signal:GetComponent("Image"), string.format(assetPath, self.nActId) .. signal_typeB)
|
||||
elseif rewardConfig.MiningItemType == GameEnum.miningRewardType.RewardTypeC then
|
||||
self:SetPngSprite(img_signal:GetComponent("Image"), string.format(assetPath, self.nActId) .. signal_typeC)
|
||||
else
|
||||
self:SetPngSprite(img_signal:GetComponent("Image"), string.format(assetPath, self.nActId) .. signal_typeD)
|
||||
end
|
||||
img_signal:GetComponent("Image"):SetNativeSize()
|
||||
img_get.gameObject:SetActive(rewardData.bIsGet)
|
||||
self._mapNode.signal[i]:SetActive(true)
|
||||
end
|
||||
end
|
||||
end
|
||||
function MiningGameCtrl:UpdateGridCell(data, nEffectType)
|
||||
self.gridListCtrl:ChangeGridState(data, nEffectType)
|
||||
end
|
||||
function MiningGameCtrl:KnockCallback(nId)
|
||||
if self.miningData:GetAxeCount() == 0 then
|
||||
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("MiningGame_NoAxeTips"))
|
||||
return
|
||||
end
|
||||
self.miningData:RequestKnockCell(nId)
|
||||
end
|
||||
function MiningGameCtrl:UpdateAxeCount(nCount)
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_Amount, tostring(nCount))
|
||||
end
|
||||
function MiningGameCtrl:UpdateScore(score)
|
||||
local sScore = self:formatNumber(score)
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_score, sScore)
|
||||
end
|
||||
function MiningGameCtrl:formatNumber(n)
|
||||
local s = tostring(n)
|
||||
local result = ""
|
||||
local count = 0
|
||||
for i = #s, 1, -1 do
|
||||
count = count + 1
|
||||
result = s:sub(i, i) .. result
|
||||
if count % 3 == 0 and count < #s then
|
||||
result = "," .. result
|
||||
end
|
||||
end
|
||||
return result
|
||||
end
|
||||
function MiningGameCtrl:CheckPassAllLevel()
|
||||
local bPassAllLevel = self.miningData:GetPassAllLevelResult()
|
||||
self._mapNode.FinishPanel:SetActive(bPassAllLevel)
|
||||
self._mapNode.imgShovel:SetActive(not bPassAllLevel)
|
||||
self._mapNode.GirdListPrefab:SetActive(not bPassAllLevel)
|
||||
end
|
||||
function MiningGameCtrl:OnBtnClick_OpenGuidePanel()
|
||||
EventManager.Hit(EventId.OpenPanel, self._panel.nGuidePanelId, self.nActId)
|
||||
end
|
||||
function MiningGameCtrl:OnBtnClick_OpenTask()
|
||||
if PlayerData.Activity:IsActivityInActivityGroup(self.nActId) then
|
||||
local mapActivityData = ConfigTable.GetData("Activity", self.nActId)
|
||||
local actGroupId = mapActivityData.MidGroupId
|
||||
local actGroupData = PlayerData.Activity:GetActivityGroupDataById(actGroupId)
|
||||
local taskActId = actGroupData:GetActivityDataByIndex(AllEnum.ActivityThemeFuncIndex.Task).ActivityId
|
||||
local taskActData = PlayerData.Activity:GetActivityDataById(taskActId)
|
||||
if taskActData ~= nil and taskActData:CheckActivityOpen() then
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.Task_11100, taskActId, GameEnum.ActivityTaskTabType.Tab4)
|
||||
return
|
||||
end
|
||||
RedDotManager.UnRegisterNode(RedDotDefine.Activity_Group_Task_Group, {
|
||||
actGroupId,
|
||||
taskActId,
|
||||
mapActivityData.MiniGameRedDot
|
||||
}, self._mapNode.reward_reddot)
|
||||
self._mapNode.reward_reddot:SetActive(false)
|
||||
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Activity_End_Notice"))
|
||||
end
|
||||
end
|
||||
function MiningGameCtrl:OnBtnClick_OpenAxeTips()
|
||||
UTILS.ClickItemGridWithTips(self.miningData:GetAxeId(), self._mapNode.Btn_Axe.transform, true, false, true)
|
||||
end
|
||||
function MiningGameCtrl:OnEvent_UpdateScore(score)
|
||||
self.nNewScore = score
|
||||
end
|
||||
function MiningGameCtrl:OnEvent_UpdateScoreFx()
|
||||
self._mapNode.animator_score:Play("score_in")
|
||||
self:UpdateScore(self.nNewScore)
|
||||
end
|
||||
function MiningGameCtrl:OnEvent_UpdateRewardStatus(nId)
|
||||
local nIndex = 0
|
||||
for i = 1, #self.tbRewardDataList do
|
||||
if self.tbRewardDataList[i].nId == nId then
|
||||
nIndex = i
|
||||
end
|
||||
end
|
||||
if nIndex == 0 then
|
||||
return
|
||||
end
|
||||
self.gridListCtrl:FindReward(nIndex, self._mapNode.txt_score:GetComponent("RectTransform"))
|
||||
local img_get = self._mapNode.signal[nIndex].transform:Find("bg_reward/img_get")
|
||||
img_get.gameObject:SetActive(true)
|
||||
for _, rewardData in pairs(self.tbRewardDataList) do
|
||||
if rewardData.bIsGet == false then
|
||||
return
|
||||
end
|
||||
end
|
||||
EventManager.Hit(EventId.BlockInput, true)
|
||||
self.bInPassAnim = true
|
||||
self._mapNode.GoNextLevelPanel:SetActive(true)
|
||||
WwiseAudioMgr:PostEvent("mode_digging1_complete")
|
||||
self:AddTimer(1, 2.3, function()
|
||||
self._mapNode.animator:Play("MiningGamePanel_out")
|
||||
end, true, true, true)
|
||||
self:AddTimer(1, 2.5, function()
|
||||
self._mapNode.GoNextLevelPanel:SetActive(false)
|
||||
end, true, true, true)
|
||||
self:AddTimer(1, 2.7, function()
|
||||
if self.passAnimCb ~= nil then
|
||||
self.passAnimCb()
|
||||
self.bInPassAnim = false
|
||||
end
|
||||
EventManager.Hit(EventId.BlockInput, false)
|
||||
end, true, true, true)
|
||||
end
|
||||
function MiningGameCtrl:OnEvent_MiningKnockResult(tbSkillData)
|
||||
for k, v in pairs(tbSkillData) do
|
||||
local gridData = v.tbUpdateGrid
|
||||
for _, n in pairs(gridData) do
|
||||
self:UpdateGridCell(n, v.nEffectType)
|
||||
end
|
||||
end
|
||||
end
|
||||
function MiningGameCtrl:OnEvent_UpdateLevelData()
|
||||
if self.bInPassAnim then
|
||||
function self.passAnimCb()
|
||||
self:UpdateLevelData()
|
||||
end
|
||||
else
|
||||
self:UpdateLevelData()
|
||||
end
|
||||
end
|
||||
function MiningGameCtrl:OnEvent_UpdateGridCell(data, nEffectType)
|
||||
self:UpdateGridCell(data, nEffectType)
|
||||
end
|
||||
function MiningGameCtrl:OnEvent_UpdateAxeCount(nCount)
|
||||
self:UpdateAxeCount(nCount)
|
||||
end
|
||||
function MiningGameCtrl:OnEvent_ShowReward()
|
||||
self.gridListCtrl:ShowReward(self.tbRewardDataList)
|
||||
end
|
||||
function MiningGameCtrl:OnEvent_Error()
|
||||
EventManager.Hit(EventId.BlockInput, true)
|
||||
self.miningData:RequestLevelData(0, function()
|
||||
EventManager.Hit(EventId.BlockInput, false)
|
||||
end)
|
||||
end
|
||||
return MiningGameCtrl
|
||||
Reference in New Issue
Block a user