PGRData/Script/matrix/xui/xuitheatre3/equip/XUiTheatre3EquipmentChoose.lua
2024-09-01 22:49:41 +02:00

285 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 XUiTheatre3EquipmentTip = require("XUi/XUiTheatre3/Equip/XUiTheatre3EquipmentTip")
local XUiTheatre3EquipmentCharacter = require("XUi/XUiTheatre3/Equip/XUiTheatre3EquipmentCharacter")
local TodayDontShowKey = "Theatre3EquipmentChoose"
local TipDescTxtKey = "UiTheatre3EquipmentChooseSwitch"
---@class XUiTheatre3EquipmentChoose : XLuaUi 选择装备界面
---@field _Control XTheatre3Control
local XUiTheatre3EquipmentChoose = XLuaUiManager.Register(XLuaUi, "UiTheatre3EquipmentChoose")
function XUiTheatre3EquipmentChoose:OnAwake()
XUiHelper.RegisterClickEvent(self, self.BtnYes, self.OnChooseEquip)
XUiHelper.RegisterClickEvent(self, self.BtnSetBag, self.OnShowEquip)
XUiHelper.RegisterClickEvent(self, self.BtnBack, self.OnBack)
XUiHelper.RegisterClickEvent(self, self.BtnEmpty, self.OnCloseAllBuffDetail)
XUiHelper.RegisterClickEvent(self, self.BtnSwitch, self.OnClickBtnSwitch)
end
function XUiTheatre3EquipmentChoose:OnStart(equipIds, inherit)
self._Equips = equipIds
self._Inherit = inherit or false
---@type XUiTheatre3EquipmentCharacter[]
self._CharacterCells = {}
self._CurSelectEquip = nil
self._IsShowEmptySlotTip = not self._Control:GetTodayDontShowValue(TodayDontShowKey)
self:InitSwitchBtn()
self:InitComponent()
self:InitGroup()
self:CheckEquipTab()
self:UpdateSuit()
end
function XUiTheatre3EquipmentChoose:OnDestroy()
self._CharacterCells = {}
end
function XUiTheatre3EquipmentChoose:InitGroup()
local tabs = {}
table.insert(tabs, self.CharacterGrid1)
table.insert(tabs, self.CharacterGrid2)
table.insert(tabs, self.CharacterGrid3)
self.CharacterTab:Init(tabs, function(index)
self:OnSelectSlot(index)
end)
end
function XUiTheatre3EquipmentChoose:InitComponent()
---@type XUiTheatre3EquipmentTip[]
self._TipMap = {}
for i = 1, 3 do
local equipId = self._Equips[i]
if not XTool.IsNumberValid(equipId) then
break
end
---@type XUiTheatre3EquipmentTip
local tip = XUiTheatre3EquipmentTip.New(self["BubbleEquipment" .. i], self)
local funcShowDetail = function()
self:OnShowDetail(equipId)
end
tip:ShowEquipTip(equipId, nil, nil, self.IsCheck)
tip:SetBtnDetailCallBack(funcShowDetail)
tip:SetSelectCallBack(function()
self:OnSelectEquipment(i)
end)
tip:ShowCanActiveTag(self._Control:CanSuitComplete(equipId))
self._TipMap[i] = tip
local btnEquipment = self["BtnEquipment" .. i]
btnEquipment.CallBack = function()
self:OnSelectEquipment(i)
end
self["ImgSelect" .. i].gameObject:SetActiveEx(false)
end
self.BtnSetBag.gameObject:SetActiveEx(not self._Inherit)
self.BtnYes.gameObject:SetActiveEx(false)
self:HideSlotChoose()
end
function XUiTheatre3EquipmentChoose:CheckEquipTab()
--边界值防止继承装备时装备数量少于3的情况应该不会出现
self.BtnEquipment1.gameObject:SetActiveEx(self._Equips[1] ~= nil)
self.BtnEquipment2.gameObject:SetActiveEx(self._Equips[2] ~= nil)
self.BtnEquipment3.gameObject:SetActiveEx(self._Equips[3] ~= nil)
end
function XUiTheatre3EquipmentChoose:CheckInitCharacterSelect()
local index = self:GetFirstCanWearSlot()
self.CharacterTab:SelectIndex(index)
end
function XUiTheatre3EquipmentChoose:GetFirstCanWearSlot()
--如果同套装下的某个装备穿戴在该槽位上,那么其余装备也只能放在这个槽位上
local isForbid = false
local belong = nil
for i, v in ipairs(self._CharacterCells) do
if v:IsForbidEquip() or not v:HasEnoughCapcity() then
isForbid = true
elseif not belong then
belong = i
end
end
return isForbid and belong or 1
end
function XUiTheatre3EquipmentChoose:CheckRecoverIndex()
-- 如果恢复的槽位没法穿戴该装备,需要重新找一个
if not self._RecoverIndex then
return
end
local recover = self._CharacterCells[self._RecoverIndex]
if recover:IsForbidEquip() or not recover:HasEnoughCapcity() then
self._RecoverIndex = self:GetFirstCanWearSlot()
end
end
function XUiTheatre3EquipmentChoose:OnSelectSlot(index)
if self._IsShowEmptySlotTip and self._RecoverIndex and self._RecoverIndex ~= index then
local charId = self._Control:GetSlotCharacter(index)
if charId == 0 then
self._Control:OpenTextTip(handler(self, self.OnEmptySlotTipSure), XUiHelper.GetText("TipTitle"), XUiHelper.GetText("Theatre3EquipEmptySlotTip"), handler(self, self.OnEmptySlotTipCancel), TodayDontShowKey)
end
self:CheckRecoverIndex()
else
self._RecoverIndex = index
end
self._CurSelectSlot = index
if self._CharacterCells[index]:IsForbidEquip() then
XUiManager.TipMsg(XUiHelper.GetText("Theatre3EquipSiteTip"))
return
end
if not self._CharacterCells[index]:HasEnoughCapcity() then
XUiManager.TipMsg(XUiHelper.GetText("Theatre3EquipCapcityTip"))
return
end
self:OnSelectEquipment(self._CurSelectEquip)
end
function XUiTheatre3EquipmentChoose:OnEmptySlotTipSure()
self._IsShowEmptySlotTip = false
end
function XUiTheatre3EquipmentChoose:OnEmptySlotTipCancel()
self.CharacterTab:SelectIndex(self._RecoverIndex)
self._IsShowEmptySlotTip = not self._Control:GetTodayDontShowValue(TodayDontShowKey)
end
function XUiTheatre3EquipmentChoose:OnChooseEquip()
local equipId = self._Equips[self._CurSelectEquip]
self._Control:RequestSelectEquip(equipId, self._CurSelectSlot, function()
-- 套装激活弹框
local equipConfig = self._Control:GetEquipById(equipId)
local suitId = equipConfig.SuitId
if self._Control:IsSuitComplete(suitId) then
XLuaUiManager.Open("UiTheatre3SuitActiveTip", suitId, function()
self._Control:CheckAndOpenAdventureNextStep(true)
end)
else
self._Control:CheckAndOpenAdventureNextStep(true)
end
end)
end
function XUiTheatre3EquipmentChoose:OnShowEquip()
self._Control:OpenShowEquipPanel()
end
function XUiTheatre3EquipmentChoose:OnSelectEquipment(index)
self:ShowSlotChoose()
local isInit = self._CurSelectEquip == nil
self._LastSelectEquip = self._CurSelectEquip
self._CurSelectEquip = index
self:PlayChooseAnim()
for i = 1, 3 do
local isCurSelect = i == index
if not isCurSelect then
self._TipMap[i]:CloseEffectDetail()
end
if not self._CharacterCells[i] then
self._CharacterCells[i] = XUiTheatre3EquipmentCharacter.New(self["CharacterGrid" .. i], self, i)
end
self._CharacterCells[i]:UpdateByEquip(self._Equips[index])
self["ImgSelect" .. i].gameObject:SetActiveEx(isCurSelect)
end
if isInit then
self:CheckInitCharacterSelect()
self:PlayAnimation("BubbleCharacterEnable")
end
self:CheckCharacterShow()
end
function XUiTheatre3EquipmentChoose:PlayChooseAnim()
if self._LastSelectEquip == self._CurSelectEquip then
return
end
local aniName
if self._LastSelectEquip then
aniName = string.format("BtnEquipment%s%s", self._LastSelectEquip, "Small")
self:PlayAnimation(aniName)
end
if self._CurSelectEquip then
aniName = string.format("BtnEquipment%s%s", self._CurSelectEquip, "Big")
self:PlayAnimation(aniName)
end
end
function XUiTheatre3EquipmentChoose:CheckCharacterShow()
local isCurHide = false
local newSelect = nil
for i, v in ipairs(self._CharacterCells) do
local canWear = v:CheckCharacterEquip()
if canWear then
v:Open()
if not newSelect then
newSelect = i
end
else
v:Close() -- 穿不了当前装备则隐藏
if i == self._CurSelectSlot then
isCurHide = true
end
end
end
if isCurHide and newSelect then -- 当前选中的装备被隐藏,则重新选中一个能装备上的
self.CharacterTab:SelectIndex(newSelect)
end
end
function XUiTheatre3EquipmentChoose:ShowSlotChoose()
self.BtnYes.gameObject:SetActiveEx(true)
end
function XUiTheatre3EquipmentChoose:HideSlotChoose()
self.BubbleCharacter.gameObject:SetActiveEx(false)
self.BtnYes.gameObject:SetActiveEx(false)
self.PanelEquipment.spacing = 80
self.PanelZB.padding.left = 0
self.BtnSwitch.transform.anchoredPosition = Vector2(self.BtnSwitchPosX, self.BtnSwitchPosY)
end
function XUiTheatre3EquipmentChoose:UpdateSuit()
local count = self._Control:GetSlotCapcity(1) + self._Control:GetSlotCapcity(2) + self._Control:GetSlotCapcity(3)
self.BtnSetBag:SetNameByGroup(0, XUiHelper.ReadTextWithNewLine("Theatre3EquipSuitNumNewLine", count))
end
function XUiTheatre3EquipmentChoose:OnBack()
self._Control:OpenTextTip(handler(self, self.Close), XUiHelper.ReadTextWithNewLineWithNotNumber("TipTitle"), XUiHelper.ReadTextWithNewLineWithNotNumber("Theatre3EquipBackTip"))
end
function XUiTheatre3EquipmentChoose:OnShowDetail(equipId)
XLuaUiManager.Open("UiTheatre3SetDetail", equipId)
end
function XUiTheatre3EquipmentChoose:OnCloseAllBuffDetail()
for i = 1, 3 do
self._TipMap[i]:CloseEffectDetail()
end
end
--region 详略按钮
function XUiTheatre3EquipmentChoose:InitSwitchBtn()
self.IsCheck = self._Control:GetToggleValue(TipDescTxtKey)
self.BtnSwitch:SetButtonState(self.IsCheck and CS.UiButtonState.Select or CS.UiButtonState.Normal)
if not self.BtnSwitchPosX or not self.BtnSwitchPosY then
self.BtnSwitchPosX = self.BtnSwitch.transform.anchoredPosition.x
self.BtnSwitchPosY = self.BtnSwitch.transform.anchoredPosition.y
end
end
function XUiTheatre3EquipmentChoose:OnClickBtnSwitch()
self.IsCheck = not self.IsCheck
self._Control:SaveToggleValue(TipDescTxtKey, self.IsCheck)
self:ShowDetailOrSimpleView(self.IsCheck)
end
function XUiTheatre3EquipmentChoose:ShowDetailOrSimpleView(isDetail)
for _, v in pairs(self._TipMap) do
v:ShowDetailOrSimpleTxt(isDetail)
end
end
--endregion
return XUiTheatre3EquipmentChoose