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:
SL1900
2025-12-03 01:00:00 +09:00
commit 5e0d58cfad
3595 changed files with 9373562 additions and 0 deletions
@@ -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