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

257 lines
10 KiB
Lua
Raw Normal View History

--阶段描述
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