PGRData/Script/matrix/xui/xuidoubletowers/XUiDoubleTowersSkillDetails.lua

257 lines
No EOL
10 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

--阶段描述
local CONDITION_COLOR = {
[true] = XUiHelper.Hexcolor2Color("61A27A"),
[false] = CS.UnityEngine.Color.gray,
}
--金币花费
local LEVEL_UP_CONDITION_COLOR = {
[true] = CS.UnityEngine.Color.black,
[false] = XUiHelper.Hexcolor2Color("FC8686"),
}
local COLOR_CONDITION_FUNC = {
[XDoubleTowersConfigs.ModuleType.Role] = function(level, pluginLevel)
return level >= pluginLevel
end,
[XDoubleTowersConfigs.ModuleType.Guard] = function(level, pluginLevel)
return level == pluginLevel
end
}
--动作塔防插件弹窗
local XUiDoubleTowersSkillDetails = XLuaUiManager.Register(XLuaUi, "UiDoubleTowersSkillDetails")
function XUiDoubleTowersSkillDetails:OnAwake()
self.BaseInfo = XDataCenter.DoubleTowersManager.GetBaseInfo()
self.TeamDb = self.BaseInfo:GetTeamDb()
self.TxtSkillDesA2.gameObject:SetActiveEx(false)
self:InitButtons()
end
--pluginIdDoubleTowerPlugin表的Id
--slotChangeCb装备、卸下、替换导致插槽变化时回调
--slotIndex插槽下标可为空
function XUiDoubleTowersSkillDetails:OnStart(pluginId, slotChangeCb, slotIndex)
self.PluginId = pluginId
self.SlotChangeCb = slotChangeCb
self.SlotIndex = slotIndex or -1
--插件图标
local icon = XDoubleTowersConfigs.GetPluginIcon(pluginId)
self.PartnerIcon:SetRawImage(icon)
--各等级列表
self:InitTxtSkillDes()
--消耗的道具图标
local rewardItemId = XDoubleTowersConfigs.GetActivityRewardItemId()
local costIcon = XItemConfigs.GetItemIconById(rewardItemId)
self.IconLevelUp:SetRawImage(costIcon)
end
function XUiDoubleTowersSkillDetails:OnEnable()
self:Refresh()
end
function XUiDoubleTowersSkillDetails:InitTxtSkillDes()
self.TxtSkillDesList = {} --插件详情文本列表
self.TxtSkillPosList = {} --插件等级文本列表
self.TxtSkillDes.gameObject:SetActiveEx(false)
local pluginLevelIdList = XDoubleTowersConfigs.GetPluginLevelIdList(self.PluginId)
for i, pluginLevelId in ipairs(pluginLevelIdList) do
local txtSkillDes = i == 1 and self.TxtSkillDes or XUiHelper.Instantiate(self.TxtSkillDes, self.PanelContent)
local txtSkillPos = i == 1 and self.TxtSkillPos or txtSkillDes.transform:Find("TxtSkillPos"):GetComponent("Text")
txtSkillDes.gameObject:SetActiveEx(true)
txtSkillPos.gameObject:SetActiveEx(true)
self.TxtSkillDesList[i] = txtSkillDes
self.TxtSkillPosList[i] = txtSkillPos
txtSkillDes.text = XDoubleTowersConfigs.GetPluginLevelDesc(pluginLevelId)
txtSkillPos.text = XUiHelper.GetText("DoubleTowersLevel", XDoubleTowersConfigs.GetPluginLevel(pluginLevelId))
end
end
function XUiDoubleTowersSkillDetails:InitButtons()
self:RegisterClickEvent(self.BtnClose, self.Close)
self:RegisterClickEvent(self.TxtReset, self.OnResetClick)
self:RegisterClickEvent(self.BtnStrengthen, self.OnBtnStrengthenClick)
self:RegisterClickEvent(self.BtnTakeOff, self.OnBtnTakeOffClick)
self:RegisterClickEvent(self.BtnPutOn, self.OnBtnPutOnClick)
end
function XUiDoubleTowersSkillDetails:Refresh()
local baseInfo = self.BaseInfo
local pluginId = self.PluginId
local pluginDb = baseInfo:GetPluginDb(pluginId)
local level
local isLock
--可能是点击解锁
if XTool.IsTableEmpty(pluginDb) then
isLock = true
level = 0
else
isLock = false
level = pluginDb:GetLevel()
end
local nextLevelId = baseInfo:GetPluginNextLevelId(pluginId) --插件下一等级Id
local pluginLevelId = XDoubleTowersConfigs.GetPluginLevelId(pluginId, level) --插件当前等级Id
local defaultPluginLevelId = baseInfo:GetPluginLevelDefaultId(pluginId) --如果当前等级Id无效则用默认id来获取数据
local rewardItemId = XDoubleTowersConfigs.GetActivityRewardItemId() --升级消耗的道具Id
local hasCostCount = XDataCenter.ItemManager.GetCount(rewardItemId) --升级消耗的道具持有量
--升级的消耗或者激活的消耗
local costCount = XTool.IsNumberValid(nextLevelId) and XDoubleTowersConfigs.GetPluginLevelUpgradeSpend(nextLevelId)
or XDoubleTowersConfigs.GetPluginLevelUpgradeSpend(defaultPluginLevelId)
--插件名
self.TxtName.text = XDoubleTowersConfigs.GetPluginLevelName(pluginLevelId)
--等级
self.TxtSubSkillLevel.text = level
--各等级列表
self:UpdateTxtSkillDes(level)
--升级相关
local isLevelUp = hasCostCount >= costCount
self.TextCost.text = costCount
self.TextCost.color = LEVEL_UP_CONDITION_COLOR[isLevelUp]
local maxLevel = XDoubleTowersConfigs.GetPluginMaxLevel(pluginId)
local isLevelMax = level >= maxLevel
--local isUnlock = XTool.IsNumberValid(level)
self.TextCost.gameObject:SetActiveEx(not isLevelMax)
self.IconLevelUp.gameObject:SetActiveEx(not isLevelMax)
self.BtnStrengthen:SetDisable(not isLevelUp)
self.BtnStrengthen.gameObject:SetActiveEx(not isLevelMax)
local strengthenName = isLock and XUiHelper.GetText("Active") or XUiHelper.GetText("Upgrade")
self.BtnStrengthen:SetName(strengthenName)
--装备和卸下按钮
local isEquip, equipSlotIndex = self.TeamDb:IsEquipPlugin(pluginId)
local putOnName = equipSlotIndex == self.SlotIndex and XUiHelper.GetText("Replace") or XUiHelper.GetText("PutOn")
self.BtnPutOn:SetName(putOnName)
self.BtnPutOn.gameObject:SetActiveEx(not isEquip and not isLock)
self.BtnTakeOff.gameObject:SetActiveEx(isEquip and not isLock)
--重置按钮
local defaultPluginId = XDoubleTowersConfigs.GetRoleDefaultPluginId()
local isShowTxtRest = true
--如果是默认插件并且等级等于1则不显示重置按钮
if defaultPluginId == pluginId and level == 1 then
isShowTxtRest = false
end
self.TxtReset.gameObject:SetActiveEx(not isLock and isShowTxtRest)
end
function XUiDoubleTowersSkillDetails:UpdateTxtSkillDes(level)
local pluginLevel
local color
local pluginLevelIdList = XDoubleTowersConfigs.GetPluginLevelIdList(self.PluginId)
local moduleType = XDataCenter.DoubleTowersManager.GetSelectModuleType()
local func = COLOR_CONDITION_FUNC[moduleType]
for i, pluginLevelId in ipairs(pluginLevelIdList) do
pluginLevel = XDoubleTowersConfigs.GetPluginLevel(pluginLevelId)
local condition = func and func(level, pluginLevel) or false
color = CONDITION_COLOR[condition]
self.TxtSkillDesList[i].color = color
self.TxtSkillPosList[i].color = color
end
end
--重置
function XUiDoubleTowersSkillDetails:OnResetClick()
if not XTool.IsNumberValid(self.PluginId) then
return
end
XDataCenter.DoubleTowersManager.RequestDoubleTowerResetPlugin({ self.PluginId }, function()
--如果在装备槽上,需要先卸载下来
local isEquip, equipSlotIndex = self.TeamDb:IsEquipPlugin(self.PluginId)
if isEquip or XTool.IsNumberValid(equipSlotIndex) then
local defaultPluginId = XDoubleTowersConfigs.GetRoleDefaultPluginId()
local moduleType = XDataCenter.DoubleTowersManager.GetSelectModuleType()
--如果是角色的默认插件,则不卸载
if moduleType ~= XDoubleTowersConfigs.ModuleType.Role or defaultPluginId ~= self.PluginId then
self.TeamDb:UnloadPlugin(moduleType, equipSlotIndex)
end
end
XEventManager.DispatchEvent(XEventId.EVENT_DOUBLE_TOWERS_PLUGIN_CHANGE, self.PluginId)
if self.SlotChangeCb then
self.SlotChangeCb(self.PluginId)
end
self:Close()
XDataCenter.DoubleTowersManager.RequestDoubleTowerSetTeam()
end)
end
--升级
function XUiDoubleTowersSkillDetails:OnBtnStrengthenClick()
local maxLv = XDoubleTowersConfigs.GetPluginMaxLevel(self.PluginId)
local pluginDb = self.BaseInfo:GetPluginDb(self.PluginId)
local isActive = XTool.IsTableEmpty(pluginDb)
if not isActive then
local curLv = pluginDb:GetLevel()
if curLv >= maxLv then
XUiManager.TipText("DoubleTowersMaxPluginTips")
return
end
end
XDataCenter.DoubleTowersManager.RequestDoubleTowerUpgradePlugin(self.PluginId, function(pluginId)
if self.SlotChangeCb then
self.SlotChangeCb(pluginId)
end
XEventManager.DispatchEvent(XEventId.EVENT_DOUBLE_TOWERS_PLUGIN_CHANGE, self.PluginId)
self:Refresh()
end)
end
--装备
function XUiDoubleTowersSkillDetails:OnBtnPutOnClick()
if self.SlotIndex <= 0 then
XUiManager.TipText("DoubleTowersNoChooseSlotTips")
return
end
local moduleType = XDataCenter.DoubleTowersManager.GetSelectModuleType()
self.TeamDb:EquipPlugin(moduleType, self.SlotIndex, self.PluginId)
local func = XDataCenter.DoubleTowersManager.ShowEquipTips
if func then
func(XUiHelper.GetText("DoubleTowersPluginEquip"))
end
if self.SlotChangeCb then
self.SlotChangeCb(self.PluginId)
end
self:Close()
XDataCenter.DoubleTowersManager.RequestDoubleTowerSetTeam()
end
--卸下
function XUiDoubleTowersSkillDetails:OnBtnTakeOffClick()
local isEquip, equipSlotIndex = self.TeamDb:IsEquipPlugin(self.PluginId)
if not isEquip or equipSlotIndex <= 0 then return end
local moduleType = XDataCenter.DoubleTowersManager.GetSelectModuleType()
if moduleType == XDoubleTowersConfigs.ModuleType.Role then
local list = self.TeamDb:GetPluginList(moduleType)
local count = 0
for _, id in pairs(list) do
if XTool.IsNumberValid(id) then
count = count + 1
end
end
if count == 1 then
XUiManager.TipText("DoubleTowersMustLeftOne")
return
end
end
--可能卸载失败
local state = self.TeamDb:UnloadPlugin(moduleType, equipSlotIndex)
if state then
local func = XDataCenter.DoubleTowersManager.ShowEquipTips
if func then
func(XUiHelper.GetText("DoubleTowersPluginTakeOff"))
end
if self.SlotChangeCb then
self.SlotChangeCb(self.PluginId)
end
self:Close()
end
XDataCenter.DoubleTowersManager.RequestDoubleTowerSetTeam()
end