Initial version - 1.2.0.60
EN: 1.2.0.60 CN: 1.2.0.61 JP: 1.2.0.63 KR: 1.2.0.67
This commit is contained in:
@@ -0,0 +1,160 @@
|
||||
local MonsterHudCtrl = class("MonsterHudCtrl", BaseCtrl)
|
||||
local AdventureModuleHelper = CS.AdventureModuleHelper
|
||||
local BarHeight = 21
|
||||
local BarWidth = 139
|
||||
local ShieldWidth = 103
|
||||
local AniTimeHighlight = 0.5
|
||||
local AniTime = 0.16
|
||||
local ToughnessRecoverTime = 0.3
|
||||
local ToughnessWidth = 208
|
||||
local ToughnessHeight = 21
|
||||
local colorHide = Color(1, 1, 1, 0)
|
||||
local colorWhite = Color(1, 1, 1, 1)
|
||||
local colorShieldDelay = Color(1, 1, 1, 0.5)
|
||||
local colorRed = Color(0.9176470588235294, 0.043137254901960784, 0.08627450980392157, 1)
|
||||
local colorRedHide = Color(0.9176470588235294, 0.043137254901960784, 0.08627450980392157, 0)
|
||||
local colorRecover = Color(0.9921568627450981, 0.5098039215686274, 0, 1)
|
||||
MonsterHudCtrl._mapNodeConfig = {
|
||||
rtHpFillDelay = {
|
||||
sNodeName = "imgHpFillDelay",
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
rtHpFill = {
|
||||
sNodeName = "imgHpFill",
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
aniRtHpDelay = {
|
||||
sNodeName = "imgHpFillDelay",
|
||||
sComponentName = "HpBarRectTransform"
|
||||
},
|
||||
ainColorHpDelay = {
|
||||
sNodeName = "imgHpFillDelay",
|
||||
sComponentName = "HpBarColor"
|
||||
},
|
||||
aniRtHpFill = {
|
||||
sNodeName = "imgHpFill",
|
||||
sComponentName = "HpBarRectTransform"
|
||||
},
|
||||
ainColorHpDelayHighlight = {
|
||||
sNodeName = "imgHpDelayHighLight",
|
||||
sComponentName = "HpBarColor"
|
||||
},
|
||||
ainColorHpFillHighLight = {
|
||||
sNodeName = "imgHpHighLight",
|
||||
sComponentName = "HpBarColor"
|
||||
},
|
||||
ainColorHpFillRecoverLight = {
|
||||
sNodeName = "imgHpFillRecoverLight",
|
||||
sComponentName = "HpBarColor"
|
||||
},
|
||||
rtShakeRoot = {sComponentName = "Animator"},
|
||||
aniFadeHpBar = {
|
||||
sNodeName = "rtShakeRoot",
|
||||
sComponentName = "HpBarCanvasGroup"
|
||||
}
|
||||
}
|
||||
MonsterHudCtrl._mapEventConfig = {}
|
||||
MonsterHudCtrl._mapRedDotConfig = {}
|
||||
function MonsterHudCtrl:Awake()
|
||||
self.monsterId = 0
|
||||
self.bigDamageThreshold = ConfigTable.GetConfigNumber("BloodSpecialEffectThresholdValue") / 100
|
||||
self._Timer = nil
|
||||
end
|
||||
function MonsterHudCtrl:OnEnable()
|
||||
self.monsterId = 0
|
||||
self:ResetHit()
|
||||
end
|
||||
function MonsterHudCtrl:OnDisable()
|
||||
EventManager.RemoveEntityEvent("HpChanged", self.nEntityId, self, self.OnEvent_HpChanged)
|
||||
self.monsterId = 0
|
||||
self:KillTween()
|
||||
self:ResetHit()
|
||||
end
|
||||
function MonsterHudCtrl:ResetHit()
|
||||
self._mapNode.ainColorHpDelay:SetTarget(colorRed, 0)
|
||||
self._mapNode.ainColorHpFillHighLight:SetTarget(colorHide, 0)
|
||||
self._mapNode.ainColorHpDelayHighlight:SetTarget(colorHide, 0)
|
||||
self.nBeforeHp = 0
|
||||
self.nBeforeHpMax = 0
|
||||
end
|
||||
function MonsterHudCtrl:SetMonsterId(nEntityId)
|
||||
if self.nEntityId ~= nil or self.nEntityId ~= 0 then
|
||||
EventManager.RemoveEntityEvent("HpChanged", self.nEntityId, self, self.OnEvent_HpChanged)
|
||||
end
|
||||
self.nEntityId = nEntityId
|
||||
self:KillTween()
|
||||
local hp = AdventureModuleHelper.GetEntityHp(self.nEntityId)
|
||||
local hpMax = AdventureModuleHelper.GetEntityMaxHp(self.nEntityId)
|
||||
self:SetHp(hp, hpMax, true)
|
||||
EventManager.AddEntityEvent("HpChanged", self.nEntityId, self, self.OnEvent_HpChanged)
|
||||
end
|
||||
function MonsterHudCtrl:SetHp(hp, hpMax, bChange)
|
||||
if self.nEntityId == 0 then
|
||||
return
|
||||
end
|
||||
if hpMax <= 0 then
|
||||
self._mapNode.rtHpFillDelay.sizeDelta = Vector2(0, BarHeight)
|
||||
self._mapNode.rtHpFill.sizeDelta = Vector2(0, BarHeight)
|
||||
elseif bChange then
|
||||
self._mapNode.rtHpFillDelay.sizeDelta = Vector2(hp / hpMax * BarWidth, BarHeight)
|
||||
self._mapNode.rtHpFill.sizeDelta = Vector2(hp / hpMax * BarWidth, BarHeight)
|
||||
else
|
||||
self:PlayTweenHp(hp, hpMax)
|
||||
end
|
||||
self.nBeforeHp = hp
|
||||
self.nBeforeHpMax = hpMax
|
||||
end
|
||||
function MonsterHudCtrl:PlayTweenHp(hp, hpMax)
|
||||
local nWidth = 1 <= hp / hpMax and BarWidth or hp / hpMax * BarWidth
|
||||
if nWidth > BarWidth then
|
||||
nWidth = BarWidth
|
||||
end
|
||||
if hp < self.nBeforeHp then
|
||||
if self._mapNode.rtHpFill.sizeDelta.x > self._mapNode.rtHpFillDelay.sizeDelta.x then
|
||||
self._mapNode.aniRtHpDelay:SetTarget(self._mapNode.rtHpFill.sizeDelta, 0)
|
||||
end
|
||||
self._mapNode.aniRtHpFill:SetTarget(Vector2(nWidth, BarHeight), 0)
|
||||
self._mapNode.ainColorHpFillHighLight:SetTarget(colorWhite, 0)
|
||||
self._mapNode.ainColorHpDelay:SetTarget(colorRed)
|
||||
local delayTime = 0
|
||||
if (self.nBeforeHp - hp) / hpMax > self.bigDamageThreshold then
|
||||
self._mapNode.ainColorHpDelay:SetTarget(colorWhite, 0)
|
||||
self._mapNode.ainColorHpDelay:SetTarget(colorRed, 0.1, AniTime)
|
||||
delayTime = 0.5
|
||||
self._mapNode.rtShakeRoot:Play("HPShake_in")
|
||||
end
|
||||
self._mapNode.aniRtHpDelay:SetTarget(Vector2(nWidth, BarHeight), AniTime, delayTime)
|
||||
self._mapNode.ainColorHpFillHighLight:SetTarget(colorHide, AniTimeHighlight, 0.2 + delayTime)
|
||||
else
|
||||
self._mapNode.rtHpFillDelay.sizeDelta = self._mapNode.rtHpFill.sizeDelta
|
||||
self._mapNode.ainColorHpFillHighLight:SetTarget(colorWhite, 0)
|
||||
self._mapNode.ainColorHpFillHighLight:SetTarget(colorHide, AniTimeHighlight, AniTime)
|
||||
self._mapNode.ainColorHpDelayHighlight:SetTarget(colorWhite, 0)
|
||||
self._mapNode.ainColorHpDelayHighlight:SetTarget(colorHide, AniTimeHighlight)
|
||||
self._mapNode.ainColorHpDelay:SetTarget(colorRecover)
|
||||
self._mapNode.aniRtHpDelay:SetTarget(Vector2(nWidth, BarHeight), AniTime)
|
||||
self._mapNode.aniRtHpFill:SetTarget(Vector2(nWidth, BarHeight), AniTime, AniTime)
|
||||
self._mapNode.ainColorHpFillRecoverLight:SetTarget(colorRed, 0)
|
||||
self._mapNode.ainColorHpFillRecoverLight:SetTarget(colorRedHide, AniTimeHighlight, AniTime)
|
||||
end
|
||||
end
|
||||
function MonsterHudCtrl:KillTween()
|
||||
self._mapNode.aniRtHpDelay:Stop()
|
||||
self._mapNode.ainColorHpDelay:Stop()
|
||||
self._mapNode.aniRtHpFill:Stop()
|
||||
self._mapNode.ainColorHpDelayHighlight:Stop()
|
||||
self._mapNode.ainColorHpFillHighLight:Stop()
|
||||
self._mapNode.ainColorHpFillRecoverLight:Stop()
|
||||
end
|
||||
function MonsterHudCtrl:OnEvent_HpChanged(hp, hpMax)
|
||||
if hp == self.nBeforeHp then
|
||||
self:SetHp(hp, hpMax, true)
|
||||
else
|
||||
self:SetHp(hp, hpMax)
|
||||
self._mapNode.aniFadeHpBar:SetTarget(1)
|
||||
if self._Timer ~= nil then
|
||||
self._Timer:Reset()
|
||||
end
|
||||
end
|
||||
end
|
||||
return MonsterHudCtrl
|
||||
@@ -0,0 +1,142 @@
|
||||
local PlayerHudCtrl = class("PlayerHudCtrl", BaseCtrl)
|
||||
local barWidth = 122
|
||||
PlayerHudCtrl._mapNodeConfig = {
|
||||
go_Level = {nCount = 6},
|
||||
go_LevelUpTips = {},
|
||||
skillBar = {},
|
||||
bar = {
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
go_levelUpDes = {},
|
||||
txt_upDes = {sComponentName = "TMP_Text"}
|
||||
}
|
||||
PlayerHudCtrl._mapEventConfig = {
|
||||
TowerDefense_character_levelUp = "OnEvent_LevelUp",
|
||||
TowerDefensePointChange = "OnEvent_PointChange",
|
||||
ResetEnergy = "OnEvent_UpdateEnergy",
|
||||
TowerDefenseShowFullScreenPanel = "OnEvent_PauseEnergy",
|
||||
TowerDefenseShowHideScreenPanel = "OnEvent_ResumeEnergy",
|
||||
TowerDefenseFuncShow = "OnEvent_FuncShow"
|
||||
}
|
||||
PlayerHudCtrl._mapRedDotConfig = {}
|
||||
function PlayerHudCtrl:Awake()
|
||||
self:Init()
|
||||
end
|
||||
function PlayerHudCtrl:OnDestroy()
|
||||
if self.tweener ~= nil then
|
||||
self.tweener:Kill()
|
||||
end
|
||||
end
|
||||
function PlayerHudCtrl:Init()
|
||||
for _, go in pairs(self._mapNode.go_Level) do
|
||||
go:SetActive(false)
|
||||
end
|
||||
self.nPoint = 0
|
||||
self.bFuncIsShow = false
|
||||
end
|
||||
function PlayerHudCtrl:SetPlayerId(characterId)
|
||||
self:Init()
|
||||
self.nCharacterId = characterId
|
||||
self._mapNode.go_Level[1]:SetActive(true)
|
||||
self.nlevel = 1
|
||||
self._mapNode.go_levelUpDes:SetActive(false)
|
||||
self._mapNode.go_LevelUpTips:SetActive(false)
|
||||
self._mapNode.skillBar:SetActive(false)
|
||||
end
|
||||
function PlayerHudCtrl:CheckTips()
|
||||
if self.bFuncIsShow then
|
||||
self._mapNode.go_LevelUpTips:SetActive(false)
|
||||
return
|
||||
end
|
||||
local config = ConfigTable.GetData("TowerDefenseCharacter", self.nCharacterId)
|
||||
if config == nil then
|
||||
return
|
||||
end
|
||||
local needPoint = config.PointNeeded[self.nlevel]
|
||||
if needPoint ~= nil then
|
||||
self._mapNode.go_LevelUpTips:SetActive(needPoint <= self.nPoint)
|
||||
else
|
||||
self._mapNode.go_LevelUpTips:SetActive(false)
|
||||
end
|
||||
end
|
||||
function PlayerHudCtrl:OnEvent_LevelUp(nCharacterId, nlevel)
|
||||
if self.nCharacterId ~= nCharacterId then
|
||||
return
|
||||
end
|
||||
self._mapNode.go_Level[self.nlevel]:SetActive(false)
|
||||
self.nlevel = nlevel
|
||||
self._mapNode.go_Level[self.nlevel]:SetActive(true)
|
||||
local config = ConfigTable.GetData("TowerDefenseCharacter", self.nCharacterId)
|
||||
if config == nil then
|
||||
return
|
||||
end
|
||||
self._mapNode.go_levelUpDes:SetActive(false)
|
||||
if self.timer ~= nil then
|
||||
self.timer:_Stop()
|
||||
end
|
||||
if #config["NewPotential" .. nlevel] == 1 then
|
||||
local id = config["NewPotential" .. nlevel][1]
|
||||
local potentialConfig = ConfigTable.GetData("TowerDefensePotential", id)
|
||||
if potentialConfig == nil then
|
||||
return
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_upDes, potentialConfig.Name)
|
||||
self._mapNode.go_levelUpDes:SetActive(true)
|
||||
local cb = function()
|
||||
self._mapNode.go_levelUpDes:SetActive(false)
|
||||
end
|
||||
self.timer = self:AddTimer(1, 1.5, cb, true, true, true)
|
||||
end
|
||||
end
|
||||
function PlayerHudCtrl:OnEvent_PointChange(nPoint)
|
||||
if self.nCharacterId == nil then
|
||||
return
|
||||
end
|
||||
self.nPoint = nPoint
|
||||
self:CheckTips()
|
||||
end
|
||||
function PlayerHudCtrl:OnEvent_UpdateEnergy(entityId, characterId, skillId, curCd, maxCd, isAuto)
|
||||
if characterId ~= self.nCharacterId then
|
||||
return
|
||||
end
|
||||
local cdValue = curCd:AsFloat() or 0
|
||||
local cdMaxValue = maxCd:AsFloat() or 0
|
||||
cdValue = math.max(0, cdMaxValue - cdValue)
|
||||
if self.tweener ~= nil then
|
||||
self.tweener:Kill()
|
||||
end
|
||||
self._mapNode.skillBar:SetActive(true)
|
||||
if isAuto then
|
||||
self.tweener = DOTween.To(function()
|
||||
return cdMaxValue - cdValue
|
||||
end, function(v)
|
||||
self._mapNode.bar.sizeDelta = Vector2(barWidth * (v / cdMaxValue), self._mapNode.bar.sizeDelta.y)
|
||||
end, cdMaxValue, cdValue):OnComplete(function()
|
||||
self._mapNode.bar.sizeDelta = Vector2(barWidth, self._mapNode.bar.sizeDelta.y)
|
||||
end)
|
||||
else
|
||||
self._mapNode.bar.sizeDelta = Vector2(barWidth * ((cdMaxValue - cdValue) / cdMaxValue), self._mapNode.bar.sizeDelta.y)
|
||||
end
|
||||
end
|
||||
function PlayerHudCtrl:OnEvent_PauseEnergy()
|
||||
if self.tweener == nil then
|
||||
return
|
||||
end
|
||||
end
|
||||
function PlayerHudCtrl:OnEvent_ResumeEnergy()
|
||||
if self.tweener == nil then
|
||||
return
|
||||
end
|
||||
end
|
||||
function PlayerHudCtrl:OnEvent_FuncShow(bIsShow, characterId)
|
||||
if characterId ~= self.nCharacterId then
|
||||
return
|
||||
end
|
||||
self.bFuncIsShow = bIsShow
|
||||
if self.bFuncIsShow then
|
||||
self._mapNode.go_LevelUpTips:SetActive(false)
|
||||
else
|
||||
self:CheckTips()
|
||||
end
|
||||
end
|
||||
return PlayerHudCtrl
|
||||
@@ -0,0 +1,214 @@
|
||||
local TowerDefenseHUDCtrl = class("TowerDefenseHUDCtrl", BaseCtrl)
|
||||
local AdventureModuleHelper = CS.AdventureModuleHelper
|
||||
TowerDefenseHUDCtrl._mapNodeConfig = {
|
||||
Root = {},
|
||||
DamageNumberRoot = {},
|
||||
DamageWordRoot = {}
|
||||
}
|
||||
TowerDefenseHUDCtrl._mapEventConfig = {
|
||||
TOWERDEFENSE_SET_ROLE_ON_STAGE_RESULT = "OnEvent_PlayerShowChanged",
|
||||
TOWERDEFENSE_MONSTER_STATE = "OnEvent_MonsterActive",
|
||||
TowerDefense_Restart = "OnEvent_Restart",
|
||||
HudDestroy = "OnEvent_HudDestroyed",
|
||||
HudDamage = "OnEvent_HudDamaged",
|
||||
HudHeal = "OnEvent_HudHealed",
|
||||
HudDefence = "OnEvent_HudDefenced",
|
||||
HudDotDamage = "OnEvent_HudDotDamage",
|
||||
TriggerElementMark = "OnEvent_HudMark"
|
||||
}
|
||||
TowerDefenseHUDCtrl._mapRedDotConfig = {}
|
||||
function TowerDefenseHUDCtrl:Awake()
|
||||
self.PlayerHUDPrefab = self:LoadAsset("UI/Play_TowerDefence/HUD/PlayerHUD.prefab")
|
||||
self.MonsterHUDPrefab = self:LoadAsset("UI/Play_TowerDefence/HUD/MonsterHUD.prefab")
|
||||
self.critDamageHudPrefab = self:LoadAsset("UI/HUD/CritDamageHUDNumber_UI.prefab")
|
||||
self.dotDamageHudPrefab = self:LoadAsset("UI/HUD/DotDamageHUDNumber_UI.prefab")
|
||||
self.damageHudPrefab = self:LoadAsset("UI/Play_TowerDefence/HUD/DamageHUDNumber_UI.prefab")
|
||||
self.minDamageHUDNumber = self:LoadAsset("UI/HUD/MinDamageHUDNumber_UI.prefab")
|
||||
self.monsterHuds = {}
|
||||
self.playerHuds = {}
|
||||
self.numberHuds = {}
|
||||
self.tabToughnessEntity = {}
|
||||
self.hudId = 0
|
||||
end
|
||||
function TowerDefenseHUDCtrl:OnDestroy()
|
||||
self.PlayerHUDPrefab = nil
|
||||
self.MonsterHUDPrefab = nil
|
||||
self.critDamageHudPrefab = nil
|
||||
self.dotDamageHudPrefab = nil
|
||||
self.damageHudPrefab = nil
|
||||
self.minDamageHUDNumber = nil
|
||||
for key, value in pairs(self.monsterHuds) do
|
||||
self:DespawnPrefabInstance(value, "HUD")
|
||||
end
|
||||
for key, value in pairs(self.playerHuds) do
|
||||
self:DespawnPrefabInstance(value, "HUD")
|
||||
end
|
||||
for _, v in pairs(self.numberHuds) do
|
||||
self:DespawnPrefabInstance(v, "HUD")
|
||||
end
|
||||
self.monsterHuds = {}
|
||||
self.playerHuds = {}
|
||||
self.numberHuds = {}
|
||||
self.tabToughnessEntity = {}
|
||||
self.hudId = 0
|
||||
end
|
||||
function TowerDefenseHUDCtrl:OnEvent_PlayerShowChanged(bResult, nEntityId, nCharacterId)
|
||||
if nEntityId == 0 then
|
||||
return
|
||||
end
|
||||
local playerHud = self.playerHuds[nCharacterId]
|
||||
if bResult then
|
||||
if playerHud == nil then
|
||||
playerHud = self:SpawnPrefabInstance(self.PlayerHUDPrefab, "Game.UI.TowerDefense.HUD.PlayerHudCtrl", "HUD", self._mapNode.Root)
|
||||
self.playerHuds[nCharacterId] = playerHud
|
||||
playerHud.gameObject.transform.localScale = Vector3.one
|
||||
end
|
||||
if playerHud ~= nil then
|
||||
playerHud:SetPlayerId(nCharacterId)
|
||||
local height = CS.AdventureModuleHelper.GetHudOffsetHeight(nEntityId)
|
||||
local offset = Vector3(0, height, 0)
|
||||
CS.AdventureModuleHelper.SetHudFollowTarget(nEntityId, playerHud.gameObject, offset, false)
|
||||
end
|
||||
elseif playerHud ~= nil then
|
||||
self:DespawnPrefabInstance(playerHud, "HUD")
|
||||
self.playerHuds[nCharacterId] = nil
|
||||
end
|
||||
end
|
||||
function TowerDefenseHUDCtrl:OnEvent_MonsterActive(nEntityId, bShow)
|
||||
if nEntityId == 0 then
|
||||
return
|
||||
end
|
||||
local monsterHud = self.monsterHuds[nEntityId]
|
||||
if bShow then
|
||||
if monsterHud == nil then
|
||||
monsterHud = self:SpawnPrefabInstance(self.MonsterHUDPrefab, "Game.UI.TowerDefense.HUD.MonsterHudCtrl", "HUD", self._mapNode.Root)
|
||||
self.monsterHuds[nEntityId] = monsterHud
|
||||
monsterHud.gameObject.transform.localScale = Vector3.one
|
||||
end
|
||||
if monsterHud ~= nil then
|
||||
monsterHud:SetMonsterId(nEntityId)
|
||||
local height = CS.AdventureModuleHelper.GetEntityMonsterBarHeight(nEntityId)
|
||||
local offset = Vector3(0, height, 0)
|
||||
CS.AdventureModuleHelper.SetHudFollowTarget(nEntityId, monsterHud.gameObject, offset, true)
|
||||
end
|
||||
elseif monsterHud ~= nil then
|
||||
self:DespawnPrefabInstance(monsterHud, "HUD")
|
||||
self.monsterHuds[nEntityId] = nil
|
||||
end
|
||||
end
|
||||
function TowerDefenseHUDCtrl:OnEvent_Restart()
|
||||
for _, value in pairs(self.monsterHuds) do
|
||||
self:DespawnPrefabInstance(value, "HUD")
|
||||
end
|
||||
for _, value in pairs(self.playerHuds) do
|
||||
self:DespawnPrefabInstance(value, "HUD")
|
||||
end
|
||||
for _, v in pairs(self.numberHuds) do
|
||||
self:DespawnPrefabInstance(v, "HUD")
|
||||
end
|
||||
self.monsterHuds = {}
|
||||
self.playerHuds = {}
|
||||
self.numberHuds = {}
|
||||
self.tabToughnessEntity = {}
|
||||
self.hudId = 0
|
||||
end
|
||||
function TowerDefenseHUDCtrl:OnEvent_HudDestroyed(id)
|
||||
local hud = self.numberHuds[id]
|
||||
if hud ~= nil then
|
||||
self:DespawnPrefabInstance(hud, "HUD")
|
||||
self.numberHuds[id] = nil
|
||||
end
|
||||
end
|
||||
function TowerDefenseHUDCtrl:OnEvent_HudDamaged(id, value, isCrit, hitDamageConfig, formId, isMark, fromElementType, hudColorIndex)
|
||||
if self.tabToughnessEntity[id] then
|
||||
self:SetToughnessValue(id, value)
|
||||
return
|
||||
end
|
||||
local hud
|
||||
if hitDamageConfig and hitDamageConfig.IsDenseType then
|
||||
if isCrit then
|
||||
hud = self:SpawnPrefabInstance(self.critDamageHudPrefab, "Game.UI.Hud.HudNumberCtrl", "HUD", self._mapNode.DamageNumberRoot)
|
||||
else
|
||||
hud = self:SpawnPrefabInstance(self.minDamageHUDNumber, "Game.UI.Hud.HudNumberCtrl", "HUD", self._mapNode.DamageNumberRoot)
|
||||
end
|
||||
elseif isCrit then
|
||||
hud = self:SpawnPrefabInstance(self.critDamageHudPrefab, "Game.UI.Hud.HudNumberCtrl", "HUD", self._mapNode.DamageNumberRoot)
|
||||
else
|
||||
hud = self:SpawnPrefabInstance(self.damageHudPrefab, "Game.UI.Hud.HudNumberCtrl", "HUD", self._mapNode.DamageNumberRoot)
|
||||
end
|
||||
self.hudId = self.hudId + 1
|
||||
local _formId = formId
|
||||
if formId == nil then
|
||||
_formId = 0
|
||||
end
|
||||
local _fromElementType = 0
|
||||
if fromElementType ~= nil then
|
||||
_fromElementType = fromElementType
|
||||
end
|
||||
local _hudColorIndex = 4
|
||||
if hudColorIndex ~= nil then
|
||||
_hudColorIndex = hudColorIndex
|
||||
end
|
||||
AdventureModuleHelper.SetHudValue(hud.gameObject, id, self.hudId, value, false, hitDamageConfig, _formId, isCrit, false, _fromElementType, _hudColorIndex)
|
||||
self.numberHuds[self.hudId] = hud
|
||||
hud.gameObject.transform:SetAsLastSibling()
|
||||
if hudColorIndex ~= nil and hudColorIndex == 5 and (self.nTypeGreyResistanceTime[id] == nil or self.nTypeGreyResistanceTime[id] + self.resistanceTipInterval <= CS.ClientManager.Instance.serverTimeStampWithTimeZone) then
|
||||
self.nTypeGreyResistanceTime[id] = CS.ClientManager.Instance.serverTimeStampWithTimeZone
|
||||
self:OnEvent_HudDefenced(id, 3)
|
||||
end
|
||||
end
|
||||
function TowerDefenseHUDCtrl:OnEvent_HudDotDamage(id, value, isCrit, hitDamageConfig, formId, isMark, fromElementType)
|
||||
if self.tabToughnessEntity[id] then
|
||||
self:SetToughnessValue(id, value)
|
||||
return
|
||||
end
|
||||
local hud = self:SpawnPrefabInstance(self.dotDamageHudPrefab, "Game.UI.Hud.HudNumberCtrl", "HUD", self._mapNode.DamageNumberRoot)
|
||||
self.hudId = self.hudId + 1
|
||||
local _formId = formId
|
||||
if formId == nil then
|
||||
_formId = 0
|
||||
end
|
||||
local _fromElementType = 0
|
||||
if fromElementType ~= nil then
|
||||
_fromElementType = fromElementType
|
||||
end
|
||||
AdventureModuleHelper.SetHudValue(hud.gameObject, id, self.hudId, value, false, hitDamageConfig, _formId, isCrit, true, _fromElementType, 4)
|
||||
self.numberHuds[self.hudId] = hud
|
||||
hud.gameObject.transform:SetAsLastSibling()
|
||||
end
|
||||
function TowerDefenseHUDCtrl:OnEvent_HudHealed(id, value)
|
||||
local hud = self:SpawnPrefabInstance(self.healHudPrefab, "Game.UI.Hud.HudNumberCtrl", "HUD", self._mapNode.DamageNumberRoot)
|
||||
self.hudId = self.hudId + 1
|
||||
AdventureModuleHelper.SetHudValue(hud.gameObject, id, self.hudId, value, true, nil, 0, false, false)
|
||||
self.numberHuds[self.hudId] = hud
|
||||
hud.gameObject.transform:SetAsLastSibling()
|
||||
end
|
||||
function TowerDefenseHUDCtrl:OnEvent_HudDefenced(id, valueType)
|
||||
local nWordType
|
||||
local hud = self:SpawnPrefabInstance(self.wordHudPrefab, "Game.UI.Hud.HudNumberCtrl", "HUD", self._mapNode.DamageWordRoot)
|
||||
self.hudId = self.hudId + 1
|
||||
local value = ""
|
||||
if valueType == 1 then
|
||||
nWordType = 8
|
||||
value = ConfigTable.GetUIText("Hud_Missing_Tip")
|
||||
elseif valueType == 2 then
|
||||
nWordType = 7
|
||||
value = ConfigTable.GetUIText("Hud_Immunity_Tip")
|
||||
elseif valueType == 3 then
|
||||
nWordType = 9
|
||||
value = ConfigTable.GetUIText("Hud_Resistance_Tip")
|
||||
end
|
||||
AdventureModuleHelper.SetHudStringValue(hud.gameObject, id, self.hudId, value, nWordType, false)
|
||||
self.numberHuds[self.hudId] = hud
|
||||
hud.gameObject.transform:SetAsLastSibling()
|
||||
end
|
||||
function TowerDefenseHUDCtrl:OnEvent_HudMark(id, valueType, stringKey)
|
||||
local nWordType = valueType
|
||||
local hud = self:SpawnPrefabInstance(self.wordHudPrefab, "Game.UI.Hud.HudNumberCtrl", "HUD", self._mapNode.DamageWordRoot)
|
||||
self.hudId = self.hudId + 1
|
||||
local value = ConfigTable.GetUIText(stringKey)
|
||||
AdventureModuleHelper.SetHudStringValue(hud.gameObject, id, self.hudId, value, nWordType, false)
|
||||
self.numberHuds[self.hudId] = hud
|
||||
hud.gameObject.transform:SetAsLastSibling()
|
||||
end
|
||||
return TowerDefenseHUDCtrl
|
||||
@@ -0,0 +1,11 @@
|
||||
local TowerDefenseHudPanel = class("TowerDefenseHudPanel", BasePanel)
|
||||
TowerDefenseHudPanel._bAddToBackHistory = false
|
||||
TowerDefenseHudPanel._bIsMainPanel = false
|
||||
TowerDefenseHudPanel._sSortingLayerName = AllEnum.SortingLayerName.HUD
|
||||
TowerDefenseHudPanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "Play_TowerDefence/HUD/HUDROOT.prefab",
|
||||
sCtrlName = "Game.UI.TowerDefense.HUD.TowerDefenseHUDCtrl"
|
||||
}
|
||||
}
|
||||
return TowerDefenseHudPanel
|
||||
@@ -0,0 +1,318 @@
|
||||
local TowerDefenseCharacterDetailCtrl = class("TowerDefenseCharacterDetailCtrl", BaseCtrl)
|
||||
local SelectedColor = Color(0.9803921568627451, 0.9803921568627451, 10.0)
|
||||
local NormalColor = Color(0.14901960784313725, 0.25882352941176473, 0.47058823529411764)
|
||||
local AdventureModuleHelper = CS.AdventureModuleHelper
|
||||
local GamepadUIManager = require("GameCore.Module.GamepadUIManager")
|
||||
TowerDefenseCharacterDetailCtrl._mapNodeConfig = {
|
||||
TopBar = {
|
||||
sNodeName = "TopBar",
|
||||
sCtrlName = "Game.UI.TopBarEx.TopBarCtrl"
|
||||
},
|
||||
char_sv = {
|
||||
sComponentName = "LoopScrollView"
|
||||
},
|
||||
txt_detailName = {sComponentName = "TMP_Text"},
|
||||
img_char = {sComponentName = "Image"},
|
||||
txtLevel = {sComponentName = "TMP_Text"},
|
||||
txt_property = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "TowerDef_Text_Atrr"
|
||||
},
|
||||
txt_attack = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Attr_Atk_Simple"
|
||||
},
|
||||
txt_attackValue = {sComponentName = "TMP_Text"},
|
||||
txt_AttackSpeed = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Attr_AtkSpd_Simple"
|
||||
},
|
||||
txt_AttackSpeedValue = {sComponentName = "TMP_Text"},
|
||||
txt_CD = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "TowerDef_CDTitle"
|
||||
},
|
||||
txt_cdValue = {sComponentName = "TMP_Text"},
|
||||
txt_empty = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "TowerDef_Empty"
|
||||
},
|
||||
btn_potential = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtn_PotentialTab_OnClisk"
|
||||
},
|
||||
txt_potential_selected = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "TowerDef_Text_Pon"
|
||||
},
|
||||
txt_potential_normal = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "TowerDef_Text_Pon"
|
||||
},
|
||||
potential_sv = {},
|
||||
empty_potential = {},
|
||||
go_potential1 = {},
|
||||
go_potential2 = {},
|
||||
btn_skill = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtn_SkillTab_OnClisk"
|
||||
},
|
||||
txt_skill_selected = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "TowerDef_Text_Skill"
|
||||
},
|
||||
txt_skill_normal = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "TowerDef_Text_Skill"
|
||||
},
|
||||
skill_sv = {},
|
||||
skill = {nCount = 2}
|
||||
}
|
||||
TowerDefenseCharacterDetailCtrl._mapEventConfig = {
|
||||
[EventId.UIBackConfirm] = "OnEvent_Close"
|
||||
}
|
||||
TowerDefenseCharacterDetailCtrl._mapRedDotConfig = {}
|
||||
function TowerDefenseCharacterDetailCtrl:Awake()
|
||||
local param = self:GetPanelParam()
|
||||
if type(param) == "table" then
|
||||
self.characterList = param[1]
|
||||
local nSelectIndex = table.indexof(self.characterList, param[2])
|
||||
if nSelectIndex < 1 then
|
||||
nSelectIndex = 1
|
||||
end
|
||||
self.nSelectedId = self.characterList[nSelectIndex]
|
||||
self.nActId = param[3]
|
||||
end
|
||||
self.TowerDefenseData = PlayerData.Activity:GetActivityDataById(self.nActId)
|
||||
self.selectedGrid = nil
|
||||
self:InitData()
|
||||
end
|
||||
function TowerDefenseCharacterDetailCtrl:OnEnable()
|
||||
GamepadUIManager.EnableGamepadUI("TowerDefenseCharacterDetailCtrl", self:GetGamepadUINode(), nil, true)
|
||||
end
|
||||
function TowerDefenseCharacterDetailCtrl:OnDisable()
|
||||
GamepadUIManager.DisableGamepadUI("TowerDefenseCharacterDetailCtrl")
|
||||
end
|
||||
function TowerDefenseCharacterDetailCtrl:OnDestroy()
|
||||
EventManager.Hit("TowerDefenseCharDetailPanelClose")
|
||||
end
|
||||
function TowerDefenseCharacterDetailCtrl:InitData()
|
||||
NovaAPI.SetComponentEnable(self._mapNode.char_sv, true)
|
||||
self._mapNode.char_sv:Init(#self.characterList, self, self.OnRefreshGrid)
|
||||
NovaAPI.SetComponentEnable(self._mapNode.char_sv, false)
|
||||
self:RefreshInfoData()
|
||||
self:OnTabSelected(1)
|
||||
end
|
||||
function TowerDefenseCharacterDetailCtrl:RefreshInfoData()
|
||||
local nEntityId = self.TowerDefenseData.TowerDefenseLevelData:GetCharacterEntityId(self.nSelectedId)
|
||||
local Info = AdventureModuleHelper.GetEntityInfo(nEntityId)
|
||||
local atk = Info ~= nil and Info.atk:AsInt() or 0
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_attackValue, tostring(atk))
|
||||
local atkSpeed = Info ~= nil and Info.normalAttackSpd:AsFloat() or 0
|
||||
atkSpeed = clearFloat(atkSpeed)
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_AttackSpeedValue, FormatEffectValue(atkSpeed, true, GameEnum.ValueFormat.TDP))
|
||||
local config = ConfigTable.GetData("TowerDefenseCharacter", self.nSelectedId)
|
||||
if config == nil then
|
||||
return
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_detailName, config.Name)
|
||||
local nCD = self.TowerDefenseData.TowerDefenseLevelData:GetCharSkillCD(self.nSelectedId)
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_cdValue, string.format("%.1f", nCD) .. ConfigTable.GetUIText("TowerDef_Text_Sec"))
|
||||
if config.Icon ~= nil and config.Icon ~= "" then
|
||||
self:SetPngSprite(self._mapNode.img_char, config.Icon .. AllEnum.CharHeadIconSurfix.Q)
|
||||
end
|
||||
local level = self.TowerDefenseData.TowerDefenseLevelData:GetCharacterLevel(self.nSelectedId)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtLevel, tostring(level))
|
||||
self:SetSkillDes()
|
||||
self:SetPotentialDes()
|
||||
end
|
||||
function TowerDefenseCharacterDetailCtrl:SetSkillDes()
|
||||
local characterConfig = ConfigTable.GetData("TowerDefenseCharacter", self.nSelectedId)
|
||||
if characterConfig == nil then
|
||||
return
|
||||
end
|
||||
local skillConfig = ConfigTable.GetData("Skill", characterConfig.NormalAtkId)
|
||||
if skillConfig == nil then
|
||||
return
|
||||
end
|
||||
local skill1 = self._mapNode.skill[1]
|
||||
local skill1_icon = skill1.transform:Find("skill/AnimRoot/imgIcon")
|
||||
local skill1_name = skill1.transform:Find("GameObject/t_common_04/imgBg/txtTitle")
|
||||
local skill1_des = skill1.transform:Find("GameObject/txt_content")
|
||||
local skill1_type = skill1.transform:Find("skill/AnimRoot/imgType")
|
||||
local skill1_bg1 = skill1.transform:Find("skill/AnimRoot/imgBg1")
|
||||
local skill1_bg2 = skill1.transform:Find("skill/AnimRoot/imgBg2")
|
||||
if skillConfig.Icon ~= nil and skillConfig.Icon ~= "" then
|
||||
self:SetPngSprite(skill1_icon:GetComponent("Image"), skillConfig.Icon)
|
||||
end
|
||||
self:SetAtlasSprite(skill1_type:GetComponent("Image"), "05_language", "zs_character_skill_text_" .. skillConfig.Type)
|
||||
NovaAPI.SetTMPText(skill1_name:GetComponent("TMP_Text"), skillConfig.Title)
|
||||
NovaAPI.SetTMPText(skill1_des:GetComponent("TMP_Text"), skillConfig.Desc)
|
||||
local atkSkillConfig = ConfigTable.GetData("Skill", characterConfig.SkillId)
|
||||
if atkSkillConfig == nil then
|
||||
return
|
||||
end
|
||||
local skill2 = self._mapNode.skill[2]
|
||||
local skill2_icon = skill2.transform:Find("skill/AnimRoot/imgIcon")
|
||||
local skill2_name = skill2.transform:Find("GameObject/t_common_04/imgBg/txtTitle")
|
||||
local skill2_des = skill2.transform:Find("GameObject/txt_content")
|
||||
local skill2_type = skill2.transform:Find("skill/AnimRoot/imgType")
|
||||
local skill2_bg1 = skill2.transform:Find("skill/AnimRoot/imgBg1")
|
||||
local skill2_bg2 = skill2.transform:Find("skill/AnimRoot/imgBg2")
|
||||
if atkSkillConfig.Icon ~= nil and atkSkillConfig.Icon ~= "" then
|
||||
self:SetPngSprite(skill2_icon:GetComponent("Image"), atkSkillConfig.Icon)
|
||||
end
|
||||
self:SetAtlasSprite(skill2_type:GetComponent("Image"), "05_language", "zs_character_skill_text_" .. atkSkillConfig.Type)
|
||||
NovaAPI.SetTMPText(skill2_name:GetComponent("TMP_Text"), atkSkillConfig.Title)
|
||||
NovaAPI.SetTMPText(skill2_des:GetComponent("TMP_Text"), atkSkillConfig.Desc)
|
||||
local EETConfig = ConfigTable.GetData("MonsterValueTempleteAdjust", characterConfig.Templete)
|
||||
if EETConfig ~= nil then
|
||||
local sName = AllEnum.ElementIconType.SkillEx .. EETConfig.EET
|
||||
self:SetAtlasSprite(skill1_bg1:GetComponent("Image"), "12_rare", sName)
|
||||
self:SetAtlasSprite(skill2_bg1:GetComponent("Image"), "12_rare", sName)
|
||||
local _, color = ColorUtility.TryParseHtmlString(AllEnum.SkillElementBgColor[EETConfig.EET])
|
||||
NovaAPI.SetImageColor(skill1_bg2:GetComponent("Image"), Color(color.r, color.g, color.b, 0.2980392156862745))
|
||||
NovaAPI.SetImageColor(skill2_bg2:GetComponent("Image"), Color(color.r, color.g, color.b, 0.2980392156862745))
|
||||
end
|
||||
local wait = function()
|
||||
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
||||
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
||||
CS.UnityEngine.UI.LayoutRebuilder.ForceRebuildLayoutImmediate(self._mapNode.skill[1].gameObject:GetComponent("RectTransform"))
|
||||
CS.UnityEngine.UI.LayoutRebuilder.ForceRebuildLayoutImmediate(self._mapNode.skill[2].gameObject:GetComponent("RectTransform"))
|
||||
end
|
||||
cs_coroutine.start(wait)
|
||||
end
|
||||
function TowerDefenseCharacterDetailCtrl:SetPotentialDes()
|
||||
local tbPotentialList = self.TowerDefenseData.TowerDefenseLevelData:GetPotentialByChar(self.nSelectedId)
|
||||
self._mapNode.go_potential1:SetActive(false)
|
||||
self._mapNode.go_potential2:SetActive(false)
|
||||
if tbPotentialList == nil then
|
||||
return
|
||||
end
|
||||
local corePotentialId, normalPotentialId = 0, 0
|
||||
for _, potentialId in pairs(tbPotentialList) do
|
||||
local config = ConfigTable.GetData("TowerDefensePotential", potentialId)
|
||||
if config ~= nil then
|
||||
if config.Rarity == GameEnum.itemRarity.SSR then
|
||||
corePotentialId = config.Id
|
||||
elseif config.Rarity == GameEnum.itemRarity.SR then
|
||||
normalPotentialId = config.Id
|
||||
end
|
||||
end
|
||||
end
|
||||
if normalPotentialId ~= 0 then
|
||||
local corePotentialConfig = ConfigTable.GetData("TowerDefensePotential", normalPotentialId)
|
||||
local icon = self._mapNode.go_potential1.transform:Find("icon/img_bgNormal/icon")
|
||||
local txtTitle = self._mapNode.go_potential1.transform:Find("GameObject/t_common_04/imgBg/txtTitle")
|
||||
local txt_content = self._mapNode.go_potential1.transform:Find("GameObject/txt_content")
|
||||
if corePotentialConfig.Icon ~= nil and corePotentialConfig.Icon ~= "" then
|
||||
self:SetPngSprite(icon:GetComponent("Image"), corePotentialConfig.Icon .. AllEnum.PotentialIconSurfix.A)
|
||||
end
|
||||
NovaAPI.SetTMPText(txtTitle:GetComponent("TMP_Text"), corePotentialConfig.Name)
|
||||
NovaAPI.SetTMPText(txt_content:GetComponent("TMP_Text"), corePotentialConfig.PotentialDes)
|
||||
end
|
||||
if corePotentialId ~= 0 then
|
||||
local basePotentialConfig = ConfigTable.GetData("TowerDefensePotential", corePotentialId)
|
||||
local icon = self._mapNode.go_potential2.transform:Find("icon/img_bgCore/icon")
|
||||
local txtTitle = self._mapNode.go_potential2.transform:Find("GameObject/t_common_04/imgBg/txtTitle")
|
||||
local txt_content = self._mapNode.go_potential2.transform:Find("GameObject/txt_content")
|
||||
if basePotentialConfig.Icon ~= nil and basePotentialConfig.Icon ~= "" then
|
||||
self:SetPngSprite(icon:GetComponent("Image"), basePotentialConfig.Icon .. AllEnum.PotentialIconSurfix.A)
|
||||
end
|
||||
NovaAPI.SetTMPText(txtTitle:GetComponent("TMP_Text"), basePotentialConfig.Name)
|
||||
NovaAPI.SetTMPText(txt_content:GetComponent("TMP_Text"), basePotentialConfig.PotentialDes)
|
||||
end
|
||||
self._mapNode.go_potential1:SetActive(normalPotentialId ~= 0)
|
||||
self._mapNode.go_potential2:SetActive(corePotentialId ~= 0)
|
||||
local wait = function()
|
||||
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
||||
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
||||
CS.UnityEngine.UI.LayoutRebuilder.ForceRebuildLayoutImmediate(self._mapNode.go_potential1:GetComponent("RectTransform"))
|
||||
CS.UnityEngine.UI.LayoutRebuilder.ForceRebuildLayoutImmediate(self._mapNode.go_potential2:GetComponent("RectTransform"))
|
||||
end
|
||||
cs_coroutine.start(wait)
|
||||
end
|
||||
function TowerDefenseCharacterDetailCtrl:OnRefreshGrid(goGrid, gridIndex)
|
||||
local nIndex = gridIndex + 1
|
||||
local img_head = goGrid.transform:Find("btn_grid/AnimRoot/icon_head"):GetComponent("Image")
|
||||
local txt_name = goGrid.transform:Find("btn_grid/AnimRoot/txt_name"):GetComponent("TMP_Text")
|
||||
local go_selected = goGrid.transform:Find("btn_grid/AnimRoot/bg_selected")
|
||||
local bSelected = self.characterList[nIndex] == self.nSelectedId
|
||||
local config = ConfigTable.GetData("TowerDefenseCharacter", self.characterList[nIndex])
|
||||
if config == nil then
|
||||
return
|
||||
end
|
||||
if config.Icon ~= nil and config.Icon ~= "" then
|
||||
self:SetPngSprite(img_head, config.Icon .. AllEnum.CharHeadIconSurfix.QS)
|
||||
end
|
||||
NovaAPI.SetTMPText(txt_name, config.Name)
|
||||
if bSelected then
|
||||
NovaAPI.SetTMPColor(txt_name, SelectedColor)
|
||||
self.selectedGrid = goGrid
|
||||
else
|
||||
NovaAPI.SetTMPColor(txt_name, NormalColor)
|
||||
end
|
||||
local cb = function()
|
||||
if self.selectedGrid ~= nil then
|
||||
local go_selected = self.selectedGrid.transform:Find("btn_grid/AnimRoot/bg_selected")
|
||||
local txt_name = self.selectedGrid.transform:Find("btn_grid/AnimRoot/txt_name"):GetComponent("TMP_Text")
|
||||
NovaAPI.SetTMPColor(txt_name, NormalColor)
|
||||
go_selected.gameObject:SetActive(false)
|
||||
end
|
||||
self.nSelectedId = self.characterList[nIndex]
|
||||
local go_selected = goGrid.transform:Find("btn_grid/AnimRoot/bg_selected")
|
||||
local txt_name = goGrid.transform:Find("btn_grid/AnimRoot/txt_name"):GetComponent("TMP_Text")
|
||||
NovaAPI.SetTMPColor(txt_name, SelectedColor)
|
||||
go_selected.gameObject:SetActive(true)
|
||||
self.selectedGrid = goGrid
|
||||
self:RefreshInfoData()
|
||||
self:OnTabSelected(1)
|
||||
end
|
||||
local btn = goGrid.transform:Find("btn_grid"):GetComponent("UIButton")
|
||||
btn.onClick:RemoveAllListeners()
|
||||
btn.onClick:AddListener(cb)
|
||||
go_selected.gameObject:SetActive(bSelected)
|
||||
end
|
||||
function TowerDefenseCharacterDetailCtrl:OnTabSelected(nIndex)
|
||||
local btn_potential = self._mapNode.btn_potential
|
||||
local potential_Normal = btn_potential.gameObject.transform:Find("AnimRoot/go_normal")
|
||||
local potential_Select = btn_potential.gameObject.transform:Find("AnimRoot/go_selected")
|
||||
potential_Normal.gameObject:SetActive(nIndex ~= 1)
|
||||
potential_Select.gameObject:SetActive(nIndex == 1)
|
||||
local btn_skill = self._mapNode.btn_skill
|
||||
local skill_Normal = btn_skill.gameObject.transform:Find("AnimRoot/go_normal")
|
||||
local skill_Select = btn_skill.gameObject.transform:Find("AnimRoot/go_selected")
|
||||
skill_Normal.gameObject:SetActive(nIndex ~= 2)
|
||||
skill_Select.gameObject:SetActive(nIndex == 2)
|
||||
self._mapNode.skill_sv:SetActive(nIndex == 2)
|
||||
local bShowPotential = false
|
||||
if nIndex == 1 then
|
||||
local tbPotentialList = self.TowerDefenseData.TowerDefenseLevelData:GetPotentialByChar(self.nSelectedId)
|
||||
if tbPotentialList ~= nil then
|
||||
for _, potentialId in pairs(tbPotentialList) do
|
||||
local config = ConfigTable.GetData("TowerDefensePotential", potentialId)
|
||||
if config ~= nil and (config.Rarity == GameEnum.itemRarity.SSR or config.Rarity == GameEnum.itemRarity.SR) then
|
||||
bShowPotential = true
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
self._mapNode.potential_sv:SetActive(nIndex == 1 and bShowPotential)
|
||||
self._mapNode.empty_potential:SetActive(nIndex == 1 and not bShowPotential)
|
||||
end
|
||||
function TowerDefenseCharacterDetailCtrl:OnEvent_AAA()
|
||||
end
|
||||
function TowerDefenseCharacterDetailCtrl:OnBtn_PotentialTab_OnClisk()
|
||||
self:OnTabSelected(1)
|
||||
end
|
||||
function TowerDefenseCharacterDetailCtrl:OnBtn_SkillTab_OnClisk()
|
||||
self:OnTabSelected(2)
|
||||
end
|
||||
function TowerDefenseCharacterDetailCtrl:OnEvent_Close(nPanelId)
|
||||
if self._panel._nPanelId ~= nPanelId then
|
||||
return
|
||||
end
|
||||
EventManager.Hit(EventId.ClosePanel, PanelId.TowerDefenseCharacterDetailPanel)
|
||||
end
|
||||
return TowerDefenseCharacterDetailCtrl
|
||||
@@ -0,0 +1,22 @@
|
||||
local TowerDefenseCharacterDetailPanel = class("TowerDefenseCharacterDetailPanel", BasePanel)
|
||||
TowerDefenseCharacterDetailPanel._nSnapshotPrePanel = 1
|
||||
TowerDefenseCharacterDetailPanel._bIsMainPanel = false
|
||||
TowerDefenseCharacterDetailPanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "Play_TowerDefence/TowerDefenseCharacterDetailPanel.prefab",
|
||||
sCtrlName = "Game.UI.TowerDefense.TowerDefenseCharacterDetailCtrl"
|
||||
}
|
||||
}
|
||||
function TowerDefenseCharacterDetailPanel:Awake()
|
||||
end
|
||||
function TowerDefenseCharacterDetailPanel:OnEnable()
|
||||
end
|
||||
function TowerDefenseCharacterDetailPanel:OnAfterEnter()
|
||||
end
|
||||
function TowerDefenseCharacterDetailPanel:OnDisable()
|
||||
end
|
||||
function TowerDefenseCharacterDetailPanel:OnDestroy()
|
||||
end
|
||||
function TowerDefenseCharacterDetailPanel:OnRelease()
|
||||
end
|
||||
return TowerDefenseCharacterDetailPanel
|
||||
@@ -0,0 +1,172 @@
|
||||
local TowerDefenseCharacterFuncCtrl = class("TowerDefenseCharacterFuncCtrl", BaseCtrl)
|
||||
local GamepadUIManager = require("GameCore.Module.GamepadUIManager")
|
||||
local normalLevelUpTextColor = Color(0.21176470588235294, 0.24705882352941178, 0.3058823529411765)
|
||||
local lockLevelUpTextColor = Color(0.7411764705882353, 0.18823529411764706, 0.34901960784313724)
|
||||
TowerDefenseCharacterFuncCtrl._mapNodeConfig = {
|
||||
btn_close = {
|
||||
sComponentName = "NaviButton",
|
||||
callback = "OnBtnClick_Close"
|
||||
},
|
||||
go_func = {nCount = 6}
|
||||
}
|
||||
TowerDefenseCharacterFuncCtrl._mapEventConfig = {
|
||||
TowerDefenseCharacterCharacterLevelUp = "OnEvent_LevelUp",
|
||||
TOWERDEFENSE_UPDATE_LEVELUP = "OnEvent_LevelUpPointChange"
|
||||
}
|
||||
TowerDefenseCharacterFuncCtrl._mapRedDotConfig = {}
|
||||
function TowerDefenseCharacterFuncCtrl:Awake()
|
||||
self.UseFuncGo = {}
|
||||
self.UnUseFuncGo = {}
|
||||
for _, go_func in pairs(self._mapNode.go_func) do
|
||||
table.insert(self.UnUseFuncGo, go_func)
|
||||
go_func:SetActive(false)
|
||||
end
|
||||
self._mapNode.btn_close.gameObject:SetActive(false)
|
||||
GamepadUIManager.AddGamepadUINode("TowerDefense", self:GetGamepadUINode())
|
||||
self.bIsShowLevelBtn = true
|
||||
end
|
||||
function TowerDefenseCharacterFuncCtrl:SetLevelBtnState(bIsShow)
|
||||
self.bIsShowLevelBtn = bIsShow
|
||||
end
|
||||
function TowerDefenseCharacterFuncCtrl:SetData(nActId)
|
||||
self.TowerDefenseData = PlayerData.Activity:GetActivityDataById(nActId)
|
||||
end
|
||||
function TowerDefenseCharacterFuncCtrl:BindFuncIcon(characterId, uiPos, detailCallback, levelupCallback)
|
||||
if self.UseFuncGo[characterId] ~= nil then
|
||||
return
|
||||
end
|
||||
local go = self.UnUseFuncGo[1]
|
||||
table.remove(self.UnUseFuncGo, 1)
|
||||
self.UseFuncGo[characterId] = go
|
||||
local rectTran = go:GetComponent("RectTransform")
|
||||
rectTran.anchoredPosition = Vector2(uiPos.x, uiPos.y - 18)
|
||||
go:SetActive(false)
|
||||
local btn_detail = go.transform:Find("btn_detail"):GetComponent("NaviButton")
|
||||
local btn_LevelUp = go.transform:Find("btn_levelUp"):GetComponent("NaviButton")
|
||||
btn_detail.onClick:RemoveAllListeners()
|
||||
btn_LevelUp.onClick:RemoveAllListeners()
|
||||
btn_detail.onClick:AddListener(detailCallback)
|
||||
btn_LevelUp.onClick:AddListener(levelupCallback)
|
||||
local tbGamepadUINode = {
|
||||
[1] = {
|
||||
mapNode = btn_detail,
|
||||
sComponentName = "NaviButton",
|
||||
sAction = "TowerDefCharInfo"
|
||||
},
|
||||
[2] = {
|
||||
mapNode = btn_LevelUp,
|
||||
sComponentName = "NaviButton",
|
||||
sAction = "TowerDefCharLvUp"
|
||||
}
|
||||
}
|
||||
GamepadUIManager.AddGamepadUINode("TowerDefense", tbGamepadUINode)
|
||||
end
|
||||
function TowerDefenseCharacterFuncCtrl:HideIcon()
|
||||
if self.nCharacterId == 0 then
|
||||
return
|
||||
end
|
||||
if self.UseFuncGo[self.nCharacterId] == nil then
|
||||
return
|
||||
end
|
||||
local go = self.UseFuncGo[self.nCharacterId]
|
||||
local btn_detail = go.transform:Find("btn_detail"):GetComponent("NaviButton")
|
||||
local btn_LevelUp = go.transform:Find("btn_levelUp"):GetComponent("NaviButton")
|
||||
NovaAPI.SetNaviButtonAction(btn_detail, false)
|
||||
NovaAPI.SetNaviButtonAction(btn_LevelUp, false)
|
||||
self._mapNode.btn_close.gameObject:SetActive(false)
|
||||
local animator = go:GetComponent("Animator")
|
||||
animator:Play("go_CharFunc_out")
|
||||
self:AddTimer(1, 0.13, function()
|
||||
go:SetActive(false)
|
||||
end, true, true, true)
|
||||
EventManager.Hit("TowerDefenseFuncShow", false, self.nCharacterId)
|
||||
self.nCharacterId = 0
|
||||
end
|
||||
function TowerDefenseCharacterFuncCtrl:ShowIcon(characterId)
|
||||
self.nCharacterId = characterId
|
||||
if self.UseFuncGo[characterId] == nil then
|
||||
return
|
||||
end
|
||||
local go = self.UseFuncGo[characterId]
|
||||
local btn_LevelUp = go.transform:Find("btn_levelUp")
|
||||
local level = self.TowerDefenseData.TowerDefenseLevelData:GetCharacterLevel(self.nCharacterId)
|
||||
local config = ConfigTable.GetData("TowerDefenseCharacter", self.nCharacterId)
|
||||
if config == nil then
|
||||
return
|
||||
end
|
||||
if level < 6 then
|
||||
if not self.bIsShowLevelBtn then
|
||||
btn_LevelUp.gameObject:SetActive(false)
|
||||
else
|
||||
btn_LevelUp.gameObject:SetActive(true)
|
||||
local icon_levelUp = go.transform:Find("btn_levelUp/AnimRoot/img_levelUp")
|
||||
local icon_lock = go.transform:Find("btn_levelUp/AnimRoot/img_lock")
|
||||
local txt_costPoint = go.transform:Find("btn_levelUp/AnimRoot/img_point/txt_needPoint")
|
||||
NovaAPI.SetTMPText(txt_costPoint:GetComponent("TMP_Text"), config.PointNeeded[level])
|
||||
icon_levelUp.gameObject:SetActive(not (config.PointNeeded[level] > self.point))
|
||||
icon_lock.gameObject:SetActive(config.PointNeeded[level] > self.point)
|
||||
if config.PointNeeded[level] > self.point then
|
||||
NovaAPI.SetTMPColor(txt_costPoint:GetComponent("TMP_Text"), lockLevelUpTextColor)
|
||||
else
|
||||
NovaAPI.SetTMPColor(txt_costPoint:GetComponent("TMP_Text"), normalLevelUpTextColor)
|
||||
end
|
||||
end
|
||||
else
|
||||
btn_LevelUp.gameObject:SetActive(false)
|
||||
end
|
||||
go:SetActive(true)
|
||||
self._mapNode.btn_close.gameObject:SetActive(true)
|
||||
local animator = go:GetComponent("Animator")
|
||||
animator:Play("go_CharFunc_in")
|
||||
local txt_animator = go.transform:Find("btn_levelUp/AnimRoot"):GetComponent("Animator")
|
||||
if level < 6 then
|
||||
if config.PointNeeded[level] > self.point then
|
||||
txt_animator:Play("btn_levelUp_Unlock")
|
||||
else
|
||||
txt_animator:Play("New State")
|
||||
end
|
||||
else
|
||||
txt_animator:Play("New State")
|
||||
end
|
||||
EventManager.Hit("TowerDefenseFuncShow", true, self.nCharacterId)
|
||||
end
|
||||
function TowerDefenseCharacterFuncCtrl:UpdateFunc(characterId, go)
|
||||
local level = self.TowerDefenseData.TowerDefenseLevelData:GetCharacterLevel(characterId)
|
||||
local config = ConfigTable.GetData("TowerDefenseCharacter", characterId)
|
||||
if config == nil then
|
||||
return
|
||||
end
|
||||
local btn_LevelUp = go.transform:Find("btn_levelUp"):GetComponent("NaviButton")
|
||||
if level < 6 then
|
||||
btn_LevelUp.gameObject:SetActive(true)
|
||||
local icon_levelUp = go.transform:Find("btn_levelUp/AnimRoot/img_levelUp")
|
||||
local icon_lock = go.transform:Find("btn_levelUp/AnimRoot/img_lock")
|
||||
local txt_costPoint = go.transform:Find("btn_levelUp/AnimRoot/img_point/txt_needPoint")
|
||||
local txt_animator = go.transform:Find("btn_levelUp/AnimRoot"):GetComponent("Animator")
|
||||
NovaAPI.SetTMPText(txt_costPoint:GetComponent("TMP_Text"), config.PointNeeded[level])
|
||||
icon_levelUp.gameObject:SetActive(not (config.PointNeeded[level] > self.point))
|
||||
icon_lock.gameObject:SetActive(config.PointNeeded[level] > self.point)
|
||||
if config.PointNeeded[level] > self.point then
|
||||
NovaAPI.SetTMPColor(txt_costPoint:GetComponent("TMP_Text"), lockLevelUpTextColor)
|
||||
txt_animator:Play("btn_levelUp_Unlock")
|
||||
else
|
||||
NovaAPI.SetTMPColor(txt_costPoint:GetComponent("TMP_Text"), normalLevelUpTextColor)
|
||||
txt_animator:Play("New State")
|
||||
end
|
||||
else
|
||||
btn_LevelUp.gameObject:SetActive(false)
|
||||
end
|
||||
end
|
||||
function TowerDefenseCharacterFuncCtrl:OnBtnClick_Close()
|
||||
NovaAPI.DispatchEventWithData("TOWERDEFENSE_CANCEL_SELECT_STATE")
|
||||
end
|
||||
function TowerDefenseCharacterFuncCtrl:OnEvent_LevelUp(characterId)
|
||||
self.nCharacterId = characterId
|
||||
end
|
||||
function TowerDefenseCharacterFuncCtrl:OnEvent_LevelUpPointChange(point)
|
||||
self.point = point
|
||||
for charId, go in pairs(self.UseFuncGo) do
|
||||
self:UpdateFunc(charId, go)
|
||||
end
|
||||
end
|
||||
return TowerDefenseCharacterFuncCtrl
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,30 @@
|
||||
local TowerDefenseGiveUpCtrl = class("TowerDefenseGiveUpCtrl", BaseCtrl)
|
||||
TowerDefenseGiveUpCtrl._mapNodeConfig = {}
|
||||
TowerDefenseGiveUpCtrl._mapEventConfig = {}
|
||||
TowerDefenseGiveUpCtrl._mapRedDotConfig = {}
|
||||
function TowerDefenseGiveUpCtrl:Awake()
|
||||
local param = self:GetPanelParam()
|
||||
if type(param) == "table" then
|
||||
self.callback = param[1]
|
||||
end
|
||||
end
|
||||
function TowerDefenseGiveUpCtrl:FadeIn()
|
||||
end
|
||||
function TowerDefenseGiveUpCtrl:FadeOut()
|
||||
end
|
||||
function TowerDefenseGiveUpCtrl:OnEnable()
|
||||
end
|
||||
function TowerDefenseGiveUpCtrl:OnDisable()
|
||||
if self.callback ~= nil then
|
||||
self.callback()
|
||||
end
|
||||
end
|
||||
function TowerDefenseGiveUpCtrl:OnDestroy()
|
||||
end
|
||||
function TowerDefenseGiveUpCtrl:OnRelease()
|
||||
end
|
||||
function TowerDefenseGiveUpCtrl:OnBtnClick_AAA()
|
||||
end
|
||||
function TowerDefenseGiveUpCtrl:OnEvent_AAA()
|
||||
end
|
||||
return TowerDefenseGiveUpCtrl
|
||||
@@ -0,0 +1,22 @@
|
||||
local TowerDefenseGiveUpPanel = class("TowerDefenseGiveUpPanel", BasePanel)
|
||||
TowerDefenseGiveUpPanel._bIsMainPanel = true
|
||||
TowerDefenseGiveUpPanel._bAddToBackHistory = true
|
||||
TowerDefenseGiveUpPanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "Play_TowerDefence/TowerDefenseGiveUpPanel.prefab",
|
||||
sCtrlName = "Game.UI.TowerDefense.TowerDefenseGiveUpCtrl"
|
||||
}
|
||||
}
|
||||
function TowerDefenseGiveUpPanel:Awake()
|
||||
end
|
||||
function TowerDefenseGiveUpPanel:OnEnable()
|
||||
end
|
||||
function TowerDefenseGiveUpPanel:OnAfterEnter()
|
||||
end
|
||||
function TowerDefenseGiveUpPanel:OnDisable()
|
||||
end
|
||||
function TowerDefenseGiveUpPanel:OnDestroy()
|
||||
end
|
||||
function TowerDefenseGiveUpPanel:OnRelease()
|
||||
end
|
||||
return TowerDefenseGiveUpPanel
|
||||
@@ -0,0 +1,308 @@
|
||||
local TowerDefenseGuideCtrl = class("TowerDefenseGuideCtrl", BaseCtrl)
|
||||
TowerDefenseGuideCtrl._mapNodeConfig = {
|
||||
txt_Guide_window = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "TowerDef_Guide"
|
||||
},
|
||||
txt_sv_char = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "TowerDef_TeamEditor_Char"
|
||||
},
|
||||
txt_sv_item = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "TowerDef_Title_Item"
|
||||
},
|
||||
btnClose = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Close"
|
||||
},
|
||||
list_content = {
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
temp_grid_char = {},
|
||||
char_content = {},
|
||||
char_detail = {},
|
||||
txtTitle_skill = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "TowerDef_Guide_Skill"
|
||||
},
|
||||
txtTitle_potential = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "TowerDef_Guide_Potential"
|
||||
},
|
||||
skill = {nCount = 2},
|
||||
PotentialItem = {nCount = 4},
|
||||
temp_grid_item = {},
|
||||
item_content = {},
|
||||
item_detail = {},
|
||||
txt_itemName = {sComponentName = "TMP_Text"},
|
||||
txt_itemCD = {sComponentName = "TMP_Text"},
|
||||
txt_des = {sComponentName = "TMP_Text"}
|
||||
}
|
||||
TowerDefenseGuideCtrl._mapEventConfig = {
|
||||
TowerDefenseGuideCellOnSelected = "OnEvent_CellOnSelected"
|
||||
}
|
||||
TowerDefenseGuideCtrl._mapRedDotConfig = {}
|
||||
local SelectType = {Char = 1, Item = 2}
|
||||
function TowerDefenseGuideCtrl:Awake()
|
||||
self.animator = self.gameObject:GetComponent("Animator")
|
||||
end
|
||||
function TowerDefenseGuideCtrl:SetData(nActId)
|
||||
self.animator:Play("t_window_04_t_in")
|
||||
EventManager.Hit(EventId.TemporaryBlockInput, 0.2)
|
||||
self.tbCharacterIds = {}
|
||||
self.tbItemIds = {}
|
||||
self.nActId = nActId
|
||||
self.selectedGridGo = nil
|
||||
self.TowerDefenseData = PlayerData.Activity:GetActivityDataById(self.nActId)
|
||||
local forEachFunction = function(config)
|
||||
if config.ActivityId == nActId then
|
||||
if config.GuideType == GameEnum.TowerDefGuideType.Character then
|
||||
table.insert(self.tbCharacterIds, config.Id)
|
||||
elseif config.GuideType == GameEnum.TowerDefGuideType.Item then
|
||||
table.insert(self.tbItemIds, config.Id)
|
||||
end
|
||||
end
|
||||
end
|
||||
ForEachTableLine(DataTable.TowerDefenseGuide, forEachFunction)
|
||||
local sortFunction = function(a, b)
|
||||
local config_a = ConfigTable.GetData("TowerDefenseGuide", a)
|
||||
local config_b = ConfigTable.GetData("TowerDefenseGuide", b)
|
||||
local bUnlock_a = self.TowerDefenseData:IsLevelUnlock(config_a.LevelId) and self.TowerDefenseData:IsPreLevelPass(config_a.LevelId)
|
||||
local bUnlock_b = self.TowerDefenseData:IsLevelUnlock(config_b.LevelId) and self.TowerDefenseData:IsPreLevelPass(config_b.LevelId)
|
||||
if bUnlock_a and not bUnlock_b then
|
||||
return true
|
||||
elseif bUnlock_b and not bUnlock_a then
|
||||
return false
|
||||
else
|
||||
return a < b
|
||||
end
|
||||
end
|
||||
table.sort(self.tbCharacterIds, sortFunction)
|
||||
table.sort(self.tbItemIds, sortFunction)
|
||||
self._mapNode.list_content.gameObject:SetActive(false)
|
||||
local charIndex, charFirstaGo = self:CreateChar()
|
||||
local itemIndex, itemFirstaGo = self:CreateItem()
|
||||
self._mapNode.list_content.gameObject:SetActive(true)
|
||||
local wait = function()
|
||||
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
||||
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
||||
CS.UnityEngine.UI.LayoutRebuilder.ForceRebuildLayoutImmediate(self._mapNode.char_content:GetComponent("RectTransform"))
|
||||
CS.UnityEngine.UI.LayoutRebuilder.ForceRebuildLayoutImmediate(self._mapNode.item_content:GetComponent("RectTransform"))
|
||||
CS.UnityEngine.UI.LayoutRebuilder.ForceRebuildLayoutImmediate(self._mapNode.list_content)
|
||||
end
|
||||
cs_coroutine.start(wait)
|
||||
if charFirstaGo ~= nil then
|
||||
EventManager.Hit("TowerDefenseGuideCellOnSelected", self.tbCharacterIds[charIndex], SelectType.Char, charFirstaGo)
|
||||
elseif itemFirstaGo ~= nil then
|
||||
EventManager.Hit("TowerDefenseGuideCellOnSelected", self.tbItemIds[itemIndex], SelectType.Item, itemFirstaGo)
|
||||
end
|
||||
end
|
||||
function TowerDefenseGuideCtrl:CreateChar()
|
||||
delChildren(self._mapNode.char_content.transform)
|
||||
local firstGo
|
||||
local firstIndex = 0
|
||||
for index, guideId in ipairs(self.tbCharacterIds) do
|
||||
local guide_config = ConfigTable.GetData("TowerDefenseGuide", guideId)
|
||||
local charId = guide_config.ObjectId
|
||||
local config = ConfigTable.GetData("TowerDefenseCharacter", charId)
|
||||
if config ~= nil then
|
||||
local go = instantiate(self._mapNode.temp_grid_char, self._mapNode.char_content.transform)
|
||||
go.name = charId
|
||||
local btn = go.transform:Find("btn_grid"):GetComponent("UIButton")
|
||||
local icon = go.transform:Find("btn_grid/AnimRoot/img_icon/icon_char"):GetComponent("Image")
|
||||
local lock = go.transform:Find("btn_grid/AnimRoot/img_icon/bg_Lock")
|
||||
local txt_name = go.transform:Find("btn_grid/AnimRoot/img_icon/txt_name"):GetComponent("TMP_Text")
|
||||
local bUnLock = true
|
||||
if guide_config ~= nil then
|
||||
bUnLock = self.TowerDefenseData:IsLevelUnlock(guide_config.LevelId) and self.TowerDefenseData:IsPreLevelPass(guide_config.LevelId)
|
||||
end
|
||||
if not bUnLock then
|
||||
lock.gameObject:SetActive(true)
|
||||
NovaAPI.SetTMPText(txt_name, ConfigTable.GetUIText("TowerDef_Lock"))
|
||||
btn.onClick:AddListener(function()
|
||||
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("TowerDef_LockTip"))
|
||||
end)
|
||||
else
|
||||
local i = index
|
||||
lock.gameObject:SetActive(false)
|
||||
self:SetPngSprite(icon, config.Icon .. AllEnum.CharHeadIconSurfix.QM)
|
||||
NovaAPI.SetTMPText(txt_name, config.Name)
|
||||
btn.onClick:AddListener(function()
|
||||
EventManager.Hit("TowerDefenseGuideCellOnSelected", self.tbCharacterIds[i], SelectType.Char, go)
|
||||
end)
|
||||
end
|
||||
go:SetActive(true)
|
||||
if firstGo == nil then
|
||||
firstGo = go
|
||||
firstIndex = index
|
||||
end
|
||||
end
|
||||
end
|
||||
return firstIndex, firstGo
|
||||
end
|
||||
function TowerDefenseGuideCtrl:CreateItem()
|
||||
delChildren(self._mapNode.item_content.transform)
|
||||
local firstGo
|
||||
local firstIndex = 0
|
||||
for index, guideId in ipairs(self.tbItemIds) do
|
||||
local guide_config = ConfigTable.GetData("TowerDefenseGuide", guideId)
|
||||
local itemId = guide_config.ObjectId
|
||||
local config = ConfigTable.GetData("TowerDefenseItem", itemId)
|
||||
if config ~= nil then
|
||||
local go = instantiate(self._mapNode.temp_grid_item, self._mapNode.item_content.transform)
|
||||
go.name = itemId
|
||||
local btn = go.transform:Find("btn_grid"):GetComponent("UIButton")
|
||||
local icon = go.transform:Find("btn_grid/AnimRoot/img_icon"):GetComponent("Image")
|
||||
local lock = go.transform:Find("btn_grid/AnimRoot/bg_Lock")
|
||||
local txt_lock = go.transform:Find("btn_grid/AnimRoot/txt_lock"):GetComponent("TMP_Text")
|
||||
local bUnLock = true
|
||||
if guide_config ~= nil then
|
||||
bUnLock = self.TowerDefenseData:IsLevelUnlock(guide_config.LevelId) and self.TowerDefenseData:IsPreLevelPass(guide_config.LevelId)
|
||||
end
|
||||
if not bUnLock then
|
||||
lock.gameObject:SetActive(true)
|
||||
txt_lock.gameObject:SetActive(true)
|
||||
NovaAPI.SetTMPText(txt_lock, ConfigTable.GetUIText("TowerDef_Lock"))
|
||||
btn.onClick:AddListener(function()
|
||||
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("TowerDef_LockTip"))
|
||||
end)
|
||||
else
|
||||
local i = index
|
||||
lock.gameObject:SetActive(false)
|
||||
txt_lock.gameObject:SetActive(false)
|
||||
self:SetPngSprite(icon, config.CardIcon)
|
||||
btn.onClick:AddListener(function()
|
||||
EventManager.Hit("TowerDefenseGuideCellOnSelected", self.tbItemIds[i], SelectType.Item, go)
|
||||
end)
|
||||
end
|
||||
go:SetActive(true)
|
||||
if firstGo == nil then
|
||||
firstGo = go
|
||||
firstIndex = index
|
||||
end
|
||||
end
|
||||
end
|
||||
return firstIndex, firstGo
|
||||
end
|
||||
function TowerDefenseGuideCtrl:UpdateDetail()
|
||||
self._mapNode.char_detail:SetActive(false)
|
||||
self._mapNode.item_detail:SetActive(false)
|
||||
if self.SelectedType == SelectType.Char then
|
||||
local charId = ConfigTable.GetData("TowerDefenseGuide", self.nSelectedId).ObjectId
|
||||
local config = ConfigTable.GetData("TowerDefenseCharacter", charId)
|
||||
if config == nil then
|
||||
return
|
||||
end
|
||||
local skill1 = self._mapNode.skill[1]
|
||||
local icon1 = skill1.transform:Find("AnimRoot/imgIcon"):GetComponent("Image")
|
||||
local skill1_bg1 = skill1.transform:Find("AnimRoot/imgBg1"):GetComponent("Image")
|
||||
local skill1_bg2 = skill1.transform:Find("AnimRoot/imgBg2"):GetComponent("Image")
|
||||
local skill1_type = skill1.transform:Find("AnimRoot/imgType")
|
||||
local btn1 = skill1:GetComponent("UIButton")
|
||||
btn1.onClick:RemoveAllListeners()
|
||||
local skillConfig = ConfigTable.GetData("Skill", config.SkillId)
|
||||
if skillConfig ~= nil then
|
||||
if skillConfig.Icon ~= "" then
|
||||
self:SetPngSprite(icon1, skillConfig.Icon)
|
||||
end
|
||||
self:SetAtlasSprite(skill1_type:GetComponent("Image"), "05_language", "zs_character_skill_text_" .. skillConfig.Type)
|
||||
btn1.onClick:AddListener(function()
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.TowerDefenseTipsPanel, btn1.gameObject, skillConfig.Title, skillConfig.Desc)
|
||||
end)
|
||||
end
|
||||
local skill2 = self._mapNode.skill[2]
|
||||
local icon2 = skill2.transform:Find("AnimRoot/imgIcon"):GetComponent("Image")
|
||||
local skill2_bg1 = skill2.transform:Find("AnimRoot/imgBg1"):GetComponent("Image")
|
||||
local skill2_bg2 = skill2.transform:Find("AnimRoot/imgBg2"):GetComponent("Image")
|
||||
local skill2_type = skill2.transform:Find("AnimRoot/imgType")
|
||||
local atkSkillConfig = ConfigTable.GetData("Skill", config.NormalAtkId)
|
||||
local btn2 = skill2:GetComponent("UIButton")
|
||||
btn2.onClick:RemoveAllListeners()
|
||||
if atkSkillConfig ~= nil then
|
||||
if atkSkillConfig.Icon ~= "" then
|
||||
self:SetPngSprite(icon2, atkSkillConfig.Icon)
|
||||
end
|
||||
self:SetAtlasSprite(skill2_type:GetComponent("Image"), "05_language", "zs_character_skill_text_" .. atkSkillConfig.Type)
|
||||
btn2.onClick:AddListener(function()
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.TowerDefenseTipsPanel, btn2.gameObject, atkSkillConfig.Title, atkSkillConfig.Desc)
|
||||
end)
|
||||
end
|
||||
local EETConfig = ConfigTable.GetData("MonsterValueTempleteAdjust", config.Templete)
|
||||
if EETConfig ~= nil then
|
||||
local sName = AllEnum.ElementIconType.SkillEx .. EETConfig.EET
|
||||
self:SetAtlasSprite(skill1_bg1, "12_rare", sName)
|
||||
self:SetAtlasSprite(skill2_bg1, "12_rare", sName)
|
||||
local _, color = ColorUtility.TryParseHtmlString(AllEnum.SkillElementBgColor[EETConfig.EET])
|
||||
NovaAPI.SetImageColor(skill1_bg2, Color(color.r, color.g, color.b, 0.2980392156862745))
|
||||
NovaAPI.SetImageColor(skill2_bg2, Color(color.r, color.g, color.b, 0.2980392156862745))
|
||||
end
|
||||
local tbPotential = {}
|
||||
for _, value in ipairs(config.NewPotential6) do
|
||||
table.insert(tbPotential, value)
|
||||
end
|
||||
for _, value in ipairs(config.NewPotential4) do
|
||||
table.insert(tbPotential, value)
|
||||
end
|
||||
for _, potentialItem in pairs(self._mapNode.PotentialItem) do
|
||||
potentialItem:SetActive(false)
|
||||
end
|
||||
for index, value in ipairs(tbPotential) do
|
||||
local potential_config = ConfigTable.GetData("TowerDefensePotential", value)
|
||||
if potential_config ~= nil then
|
||||
local go = self._mapNode.PotentialItem[index]
|
||||
local normal = go.transform:Find("btnItem/AnimRoot/goNormal")
|
||||
local special = go.transform:Find("btnItem/AnimRoot/goSpecial")
|
||||
normal.gameObject:SetActive(false)
|
||||
special.gameObject:SetActive(false)
|
||||
if potential_config.Rarity == GameEnum.itemRarity.SSR then
|
||||
local icon = special.transform:Find("imgSpIcon"):GetComponent("Image")
|
||||
self:SetPngSprite(icon, potential_config.Icon .. AllEnum.PotentialIconSurfix.A)
|
||||
special.gameObject:SetActive(true)
|
||||
elseif potential_config.Rarity == GameEnum.itemRarity.SR then
|
||||
local icon = normal.transform:Find("goInfo/imgIcon1"):GetComponent("Image")
|
||||
self:SetPngSprite(icon, potential_config.Icon .. AllEnum.PotentialIconSurfix.A)
|
||||
normal.gameObject:SetActive(true)
|
||||
end
|
||||
local btn = go.transform:Find("btnItem"):GetComponent("UIButton")
|
||||
btn.onClick:RemoveAllListeners()
|
||||
btn.onClick:AddListener(function()
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.TowerDefenseTipsPanel, go.gameObject, potential_config.Name, potential_config.PotentialDes)
|
||||
end)
|
||||
go:SetActive(true)
|
||||
end
|
||||
end
|
||||
self._mapNode.char_detail:SetActive(true)
|
||||
elseif self.SelectedType == SelectType.Item then
|
||||
local itemId = ConfigTable.GetData("TowerDefenseGuide", self.nSelectedId).ObjectId
|
||||
local config = ConfigTable.GetData("TowerDefenseItem", itemId)
|
||||
if config == nil then
|
||||
return
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_itemName, config.Name)
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_itemCD, ConfigTable.GetUIText("TowerDef_CD") .. config.Cd .. "s")
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_des, config.Des)
|
||||
self._mapNode.item_detail:SetActive(true)
|
||||
end
|
||||
end
|
||||
function TowerDefenseGuideCtrl:OnBtnClick_Close()
|
||||
EventManager.Hit(EventId.TemporaryBlockInput, 0.2)
|
||||
self.animator:Play("t_window_04_t_out")
|
||||
self:AddTimer(1, 0.2, function()
|
||||
self.selectedGridGo = nil
|
||||
EventManager.Hit("CloseTowerDefenseGuidePanel")
|
||||
end, true, true, true)
|
||||
end
|
||||
function TowerDefenseGuideCtrl:OnEvent_CellOnSelected(nSelectedId, nType, go)
|
||||
if self.selectedGridGo ~= nil then
|
||||
local selected = self.selectedGridGo.transform:Find("btn_grid/AnimRoot/go_select")
|
||||
selected.gameObject:SetActive(false)
|
||||
end
|
||||
self.selectedGridGo = go
|
||||
local selected = self.selectedGridGo.transform:Find("btn_grid/AnimRoot/go_select")
|
||||
selected.gameObject:SetActive(true)
|
||||
self.nSelectedId = nSelectedId
|
||||
self.SelectedType = nType
|
||||
self:UpdateDetail()
|
||||
end
|
||||
return TowerDefenseGuideCtrl
|
||||
@@ -0,0 +1,109 @@
|
||||
local TowerDefenseLevelCellCtrl = class("TowerDefenseLevelCellCtrl", BaseCtrl)
|
||||
TowerDefenseLevelCellCtrl._mapNodeConfig = {
|
||||
txt_Name = {sComponentName = "TMP_Text"},
|
||||
img_bg = {sComponentName = "Image"},
|
||||
goStar = {},
|
||||
Star = {nCount = 3},
|
||||
reddotNew = {},
|
||||
goTips = {},
|
||||
txt_Time = {sComponentName = "TMP_Text"},
|
||||
btn_Level = {
|
||||
sNodeName = "btnGrid",
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_SelectLevel"
|
||||
},
|
||||
img_lock = {sComponentName = "Image"}
|
||||
}
|
||||
TowerDefenseLevelCellCtrl._mapEventConfig = {
|
||||
TowerDefenseLevelUpdateTime = "TowerDefenseLevelUpdateTime"
|
||||
}
|
||||
TowerDefenseLevelCellCtrl._mapRedDotConfig = {}
|
||||
function TowerDefenseLevelCellCtrl:SetData(nActId, levelData)
|
||||
if self.levelData ~= nil then
|
||||
RedDotManager.UnRegisterNode(RedDotDefine.Activity_TowerDefense_Level, {
|
||||
self.levelConfig.LevelPage,
|
||||
self.levelData.nLevelId
|
||||
}, self._mapNode.reddotNew)
|
||||
end
|
||||
self.actData = PlayerData.Activity:GetActivityDataById(nActId)
|
||||
self.levelData = levelData
|
||||
self.levelConfig = ConfigTable.GetData("TowerDefenseLevel", self.levelData.nLevelId)
|
||||
if self.levelConfig.LevelBg ~= "" then
|
||||
self:SetPngSprite(self._mapNode.img_bg, self.levelConfig.LevelBg)
|
||||
self:SetPngSprite(self._mapNode.img_lock, self.levelConfig.LevelBg)
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_Name, self.levelConfig.LevelName)
|
||||
self:TowerDefenseLevelUpdateTips()
|
||||
local bIsUnlock = self.actData:IsLevelUnlock(self.levelData.nLevelId)
|
||||
self._mapNode.goStar:SetActive(bIsUnlock)
|
||||
for i = 1, #self._mapNode.Star do
|
||||
if i <= self.levelData.nStar then
|
||||
self._mapNode.Star[i]:SetActive(true)
|
||||
else
|
||||
self._mapNode.Star[i]:SetActive(false)
|
||||
end
|
||||
end
|
||||
self._mapNode.img_lock.gameObject:SetActive(not bIsUnlock)
|
||||
RedDotManager.RegisterNode(RedDotDefine.Activity_TowerDefense_Level, {
|
||||
self.levelConfig.LevelPage,
|
||||
self.levelData.nLevelId
|
||||
}, self._mapNode.reddotNew)
|
||||
end
|
||||
function TowerDefenseLevelCellCtrl:TowerDefenseLevelUpdateTips()
|
||||
if self.levelData == nil then
|
||||
return
|
||||
end
|
||||
local curTime = CS.ClientManager.Instance.serverTimeStamp
|
||||
if curTime >= self.actData:GetLevelStartTime(self.levelData.nLevelId) then
|
||||
self._mapNode.goTips:SetActive(false)
|
||||
else
|
||||
self._mapNode.goTips:SetActive(true)
|
||||
local remainTime = self.actData:GetLevelStartTime(self.levelData.nLevelId) - curTime
|
||||
local sTime = self:GetTimeText(remainTime)
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_Time, orderedFormat(ConfigTable.GetUIText("TowerDef_TimeTips") or "", sTime))
|
||||
CS.UnityEngine.UI.LayoutRebuilder.ForceRebuildLayoutImmediate(self._mapNode.goTips:GetComponent("RectTransform"))
|
||||
end
|
||||
end
|
||||
function TowerDefenseLevelCellCtrl:GetTimeText(remainTime)
|
||||
local sTimeStr = ""
|
||||
if remainTime <= 60 then
|
||||
local sec = math.floor(remainTime)
|
||||
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Sec") or "", sec)
|
||||
elseif 60 < remainTime and remainTime <= 3600 then
|
||||
local min = math.floor(remainTime / 60)
|
||||
local sec = math.floor(remainTime - min * 60)
|
||||
if sec == 0 then
|
||||
min = min - 1
|
||||
sec = 60
|
||||
end
|
||||
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Min") or "", min, sec)
|
||||
elseif 3600 < remainTime and remainTime <= 86400 then
|
||||
local hour = math.floor(remainTime / 3600)
|
||||
local min = math.floor((remainTime - hour * 3600) / 60)
|
||||
if min == 0 then
|
||||
hour = hour - 1
|
||||
min = 60
|
||||
end
|
||||
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Hour") or "", hour, min)
|
||||
elseif 86400 < remainTime then
|
||||
local day = math.floor(remainTime / 86400)
|
||||
local hour = math.floor((remainTime - day * 86400) / 3600)
|
||||
if hour == 0 then
|
||||
day = day - 1
|
||||
hour = 24
|
||||
end
|
||||
sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Day") or "", day, hour)
|
||||
end
|
||||
return sTimeStr
|
||||
end
|
||||
function TowerDefenseLevelCellCtrl:OnBtnClick_SelectLevel()
|
||||
local bIsUnlock = self.actData:IsLevelUnlock(self.levelData.nLevelId)
|
||||
if not bIsUnlock then
|
||||
return
|
||||
end
|
||||
if not self.actData:IsPreLevelPass(self.levelData.nLevelId) then
|
||||
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("TowerDef_NeedPassPreLevel"))
|
||||
end
|
||||
EventManager.Hit("TowerDefenseLevelCell_OnSelected", self.levelData.nLevelId)
|
||||
end
|
||||
return TowerDefenseLevelCellCtrl
|
||||
@@ -0,0 +1,441 @@
|
||||
local TowerDefenseLevelDetailCtrl = class("TowerDefenseLevelDetailCtrl", BaseCtrl)
|
||||
TowerDefenseLevelDetailCtrl._mapNodeConfig = {
|
||||
TopBar = {
|
||||
sNodeName = "TopBarPanel",
|
||||
sCtrlName = "Game.UI.TopBarEx.TopBarCtrl"
|
||||
},
|
||||
TopBarAnimator = {sNodeName = "goBack", sComponentName = "Animator"},
|
||||
txt_monsterInfo = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "TowerDef_MonsterInfo"
|
||||
},
|
||||
txt_title_target = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "TowerDef_Title_Target"
|
||||
},
|
||||
txt_title_reward = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "TowerDef_Title_RewardInfo"
|
||||
},
|
||||
go_Monster = {
|
||||
sCtrlName = "Game.UI.TemplateEx.TemplateHeadCtrl",
|
||||
nCount = 5
|
||||
},
|
||||
go_QuestInfo = {nCount = 3},
|
||||
goEnemyInfo = {
|
||||
sCtrlName = "Game.UI.TowerDefense.TowerDefenseMonsterInfoCtrl"
|
||||
},
|
||||
btn_monsterInfo = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_MonsterInfo"
|
||||
},
|
||||
btn_rewardInfo = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_RewardInfo"
|
||||
},
|
||||
item = {
|
||||
sCtrlName = "Game.UI.TemplateEx.TemplateItemCtrl",
|
||||
nCount = 4
|
||||
},
|
||||
ItemBtn = {
|
||||
sComponentName = "UIButton",
|
||||
nCount = 4,
|
||||
callback = "OnBtnClick_Reward"
|
||||
},
|
||||
txt_item = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "TowerDef_Title_Item"
|
||||
},
|
||||
txt_char = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "TowerDef_Title_Char"
|
||||
},
|
||||
txt_charCount = {sComponentName = "TMP_Text"},
|
||||
txt_go1 = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "TowerDef_Go"
|
||||
},
|
||||
btn_go1 = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Go"
|
||||
},
|
||||
txt_team = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "TowerDef_BuildTeam"
|
||||
},
|
||||
btn_Team = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_EditorTeam"
|
||||
},
|
||||
team_character = {nCount = 6},
|
||||
special_item = {},
|
||||
animator = {
|
||||
sNodeName = "----SafeAreaRoot---",
|
||||
sComponentName = "Animator"
|
||||
},
|
||||
teamCtrl = {
|
||||
sNodeName = "TowerDefenseTeamPanel",
|
||||
sCtrlName = "Game.UI.TowerDefense.TowerDefenseTeamCtrl"
|
||||
}
|
||||
}
|
||||
TowerDefenseLevelDetailCtrl._mapEventConfig = {
|
||||
TowerDefense_CharUpdate = "OnEvent_UpdateCharData",
|
||||
TowerDefense_ItemUpdate = "OnEvent_UpdateItemData",
|
||||
TowerDefenseTeamPanelConfirm = "OnEvent_Go",
|
||||
TowerDefenseTeamPanelClose = "OnEvent_UpdateTeamEditorPanelClose"
|
||||
}
|
||||
TowerDefenseLevelDetailCtrl._mapRedDotConfig = {}
|
||||
function TowerDefenseLevelDetailCtrl:Awake()
|
||||
local param = self:GetPanelParam()
|
||||
if type(param) == "table" then
|
||||
self.nActId = param[1]
|
||||
self.nLevelId = param[2]
|
||||
end
|
||||
self.bInEditorPanel = false
|
||||
self.TowerDefenseData = PlayerData.Activity:GetActivityDataById(self.nActId)
|
||||
self._mapNode.teamCtrl.gameObject:SetActive(false)
|
||||
self:UpdateData()
|
||||
end
|
||||
function TowerDefenseLevelDetailCtrl:OnEnable()
|
||||
self:UpdateQuestInfo()
|
||||
self:UpdateItem()
|
||||
end
|
||||
function TowerDefenseLevelDetailCtrl:UpdateData()
|
||||
self.levelConfig = ConfigTable.GetData("TowerDefenseLevel", self.nLevelId)
|
||||
self:UpdateMonsterInfo()
|
||||
self:UpdateQuestInfo()
|
||||
self:UpdateItem()
|
||||
self:InitTeamData()
|
||||
end
|
||||
function TowerDefenseLevelDetailCtrl:UpdateQuestInfo()
|
||||
local levelData = self.TowerDefenseData:GetLevelData(self.nLevelId)
|
||||
local nStar = levelData.nStar
|
||||
for i = 1, 3 do
|
||||
local go_Info = self._mapNode.go_QuestInfo[i].transform:Find("txt_target")
|
||||
NovaAPI.SetTMPText(go_Info:GetComponent("TMP_Text"), self.levelConfig["Des" .. i])
|
||||
local go_Star = self._mapNode.go_QuestInfo[i].transform:Find("Star")
|
||||
go_Star.gameObject:SetActive(i <= nStar)
|
||||
end
|
||||
end
|
||||
function TowerDefenseLevelDetailCtrl:UpdateMonsterInfo()
|
||||
for i = 1, 5 do
|
||||
self._mapNode.go_Monster[i].gameObject:SetActive(false)
|
||||
end
|
||||
local groupId = self.levelConfig.MonsterPreview
|
||||
local tbMonsterGroup = ConfigTable.GetData("PreviewMonsterGroup", groupId)
|
||||
if tbMonsterGroup == nil then
|
||||
return
|
||||
end
|
||||
local tbMonsterConfig = tbMonsterGroup.MonsterIds
|
||||
local comp = function(a, b)
|
||||
local monsterA = ConfigTable.GetData("Monster", a)
|
||||
local monsterB = ConfigTable.GetData("Monster", b)
|
||||
if monsterA == nil or monsterB == nil then
|
||||
return
|
||||
end
|
||||
if monsterA.EpicLv ~= monsterB.EpicLv then
|
||||
return monsterA.EpicLv < monsterB.EpicLv
|
||||
else
|
||||
return a < b
|
||||
end
|
||||
end
|
||||
table.sort(tbMonsterConfig, comp)
|
||||
for i = 1, 5 do
|
||||
local go = self._mapNode.go_Monster[i]
|
||||
if i > #tbMonsterConfig then
|
||||
go.gameObject:SetActive(false)
|
||||
else
|
||||
go:SetMonsterHead(tbMonsterConfig[i])
|
||||
end
|
||||
end
|
||||
end
|
||||
function TowerDefenseLevelDetailCtrl:UpdateItem()
|
||||
self.tbReward = {}
|
||||
if self.levelConfig.Item1 ~= 0 then
|
||||
table.insert(self.tbReward, {
|
||||
nId = self.levelConfig.Item1,
|
||||
nCount = self.levelConfig.Qty1
|
||||
})
|
||||
end
|
||||
if self.levelConfig.Item2 ~= 0 then
|
||||
table.insert(self.tbReward, {
|
||||
nId = self.levelConfig.Item2,
|
||||
nCount = self.levelConfig.Qty2
|
||||
})
|
||||
end
|
||||
for i = 1, 4 do
|
||||
if i > #self.tbReward then
|
||||
self._mapNode.item[i].gameObject:SetActive(false)
|
||||
else
|
||||
local levelData = self.TowerDefenseData:GetLevelData(self.nLevelId)
|
||||
self._mapNode.item[i]:SetItem(self.tbReward[i].nId, nil, self.tbReward[i].nCount, nil, 0 < levelData.nStar, true)
|
||||
self._mapNode.item[i].gameObject:SetActive(true)
|
||||
end
|
||||
end
|
||||
end
|
||||
function TowerDefenseLevelDetailCtrl:InitTeamData()
|
||||
self.tbCharGuideId = {}
|
||||
self.nItemGuideId = 0
|
||||
local tempTeamData = self.TowerDefenseData:GetLevelTempTeamData(self.nLevelId)
|
||||
if tempTeamData ~= nil then
|
||||
if tempTeamData.tbCharGuideId ~= nil then
|
||||
self.tbCharGuideId = tempTeamData.tbCharGuideId
|
||||
end
|
||||
self.nItemGuideId = tempTeamData.itemGuideId
|
||||
end
|
||||
self:UpdateCharacter()
|
||||
self:UpdateSpecialItem_V1()
|
||||
local floorConfig = ConfigTable.GetData("TowerDefenseFloor", self.levelConfig.FloorId)
|
||||
if floorConfig == nil then
|
||||
return
|
||||
end
|
||||
self._mapNode.btn_Team.gameObject:SetActive(floorConfig.MemberNum ~= 0)
|
||||
end
|
||||
function TowerDefenseLevelDetailCtrl:UpdateCharacter()
|
||||
local floorConfig = ConfigTable.GetData("TowerDefenseFloor", self.levelConfig.FloorId)
|
||||
if floorConfig == nil then
|
||||
return
|
||||
end
|
||||
local teamCharacterCount = floorConfig.MemberNum
|
||||
if teamCharacterCount == 0 then
|
||||
self.tbCharGuideId = {}
|
||||
local foreach = function(data)
|
||||
if data.ActivityId == self.nActId and data.GuideType == GameEnum.TowerDefGuideType.Character and table.indexof(floorConfig.TeamGroup, data.ObjectId) > 0 then
|
||||
table.insert(self.tbCharGuideId, data.Id)
|
||||
end
|
||||
end
|
||||
ForEachTableLine(DataTable.TowerDefenseGuide, foreach)
|
||||
end
|
||||
for i = 1, 6 do
|
||||
local go_add = self._mapNode.team_character[i].transform:Find("img_add")
|
||||
local btn_add = self._mapNode.team_character[i]:GetComponent("UIButton")
|
||||
local go_none = self._mapNode.team_character[i].transform:Find("img_none")
|
||||
local go_icon = self._mapNode.team_character[i].transform:Find("img_icon")
|
||||
local txt_name = self._mapNode.team_character[i].transform:Find("img_icon/txt_name"):GetComponent("TMP_Text")
|
||||
go_add.gameObject:SetActive(false)
|
||||
go_none.gameObject:SetActive(false)
|
||||
go_icon.gameObject:SetActive(false)
|
||||
if teamCharacterCount == 0 then
|
||||
if i > #self.tbCharGuideId then
|
||||
go_none.gameObject:SetActive(true)
|
||||
else
|
||||
local guideConfig = ConfigTable.GetData("TowerDefenseGuide", self.tbCharGuideId[i])
|
||||
local characterConfig = ConfigTable.GetData("TowerDefenseCharacter", guideConfig.ObjectId)
|
||||
if characterConfig ~= nil then
|
||||
local icon_char = go_icon.transform:Find("icon_char")
|
||||
self:SetPngSprite(icon_char:GetComponent("Image"), characterConfig.Icon .. AllEnum.CharHeadIconSurfix.QM)
|
||||
NovaAPI.SetTMPText(txt_name, characterConfig.Name)
|
||||
end
|
||||
go_icon.gameObject:SetActive(true)
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_charCount, string.format("<color=#ffde6a>%d</color>/%d", #self.tbCharGuideId, #self.tbCharGuideId))
|
||||
else
|
||||
if teamCharacterCount < i then
|
||||
go_none.gameObject:SetActive(true)
|
||||
elseif i > #self.tbCharGuideId then
|
||||
go_add.gameObject:SetActive(true)
|
||||
btn_add.onClick:RemoveAllListeners()
|
||||
btn_add.onClick:AddListener(function()
|
||||
self:OnBtnClick_EditorTeam()
|
||||
end)
|
||||
else
|
||||
local guideConfig = ConfigTable.GetData("TowerDefenseGuide", self.tbCharGuideId[i])
|
||||
local characterConfig = ConfigTable.GetData("TowerDefenseCharacter", guideConfig.ObjectId)
|
||||
if characterConfig ~= nil then
|
||||
local icon_char = go_icon.transform:Find("icon_char")
|
||||
self:SetPngSprite(icon_char:GetComponent("Image"), characterConfig.Icon .. AllEnum.CharHeadIconSurfix.QM)
|
||||
NovaAPI.SetTMPText(txt_name, characterConfig.Name)
|
||||
end
|
||||
go_icon.gameObject:SetActive(true)
|
||||
btn_add.onClick:RemoveAllListeners()
|
||||
btn_add.onClick:AddListener(function()
|
||||
self:OnBtnClick_EditorTeam()
|
||||
end)
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_charCount, string.format("<color=#ffde6a>%d</color>/%d", #self.tbCharGuideId, teamCharacterCount))
|
||||
end
|
||||
end
|
||||
end
|
||||
function TowerDefenseLevelDetailCtrl:UpdateSpecialItem_V1()
|
||||
local floorConfig = ConfigTable.GetData("TowerDefenseFloor", self.levelConfig.FloorId)
|
||||
if floorConfig == nil then
|
||||
return
|
||||
end
|
||||
local go_add = self._mapNode.special_item.transform:Find("img_add")
|
||||
local go_icon = self._mapNode.special_item.transform:Find("img_icon")
|
||||
local go_none = self._mapNode.special_item.transform:Find("img_none")
|
||||
go_add.gameObject:SetActive(false)
|
||||
go_none.gameObject:SetActive(false)
|
||||
go_icon.gameObject:SetActive(false)
|
||||
if floorConfig.ItemID == 0 then
|
||||
go_none.gameObject:SetActive(true)
|
||||
else
|
||||
local foreach = function(data)
|
||||
if data.ActivityId == self.nActId and data.GuideType == GameEnum.TowerDefGuideType.Item and floorConfig.ItemID == data.ObjectId then
|
||||
self.nItemGuideId = data.Id
|
||||
end
|
||||
end
|
||||
ForEachTableLine(DataTable.TowerDefenseGuide, foreach)
|
||||
local guideConfig = ConfigTable.GetData("TowerDefenseGuide", self.nItemGuideId)
|
||||
local itemConfig = ConfigTable.GetData("TowerDefenseItem", guideConfig.ObjectId)
|
||||
if itemConfig ~= nil then
|
||||
self:SetPngSprite(go_icon:GetComponent("Image"), itemConfig.CardIcon)
|
||||
end
|
||||
go_icon.gameObject:SetActive(true)
|
||||
end
|
||||
end
|
||||
function TowerDefenseLevelDetailCtrl:UpdateSpecialItem()
|
||||
local floorConfig = ConfigTable.GetData("TowerDefenseFloor", self.levelConfig.FloorId)
|
||||
if floorConfig == nil then
|
||||
return
|
||||
end
|
||||
local teamCharacterCount = floorConfig.MemberNum
|
||||
if teamCharacterCount == 0 then
|
||||
self.nItemGuideId = 0
|
||||
local foreach = function(data)
|
||||
if data.ActivityId == self.nActId and data.GuideType == GameEnum.TowerDefGuideType.Item and floorConfig.ItemID == data.ObjectId then
|
||||
self.nItemGuideId = data.Id
|
||||
end
|
||||
end
|
||||
ForEachTableLine(DataTable.TowerDefenseGuide, foreach)
|
||||
end
|
||||
local go_add = self._mapNode.special_item.transform:Find("img_add")
|
||||
local go_icon = self._mapNode.special_item.transform:Find("img_icon")
|
||||
local go_none = self._mapNode.special_item.transform:Find("img_none")
|
||||
go_add.gameObject:SetActive(false)
|
||||
go_none.gameObject:SetActive(false)
|
||||
go_icon.gameObject:SetActive(false)
|
||||
if teamCharacterCount == 0 then
|
||||
if self.nItemGuideId == nil or self.nItemGuideId == 0 then
|
||||
go_none.gameObject:SetActive(true)
|
||||
else
|
||||
local guideConfig = ConfigTable.GetData("TowerDefenseGuide", self.nItemGuideId)
|
||||
local itemConfig = ConfigTable.GetData("TowerDefenseItem", guideConfig.ObjectId)
|
||||
if itemConfig ~= nil then
|
||||
self:SetPngSprite(go_icon:GetComponent("Image"), itemConfig.CardIcon)
|
||||
end
|
||||
go_icon.gameObject:SetActive(true)
|
||||
end
|
||||
elseif self.nItemGuideId == nil or self.nItemGuideId == 0 then
|
||||
go_add.gameObject:SetActive(true)
|
||||
else
|
||||
local guideConfig = ConfigTable.GetData("TowerDefenseGuide", self.nItemGuideId)
|
||||
local itemConfig = ConfigTable.GetData("TowerDefenseItem", guideConfig.ObjectId)
|
||||
if itemConfig ~= nil then
|
||||
self:SetPngSprite(go_icon:GetComponent("Image"), itemConfig.CardIcon)
|
||||
end
|
||||
go_icon.gameObject:SetActive(true)
|
||||
end
|
||||
end
|
||||
function TowerDefenseLevelDetailCtrl:GoToPlay(callback)
|
||||
local floorConfig = ConfigTable.GetData("TowerDefenseFloor", self.levelConfig.FloorId)
|
||||
if floorConfig == nil then
|
||||
return
|
||||
end
|
||||
if floorConfig.MemberNum ~= 0 and #self.tbCharGuideId < floorConfig.MemberNum then
|
||||
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("TowerDef_Team_Tips"))
|
||||
return
|
||||
end
|
||||
local tbChar = {}
|
||||
local itemId = 0
|
||||
if self.nItemGuideId ~= 0 then
|
||||
local itemGuidConfig = ConfigTable.GetData("TowerDefenseGuide", self.nItemGuideId)
|
||||
if itemGuidConfig ~= nil then
|
||||
itemId = itemGuidConfig.ObjectId
|
||||
end
|
||||
end
|
||||
for index, id in ipairs(self.tbCharGuideId) do
|
||||
local charGuidConfig = ConfigTable.GetData("TowerDefenseGuide", id)
|
||||
if charGuidConfig ~= nil then
|
||||
table.insert(tbChar, charGuidConfig.ObjectId)
|
||||
end
|
||||
end
|
||||
local sItem = tostring(itemId)
|
||||
local sChar = ""
|
||||
for index, value in ipairs(tbChar) do
|
||||
sChar = sChar .. tostring(value)
|
||||
if index ~= #tbChar then
|
||||
sChar = sChar .. ","
|
||||
end
|
||||
end
|
||||
local param = {}
|
||||
table.insert(param, sItem)
|
||||
table.insert(param, sChar)
|
||||
local cb = function()
|
||||
if callback ~= nil then
|
||||
callback()
|
||||
end
|
||||
self.TowerDefenseData.TowerDefenseLevelData:InitData(self.nLevelId, clone(tbChar), clone(itemId), self.nActId)
|
||||
CS.AdventureModuleHelper.EnterTowerDefenseLevel(self.levelConfig.FloorId, param)
|
||||
NovaAPI.EnterModule("AdventureModuleScene", true, 27)
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.TowerDefenseHUD)
|
||||
end
|
||||
self.TowerDefenseData:RequestEnterLevel(self.nLevelId, tbChar, itemId, cb)
|
||||
self.TowerDefenseData:SetLevelTeamData(self.nLevelId, self.tbCharGuideId, self.nItemGuideId)
|
||||
end
|
||||
function TowerDefenseLevelDetailCtrl:EnterTeamEditorPanel()
|
||||
self._mapNode.teamCtrl.gameObject:SetActive(true)
|
||||
self.bInEditorPanel = true
|
||||
end
|
||||
function TowerDefenseLevelDetailCtrl:CloseTeamEditorPanel()
|
||||
self._mapNode.teamCtrl.gameObject:SetActive(false)
|
||||
self.bInEditorPanel = false
|
||||
end
|
||||
function TowerDefenseLevelDetailCtrl:OnBtnClick_MonsterInfo()
|
||||
EventManager.Hit("OpenTowerDefenseMonsterInfo", self.levelConfig.Id)
|
||||
end
|
||||
function TowerDefenseLevelDetailCtrl:OnBtnClick_RewardInfo()
|
||||
end
|
||||
function TowerDefenseLevelDetailCtrl:OnBtnClick_Reward(btn, index)
|
||||
local itemData = self.tbReward[index]
|
||||
if itemData ~= nil then
|
||||
UTILS.ClickItemGridWithTips(itemData.nId, btn.transform, false, true, false)
|
||||
end
|
||||
end
|
||||
function TowerDefenseLevelDetailCtrl:OnBtnClick_Go()
|
||||
self:GoToPlay()
|
||||
end
|
||||
function TowerDefenseLevelDetailCtrl:OnBtnClick_EditorTeam()
|
||||
if self.bInEditorPanel then
|
||||
return
|
||||
end
|
||||
EventManager.Hit(EventId.TemporaryBlockInput, 0.8)
|
||||
self._mapNode.animator:Play("TowerDefenseLevelDetailPanel_switch_in")
|
||||
self:EnterTeamEditorPanel()
|
||||
self._mapNode.TopBar.gameObject:SetActive(false)
|
||||
self._mapNode.teamCtrl:SetData(self.nActId, self.levelConfig.Id, self.tbCharGuideId, self.nItemGuideId)
|
||||
end
|
||||
function TowerDefenseLevelDetailCtrl:OnBtnClick_Close()
|
||||
EventManager.Hit(EventId.ClosePanel, PanelId.TowerDefenseLevelDetailPanel)
|
||||
end
|
||||
function TowerDefenseLevelDetailCtrl:OnEvent_UpdateCharData(tbCharGuideId)
|
||||
self.tbCharGuideId = tbCharGuideId
|
||||
self:UpdateCharacter()
|
||||
end
|
||||
function TowerDefenseLevelDetailCtrl:OnEvent_UpdateItemData(nItemGuideId)
|
||||
self.nItemGuideId = nItemGuideId
|
||||
self:UpdateSpecialItem()
|
||||
end
|
||||
function TowerDefenseLevelDetailCtrl:OnEvent_UpdateTeamEditorPanelClose()
|
||||
EventManager.Hit(EventId.TemporaryBlockInput, 0.8)
|
||||
self._mapNode.animator:Play("TowerDefenseLevelDetailPanel_switch_out")
|
||||
self:AddTimer(1, 0.8, function()
|
||||
self:CloseTeamEditorPanel()
|
||||
end, true, true, true)
|
||||
self._mapNode.TopBar.gameObject:SetActive(true)
|
||||
end
|
||||
function TowerDefenseLevelDetailCtrl:OnEvent_Go()
|
||||
local cb = function()
|
||||
local floorConfig = ConfigTable.GetData("TowerDefenseFloor", self.levelConfig.FloorId)
|
||||
if floorConfig == nil then
|
||||
return
|
||||
end
|
||||
if floorConfig.MemberNum ~= 0 and #self.tbCharGuideId < floorConfig.MemberNum then
|
||||
return
|
||||
end
|
||||
self:CloseTeamEditorPanel()
|
||||
self._mapNode.TopBar.gameObject:SetActive(true)
|
||||
end
|
||||
self:GoToPlay(cb)
|
||||
end
|
||||
return TowerDefenseLevelDetailCtrl
|
||||
@@ -0,0 +1,22 @@
|
||||
local TowerDefenseLevelDetailPanel = class("TowerDefenseLevelDetailPanel", BasePanel)
|
||||
TowerDefenseLevelDetailPanel._bIsMainPanel = true
|
||||
TowerDefenseLevelDetailPanel._bAddToBackHistory = true
|
||||
TowerDefenseLevelDetailPanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "Play_TowerDefence/TowerDefenseLevelDetailPanel.prefab",
|
||||
sCtrlName = "Game.UI.TowerDefense.TowerDefenseLevelDetailCtrl"
|
||||
}
|
||||
}
|
||||
function TowerDefenseLevelDetailPanel:Awake()
|
||||
end
|
||||
function TowerDefenseLevelDetailPanel:OnEnable()
|
||||
end
|
||||
function TowerDefenseLevelDetailPanel:OnAfterEnter()
|
||||
end
|
||||
function TowerDefenseLevelDetailPanel:OnDisable()
|
||||
end
|
||||
function TowerDefenseLevelDetailPanel:OnDestroy()
|
||||
end
|
||||
function TowerDefenseLevelDetailPanel:OnRelease()
|
||||
end
|
||||
return TowerDefenseLevelDetailPanel
|
||||
@@ -0,0 +1,213 @@
|
||||
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.timer = 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.timer = 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
|
||||
@@ -0,0 +1,248 @@
|
||||
local BaseCtrl = require("GameCore.UI.BaseCtrl")
|
||||
local TowerDefenseMonsterInfoCtrl = class("TowerDefenseMonsterInfoCtrl", BaseCtrl)
|
||||
local LayoutRebuilder = CS.UnityEngine.UI.LayoutRebuilder
|
||||
local AvgData = PlayerData.Avg
|
||||
TowerDefenseMonsterInfoCtrl._mapNodeConfig = {
|
||||
goWindow = {sNodeName = "t_window"},
|
||||
anit_window = {sNodeName = "t_window", sComponentName = "Animator"},
|
||||
txtWindowTitle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "EnemyInfo_Window_Title"
|
||||
},
|
||||
goMonsterHead = {
|
||||
sNodeName = "goMonsterHead",
|
||||
sComponentName = "Transform"
|
||||
},
|
||||
txtMonsterName = {
|
||||
sNodeName = "txtMonsterName",
|
||||
sComponentName = "TMP_Text"
|
||||
},
|
||||
goMonsterType = {
|
||||
sNodeName = "goMonsterType",
|
||||
sComponentName = "GameObject"
|
||||
},
|
||||
got_fullscreen_blur_black = {
|
||||
sNodeName = "t_fullscreen_blur_black",
|
||||
sComponentName = "GameObject"
|
||||
},
|
||||
btnsnapshot = {
|
||||
sNodeName = "snapshot",
|
||||
sComponentName = "Button",
|
||||
callback = "OnBtn_ClickClose"
|
||||
},
|
||||
btnClose = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtn_ClickClose"
|
||||
},
|
||||
btn_Close = {
|
||||
sComponentName = "Button",
|
||||
callback = "OnBtn_ClickClose"
|
||||
},
|
||||
goAbility = {nCount = 3},
|
||||
txtAbility = {nCount = 3, sComponentName = "TMP_Text"},
|
||||
txtAbilityTitle = {nCount = 3, sComponentName = "TMP_Text"},
|
||||
txtStory = {sComponentName = "TMP_Text"},
|
||||
svEnemyList = {
|
||||
sComponentName = "LoopScrollView"
|
||||
},
|
||||
rtContent = {
|
||||
sNodeName = "rtInfoContent",
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
goStory = {
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
txtStoryTitle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "EnemyInfo_Window_StoryTitle"
|
||||
}
|
||||
}
|
||||
TowerDefenseMonsterInfoCtrl._mapEventConfig = {
|
||||
OpenTowerDefenseMonsterInfo = "OnEvent_OpenTowerDefenseMonsterInfo"
|
||||
}
|
||||
function TowerDefenseMonsterInfoCtrl:OnEnable()
|
||||
end
|
||||
function TowerDefenseMonsterInfoCtrl:ShowPanel(nPreviewMonsterGroupId)
|
||||
self._mapNode.goWindow:SetActive(false)
|
||||
self._mapNode.got_fullscreen_blur_black:SetActive(true)
|
||||
self.gameObject:SetActive(true)
|
||||
local wait = function()
|
||||
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
||||
self._mapNode.goWindow:SetActive(true)
|
||||
self._mapNode.anit_window:Play("t_window_04_t_in")
|
||||
local tbMonsterGroup = ConfigTable.GetData("PreviewMonsterGroup", nPreviewMonsterGroupId)
|
||||
if tbMonsterGroup == nil then
|
||||
printError("获取PreviewMonsterGroup配置失败!!!PreviewMonsterGroupId = " .. nPreviewMonsterGroupId)
|
||||
return
|
||||
end
|
||||
self.tbMonster = tbMonsterGroup.MonsterIds
|
||||
self.curSelect = 1
|
||||
if self.tbMonster == nil or #self.tbMonster == 0 then
|
||||
return
|
||||
end
|
||||
local bOpen = true
|
||||
for _, v in ipairs(self.tbMonster) do
|
||||
local monsterCfg = ConfigTable.GetData("Monster", v)
|
||||
if nil == monsterCfg then
|
||||
printError("读取Monster配置失败!!!monsterId = " .. v)
|
||||
bOpen = false
|
||||
end
|
||||
end
|
||||
if not bOpen then
|
||||
return
|
||||
end
|
||||
local comp = function(a, b)
|
||||
local monsterA = ConfigTable.GetData("Monster", a)
|
||||
local monsterB = ConfigTable.GetData("Monster", b)
|
||||
if monsterA == nil or monsterB == nil then
|
||||
return
|
||||
end
|
||||
if monsterA.EpicLv ~= monsterB.EpicLv then
|
||||
return monsterA.EpicLv < monsterB.EpicLv
|
||||
else
|
||||
return a < b
|
||||
end
|
||||
end
|
||||
table.sort(self.tbMonster, comp)
|
||||
local nMonsterId = self.tbMonster[self.curSelect]
|
||||
self:RefreshMonsterInfo(nMonsterId)
|
||||
self._mapNode.svEnemyList:SetAnim(0.03)
|
||||
self._mapNode.svEnemyList:Init(#self.tbMonster, self, self.RefreshMonsterGrid, self.OnBtnClick_Grid)
|
||||
end
|
||||
cs_coroutine.start(wait)
|
||||
end
|
||||
function TowerDefenseMonsterInfoCtrl:RefreshMonsterGrid(goGrid, gridIndex)
|
||||
local index = gridIndex + 1
|
||||
local nMonsterId = self.tbMonster[index]
|
||||
if nMonsterId == 0 then
|
||||
return
|
||||
end
|
||||
if self.curSelect == index then
|
||||
self.curSelectMonster = goGrid
|
||||
end
|
||||
local imgIcon = goGrid.transform:Find("btnGrid/AnimRoot/tc_head_01/--Basic--/imgIcon"):GetComponent("Image")
|
||||
local goSelect = goGrid.transform:Find("btnGrid/AnimRoot/tc_head_01/--Common--").gameObject
|
||||
local goBoss = goGrid.transform:Find("btnGrid/AnimRoot/tc_head_01/--Monster--/goBoss").gameObject
|
||||
local goElite = goGrid.transform:Find("btnGrid/AnimRoot/tc_head_01/--Monster--/goElite").gameObject
|
||||
local goLeader = goGrid.transform:Find("btnGrid/AnimRoot/tc_head_01/--Monster--/goLeader").gameObject
|
||||
local mData = ConfigTable.GetData("Monster", nMonsterId)
|
||||
if nil == mData then
|
||||
printError("读取Monster配置失败!!!monsterId = " .. nMonsterId)
|
||||
return
|
||||
end
|
||||
local mSkin = ConfigTable.GetData("MonsterSkin", mData.FAId)
|
||||
if nil == mSkin then
|
||||
printError("读取MonsterSkin配置失败!!!skinId = " .. mData.FAId)
|
||||
return
|
||||
end
|
||||
local mManual = ConfigTable.GetData("MonsterManual", mSkin.MonsterManual)
|
||||
if nil == mManual then
|
||||
printError("读取MonsterSkin配置失败!!!MonsterManualId = " .. mSkin.MonsterManual)
|
||||
return
|
||||
end
|
||||
self:SetPngSprite(imgIcon, mManual.Icon)
|
||||
goSelect:SetActive(self.curSelect == index)
|
||||
goBoss:SetActive(mData.EpicLv == GameEnum.monsterEpicType.LORD)
|
||||
goLeader:SetActive(mData.EpicLv == GameEnum.monsterEpicType.LEADER)
|
||||
goElite:SetActive(mData.EpicLv == GameEnum.monsterEpicType.ELITE)
|
||||
end
|
||||
function TowerDefenseMonsterInfoCtrl:RefreshMonsterInfo(nMonsterId)
|
||||
local monsterData = ConfigTable.GetData("Monster", nMonsterId)
|
||||
if nil == monsterData then
|
||||
printError(string.format("Monster数据为空!!!id = [%s]", nMonsterId))
|
||||
return
|
||||
end
|
||||
local monsterSkin = ConfigTable.GetData("MonsterSkin", monsterData.FAId)
|
||||
if nil == monsterSkin then
|
||||
printError(string.format("MonsterSkin数据为空!!!id = [%s]", monsterData.FAId))
|
||||
return
|
||||
end
|
||||
local monsterAdjust = ConfigTable.GetData("MonsterValueTempleteAdjust", monsterData.Templete)
|
||||
if nil == monsterAdjust then
|
||||
printError(string.format("MonsterValueTempleteAdjust数据为空!!!id = [%s]", monsterData.Templete))
|
||||
return
|
||||
end
|
||||
local monsterManual = ConfigTable.GetData("MonsterManual", monsterSkin.MonsterManual)
|
||||
if nil == monsterManual then
|
||||
printError(string.format("MonsterManual数据为空!!!id = [%s]", monsterSkin.MonsterManual))
|
||||
return
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.txtMonsterName, monsterManual.Name)
|
||||
local imgIcon = self._mapNode.goMonsterHead:Find("--Basic--/imgIcon"):GetComponent("Image")
|
||||
self:SetPngSprite(imgIcon, monsterManual.Icon)
|
||||
if monsterData.EpicLv ~= GameEnum.monsterEpicType.NORMAL then
|
||||
self._mapNode.goMonsterType:SetActive(true)
|
||||
local goBoss = self._mapNode.goMonsterType.transform:GetChild(0).gameObject
|
||||
goBoss:SetActive(monsterData.EpicLv == GameEnum.monsterEpicType.LORD)
|
||||
local goElite = self._mapNode.goMonsterType.transform:GetChild(1).gameObject
|
||||
goElite:SetActive(monsterData.EpicLv == GameEnum.monsterEpicType.ELITE)
|
||||
local goLeader = self._mapNode.goMonsterType.transform:GetChild(2).gameObject
|
||||
goLeader:SetActive(monsterData.EpicLv == GameEnum.monsterEpicType.LEADER)
|
||||
else
|
||||
self._mapNode.goMonsterType:SetActive(false)
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.txtStory, monsterManual.Desc)
|
||||
LayoutRebuilder.ForceRebuildLayoutImmediate(self._mapNode.goStory)
|
||||
local eets = {}
|
||||
if monsterAdjust.EET ~= GameEnum.elementType.NONE then
|
||||
table.insert(eets, monsterAdjust.EET)
|
||||
end
|
||||
self:RefreshAbility(monsterManual)
|
||||
LayoutRebuilder.ForceRebuildLayoutImmediate(self._mapNode.rtContent)
|
||||
end
|
||||
function TowerDefenseMonsterInfoCtrl:RefreshAbility(monsterManual)
|
||||
for i = 1, 3 do
|
||||
if monsterManual["AbilityTitle" .. i] ~= nil and monsterManual["AbilityTitle" .. i] ~= "" then
|
||||
NovaAPI.SetTMPText(self._mapNode.txtAbility[i], monsterManual["AbilityDesc" .. i])
|
||||
NovaAPI.SetTMPText(self._mapNode.txtAbilityTitle[i], monsterManual["AbilityTitle" .. i])
|
||||
self._mapNode.goAbility[i]:SetActive(true)
|
||||
LayoutRebuilder.ForceRebuildLayoutImmediate(self._mapNode.goAbility[i]:GetComponent("RectTransform"))
|
||||
else
|
||||
self._mapNode.goAbility[i]:SetActive(false)
|
||||
end
|
||||
end
|
||||
end
|
||||
function TowerDefenseMonsterInfoCtrl:OnBtn_ClickClose()
|
||||
self._mapNode.got_fullscreen_blur_black:SetActive(false)
|
||||
self._mapNode.anit_window:Play("t_window_04_t_out")
|
||||
self:AddTimer(1, 0.3, "OnCloseAnimFinish", true, true, true)
|
||||
self.tbMonster = nil
|
||||
end
|
||||
function TowerDefenseMonsterInfoCtrl:OnBtnClick_Grid(goGrid, gridIndex)
|
||||
local nIndex = gridIndex + 1
|
||||
if nIndex ~= self.curSelect then
|
||||
local curGridName = tostring(self.curSelect - 1)
|
||||
local rtCurItem = self.curSelectMonster
|
||||
if rtCurItem ~= nil then
|
||||
rtCurItem.transform:Find("btnGrid/AnimRoot/tc_head_01/--Common--").gameObject:SetActive(false)
|
||||
end
|
||||
self.curSelect = nIndex
|
||||
self.curSelectMonster = goGrid
|
||||
goGrid.transform:Find("btnGrid/AnimRoot/tc_head_01/--Common--").gameObject:SetActive(true)
|
||||
local nMonsterId = self.tbMonster[nIndex]
|
||||
self:RefreshMonsterInfo(nMonsterId)
|
||||
end
|
||||
end
|
||||
function TowerDefenseMonsterInfoCtrl:OnEvent_OpenTowerDefenseMonsterInfo(levelId)
|
||||
local levelConfig = ConfigTable.GetData("TowerDefenseLevel", levelId)
|
||||
if levelConfig == nil then
|
||||
return
|
||||
end
|
||||
self.gameObject:SetActive(true)
|
||||
self:ShowPanel(levelConfig.MonsterPreview)
|
||||
end
|
||||
function TowerDefenseMonsterInfoCtrl:OnCloseAnimFinish()
|
||||
self.gameObject:SetActive(false)
|
||||
end
|
||||
function TowerDefenseMonsterInfoCtrl:GetAttritubeTypeSizeText(sizeType)
|
||||
if sizeType == GameEnum.attributeSizeType.High then
|
||||
return ConfigTable.GetUIText("Attribute_Size_High")
|
||||
elseif sizeType == GameEnum.attributeSizeType.Mid then
|
||||
return ConfigTable.GetUIText("Attribute_Size_Mid")
|
||||
elseif sizeType == GameEnum.attributeSizeType.Low then
|
||||
return ConfigTable.GetUIText("Attribute_Size_Low")
|
||||
else
|
||||
return ConfigTable.GetUIText("Attribute_Size_None")
|
||||
end
|
||||
end
|
||||
return TowerDefenseMonsterInfoCtrl
|
||||
@@ -0,0 +1,31 @@
|
||||
local TowerDefensePanel = class("TowerDefensePanel", BasePanel)
|
||||
TowerDefensePanel._bIsMainPanel = true
|
||||
TowerDefensePanel._sSortingLayerName = AllEnum.SortingLayerName.UI
|
||||
local GamepadUIManager = require("GameCore.Module.GamepadUIManager")
|
||||
TowerDefensePanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "Play_TowerDefence/TowerDefensePanel.prefab",
|
||||
sCtrlName = "Game.UI.TowerDefense.TowerDefenseCtrl"
|
||||
},
|
||||
{
|
||||
sPrefabPath = "Battle/AdventureMainUI/BattlePopupTips.prefab",
|
||||
sCtrlName = "Game.UI.Battle.BattlePopupTipsCtrl"
|
||||
}
|
||||
}
|
||||
function TowerDefensePanel:Awake()
|
||||
GamepadUIManager.EnterAdventure(true)
|
||||
GamepadUIManager.EnableGamepadUI("TowerDefense", {}, nil, true)
|
||||
end
|
||||
function TowerDefensePanel:OnEnable()
|
||||
end
|
||||
function TowerDefensePanel:OnAfterEnter()
|
||||
end
|
||||
function TowerDefensePanel:OnDisable()
|
||||
end
|
||||
function TowerDefensePanel:OnDestroy()
|
||||
GamepadUIManager.DisableGamepadUI("TowerDefense")
|
||||
GamepadUIManager.QuitAdventure()
|
||||
end
|
||||
function TowerDefensePanel:OnRelease()
|
||||
end
|
||||
return TowerDefensePanel
|
||||
@@ -0,0 +1,62 @@
|
||||
local TowerDefensePauseCtrl = class("TowerDefensePauseCtrl", BaseCtrl)
|
||||
local GamepadUIManager = require("GameCore.Module.GamepadUIManager")
|
||||
TowerDefensePauseCtrl._mapNodeConfig = {
|
||||
blur = {},
|
||||
txt_title = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "TowerDef_Text_Pause"
|
||||
},
|
||||
txt_exit = {
|
||||
nCount = 2,
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "TowerDef_Button_Leave"
|
||||
},
|
||||
txt_restart = {
|
||||
nCount = 2,
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "TowerDef_Button_Re"
|
||||
},
|
||||
txt_continue = {
|
||||
nCount = 2,
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "TowerDef_Button_Back"
|
||||
},
|
||||
btn_exit = {
|
||||
sComponentName = "NaviButton",
|
||||
callback = "OnBtnClick_Exit",
|
||||
sAction = "Giveup"
|
||||
},
|
||||
btn_restart = {
|
||||
sComponentName = "NaviButton",
|
||||
callback = "OnBtnClick_Restart",
|
||||
sAction = "Retry"
|
||||
},
|
||||
btn_continue = {
|
||||
sComponentName = "NaviButton",
|
||||
callback = "OnBtnClick_Continue",
|
||||
sAction = "Back"
|
||||
}
|
||||
}
|
||||
TowerDefensePauseCtrl._mapEventConfig = {}
|
||||
TowerDefensePauseCtrl._mapRedDotConfig = {}
|
||||
function TowerDefensePauseCtrl:Awake()
|
||||
self.tbGamepadUINode = self:GetGamepadUINode()
|
||||
end
|
||||
function TowerDefensePauseCtrl:Open()
|
||||
self.gameObject:SetActive(true)
|
||||
GamepadUIManager.EnableGamepadUI("TowerDefensePauseCtrl", self.tbGamepadUINode)
|
||||
end
|
||||
function TowerDefensePauseCtrl:Close()
|
||||
GamepadUIManager.DisableGamepadUI("TowerDefensePauseCtrl")
|
||||
self.gameObject:SetActive(false)
|
||||
end
|
||||
function TowerDefensePauseCtrl:OnBtnClick_Exit()
|
||||
EventManager.Hit("TowerDefense_Exit_OnClick")
|
||||
end
|
||||
function TowerDefensePauseCtrl:OnBtnClick_Restart()
|
||||
EventManager.Hit("TowerDefense_Restart_OnClick")
|
||||
end
|
||||
function TowerDefensePauseCtrl:OnBtnClick_Continue()
|
||||
EventManager.Hit("TowerDefense_Continue_OnClick")
|
||||
end
|
||||
return TowerDefensePauseCtrl
|
||||
@@ -0,0 +1,153 @@
|
||||
local TowerDefensePotentialCardItemCtrl = class("TowerDefensePotentialCardItemCtrl", BaseCtrl)
|
||||
TowerDefensePotentialCardItemCtrl._mapNodeConfig = {
|
||||
db_SSR = {},
|
||||
goPotentialNormal = {},
|
||||
imgRare_Gold = {},
|
||||
imgRare_RainBow = {},
|
||||
goIcon = {
|
||||
sCtrlName = "Game.UI.TowerDefense.TowerDefensePotentialIconCtrl"
|
||||
},
|
||||
txtName = {sComponentName = "TMP_Text"},
|
||||
txtDesc = {sComponentName = "TMP_Text"},
|
||||
TMP_Link1 = {
|
||||
sNodeName = "txtDesc",
|
||||
sComponentName = "TMPHyperLink",
|
||||
callback = "OnBtnClick_Word"
|
||||
},
|
||||
txtLevel = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Potential_Level"
|
||||
},
|
||||
imgArrow = {},
|
||||
goUpgrade = {},
|
||||
txtUpLevelValue = {sComponentName = "TMP_Text"},
|
||||
goPotentialSpecial = {},
|
||||
imgSpIcon = {sComponentName = "Image"},
|
||||
txtSpName = {sComponentName = "TMP_Text"},
|
||||
SpContent = {
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
txtSpDesc = {sComponentName = "TMP_Text"},
|
||||
TMP_Link2 = {
|
||||
sNodeName = "txtSpDesc",
|
||||
sComponentName = "TMPHyperLink",
|
||||
callback = "OnBtnClick_Word"
|
||||
},
|
||||
animCtrl = {sComponentName = "Animator", sNodeName = "AnimRoot"},
|
||||
imgReommend = {},
|
||||
imgNew = {},
|
||||
txtNew = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "StarTower_Book_New_Text"
|
||||
},
|
||||
N = {},
|
||||
SR = {},
|
||||
SSR = {},
|
||||
BgEffect = {},
|
||||
ArrowEffect = {}
|
||||
}
|
||||
TowerDefensePotentialCardItemCtrl._mapEventConfig = {}
|
||||
TowerDefensePotentialCardItemCtrl._mapRedDotConfig = {}
|
||||
local level_txt_color = {
|
||||
[1] = "#44587f",
|
||||
[2] = "#4e76d4"
|
||||
}
|
||||
function TowerDefensePotentialCardItemCtrl:SetPotentialItem(nTid, nShowType)
|
||||
self.nTid = nTid
|
||||
self.nShowType = nShowType or AllEnum.PotentialCardType.CharInfo
|
||||
self._mapNode.ArrowEffect:SetActive(self.bLucky)
|
||||
local potentialCfg = ConfigTable.GetData("TowerDefensePotential", nTid)
|
||||
if nil == potentialCfg then
|
||||
return
|
||||
end
|
||||
self._mapNode.db_SSR:SetActive(potentialCfg.Rarity == GameEnum.itemRarity.SSR)
|
||||
local bSpecial = potentialCfg.Rarity == GameEnum.itemRarity.SSR
|
||||
self._mapNode.goPotentialNormal.gameObject:SetActive(not bSpecial)
|
||||
self._mapNode.goPotentialSpecial.gameObject:SetActive(bSpecial)
|
||||
if not bSpecial then
|
||||
self:SetNormalCard(potentialCfg)
|
||||
else
|
||||
self:SetSpecialCard(potentialCfg)
|
||||
end
|
||||
self:ChangeWordRaycast(false)
|
||||
return bSpecial
|
||||
end
|
||||
function TowerDefensePotentialCardItemCtrl:SetNormalCard(potentialCfg)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtName, potentialCfg.Name)
|
||||
local nColor = AllEnum.FrameColor_New[potentialCfg.Rarity]
|
||||
if nColor == "4" then
|
||||
self._mapNode.imgRare_Gold.gameObject:SetActive(true)
|
||||
self._mapNode.imgRare_RainBow.gameObject:SetActive(false)
|
||||
elseif nColor == "5" then
|
||||
self._mapNode.imgRare_Gold.gameObject:SetActive(false)
|
||||
self._mapNode.imgRare_RainBow.gameObject:SetActive(true)
|
||||
else
|
||||
self._mapNode.imgRare_Gold.gameObject:SetActive(false)
|
||||
self._mapNode.imgRare_RainBow.gameObject:SetActive(false)
|
||||
end
|
||||
self._mapNode.goIcon:SetIcon(potentialCfg.Id)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtDesc, potentialCfg.PotentialDes)
|
||||
end
|
||||
function TowerDefensePotentialCardItemCtrl:SetSpecialCard(potentialCfg)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtSpName, potentialCfg.Name)
|
||||
self:SetPngSprite(self._mapNode.imgSpIcon, potentialCfg.Icon .. AllEnum.PotentialIconSurfix.A)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtSpDesc, potentialCfg.PotentialDes)
|
||||
end
|
||||
function TowerDefensePotentialCardItemCtrl:ActiveRollEffect()
|
||||
if not self.itemCfg then
|
||||
return
|
||||
end
|
||||
self._mapNode.SSR:SetActive(self.itemCfg.Rarity == GameEnum.itemRarity.SSR)
|
||||
self._mapNode.SR:SetActive(self.itemCfg.Rarity == GameEnum.itemRarity.SR)
|
||||
self._mapNode.N:SetActive(self.itemCfg.Rarity == GameEnum.itemRarity.N)
|
||||
end
|
||||
function TowerDefensePotentialCardItemCtrl:CloseBgEffect()
|
||||
self._mapNode.BgEffect:SetActive(false)
|
||||
end
|
||||
function TowerDefensePotentialCardItemCtrl:PlayAnim(sAnimName)
|
||||
self._mapNode.animCtrl:Play(sAnimName)
|
||||
self._mapNode.BgEffect:SetActive(self.bLucky and sAnimName == "tc_newperk_card_in")
|
||||
end
|
||||
function TowerDefensePotentialCardItemCtrl:OnEnable()
|
||||
end
|
||||
function TowerDefensePotentialCardItemCtrl:OnDisable()
|
||||
end
|
||||
function TowerDefensePotentialCardItemCtrl:OnDestroy()
|
||||
end
|
||||
function TowerDefensePotentialCardItemCtrl:OnBtnClick_Word(link, sWordId)
|
||||
local potentialCfg = ConfigTable.GetData("Potential", self.nTid)
|
||||
local nLevel = self.nLevel
|
||||
local nNextLevel = self.nNextLevel
|
||||
local nType = potentialCfg.BranchType
|
||||
local nCharId = potentialCfg.CharId
|
||||
local tbSkillLevel
|
||||
if self.nShowType == AllEnum.PotentialCardType.StarTower then
|
||||
tbSkillLevel = self._panel:GetSkillLevel(nCharId)
|
||||
elseif self.nShowType == AllEnum.PotentialCardType.CharInfo or self.nShowType == AllEnum.PotentialCardType.Book then
|
||||
tbSkillLevel = PlayerData.Char:GetSkillLevel(nCharId)
|
||||
end
|
||||
if nType == GameEnum.BranchType.Master then
|
||||
nLevel = tbSkillLevel[GameEnum.skillSlotType.B]
|
||||
nNextLevel = nil
|
||||
elseif nType == GameEnum.BranchType.Assist then
|
||||
nLevel = tbSkillLevel[GameEnum.skillSlotType.C]
|
||||
nNextLevel = nil
|
||||
end
|
||||
local mapData = {
|
||||
nPerkId = 0,
|
||||
nCount = 0,
|
||||
bWordTip = true,
|
||||
sWordId = sWordId,
|
||||
nLevel = nLevel,
|
||||
nNextLevel = nNextLevel
|
||||
}
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.PerkTips, link, mapData)
|
||||
end
|
||||
function TowerDefensePotentialCardItemCtrl:ChangeWordRaycast(bEnable)
|
||||
NovaAPI.SetTMPRaycastTarget(self._mapNode.txtDesc, bEnable)
|
||||
NovaAPI.SetTMPRaycastTarget(self._mapNode.txtSpDesc, bEnable)
|
||||
end
|
||||
function TowerDefensePotentialCardItemCtrl:SetRecommend(bEnable)
|
||||
self._mapNode.imgReommend:SetActive(bEnable)
|
||||
end
|
||||
return TowerDefensePotentialCardItemCtrl
|
||||
@@ -0,0 +1,17 @@
|
||||
local TowerDefensePotentialIconCtrl = class("TowerDefensePotentialIconCtrl", BaseCtrl)
|
||||
TowerDefensePotentialIconCtrl._mapNodeConfig = {
|
||||
imgIcon = {nCount = 3, sComponentName = "Image"}
|
||||
}
|
||||
TowerDefensePotentialIconCtrl._mapEventConfig = {}
|
||||
TowerDefensePotentialIconCtrl._mapRedDotConfig = {}
|
||||
function TowerDefensePotentialIconCtrl:SetIcon(nId)
|
||||
local potentialCfg = ConfigTable.GetData("TowerDefensePotential", nId)
|
||||
if nil == potentialCfg then
|
||||
return
|
||||
end
|
||||
local _, color = ColorUtility.TryParseHtmlString(AllEnum.PotentialRarityCfg[potentialCfg.Rarity].sColor)
|
||||
self._mapNode.imgIcon[1].gameObject:SetActive(false)
|
||||
self._mapNode.imgIcon[2].gameObject:SetActive(false)
|
||||
self:SetPngSprite(self._mapNode.imgIcon[3], potentialCfg.Icon .. AllEnum.PotentialIconSurfix.A)
|
||||
end
|
||||
return TowerDefensePotentialIconCtrl
|
||||
@@ -0,0 +1,296 @@
|
||||
local TowerDefensePotentialSelectCtrl = class("TowerDefensePotentialSelectCtrl", BaseCtrl)
|
||||
local WwiseAudioMgr = CS.WwiseAudioManager.Instance
|
||||
local GamepadUIManager = require("GameCore.Module.GamepadUIManager")
|
||||
TowerDefensePotentialSelectCtrl._mapNodeConfig = {
|
||||
blurBg = {},
|
||||
contentRoot = {
|
||||
sNodeName = "----SafeAreaRoot----"
|
||||
},
|
||||
animCtrl = {
|
||||
sComponentName = "Animator",
|
||||
sNodeName = "----SafeAreaRoot----"
|
||||
},
|
||||
btnMask = {},
|
||||
imgUpgradeTitle = {},
|
||||
txtUpgrade = {sComponentName = "TMP_Text"},
|
||||
btnPotential = {
|
||||
sComponentName = "NaviButton",
|
||||
nCount = 2,
|
||||
callback = "OnBtnClick_PotentialItem"
|
||||
},
|
||||
rtBtnPotential = {
|
||||
sNodeName = "btnPotential",
|
||||
sComponentName = "RectTransform",
|
||||
nCount = 2
|
||||
},
|
||||
potentialCard = {
|
||||
nCount = 2,
|
||||
sCtrlName = "Game.UI.TowerDefense.TowerDefensePotentialCardItemCtrl"
|
||||
},
|
||||
ScrollView = {
|
||||
nCount = 2,
|
||||
sComponentName = "GamepadScroll"
|
||||
},
|
||||
SpScrollView = {
|
||||
nCount = 2,
|
||||
sComponentName = "GamepadScroll"
|
||||
},
|
||||
btnConfirm = {
|
||||
sComponentName = "NaviButton",
|
||||
callback = "OnBtnClick_Confirm"
|
||||
},
|
||||
txtBtnConfirm = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Potential_Select_Confirm"
|
||||
},
|
||||
rtBtnConfirm = {
|
||||
sNodeName = "btnConfirm",
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
ActionBar = {
|
||||
sCtrlName = "Game.UI.ActionBar.ActionBarCtrl"
|
||||
}
|
||||
}
|
||||
TowerDefensePotentialSelectCtrl._mapEventConfig = {
|
||||
GamepadUIChange = "OnEvent_GamepadUIChange",
|
||||
GamepadUIReopen = "OnEvent_Reopen"
|
||||
}
|
||||
TowerDefensePotentialSelectCtrl._mapRedDotConfig = {}
|
||||
function TowerDefensePotentialSelectCtrl:SetData(nActId)
|
||||
self.TowerDefenseData = PlayerData.Activity:GetActivityDataById(nActId)
|
||||
end
|
||||
function TowerDefensePotentialSelectCtrl:Refresh(nCharId, tbPotential, nLevel, callback)
|
||||
self.nCharId = nCharId
|
||||
self.callback = callback
|
||||
local config = ConfigTable.GetData("TowerDefenseCharacter", self.nCharId)
|
||||
if config == nil then
|
||||
return
|
||||
end
|
||||
if tbPotential == nil or #tbPotential == 0 then
|
||||
return
|
||||
end
|
||||
self.nSelectIdx = 0
|
||||
NovaAPI.SetTMPText(self._mapNode.txtUpgrade, orderedFormat(ConfigTable.GetUIText("TowerDef_Text_LevelUp"), config.Name, nLevel))
|
||||
self._mapNode.btnConfirm.gameObject:SetActive(false)
|
||||
self:RefreshPotentialList(tbPotential)
|
||||
end
|
||||
function TowerDefensePotentialSelectCtrl:RefreshPotentialList(tbPotential)
|
||||
self.tbPotential = {}
|
||||
for _, v in pairs(tbPotential) do
|
||||
table.insert(self.tbPotential, v)
|
||||
end
|
||||
local tbCardObj, tbBtnObj = {}, {}
|
||||
for k, v in pairs(self._mapNode.potentialCard) do
|
||||
v.gameObject:SetActive(false)
|
||||
self._mapNode.btnPotential[k].gameObject:SetActive(self.tbPotential[k] ~= nil)
|
||||
if self.tbPotential[k] ~= nil then
|
||||
local nTid = self.tbPotential[k]
|
||||
local potentialCfg = ConfigTable.GetData("TowerDefensePotential", nTid)
|
||||
if nil ~= potentialCfg then
|
||||
v:ChangeWordRaycast(false)
|
||||
table.insert(tbCardObj, v)
|
||||
table.insert(tbBtnObj, self._mapNode.btnPotential[k])
|
||||
v:SetPotentialItem(nTid, AllEnum.PotentialCardType.TowerDefense)
|
||||
end
|
||||
end
|
||||
end
|
||||
self:ResetSelect(tbBtnObj)
|
||||
local animTime = NovaAPI.GetAnimClipLength(self._mapNode.animCtrl, {
|
||||
"PotentialSelectPanel_in"
|
||||
})
|
||||
EventManager.Hit(EventId.TemporaryBlockInput, animTime)
|
||||
if self.nPanelType == 2 then
|
||||
WwiseAudioMgr:PlaySound("ui_roguelike_shop_slotMachine")
|
||||
else
|
||||
WwiseAudioMgr:PlaySound("ui_roguelike_xintiao_select")
|
||||
end
|
||||
if 0 < #tbCardObj then
|
||||
local wait = function()
|
||||
local frameCount = 0
|
||||
while 0 < #tbCardObj do
|
||||
if 4 <= frameCount then
|
||||
local cardObj = table.remove(tbCardObj, 1)
|
||||
if cardObj ~= nil then
|
||||
cardObj.gameObject:SetActive(true)
|
||||
cardObj:PlayAnim("tc_newperk_card_in")
|
||||
end
|
||||
frameCount = 0
|
||||
else
|
||||
frameCount = frameCount + 1
|
||||
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
||||
end
|
||||
end
|
||||
end
|
||||
cs_coroutine.start(wait)
|
||||
end
|
||||
end
|
||||
function TowerDefensePotentialSelectCtrl:MoveConfirmButton(btnCard)
|
||||
local rtBtn = btnCard:GetComponent("RectTransform")
|
||||
self._mapNode.rtBtnConfirm.localPosition = Vector3(rtBtn.localPosition.x, self.btnConfirmPosY, 0)
|
||||
if self._mapNode.btnConfirm.gameObject.activeSelf == false then
|
||||
self._mapNode.btnConfirm.gameObject:SetActive(true)
|
||||
else
|
||||
local animCtrl = self._mapNode.btnConfirm.transform:Find("AnimRoot"):GetComponent("Animator")
|
||||
animCtrl:Play("btnConfirm_in", 0, 0)
|
||||
end
|
||||
end
|
||||
function TowerDefensePotentialSelectCtrl:ShowPanel()
|
||||
self.bOpen = true
|
||||
self._mapNode.blurBg.gameObject:SetActive(true)
|
||||
local wait = function()
|
||||
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
||||
self._mapNode.contentRoot.gameObject:SetActive(true)
|
||||
local animTime = NovaAPI.GetAnimClipLength(self._mapNode.animCtrl, {
|
||||
"PotentialSelectPanel_in"
|
||||
})
|
||||
EventManager.Hit(EventId.TemporaryBlockInput, animTime)
|
||||
self._mapNode.animCtrl:Play("PotentialSelectPanel_in")
|
||||
end
|
||||
cs_coroutine.start(wait)
|
||||
local tbConfig = {
|
||||
{
|
||||
sAction = "Confirm",
|
||||
sLang = "ActionBar_Confirm"
|
||||
},
|
||||
{
|
||||
sAction = "Scroll",
|
||||
sLang = "ActionBar_Scroll"
|
||||
}
|
||||
}
|
||||
self._mapNode.ActionBar:InitActionBar(tbConfig)
|
||||
GamepadUIManager.EnableGamepadUI("TowerDefensePotentialSelectCtrl", self.tbGamepadUINode)
|
||||
end
|
||||
function TowerDefensePotentialSelectCtrl:HidePanel()
|
||||
self.bOpen = false
|
||||
self._mapNode.blurBg.gameObject:SetActive(false)
|
||||
self._mapNode.contentRoot.gameObject:SetActive(false)
|
||||
GamepadUIManager.DisableGamepadUI("TowerDefensePotentialSelectCtrl")
|
||||
end
|
||||
function TowerDefensePotentialSelectCtrl:Awake()
|
||||
self.canvas = self.gameObject:GetComponent("Canvas")
|
||||
self.nInitSortingOrder = NovaAPI.GetCanvasSortingOrder(self.canvas)
|
||||
self.btnConfirmPosY = self._mapNode.rtBtnConfirm.localPosition.y
|
||||
self._mapNode.contentRoot.gameObject:SetActive(false)
|
||||
self._mapNode.blurBg.gameObject:SetActive(false)
|
||||
self._mapNode.btnMask.gameObject:SetActive(false)
|
||||
self.tbGamepadUINode = self:GetGamepadUINode()
|
||||
end
|
||||
function TowerDefensePotentialSelectCtrl:OnEnable()
|
||||
self.handler = {}
|
||||
for k, v in ipairs(self._mapNode.btnPotential) do
|
||||
self.handler[k] = ui_handler(self, self.OnBtnSelect_PotentialItem, v, k)
|
||||
v.onSelect:AddListener(self.handler[k])
|
||||
end
|
||||
end
|
||||
function TowerDefensePotentialSelectCtrl:OnDisable()
|
||||
for k, v in ipairs(self._mapNode.btnPotential) do
|
||||
v.onSelect:RemoveListener(self.handler[k])
|
||||
end
|
||||
end
|
||||
function TowerDefensePotentialSelectCtrl:OnBtnClick_Confirm()
|
||||
if self.nSelectIdx ~= 0 and self.callback ~= nil then
|
||||
EventManager.Hit(EventId.BlockInput, true)
|
||||
for i = 1, 2 do
|
||||
if self.nSelectIdx ~= i then
|
||||
self._mapNode.potentialCard[i].gameObject:SetActive(false)
|
||||
end
|
||||
end
|
||||
self._mapNode.btnConfirm.gameObject:SetActive(false)
|
||||
local cardAnim = self._mapNode.potentialCard[self.nSelectIdx].gameObject:GetComponent("Animator")
|
||||
cardAnim:Play("tc_newperk_card_out1")
|
||||
WwiseAudioMgr:PostEvent("mode_TD_skill_select_fx")
|
||||
self:AddTimer(1, 0.5, function()
|
||||
local nAnimLen = NovaAPI.GetAnimClipLength(self._mapNode.animCtrl, {
|
||||
"PotentialSelectPanel_out"
|
||||
})
|
||||
self._mapNode.animCtrl:Play("PotentialSelectPanel_out")
|
||||
self:AddTimer(1, nAnimLen, function()
|
||||
EventManager.Hit(EventId.BlockInput, false)
|
||||
self:HidePanel()
|
||||
if nil ~= self.callback then
|
||||
self.callback(self.tbPotential[self.nSelectIdx])
|
||||
end
|
||||
end, true, true, true, nil)
|
||||
end, true, true, true, nil)
|
||||
end
|
||||
end
|
||||
function TowerDefensePotentialSelectCtrl:OnBtnSelect_PotentialItem(btn, nIndex)
|
||||
local nUIType = GamepadUIManager.GetCurUIType()
|
||||
if nUIType ~= AllEnum.GamepadUIType.Other and nUIType ~= AllEnum.GamepadUIType.Mouse or self.bRecommended then
|
||||
self:OnBtnClick_PotentialItem(btn, nIndex)
|
||||
end
|
||||
end
|
||||
function TowerDefensePotentialSelectCtrl:OnBtnClick_PotentialItem(btn, nIndex)
|
||||
if nil == self.tbPotential[nIndex] or self.nSelectIdx == nIndex then
|
||||
return
|
||||
end
|
||||
WwiseAudioMgr:PlaySound("ui_roguelike_xintiao_slide")
|
||||
self:MoveConfirmButton(btn)
|
||||
for k, v in ipairs(self._mapNode.potentialCard) do
|
||||
if k == nIndex then
|
||||
v:PlayAnim("tc_newperk_card_switch_up")
|
||||
v:ChangeWordRaycast(true)
|
||||
elseif k == self.nSelectIdx then
|
||||
v:PlayAnim("tc_newperk_card_switch_down")
|
||||
v:ChangeWordRaycast(false)
|
||||
end
|
||||
end
|
||||
self:SelectScroll(nIndex)
|
||||
self.nSelectIdx = nIndex
|
||||
end
|
||||
function TowerDefensePotentialSelectCtrl:OnEvent_GamepadUIChange(sName, nBeforeType, nAfterType)
|
||||
if sName ~= "TowerDefensePotentialSelectCtrl" then
|
||||
return
|
||||
end
|
||||
if nBeforeType == AllEnum.GamepadUIType.Other or nBeforeType == AllEnum.GamepadUIType.Mouse then
|
||||
local nSelect = self.nSelectIdx ~= 0 and self.nSelectIdx or 1
|
||||
GamepadUIManager.ClearSelectedUI()
|
||||
GamepadUIManager.SetSelectedUI(self._mapNode.btnPotential[nSelect].gameObject)
|
||||
end
|
||||
end
|
||||
function TowerDefensePotentialSelectCtrl:OnEvent_Reopen(sName)
|
||||
if sName ~= "TowerDefensePotentialSelectCtrl" then
|
||||
return
|
||||
end
|
||||
if self.nSelectIdx == 0 and GamepadUIManager.GetCurUIType() ~= AllEnum.GamepadUIType.Other then
|
||||
self.nSelectIdx = 1
|
||||
end
|
||||
if self.nSelectIdx == 0 then
|
||||
return
|
||||
end
|
||||
GamepadUIManager.SetSelectedUI(self._mapNode.btnPotential[self.nSelectIdx].gameObject)
|
||||
self._mapNode.potentialCard[self.nSelectIdx]:ChangeWordRaycast(true)
|
||||
self:SelectScroll(self.nSelectIdx)
|
||||
end
|
||||
function TowerDefensePotentialSelectCtrl:ResetSelect(tbUI)
|
||||
self.nSelectIdx = 0
|
||||
GamepadUIManager.SetNavigation(tbUI)
|
||||
local animTime = NovaAPI.GetAnimClipLength(self._mapNode.animCtrl, {
|
||||
"PotentialSelectPanel_in"
|
||||
}) + 0.1
|
||||
self:AddTimer(1, animTime, function()
|
||||
if self.nSelectIdx == 0 then
|
||||
local nSelect = 1
|
||||
GamepadUIManager.ClearSelectedUI()
|
||||
GamepadUIManager.SetSelectedUI(self._mapNode.btnPotential[nSelect].gameObject)
|
||||
if GamepadUIManager.GetCurUIType() == AllEnum.GamepadUIType.Mouse then
|
||||
self:OnBtnClick_PotentialItem(self._mapNode.btnPotential[nSelect].gameObject, nSelect)
|
||||
end
|
||||
end
|
||||
end, true, true, true)
|
||||
end
|
||||
function TowerDefensePotentialSelectCtrl:SelectScroll(nIndex)
|
||||
for _, v in ipairs(self._mapNode.ScrollView) do
|
||||
NovaAPI.SetComponentEnable(v, false)
|
||||
end
|
||||
if nIndex then
|
||||
NovaAPI.SetComponentEnable(self._mapNode.ScrollView[nIndex], true)
|
||||
end
|
||||
for _, v in ipairs(self._mapNode.SpScrollView) do
|
||||
NovaAPI.SetComponentEnable(v, false)
|
||||
end
|
||||
if nIndex then
|
||||
NovaAPI.SetComponentEnable(self._mapNode.SpScrollView[nIndex], true)
|
||||
end
|
||||
end
|
||||
return TowerDefensePotentialSelectCtrl
|
||||
@@ -0,0 +1,76 @@
|
||||
local TowerDefenseQuestCellCtrl = class("TowerDefenseQuestCellCtrl", BaseCtrl)
|
||||
local barMinX = -505
|
||||
local barMaxX = 0
|
||||
TowerDefenseQuestCellCtrl._mapNodeConfig = {
|
||||
rtReward = {
|
||||
sCtrlName = "Game.UI.TemplateEx.TemplateItemCtrl"
|
||||
},
|
||||
btnReward = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Reward"
|
||||
},
|
||||
TMPTitle = {sComponentName = "TMP_Text"},
|
||||
btnReceive = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_GetReward"
|
||||
},
|
||||
txtBtnReceive = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "TowerDef_Quest_Receive"
|
||||
},
|
||||
go_UnComplete = {
|
||||
sNodeName = "TMPUncomplete"
|
||||
},
|
||||
TMPUncomplete = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "TowerDef_Quest_UnComplete"
|
||||
},
|
||||
imgComplete = {},
|
||||
imgCompleteMask = {},
|
||||
txt_process = {sComponentName = "TMP_Text"},
|
||||
imgBarFill = {
|
||||
sComponentName = "RectTransform"
|
||||
}
|
||||
}
|
||||
TowerDefenseQuestCellCtrl._mapEventConfig = {}
|
||||
TowerDefenseQuestCellCtrl._mapRedDotConfig = {}
|
||||
function TowerDefenseQuestCellCtrl:SetData(nActId, questData)
|
||||
self.nActId = nActId
|
||||
self.questData = questData
|
||||
self.TowerDefenseData = PlayerData.Activity:GetActivityDataById(self.nActId)
|
||||
local config = ConfigTable.GetData("TowerDefenseQuest", self.questData.nId)
|
||||
if config == nil then
|
||||
return
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPTitle, config.Desc)
|
||||
self._mapNode.imgBarFill.anchoredPosition = Vector2(barMinX + (barMaxX - barMinX) * (questData.progress[1].Cur / questData.progress[1].Max), self._mapNode.imgBarFill.anchoredPosition.y)
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_process, questData.progress[1].Cur .. "/" .. questData.progress[1].Max)
|
||||
self._mapNode.imgComplete:SetActive(self.questData.nState == AllEnum.ActQuestStatus.Received)
|
||||
self._mapNode.imgCompleteMask:SetActive(self.questData.nState == AllEnum.ActQuestStatus.Received)
|
||||
self._mapNode.go_UnComplete:SetActive(self.questData.nState == AllEnum.ActQuestStatus.UnComplete)
|
||||
self._mapNode.btnReceive.gameObject:SetActive(self.questData.nState == AllEnum.ActQuestStatus.Complete)
|
||||
if config.Item1 > 0 then
|
||||
self._mapNode.btnReward.gameObject:SetActive(true)
|
||||
self._mapNode.rtReward:SetItem(config.Item1, nil, config.Qty1, nil, self.questData.nState == AllEnum.ActQuestStatus.Received)
|
||||
else
|
||||
self._mapNode.btnReward.gameObject:SetActive(false)
|
||||
end
|
||||
end
|
||||
function TowerDefenseQuestCellCtrl:OnBtnClick_GetReward()
|
||||
if self.questData == nil then
|
||||
return
|
||||
end
|
||||
self.TowerDefenseData:RequestReceiveQuest(0, self.questData.nId)
|
||||
end
|
||||
function TowerDefenseQuestCellCtrl:OnBtnClick_Reward()
|
||||
local config = ConfigTable.GetData("TowerDefenseQuest", self.questData.nId)
|
||||
if config == nil then
|
||||
return
|
||||
end
|
||||
if config.Item1 > 0 then
|
||||
UTILS.ClickItemGridWithTips(config.Item1, self._mapNode.btnReward.transform, true, true, false)
|
||||
end
|
||||
end
|
||||
function TowerDefenseQuestCellCtrl:OnEvent_AAA()
|
||||
end
|
||||
return TowerDefenseQuestCellCtrl
|
||||
@@ -0,0 +1,196 @@
|
||||
local TowerDefenseQuestCtrl = class("TowerDefenseQuestCtrl", BaseCtrl)
|
||||
local barMinX = -622
|
||||
local barMaxX = 0
|
||||
TowerDefenseQuestCtrl._mapNodeConfig = {
|
||||
blur = {
|
||||
sNodeName = "t_fullscreen_blur_blue"
|
||||
},
|
||||
txtWindowTitle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "TowerDef_QuestPanelTitle"
|
||||
},
|
||||
btnClose = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Close"
|
||||
},
|
||||
btnAllClose = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Close"
|
||||
},
|
||||
btn_GetReward = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_GetAllReward"
|
||||
},
|
||||
btn_GetReward_None = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_GetAllReward_None"
|
||||
},
|
||||
txt_getAllReward = {
|
||||
nCount = 2,
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "TowerDef_Quest_GetAllReward"
|
||||
},
|
||||
Group_loop_sv = {
|
||||
sNodeName = "sv_group",
|
||||
sComponentName = "LoopScrollView"
|
||||
},
|
||||
Quest_loop_sv = {
|
||||
sNodeName = "sv_quest",
|
||||
sComponentName = "LoopScrollView"
|
||||
},
|
||||
title_process = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "TowerDef_QuestPanel_CurProcess"
|
||||
},
|
||||
txt_GroupProcess = {sComponentName = "TMP_Text"},
|
||||
imgGroupProcessBarFill = {
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
animator = {sNodeName = "Quest", sComponentName = "Animator"}
|
||||
}
|
||||
TowerDefenseQuestCtrl._mapEventConfig = {
|
||||
TowerDefenseQuestReceived = "OnEvent_QuestUpdate"
|
||||
}
|
||||
TowerDefenseQuestCtrl._mapRedDotConfig = {}
|
||||
function TowerDefenseQuestCtrl:Awake()
|
||||
self.tbQuestGridCtrl = {}
|
||||
local param = self:GetPanelParam()
|
||||
local actId
|
||||
if type(param) == "table" then
|
||||
actId = param[1]
|
||||
end
|
||||
if actId ~= nil then
|
||||
self:SetData(actId, false)
|
||||
end
|
||||
end
|
||||
function TowerDefenseQuestCtrl:OnEnable()
|
||||
self._mapNode.blur:SetActive(true)
|
||||
self:PlayAnim_In()
|
||||
end
|
||||
function TowerDefenseQuestCtrl:OnDisable()
|
||||
if self.tbQuestGridCtrl ~= nil then
|
||||
for _, ctrl in pairs(self.tbQuestGridCtrl) do
|
||||
self:UnbindCtrlByNode(ctrl)
|
||||
end
|
||||
end
|
||||
self.tbQuestGridCtrl = {}
|
||||
end
|
||||
function TowerDefenseQuestCtrl:OnDestory()
|
||||
end
|
||||
function TowerDefenseQuestCtrl:PlayAnim_In()
|
||||
self._mapNode.animator:Play("t_window_04_t_in")
|
||||
EventManager.Hit(EventId.TemporaryBlockInput, 0.2)
|
||||
end
|
||||
function TowerDefenseQuestCtrl:SetData(nActId, bIsSubPanel)
|
||||
self.bIsSubPanel = bIsSubPanel
|
||||
self.nActId = nActId
|
||||
self.TowerDefenseData = PlayerData.Activity:GetActivityDataById(self.nActId)
|
||||
self.nSelecedGroupId = 0
|
||||
self.tbGroup = {}
|
||||
self.tbGroupConfig = {}
|
||||
local foreachQuestGroup = function(data)
|
||||
if data.ActivityId then
|
||||
table.insert(self.tbGroup, data.Id)
|
||||
self.tbGroupConfig[data.Id] = data
|
||||
end
|
||||
end
|
||||
ForEachTableLine(DataTable.TowerDefenseQuestGroup, foreachQuestGroup)
|
||||
table.sort(self.tbGroup, function(a, b)
|
||||
return a < b
|
||||
end)
|
||||
self.nSelecedGroupId = self.tbGroup[1]
|
||||
self._mapNode.Group_loop_sv:Init(#self.tbGroup, self, self.OnRefreshGroupGrid)
|
||||
self:UpdateQuestList(self.nSelecedGroupId)
|
||||
end
|
||||
function TowerDefenseQuestCtrl:UpdateQuestList(nGroupId)
|
||||
local tbQuest = self.TowerDefenseData:GetQuestbyGroupId(nGroupId)
|
||||
self.questList = {}
|
||||
for _, value in pairs(tbQuest) do
|
||||
table.insert(self.questList, value)
|
||||
end
|
||||
local sortFunc = function(a, b)
|
||||
if a.nState ~= b.nState then
|
||||
return a.nState < b.nState
|
||||
end
|
||||
return a.nId < b.nId
|
||||
end
|
||||
table.sort(self.questList, sortFunc)
|
||||
local nFinishCount = self.TowerDefenseData:GetGroupQuestReceiveCount(nGroupId)
|
||||
self._mapNode.Quest_loop_sv:Init(#self.questList, self, self.OnRefreshQuestGrid)
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_GroupProcess, string.format("%d/%d", nFinishCount, #self.questList))
|
||||
self._mapNode.imgGroupProcessBarFill.anchoredPosition = Vector2(barMinX + (barMaxX - barMinX) * (nFinishCount / #self.questList), self._mapNode.imgGroupProcessBarFill.anchoredPosition.y)
|
||||
local bHasFinish = false
|
||||
for _, questData in ipairs(self.questList) do
|
||||
if questData.nState == AllEnum.ActQuestStatus.Complete then
|
||||
bHasFinish = true
|
||||
break
|
||||
end
|
||||
end
|
||||
self._mapNode.btn_GetReward.gameObject:SetActive(bHasFinish)
|
||||
self._mapNode.btn_GetReward_None.gameObject:SetActive(not bHasFinish)
|
||||
end
|
||||
function TowerDefenseQuestCtrl:OnRefreshGroupGrid(goGrid, gridIndex)
|
||||
local nIndex = gridIndex + 1
|
||||
local txtName = goGrid.transform:Find("btnGrid/AnimRoot/txt_Name")
|
||||
NovaAPI.SetTMPText(txtName:GetComponent("TMP_Text"), self.tbGroupConfig[self.tbGroup[nIndex]].GroupName)
|
||||
local nFinishCount = self.TowerDefenseData:GetGroupQuestReceiveCount(self.tbGroup[nIndex])
|
||||
local nAllCount = 0
|
||||
for _, value in pairs(self.TowerDefenseData:GetQuestbyGroupId(self.tbGroup[nIndex])) do
|
||||
nAllCount = nAllCount + 1
|
||||
end
|
||||
local txtCount = goGrid.transform:Find("btnGrid/AnimRoot/txt_Process")
|
||||
NovaAPI.SetTMPText(txtCount:GetComponent("TMP_Text"), string.format("%d/%d", nFinishCount, nAllCount))
|
||||
local goSelected = goGrid.transform:Find("btnGrid/AnimRoot/img_selected")
|
||||
goSelected.gameObject:SetActive(self.tbGroup[nIndex] == self.nSelecedGroupId)
|
||||
if self.tbGroup[nIndex] == self.nSelecedGroupId then
|
||||
self.selectedGrid = goGrid
|
||||
end
|
||||
local reddot = goGrid.transform:Find("btnGrid/AnimRoot/reddot")
|
||||
RedDotManager.RegisterNode(RedDotDefine.Activity_TowerDefense_QuestGroup, {
|
||||
self.tbGroup[nIndex]
|
||||
}, reddot, nil, nil, true)
|
||||
local go_Button = goGrid.transform:Find("btnGrid")
|
||||
local btn_Select = go_Button:GetComponent("UIButton")
|
||||
btn_Select.onClick:RemoveAllListeners()
|
||||
local nGroupId = self.tbGroup[nIndex]
|
||||
btn_Select.onClick:AddListener(function()
|
||||
if self.selectedGrid ~= nil then
|
||||
local oldGoSelected = self.selectedGrid.transform:Find("btnGrid/AnimRoot/img_selected")
|
||||
oldGoSelected.gameObject:SetActive(false)
|
||||
end
|
||||
self.nSelecedGroupId = nGroupId
|
||||
self.selectedGrid = goGrid
|
||||
goSelected.gameObject:SetActive(true)
|
||||
self:UpdateQuestList(self.nSelecedGroupId)
|
||||
end)
|
||||
end
|
||||
function TowerDefenseQuestCtrl:OnRefreshQuestGrid(goGrid, gridIndex)
|
||||
local nIndex = gridIndex + 1
|
||||
local nInstanceId = goGrid:GetInstanceID()
|
||||
if not self.tbQuestGridCtrl[nInstanceId] then
|
||||
self.tbQuestGridCtrl[nInstanceId] = self:BindCtrlByNode(goGrid, "Game.UI.TowerDefense.TowerDefenseQuestCellCtrl")
|
||||
end
|
||||
self.tbQuestGridCtrl[nInstanceId]:SetData(self.nActId, self.questList[nIndex])
|
||||
end
|
||||
function TowerDefenseQuestCtrl:OnBtnClick_GetAllReward()
|
||||
self.TowerDefenseData:RequestReceiveQuest(self.nSelecedGroupId, 0)
|
||||
end
|
||||
function TowerDefenseQuestCtrl:OnBtnClick_GetAllReward_None()
|
||||
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Quest_ReceiveNone"))
|
||||
end
|
||||
function TowerDefenseQuestCtrl:OnBtnClick_Close()
|
||||
EventManager.Hit(EventId.TemporaryBlockInput, 0.2)
|
||||
self._mapNode.animator:Play("t_window_04_t_out")
|
||||
self:AddTimer(1, 0.2, function()
|
||||
if self.bIsSubPanel then
|
||||
EventManager.Hit("CloseTowerDefenseQuestPanel")
|
||||
else
|
||||
EventManager.Hit(EventId.ClosePanel, PanelId.TowerDefenseQuest)
|
||||
end
|
||||
end, true, true, true)
|
||||
end
|
||||
function TowerDefenseQuestCtrl:OnEvent_QuestUpdate()
|
||||
self._mapNode.Group_loop_sv:Init(#self.tbGroup, self, self.OnRefreshGroupGrid)
|
||||
self:UpdateQuestList(self.nSelecedGroupId)
|
||||
end
|
||||
return TowerDefenseQuestCtrl
|
||||
@@ -0,0 +1,22 @@
|
||||
local TowerDefenseQuestPanel = class("TowerDefenseQuestPanel", BasePanel)
|
||||
TowerDefenseQuestPanel._sSortingLayerName = AllEnum.SortingLayerName.UI
|
||||
TowerDefenseQuestPanel._bIsMainPanel = false
|
||||
TowerDefenseQuestPanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "Play_TowerDefence/TowerDefenseQuest.prefab",
|
||||
sCtrlName = "Game.UI.TowerDefense.TowerDefenseQuestCtrl"
|
||||
}
|
||||
}
|
||||
function TowerDefenseQuestPanel:Awake()
|
||||
end
|
||||
function TowerDefenseQuestPanel:OnEnable()
|
||||
end
|
||||
function TowerDefenseQuestPanel:OnAfterEnter()
|
||||
end
|
||||
function TowerDefenseQuestPanel:OnDisable()
|
||||
end
|
||||
function TowerDefenseQuestPanel:OnDestroy()
|
||||
end
|
||||
function TowerDefenseQuestPanel:OnRelease()
|
||||
end
|
||||
return TowerDefenseQuestPanel
|
||||
@@ -0,0 +1,84 @@
|
||||
local TowerDefenseResultCtrl = class("TowerDefenseResultCtrl", BaseCtrl)
|
||||
local WwiseManger = CS.WwiseAudioManager.Instance
|
||||
TowerDefenseResultCtrl._mapNodeConfig = {
|
||||
txt_level = {sComponentName = "TMP_Text"},
|
||||
db_target = {nCount = 3},
|
||||
ButtonClose = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Close"
|
||||
},
|
||||
imgBlurredBg = {},
|
||||
Mask = {
|
||||
sComponentName = "CanvasGroup"
|
||||
}
|
||||
}
|
||||
TowerDefenseResultCtrl._mapEventConfig = {}
|
||||
TowerDefenseResultCtrl._mapRedDotConfig = {}
|
||||
function TowerDefenseResultCtrl:Awake()
|
||||
local param = self:GetPanelParam()
|
||||
if type(param) == "table" then
|
||||
self.bResult = param[1]
|
||||
self.sLevelName = param[2]
|
||||
self.tbTarget = param[3]
|
||||
self.callback = param[4]
|
||||
self.msgData = param[5]
|
||||
end
|
||||
self:SetContent()
|
||||
self.bProcessingClose = false
|
||||
end
|
||||
function TowerDefenseResultCtrl:SetContent()
|
||||
EventManager.Hit(EventId.TemporaryBlockInput, 1)
|
||||
WwiseManger:PostEvent("ui_loading_combatSFX_mute", nil, false)
|
||||
WwiseManger:PlaySound("ui_roguelike_victory")
|
||||
for _, target in pairs(self._mapNode.db_target) do
|
||||
target:SetActive(false)
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_level, self.sLevelName)
|
||||
for i = 1, math.min(#self.tbTarget, #self._mapNode.db_target) do
|
||||
local target = self._mapNode.db_target[i]
|
||||
local star = target.transform:Find("star_get")
|
||||
local txt_target = target.transform:Find("txt_target")
|
||||
star.gameObject:SetActive(self.tbTarget[i].bResult)
|
||||
NovaAPI.SetTMPText(txt_target:GetComponent("TMP_Text"), self.tbTarget[i].sTargetDes)
|
||||
target:SetActive(true)
|
||||
end
|
||||
self:AddTimer(1, 0.5, function()
|
||||
local mapReward = PlayerData.Item:ProcessRewardChangeInfo(self.msgData)
|
||||
local tbItem = {}
|
||||
for _, v in ipairs(mapReward.tbReward) do
|
||||
local item = {
|
||||
Tid = v.id,
|
||||
Qty = v.count,
|
||||
rewardType = AllEnum.RewardType.First
|
||||
}
|
||||
table.insert(tbItem, item)
|
||||
end
|
||||
UTILS.OpenReceiveByDisplayItem(tbItem, self.msgData)
|
||||
end, true, true, true)
|
||||
end
|
||||
function TowerDefenseResultCtrl:OnBtnClick_Close()
|
||||
if self.bProcessingClose then
|
||||
return
|
||||
end
|
||||
self.bProcessingClose = true
|
||||
if self.callback ~= nil then
|
||||
self.callback()
|
||||
end
|
||||
if NovaAPI.GetCurrentModuleName() == "MainMenuModuleScene" then
|
||||
CS.AdventureModuleHelper.LevelStateChanged(true, 0, false)
|
||||
EventManager.Hit(EventId.CloesCurPanel)
|
||||
PlayerData.Base:OnBackToMainMenuModule()
|
||||
else
|
||||
EventManager.Hit(EventId.ClosePanel, PanelId.TowerDefensePanel)
|
||||
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()
|
||||
CS.AdventureModuleHelper.LevelStateChanged(true, 0, false)
|
||||
end)
|
||||
sequence:SetUpdate(true)
|
||||
end
|
||||
end
|
||||
return TowerDefenseResultCtrl
|
||||
@@ -0,0 +1,21 @@
|
||||
local TowerDefenseResultPanel = class("TowerDefenseResultPanel", BasePanel)
|
||||
TowerDefenseResultPanel._nSnapshotPrePanel = 1
|
||||
TowerDefenseResultPanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "Play_TowerDefence/TowerDefenseResultPanel.prefab",
|
||||
sCtrlName = "Game.UI.TowerDefense.TowerDefenseResultCtrl"
|
||||
}
|
||||
}
|
||||
function TowerDefenseResultPanel:Awake()
|
||||
end
|
||||
function TowerDefenseResultPanel:OnEnable()
|
||||
end
|
||||
function TowerDefenseResultPanel:OnAfterEnter()
|
||||
end
|
||||
function TowerDefenseResultPanel:OnDisable()
|
||||
end
|
||||
function TowerDefenseResultPanel:OnDestroy()
|
||||
end
|
||||
function TowerDefenseResultPanel:OnRelease()
|
||||
end
|
||||
return TowerDefenseResultPanel
|
||||
@@ -0,0 +1,232 @@
|
||||
local TowerDefenseSelectCtrl = class("TowerDefenseSelectCtrl", BaseCtrl)
|
||||
local barMinX = -365
|
||||
local barMaxX = 0
|
||||
TowerDefenseSelectCtrl._mapNodeConfig = {
|
||||
TopBar = {
|
||||
sNodeName = "TopBarPanel",
|
||||
sCtrlName = "Game.UI.TopBarEx.TopBarCtrl"
|
||||
},
|
||||
txt_story = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "TowerDef_Story"
|
||||
},
|
||||
redDotStory = {},
|
||||
btn_Story = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Story"
|
||||
},
|
||||
txt_guide = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "TowerDef_Guide"
|
||||
},
|
||||
btn_Guide = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Guide"
|
||||
},
|
||||
txt_quest = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "TowerDef_QuestTitle"
|
||||
},
|
||||
redDotQuest = {},
|
||||
btn_quest = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Quest"
|
||||
},
|
||||
txt_mainProcess = {sComponentName = "TMP_Text"},
|
||||
imgMainBarFill = {
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
txt_LevelTab1 = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "TowerDef_LevelTab1"
|
||||
},
|
||||
imgSelected1 = {},
|
||||
btn_LevelTab1 = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_LevelTab1"
|
||||
},
|
||||
redDotTab1 = {},
|
||||
txt_LevelTab2 = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "TowerDef_LevelTab2"
|
||||
},
|
||||
imgSelected2 = {},
|
||||
btn_LevelTab2 = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_LevelTab2"
|
||||
},
|
||||
redDotTab2 = {},
|
||||
loopSv = {
|
||||
sNodeName = "sv",
|
||||
sComponentName = "LoopScrollView"
|
||||
},
|
||||
blur = {},
|
||||
guidPanel = {
|
||||
sNodeName = "TowerDefenseGuidePanel",
|
||||
sCtrlName = "Game.UI.TowerDefense.TowerDefenseGuideCtrl"
|
||||
},
|
||||
storyPanel = {
|
||||
sNodeName = "TowerDefenseStory",
|
||||
sCtrlName = "Game.UI.TowerDefense.TowerDefenseStoryCtrl"
|
||||
},
|
||||
questPanel = {
|
||||
sNodeName = "TowerDefenseQuest",
|
||||
sCtrlName = "Game.UI.TowerDefense.TowerDefenseQuestCtrl"
|
||||
},
|
||||
animator = {
|
||||
sNodeName = "----SafeAreaRoot---",
|
||||
sComponentName = "Animator"
|
||||
}
|
||||
}
|
||||
TowerDefenseSelectCtrl._mapEventConfig = {
|
||||
TowerDefenseLevelCell_OnSelected = "OnEvent_LevelSelected",
|
||||
CloseTowerDefenseGuidePanel = "OnEvent_CloseTowerDefenseGuidePanel",
|
||||
CloseTowerDefenseStoryPanel = "OnEvent_CloseTowerDefenseStoryPanel",
|
||||
CloseTowerDefenseQuestPanel = "OnEvent_CloseTowerDefenseQuestPanel",
|
||||
TowerDefenseQuestUpdate = "InitQuest"
|
||||
}
|
||||
TowerDefenseSelectCtrl._mapRedDotConfig = {
|
||||
[RedDotDefine.Activity_TowerDefense_AllQuest] = {
|
||||
sNodeName = "redDotQuest"
|
||||
},
|
||||
[RedDotDefine.Activity_TowerDefense_AllStory] = {
|
||||
sNodeName = "redDotStory"
|
||||
}
|
||||
}
|
||||
function TowerDefenseSelectCtrl:Awake()
|
||||
local param = self:GetPanelParam()
|
||||
if type(param) == "table" then
|
||||
self.nActId = param[1]
|
||||
end
|
||||
self.TowerDefenseData = PlayerData.Activity:GetActivityDataById(self.nActId)
|
||||
self._mapNode.guidPanel.gameObject:SetActive(false)
|
||||
self._mapNode.storyPanel.gameObject:SetActive(false)
|
||||
self._mapNode.questPanel.gameObject:SetActive(false)
|
||||
self._mapNode.blur.gameObject:SetActive(false)
|
||||
self._mapNode.animator:Play("TowerDefenseSelectBg_in")
|
||||
self.nSelectedTabIndex = 0
|
||||
end
|
||||
function TowerDefenseSelectCtrl:OnEnable()
|
||||
if self.nSelectedTabIndex == 0 then
|
||||
self.nSelectedTabIndex = 1
|
||||
end
|
||||
self:Init()
|
||||
end
|
||||
function TowerDefenseSelectCtrl:OnDisable()
|
||||
for nInstanceId, objCtrl in pairs(self.tbGridCtrl) do
|
||||
self:UnbindCtrlByNode(objCtrl)
|
||||
self.tbGridCtrl[nInstanceId] = nil
|
||||
end
|
||||
self.tbGridCtrl = {}
|
||||
end
|
||||
function TowerDefenseSelectCtrl:OnDestroy()
|
||||
self.TowerDefenseData:RefreshRedDotbyTab(self.nSelectedTabIndex)
|
||||
end
|
||||
function TowerDefenseSelectCtrl:Init()
|
||||
self.tblevel = {}
|
||||
self.tbGridCtrl = {}
|
||||
RedDotManager.RegisterNode(RedDotDefine.Activity_TowerDefense_LevelTab, {1}, self._mapNode.redDotTab1)
|
||||
RedDotManager.RegisterNode(RedDotDefine.Activity_TowerDefense_LevelTab, {2}, self._mapNode.redDotTab2)
|
||||
self:UpdateLevel()
|
||||
self:InitQuest()
|
||||
self:SetTabUI()
|
||||
end
|
||||
function TowerDefenseSelectCtrl:InitQuest()
|
||||
local allCount = self.TowerDefenseData:GetAllQuestCount()
|
||||
local receivedCount = self.TowerDefenseData:GetAllReceivedCount()
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_mainProcess, receivedCount .. "/" .. allCount)
|
||||
self._mapNode.imgMainBarFill.anchoredPosition = Vector2(barMinX + (barMaxX - barMinX) * (receivedCount / allCount), self._mapNode.imgMainBarFill.anchoredPosition.y)
|
||||
end
|
||||
function TowerDefenseSelectCtrl:SetTabUI()
|
||||
self._mapNode.imgSelected1:SetActive(self.nSelectedTabIndex == 1)
|
||||
self._mapNode.imgSelected2:SetActive(self.nSelectedTabIndex == 2)
|
||||
local selectedColor = Color(0.9803921568627451, 0.9803921568627451, 0.9803921568627451)
|
||||
local normalColor = Color(0.14901960784313725, 0.25882352941176473, 0.47058823529411764)
|
||||
if self.nSelectedTabIndex == 1 then
|
||||
NovaAPI.SetTMPColor(self._mapNode.txt_LevelTab1, selectedColor)
|
||||
NovaAPI.SetTMPColor(self._mapNode.txt_LevelTab2, normalColor)
|
||||
elseif self.nSelectedTabIndex == 2 then
|
||||
NovaAPI.SetTMPColor(self._mapNode.txt_LevelTab1, normalColor)
|
||||
NovaAPI.SetTMPColor(self._mapNode.txt_LevelTab2, selectedColor)
|
||||
end
|
||||
end
|
||||
function TowerDefenseSelectCtrl:UpdateLevel()
|
||||
self.tbLevel = self.TowerDefenseData:GetLevelsByTab(self.nSelectedTabIndex)
|
||||
local sortFunc = function(a, b)
|
||||
local aConfig = ConfigTable.GetData("TowerDefenseLevel", a.nLevelId)
|
||||
local bConfig = ConfigTable.GetData("TowerDefenseLevel", b.nLevelId)
|
||||
return aConfig.Id < bConfig.Id
|
||||
end
|
||||
table.sort(self.tbLevel, sortFunc)
|
||||
for nInstanceId, objCtrl in pairs(self.tbGridCtrl) do
|
||||
self:UnbindCtrlByNode(objCtrl)
|
||||
self.tbGridCtrl[nInstanceId] = nil
|
||||
end
|
||||
self._mapNode.loopSv:SetAnim(0.1)
|
||||
self._mapNode.loopSv:Init(#self.tbLevel, self, self.OnRefreshGrid)
|
||||
end
|
||||
function TowerDefenseSelectCtrl:OnRefreshGrid(goGrid, gridIndex)
|
||||
local nIndex = gridIndex + 1
|
||||
local nInstanceId = goGrid:GetInstanceID()
|
||||
if not self.tbGridCtrl[nInstanceId] then
|
||||
self.tbGridCtrl[nInstanceId] = self:BindCtrlByNode(goGrid, "Game.UI.TowerDefense.TowerDefenseLevelCellCtrl")
|
||||
end
|
||||
self.tbGridCtrl[nInstanceId]:SetData(self.nActId, self.tbLevel[nIndex])
|
||||
end
|
||||
function TowerDefenseSelectCtrl:OnBtnClick_Guide()
|
||||
self._mapNode.blur.gameObject:SetActive(true)
|
||||
self._mapNode.guidPanel.gameObject:SetActive(true)
|
||||
self._mapNode.guidPanel:SetData(self.nActId)
|
||||
end
|
||||
function TowerDefenseSelectCtrl:OnBtnClick_LevelTab1()
|
||||
if self.nSelectedTabIndex == 1 then
|
||||
return
|
||||
end
|
||||
self.TowerDefenseData:RefreshRedDotbyTab(self.nSelectedTabIndex)
|
||||
self.nSelectedTabIndex = 1
|
||||
self:SetTabUI()
|
||||
self:UpdateLevel()
|
||||
end
|
||||
function TowerDefenseSelectCtrl:OnBtnClick_LevelTab2()
|
||||
if self.nSelectedTabIndex == 2 then
|
||||
return
|
||||
end
|
||||
self.TowerDefenseData:RefreshRedDotbyTab(self.nSelectedTabIndex)
|
||||
self.nSelectedTabIndex = 2
|
||||
self:SetTabUI()
|
||||
self:UpdateLevel()
|
||||
end
|
||||
function TowerDefenseSelectCtrl:OnBtnClick_Story()
|
||||
self._mapNode.blur.gameObject:SetActive(true)
|
||||
self._mapNode.storyPanel.gameObject:SetActive(true)
|
||||
self._mapNode.storyPanel:SetData(self.nActId)
|
||||
end
|
||||
function TowerDefenseSelectCtrl:OnBtnClick_Quest()
|
||||
self._mapNode.blur.gameObject:SetActive(true)
|
||||
self._mapNode.questPanel.gameObject:SetActive(true)
|
||||
self._mapNode.questPanel:PlayAnim_In()
|
||||
self._mapNode.questPanel:SetData(self.nActId, true)
|
||||
end
|
||||
function TowerDefenseSelectCtrl:OnEvent_LevelSelected(nLevelId)
|
||||
if not self.TowerDefenseData:IsLevelUnlock(nLevelId) then
|
||||
return
|
||||
end
|
||||
if not self.TowerDefenseData:IsPreLevelPass(nLevelId) then
|
||||
return
|
||||
end
|
||||
self.TowerDefenseData:EnterLevelSelect(nLevelId)
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.TowerDefenseLevelDetailPanel, self.nActId, nLevelId)
|
||||
end
|
||||
function TowerDefenseSelectCtrl:OnEvent_CloseTowerDefenseGuidePanel()
|
||||
self._mapNode.guidPanel.gameObject:SetActive(false)
|
||||
self._mapNode.blur.gameObject:SetActive(false)
|
||||
end
|
||||
function TowerDefenseSelectCtrl:OnEvent_CloseTowerDefenseStoryPanel()
|
||||
self._mapNode.storyPanel.gameObject:SetActive(false)
|
||||
self._mapNode.blur.gameObject:SetActive(false)
|
||||
end
|
||||
function TowerDefenseSelectCtrl:OnEvent_CloseTowerDefenseQuestPanel()
|
||||
self._mapNode.questPanel.gameObject:SetActive(false)
|
||||
self._mapNode.blur.gameObject:SetActive(false)
|
||||
end
|
||||
return TowerDefenseSelectCtrl
|
||||
@@ -0,0 +1,22 @@
|
||||
local TowerDefenseSelectPanel = class("TowerDefenseSelectPanel", BasePanel)
|
||||
TowerDefenseSelectPanel._bIsMainPanel = true
|
||||
TowerDefenseSelectPanel._sSortingLayerName = AllEnum.SortingLayerName.UI
|
||||
TowerDefenseSelectPanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "Play_TowerDefence/TowerDefenseSelectPanel.prefab",
|
||||
sCtrlName = "Game.UI.TowerDefense.TowerDefenseSelectCtrl"
|
||||
}
|
||||
}
|
||||
function TowerDefenseSelectPanel:Awake()
|
||||
end
|
||||
function TowerDefenseSelectPanel:OnEnable()
|
||||
end
|
||||
function TowerDefenseSelectPanel:OnAfterEnter()
|
||||
end
|
||||
function TowerDefenseSelectPanel:OnDisable()
|
||||
end
|
||||
function TowerDefenseSelectPanel:OnDestroy()
|
||||
end
|
||||
function TowerDefenseSelectPanel:OnRelease()
|
||||
end
|
||||
return TowerDefenseSelectPanel
|
||||
@@ -0,0 +1,99 @@
|
||||
local TowerDefenseStoryCtrl = class("TowerDefenseStoryCtrl", BaseCtrl)
|
||||
TowerDefenseStoryCtrl._mapNodeConfig = {
|
||||
txtWindowTitle_Story = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "TowerDef_Story"
|
||||
},
|
||||
btnClose = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Close"
|
||||
},
|
||||
sv_story = {
|
||||
sComponentName = "LoopScrollView"
|
||||
}
|
||||
}
|
||||
TowerDefenseStoryCtrl._mapEventConfig = {}
|
||||
TowerDefenseStoryCtrl._mapRedDotConfig = {}
|
||||
function TowerDefenseStoryCtrl:Awake()
|
||||
self.animator = self.gameObject:GetComponent("Animator")
|
||||
end
|
||||
function TowerDefenseStoryCtrl:SetData(ActId)
|
||||
self.animator:Play("t_window_04_t_in")
|
||||
EventManager.Hit(EventId.TemporaryBlockInput, 0.2)
|
||||
self.TowerDefenseData = PlayerData.Activity:GetActivityDataById(ActId)
|
||||
self.tbStoryId = {}
|
||||
local forEach = function(data)
|
||||
if ActId == data.ActivityIdId then
|
||||
table.insert(self.tbStoryId, data.Id)
|
||||
end
|
||||
end
|
||||
ForEachTableLine(DataTable.TowerDefenseStory, forEach)
|
||||
local sortFunc = function(a, b)
|
||||
return a < b
|
||||
end
|
||||
table.sort(self.tbStoryId, sortFunc)
|
||||
self._mapNode.sv_story:Init(#self.tbStoryId, self, self.OnRefreshGrid)
|
||||
end
|
||||
function TowerDefenseStoryCtrl:OnRefreshGrid(goGrid, gridIndex)
|
||||
local nIndex = gridIndex + 1
|
||||
local bUnlock = self.TowerDefenseData:IsStoryUnlock(self.tbStoryId[nIndex])
|
||||
local go_lock = goGrid.transform:Find("btnGrid/lock")
|
||||
local go_AnimRoot = goGrid.transform:Find("btnGrid/AnimRoot")
|
||||
local storyConfig = ConfigTable.GetData("TowerDefenseStory", self.tbStoryId[nIndex])
|
||||
if storyConfig == nil then
|
||||
return
|
||||
end
|
||||
if bUnlock then
|
||||
go_lock.gameObject:SetActive(false)
|
||||
go_AnimRoot.gameObject:SetActive(true)
|
||||
local txt_index = go_AnimRoot.transform:Find("txtLevelIndex"):GetComponent("TMP_Text")
|
||||
NovaAPI.SetTMPText(txt_index, orderedFormat(ConfigTable.GetUIText("TowerDef_Story_Index"), nIndex))
|
||||
local txt_name = go_AnimRoot.transform:Find("txtLevelName"):GetComponent("TMP_Text")
|
||||
NovaAPI.SetTMPText(txt_name, storyConfig.Name)
|
||||
local imgReward = go_AnimRoot.transform:Find("img_reward"):GetComponent("Image")
|
||||
local txt_Reward = go_AnimRoot.transform:Find("txt_reward"):GetComponent("TMP_Text")
|
||||
if storyConfig.Item1 ~= 0 then
|
||||
local itemConfig = ConfigTable.GetData_Item(storyConfig.Item1)
|
||||
if itemConfig ~= nil then
|
||||
self:SetPngSprite(imgReward, itemConfig.Icon)
|
||||
NovaAPI.SetTMPText(txt_Reward, "x" .. storyConfig.Qty1)
|
||||
end
|
||||
end
|
||||
local btn_go = go_AnimRoot.transform:Find("btnSelect"):GetComponent("UIButton")
|
||||
btn_go.onClick:RemoveAllListeners()
|
||||
btn_go.onClick:AddListener(function()
|
||||
self.TowerDefenseData:PlayAvg(storyConfig.Id, storyConfig.AvgId)
|
||||
end)
|
||||
local reddot = go_AnimRoot.transform:Find("RedDot")
|
||||
RedDotManager.RegisterNode(RedDotDefine.Activity_TowerDefense_Story, storyConfig.Id, reddot)
|
||||
else
|
||||
go_lock.gameObject:SetActive(true)
|
||||
go_AnimRoot.gameObject:SetActive(false)
|
||||
local txtUnlock = go_lock.transform:Find("txtUnlock"):GetComponent("TMP_Text")
|
||||
local levelConfig = ConfigTable.GetData("TowerDefenseLevel", storyConfig.LevelId)
|
||||
if levelConfig == nil then
|
||||
NovaAPI.SetTMPText(txtUnlock, orderedFormat(ConfigTable.GetUIText("TowerDef_Story_Lock"), ""))
|
||||
else
|
||||
NovaAPI.SetTMPText(txtUnlock, orderedFormat(ConfigTable.GetUIText("TowerDef_Story_Lock"), levelConfig.LevelName))
|
||||
end
|
||||
local txt_reward_title = go_lock.transform:Find("txtreward_title"):GetComponent("TMP_Text")
|
||||
local imgReward = go_lock.transform:Find("img_reward"):GetComponent("Image")
|
||||
local txt_Reward = go_lock.transform:Find("txt_reward"):GetComponent("TMP_Text")
|
||||
if storyConfig.Item1 ~= 0 then
|
||||
local itemConfig = ConfigTable.GetData_Item("storyConfig.Item1")
|
||||
if itemConfig ~= nil then
|
||||
self:SetPngSprite(imgReward, itemConfig.Icon)
|
||||
NovaAPI.SetTMPText(txt_Reward, storyConfig.Qty1)
|
||||
NovaAPI.SetTMPText(txt_reward_title, ConfigTable.GetUIText("TowerDef_Story_RewardTitle"))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
function TowerDefenseStoryCtrl:OnBtnClick_Close()
|
||||
EventManager.Hit(EventId.TemporaryBlockInput, 0.2)
|
||||
self.animator:Play("t_window_04_t_out")
|
||||
self:AddTimer(1, 0.2, function()
|
||||
EventManager.Hit("CloseTowerDefenseStoryPanel")
|
||||
end, true, true, true)
|
||||
end
|
||||
return TowerDefenseStoryCtrl
|
||||
@@ -0,0 +1,52 @@
|
||||
local TowerDefenseTeamCharCtrl = class("TowerDefenseTeamCharCtrl", BaseCtrl)
|
||||
TowerDefenseTeamCharCtrl._mapNodeConfig = {
|
||||
icon_char = {sComponentName = "Image"},
|
||||
txt_name = {sComponentName = "TMP_Text"},
|
||||
go_select = {},
|
||||
go_selectMask = {},
|
||||
selected_tips = {},
|
||||
index = {nCount = 6},
|
||||
txt_selected = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "TowerDef_TeamEditor_Selected"
|
||||
}
|
||||
}
|
||||
TowerDefenseTeamCharCtrl._mapEventConfig = {
|
||||
TowerDefense_CharUpdate = "OnEvent_UpdateIndex"
|
||||
}
|
||||
TowerDefenseTeamCharCtrl._mapRedDotConfig = {}
|
||||
function TowerDefenseTeamCharCtrl:SetData(guideId, index)
|
||||
self.guideId = guideId
|
||||
local guideConfig = ConfigTable.GetData("TowerDefenseGuide", self.guideId)
|
||||
if guideConfig == nil then
|
||||
return
|
||||
end
|
||||
local characterConfig = ConfigTable.GetData("TowerDefenseCharacter", guideConfig.ObjectId)
|
||||
if characterConfig == nil then
|
||||
return
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_name, characterConfig.Name)
|
||||
if characterConfig.Icon ~= "" then
|
||||
self:SetPngSprite(self._mapNode.icon_char, characterConfig.Icon .. AllEnum.CharHeadIconSurfix.QM)
|
||||
end
|
||||
self:UpdateIndex(index)
|
||||
end
|
||||
function TowerDefenseTeamCharCtrl:UpdateIndex(nIndex)
|
||||
if 0 < nIndex then
|
||||
self._mapNode.go_select:SetActive(true)
|
||||
self._mapNode.selected_tips:SetActive(true)
|
||||
self._mapNode.go_selectMask:SetActive(true)
|
||||
for i = 1, 6 do
|
||||
self._mapNode.index[i]:SetActive(i == nIndex)
|
||||
end
|
||||
else
|
||||
self._mapNode.go_select:SetActive(false)
|
||||
self._mapNode.selected_tips:SetActive(false)
|
||||
self._mapNode.go_selectMask:SetActive(false)
|
||||
end
|
||||
end
|
||||
function TowerDefenseTeamCharCtrl:OnEvent_UpdateIndex(tbCharacterIds)
|
||||
local index = table.indexof(tbCharacterIds, self.guideId)
|
||||
self:UpdateIndex(index)
|
||||
end
|
||||
return TowerDefenseTeamCharCtrl
|
||||
@@ -0,0 +1,165 @@
|
||||
local TowerDefenseTeamCtrl = class("TowerDefenseTeamCtrl", BaseCtrl)
|
||||
TowerDefenseTeamCtrl._mapNodeConfig = {
|
||||
btnBack = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Close"
|
||||
},
|
||||
btn_go = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Go"
|
||||
},
|
||||
txt_go = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "TowerDef_Go"
|
||||
},
|
||||
txt_sv_char_title = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "TowerDef_TeamEditor_Char"
|
||||
},
|
||||
character_loopSv = {
|
||||
sComponentName = "LoopScrollView"
|
||||
},
|
||||
txt_sv_item_title = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "TowerDef_TeamEditor_Item"
|
||||
},
|
||||
item_loopSv = {
|
||||
sComponentName = "LoopScrollView"
|
||||
},
|
||||
txt_guide = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "TowerDef_Guide"
|
||||
},
|
||||
btn_Guide = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Guide"
|
||||
},
|
||||
blur = {},
|
||||
guidPanel = {
|
||||
sNodeName = "TowerDefenseGuidePanel",
|
||||
sCtrlName = "Game.UI.TowerDefense.TowerDefenseGuideCtrl"
|
||||
}
|
||||
}
|
||||
TowerDefenseTeamCtrl._mapEventConfig = {
|
||||
CloseTowerDefenseGuidePanel = "OnEvent_CloseTowerDefenseGuidePanel"
|
||||
}
|
||||
TowerDefenseTeamCtrl._mapRedDotConfig = {}
|
||||
function TowerDefenseTeamCtrl:Awake()
|
||||
self._mapNode.blur:SetActive(false)
|
||||
self._mapNode.guidPanel.gameObject:SetActive(false)
|
||||
self.tbGridCtrl = {}
|
||||
end
|
||||
function TowerDefenseTeamCtrl:OnDisable()
|
||||
for nInstanceId, objCtrl in pairs(self.tbGridCtrl) do
|
||||
self:UnbindCtrlByNode(objCtrl)
|
||||
self.tbGridCtrl[nInstanceId] = nil
|
||||
end
|
||||
self.tbGridCtrl = {}
|
||||
end
|
||||
function TowerDefenseTeamCtrl:SetData(nActId, nLevelId, tbChracter, nItemId)
|
||||
self.tbGridCtrl = {}
|
||||
self.nActId = nActId
|
||||
self.tbSelectedCharGuideIds = tbChracter
|
||||
self.nSelectedItemId = nItemId
|
||||
self.nLevelId = nLevelId
|
||||
self.TowerDefenseData = PlayerData.Activity:GetActivityDataById(self.nActId)
|
||||
self.levelConfig = ConfigTable.GetData("TowerDefenseLevel", self.nLevelId)
|
||||
local floorConfig = ConfigTable.GetData("TowerDefenseFloor", self.levelConfig.FloorId)
|
||||
self.nTeamMaxCharacter = floorConfig.MemberNum
|
||||
self.tbCharGuideIds = {}
|
||||
self.tbItemIds = {}
|
||||
local forEachFunction = function(config)
|
||||
if config.ActivityId == nActId and self.TowerDefenseData:IsLevelUnlock(config.LevelId) and self.TowerDefenseData:IsPreLevelPass(config.LevelId) then
|
||||
if config.GuideType == GameEnum.TowerDefGuideType.Character then
|
||||
table.insert(self.tbCharGuideIds, config.Id)
|
||||
elseif config.GuideType == GameEnum.TowerDefGuideType.Item then
|
||||
table.insert(self.tbItemIds, config.Id)
|
||||
end
|
||||
end
|
||||
end
|
||||
ForEachTableLine(DataTable.TowerDefenseGuide, forEachFunction)
|
||||
self._mapNode.character_loopSv:Init(#self.tbCharGuideIds, self, self.OnRefreshGrid_Character, self.OnCharacterGridBtnClick)
|
||||
self._mapNode.item_loopSv:Init(#self.tbItemIds, self, self.OnRefreshGrid_Item, self.OnItemGridBtnClick)
|
||||
end
|
||||
function TowerDefenseTeamCtrl:OnRefreshGrid_Character(goGrid, gridIndex)
|
||||
local nIndex = gridIndex + 1
|
||||
local nInstanceId = goGrid:GetInstanceID()
|
||||
if not self.tbGridCtrl[nInstanceId] then
|
||||
self.tbGridCtrl[nInstanceId] = self:BindCtrlByNode(goGrid, "Game.UI.TowerDefense.TowerDefenseTeamCharCtrl")
|
||||
end
|
||||
local charIndex = table.indexof(self.tbSelectedCharGuideIds, self.tbCharGuideIds[nIndex])
|
||||
self.tbGridCtrl[nInstanceId]:SetData(self.tbCharGuideIds[nIndex], charIndex)
|
||||
end
|
||||
function TowerDefenseTeamCtrl:OnRefreshGrid_Item(goGrid, gridIndex)
|
||||
local nIndex = gridIndex + 1
|
||||
local icon = goGrid.transform:Find("btn_grid/AnimRoot/img_icon")
|
||||
local guideConfig = ConfigTable.GetData("TowerDefenseGuide", self.tbItemIds[nIndex])
|
||||
if guideConfig == nil then
|
||||
return
|
||||
end
|
||||
local itemConfig = ConfigTable.GetData("TowerDefenseItem", guideConfig.ObjectId)
|
||||
if itemConfig == nil then
|
||||
return
|
||||
end
|
||||
if itemConfig.CardIcon ~= "" then
|
||||
self:SetPngSprite(icon.gameObject:GetComponent("Image"), itemConfig.CardIcon)
|
||||
end
|
||||
local selected = goGrid.transform:Find("btn_grid/AnimRoot/go_select")
|
||||
selected.gameObject:SetActive(self.nItemId == self.tbItemIds[nIndex])
|
||||
local go_selectMask = goGrid.transform:Find("btn_grid/AnimRoot/go_selectMask")
|
||||
go_selectMask.gameObject:SetActive(self.nItemId == self.tbItemIds[nIndex])
|
||||
local selected_tips = goGrid.transform:Find("btn_grid/AnimRoot/selected_tips")
|
||||
selected_tips.gameObject:SetActive(self.nItemId == self.tbItemIds[nIndex])
|
||||
local txt_selected = goGrid.transform:Find("btn_grid/AnimRoot/selected_tips/txt_selected")
|
||||
NovaAPI:SetTMPText(txt_selected:GetComponent("TMP_Text"), ConfigTable.GetUIText("TowerDef_TeamEditor_Selected"))
|
||||
end
|
||||
function TowerDefenseTeamCtrl:OnCharacterGridBtnClick(goGrid, gridIndex)
|
||||
local nIndex = gridIndex + 1
|
||||
local charIndex = table.indexof(self.tbSelectedCharGuideIds, self.tbCharGuideIds[nIndex])
|
||||
if 0 < charIndex then
|
||||
table.remove(self.tbSelectedCharGuideIds, charIndex)
|
||||
EventManager.Hit("TowerDefense_CharUpdate", self.tbSelectedCharGuideIds)
|
||||
elseif #self.tbSelectedCharGuideIds >= self.nTeamMaxCharacter then
|
||||
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("TowerDef_TeamEditor_CharTip"))
|
||||
else
|
||||
table.insert(self.tbSelectedCharGuideIds, self.tbCharGuideIds[nIndex])
|
||||
EventManager.Hit("TowerDefense_CharUpdate", self.tbSelectedCharGuideIds)
|
||||
end
|
||||
end
|
||||
function TowerDefenseTeamCtrl:OnItemGridBtnClick(goGrid, gridIndex)
|
||||
local nIndex = gridIndex + 1
|
||||
local selectItemId = self.tbItemIds[nIndex]
|
||||
if self.nSelectedItemId == selectItemId then
|
||||
local selected = goGrid.transform:Find("btn_grid/AnimRoot/selected")
|
||||
selected.gameObject:SetActive(false)
|
||||
local go_selectMask = goGrid.transform:Find("btn_grid/AnimRoot/go_selectMask")
|
||||
go_selectMask.gameObject:SetActive(false)
|
||||
self.nSelectedItemId = 0
|
||||
EventManager.Hit("TowerDefense_ItemUpdate", self.nSelectedItemId)
|
||||
elseif self.nSelectedItemId ~= nil or self.nSelectedItemId ~= 0 then
|
||||
local selected = goGrid.transform:Find("btn_grid/AnimRoot/go_select")
|
||||
selected.gameObject:SetActive(true)
|
||||
local go_selectMask = goGrid.transform:Find("btn_grid/AnimRoot/go_selectMask")
|
||||
go_selectMask.gameObject:SetActive(true)
|
||||
self.nSelectedItemId = self.tbItemIds[nIndex]
|
||||
EventManager.Hit("TowerDefense_ItemUpdate", self.nSelectedItemId)
|
||||
else
|
||||
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("TowerDef_TeamEditor_ItemTip"))
|
||||
end
|
||||
end
|
||||
function TowerDefenseTeamCtrl:OnBtnClick_Close()
|
||||
EventManager.Hit("TowerDefenseTeamPanelClose")
|
||||
end
|
||||
function TowerDefenseTeamCtrl:OnBtnClick_Go()
|
||||
EventManager.Hit("TowerDefenseTeamPanelConfirm")
|
||||
end
|
||||
function TowerDefenseTeamCtrl:OnBtnClick_Guide()
|
||||
self._mapNode.blur.gameObject:SetActive(true)
|
||||
self._mapNode.guidPanel.gameObject:SetActive(true)
|
||||
self._mapNode.guidPanel:SetData(self.nActId)
|
||||
end
|
||||
function TowerDefenseTeamCtrl:OnEvent_CloseTowerDefenseGuidePanel()
|
||||
self._mapNode.guidPanel.gameObject:SetActive(false)
|
||||
self._mapNode.blur.gameObject:SetActive(false)
|
||||
end
|
||||
return TowerDefenseTeamCtrl
|
||||
@@ -0,0 +1,58 @@
|
||||
local BaseCtrl = require("Game.UI.CommonTipsEx.CommonTipsBaseCtrl")
|
||||
local TowerDefTipsCtrl = class("TowerDefTipsCtrl", BaseCtrl)
|
||||
TowerDefTipsCtrl._mapNodeConfig = {
|
||||
btnCloseTips = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_ClosePanel"
|
||||
},
|
||||
rtContent = {
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
safeAreaRoot = {
|
||||
sNodeName = "----SafeAreaRoot----",
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
txtName = {sComponentName = "TMP_Text"},
|
||||
txtDesc = {sComponentName = "TMP_Text"},
|
||||
btnShortcutClose = {
|
||||
sComponentName = "NaviButton",
|
||||
callback = "OnBtnClick_ClosePanel"
|
||||
}
|
||||
}
|
||||
TowerDefTipsCtrl._mapEventConfig = {}
|
||||
function TowerDefTipsCtrl:Awake()
|
||||
local tbParam = self:GetPanelParam()
|
||||
if type(tbParam) == "table" then
|
||||
self.rtTarget = tbParam[1]
|
||||
self.name = tbParam[2]
|
||||
self.des = tbParam[3]
|
||||
end
|
||||
end
|
||||
function TowerDefTipsCtrl:FadeIn()
|
||||
end
|
||||
function TowerDefTipsCtrl:FadeOut()
|
||||
end
|
||||
function TowerDefTipsCtrl:OnEnable()
|
||||
self:EnableGamepadUI(self._mapNode.btnShortcutClose)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtName, self.name)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtDesc, self.des)
|
||||
self._mapNode.rtContent.gameObject:SetActive(false)
|
||||
local wait = function()
|
||||
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
||||
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
||||
self:SetTipsPosition(self.rtTarget, self._mapNode.rtContent, self._mapNode.safeAreaRoot)
|
||||
self._mapNode.rtContent.gameObject:SetActive(true)
|
||||
end
|
||||
cs_coroutine.start(wait)
|
||||
end
|
||||
function TowerDefTipsCtrl:OnDisable()
|
||||
self:DisableGamepadUI()
|
||||
end
|
||||
function TowerDefTipsCtrl:OnDestroy()
|
||||
end
|
||||
function TowerDefTipsCtrl:OnRelease()
|
||||
end
|
||||
function TowerDefTipsCtrl:OnBtnClick_ClosePanel(btn)
|
||||
EventManager.Hit(EventId.ClosePanel, PanelId.TowerDefenseTipsPanel)
|
||||
end
|
||||
return TowerDefTipsCtrl
|
||||
@@ -0,0 +1,21 @@
|
||||
local TowerDefTipsPanel = class("TowerDefTipsPanel", BasePanel)
|
||||
TowerDefTipsPanel._bIsMainPanel = false
|
||||
TowerDefTipsPanel._bAddToBackHistory = false
|
||||
TowerDefTipsPanel._sSortingLayerName = AllEnum.SortingLayerName.UI_Top
|
||||
TowerDefTipsPanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "Play_TowerDefence/TowerDefTips.prefab",
|
||||
sCtrlName = "Game.UI.TowerDefense.TowerDefTipsCtrl"
|
||||
}
|
||||
}
|
||||
function TowerDefTipsPanel:Awake()
|
||||
end
|
||||
function TowerDefTipsPanel:OnEnable()
|
||||
end
|
||||
function TowerDefTipsPanel:OnDisable()
|
||||
end
|
||||
function TowerDefTipsPanel:OnDestroy()
|
||||
end
|
||||
function TowerDefTipsPanel:OnRelease()
|
||||
end
|
||||
return TowerDefTipsPanel
|
||||
Reference in New Issue
Block a user