Files
StellaSora_DataLua/lua/game/ui/towerdefense/towerdefenseleveltipsctrl.lua
SL1900 eafd8f4088 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
2026-05-14 16:00:00 +09:00

214 lines
6.7 KiB
Lua

local ConfigData = require("GameCore.Data.ConfigData")
local TowerDefenseLevelTipsCtrl = class("TowerDefenseLevelTipsCtrl", BaseCtrl)
TowerDefenseLevelTipsCtrl._mapNodeConfig = {
monsterTemp = {},
charTemp = {},
listParent = {
sNodeName = "List",
sComponentName = "RectTransform"
}
}
TowerDefenseLevelTipsCtrl._mapEventConfig = {
TowerDefenseShowFullScreenPanel = "OnEvent_OnPause",
TowerDefenseShowHideScreenPanel = "OnEvent_OnResume"
}
TowerDefenseLevelTipsCtrl._mapRedDotConfig = {}
local tipsType = {CHAR = 1, MONSTER = 2}
local spaceValue = 18
local addCdValue = 0.1
local moveTime = 0.2
local startPosY = 0
function TowerDefenseLevelTipsCtrl:Awake()
self._mapNode.monsterTemp:SetActive(false)
self._mapNode.charTemp:SetActive(false)
self.sequence = DOTween.Sequence()
self.sequence:SetUpdate(true)
self.ShowQueue = {}
self.WaitQueue = {}
self.bInCD = false
self.cdTimer = nil
self.bInMove = false
self.tbMoveTweer = {}
end
function TowerDefenseLevelTipsCtrl:AddQueue(nId, nType)
table.insert(self.WaitQueue, {nId = nId, nType = nType})
self:CheckShowQueue()
end
function TowerDefenseLevelTipsCtrl:CheckShowQueue()
print("===================ShowQueueBeigin" .. tostring(self.bInCD), tostring(self.bInMove))
if #self.ShowQueue == 3 then
return
end
if #self.WaitQueue == 0 then
return
end
if self.bInCD then
return
end
if self.bInMove then
return
end
print("===================ShowQueue")
local tipsData = self.WaitQueue[1]
table.remove(self.WaitQueue, 1)
if tipsData.nType == tipsType.CHAR then
local charData = {
nId = tipsData.nId,
obj = nil,
showTimer = nil
}
self:ShowCharTips(charData)
table.insert(self.ShowQueue, charData)
else
if tipsData.nType == tipsType.MONSTER then
local monsterData = {
nId = tipsData.nId,
obj = nil,
showTimer = nil
}
self:ShowMonsterTips(monsterData)
table.insert(self.ShowQueue, monsterData)
else
end
end
self.bInCD = true
self.cdTimer = self:AddTimer(1, addCdValue, function()
self.bInCD = false
self:CheckShowQueue()
end, true, true, true)
end
function TowerDefenseLevelTipsCtrl:ShowCharTips(charData)
local characterConfig = ConfigTable.GetData("TowerDefenseCharacter", charData.nId)
if characterConfig == nil then
return
end
local obj = instantiate(self._mapNode.charTemp, self._mapNode.listParent)
local objTra = obj:GetComponent("RectTransform")
objTra.anchoredPosition = Vector2(objTra.anchoredPosition.x, startPosY - #self.ShowQueue * 131.823 - #self.ShowQueue * spaceValue)
charData.obj = obj
local animator = obj:GetComponent("Animator")
local icon = obj.transform:Find("icon_bg/icon"):GetComponent("Image")
local txt_Title = obj.transform:Find("txt_title"):GetComponent("TMP_Text")
local txt_Name = obj.transform:Find("txt_name"):GetComponent("TMP_Text")
self:SetPngSprite(icon, characterConfig.Icon .. AllEnum.CharHeadIconSurfix.QM)
NovaAPI.SetTMPText(txt_Name, characterConfig.Name)
NovaAPI.SetTMPText(txt_Title, ConfigTable.GetUIText("TowerDef_Tips_Title"))
local close = function()
animator:Play("TowerDefenseMonsterTipsPanel_out")
charData.showTimer = self:AddTimer(1, 0.2, function()
local index = table.indexof(self.ShowQueue, charData)
table.remove(self.ShowQueue, index)
self:MoveOtherUI()
destroy(charData.obj)
self:ClearTipData(charData)
end, true, true, true)
end
obj:SetActive(true)
animator:Play("TowerDefenseMonsterTipsPanel_in")
self:AddTimer(1, 5, close, true, true, true)
end
function TowerDefenseLevelTipsCtrl:ShowMonsterTips(monsterData)
local config = ConfigTable.GetData("TowerDefenseMonster", monsterData.nId)
if config == nil then
return
end
local monsterConfig = ConfigTable.GetData("Monster", config.Id)
if monsterConfig == nil then
return
end
local skinConfig = ConfigTable.GetData("MonsterSkin", monsterConfig.FAId)
if skinConfig == nil then
return
end
local manualConfig = ConfigTable.GetData("MonsterManual", skinConfig.MonsterManual)
if manualConfig == nil then
return
end
local obj = instantiate(self._mapNode.monsterTemp, self._mapNode.listParent)
local objTra = obj:GetComponent("RectTransform")
objTra.anchoredPosition = Vector2(objTra.anchoredPosition.x, startPosY - #self.ShowQueue * 131.823 - #self.ShowQueue * spaceValue)
monsterData.obj = obj
local animator = obj:GetComponent("Animator")
local icon = obj.transform:Find("icon_monster"):GetComponent("Image")
local txt_Name = obj.transform:Find("txt_name"):GetComponent("TMP_Text")
local txt_Des = obj.transform:Find("txt_des"):GetComponent("TMP_Text")
self:SetPngSprite(icon, manualConfig.Icon)
NovaAPI.SetTMPText(txt_Name, manualConfig.Name)
NovaAPI.SetTMPText(txt_Des, config.Brief)
local close = function()
animator:Play("TowerDefenseMonsterTipsPanel_out")
monsterData.showTimer = self:AddTimer(1, 0.2, function()
local index = table.indexof(self.ShowQueue, monsterData)
table.remove(self.ShowQueue, index)
self:MoveOtherUI()
destroy(monsterData.obj)
self:ClearTipData(monsterData)
end, true, true, true)
end
obj:SetActive(true)
animator:Play("TowerDefenseMonsterTipsPanel_in")
self:AddTimer(1, 5, close, true, true, true)
end
function TowerDefenseLevelTipsCtrl:MoveOtherUI()
if #self.tbMoveTweer > 0 then
for i = 1, #self.tbMoveTweer do
local tweer = self.tbMoveTweer[i]
tweer:Kill()
end
self.bInMove = false
end
self.tbMoveTweer = {}
self.bInMove = true
if #self.ShowQueue == 0 then
self.bInMove = false
self:CheckShowQueue()
else
for i = 1, #self.ShowQueue do
local data = self.ShowQueue[i]
if data.obj ~= nil then
local objTra = data.obj:GetComponent("RectTransform")
if i == #self.ShowQueue then
local tweer = objTra:DOLocalMoveY(startPosY - (i - 1) * 131.823 - math.min(#self.ShowQueue - 1, 0) * spaceValue, moveTime):SetUpdate(true)
tweer:OnComplete(function()
self.bInMove = false
self:CheckShowQueue()
end)
table.insert(self.tbMoveTweer, tweer)
else
local tweer = objTra:DOLocalMoveY(startPosY - (i - 1) * 131.823 - math.min(#self.ShowQueue - 1, 0) * spaceValue, moveTime):SetUpdate(true)
table.insert(self.tbMoveTweer, tweer)
end
end
end
end
end
function TowerDefenseLevelTipsCtrl:ClearTipData(tipData)
if tipData.showTimer == nil then
return
end
tipData.showTimer:_Stop()
end
function TowerDefenseLevelTipsCtrl:OnEvent_OnPause()
if self.cdTimer ~= nil then
self.cdTimer:Pause(true)
end
if #self.tbMoveTweer > 0 then
for i = 1, #self.tbMoveTweer do
local tweer = self.tbMoveTweer[i]
tweer:Pause()
end
end
end
function TowerDefenseLevelTipsCtrl:OnEvent_OnResume()
if self.cdTimer ~= nil then
self.cdTimer:Pause(false)
end
if #self.tbMoveTweer > 0 then
for i = 1, #self.tbMoveTweer do
local tweer = self.tbMoveTweer[i]
tweer:Play()
end
end
end
return TowerDefenseLevelTipsCtrl