Files
Endfield-Data/LuaScripts/UI/Panels/WeaponExhibitGemCard/WeaponExhibitGemCardCtrl.lua
2025-12-02 20:37:18 +07:00

145 lines
4.3 KiB
Lua

local uiCtrl = require_ex('UI/Panels/Base/UICtrl')
local PANEL_ID = PanelId.WeaponExhibitGemCard
WeaponExhibitGemCardCtrl = HL.Class('WeaponExhibitGemCardCtrl', uiCtrl.UICtrl)
WeaponExhibitGemCardCtrl.s_messages = HL.StaticField(HL.Table) << {
[MessageConst.WEAPON_EXHIBIT_REFRESH_GEM_CARD] = "RefreshGemCard",
[MessageConst.CLOSE_WEAPON_EXHIBIT_GEM_CARD] = "PlayAnimationOut",
}
WeaponExhibitGemCardCtrl.m_gemInstIdLeft = HL.Field(HL.Number) << -1
WeaponExhibitGemCardCtrl.m_gemInstIdRight = HL.Field(HL.Number) << -1
WeaponExhibitGemCardCtrl.m_weaponInfo = HL.Field(HL.Table)
WeaponExhibitGemCardCtrl.m_effectCor = HL.Field(HL.Thread)
WeaponExhibitGemCardCtrl.OnCreate = HL.Override(HL.Any) << function(self, arg)
local weaponInfo = arg.weaponInfo
if arg.phase then
self.m_phase = arg.phase
end
self.m_weaponInfo = weaponInfo
self.view.gemCardLeft.gameObject:SetActive(false)
self.view.gemCardRight.gameObject:SetActive(false)
self:_InitController()
end
WeaponExhibitGemCardCtrl.RefreshGemCard = HL.Method(HL.Any) << function(self, arg)
local hasGem = arg.hasGem
local equippedGemInstId = arg.equippedGemInstId
local selectGemInstId = arg.selectGemInstId
local tryWeaponInstId = self.m_weaponInfo.weaponInstId
local hasSelectedGem = selectGemInstId and selectGemInstId > 0
local hasEquippedGem = equippedGemInstId and equippedGemInstId > 0
local gemInstIdLeft = hasEquippedGem and equippedGemInstId or selectGemInstId
local hasLeftGem = gemInstIdLeft and gemInstIdLeft > 0
self.view.gemCardNode.gameObject:SetActive(hasGem)
self.view.gemCardLeft.gameObject:SetActive(hasLeftGem)
local isDifferentGem = hasSelectedGem and hasEquippedGem and selectGemInstId ~= equippedGemInstId
if self.view.gemCardRight.gameObject.activeSelf ~= isDifferentGem then
UIUtils.PlayAnimationAndToggleActive(self.view.gemCardRight.view.animationWrapper, isDifferentGem)
end
self.view.gemCardLeft.view.weaponInlayNode.gameObject:SetActive(hasEquippedGem)
if DeviceInfo.usingController then
self.view.gemCardRight:ActiveToggleGroup(isDifferentGem)
self.view.gemCardLeft:ActiveToggleGroup(not isDifferentGem)
end
if isDifferentGem then
if self.m_gemInstIdRight ~= selectGemInstId then
self.m_gemInstIdRight = selectGemInstId
self.view.gemCardRight:InitGemCard(selectGemInstId, tryWeaponInstId)
self.view.gemCardRight.view.animationWrapper:ClearTween()
self.view.gemCardRight.view.animationWrapper:PlayInAnimation()
end
else
if self.m_gemInstIdLeft ~= gemInstIdLeft then
if self.m_gemInstIdLeft > 0 then
self.m_effectCor = self:_ClearCoroutine(self.m_effectCor)
self.m_effectCor = self:_StartCoroutine(function()
self.view.gemCardLeft.view.animationWrapper:ClearTween()
self.view.gemCardLeft.view.animationWrapper:PlayOutAnimation()
coroutine.wait(0.1)
self.view.gemCardLeft:InitGemCard(gemInstIdLeft, tryWeaponInstId)
self.view.gemCardLeft.view.animationWrapper:PlayInAnimation()
end)
else
self.view.gemCardLeft.view.animationWrapper:ClearTween()
self.view.gemCardLeft.view.animationWrapper:PlayInAnimation()
self.view.gemCardLeft:InitGemCard(gemInstIdLeft, tryWeaponInstId)
end
self.m_gemInstIdLeft = gemInstIdLeft
else
end
end
end
WeaponExhibitGemCardCtrl._InitController = HL.Method() << function(self)
local toggleFocusInputGroup = function(active)
local weaponGemPhaseItem = self.m_phase:_GetPanelPhaseItem(PanelId.WeaponExhibitGem)
if weaponGemPhaseItem then
weaponGemPhaseItem.uiCtrl:ToggleFocusInputGroup(active)
end
end
self.view.gemCardLeft.view.naviGroup.onIsFocusedChange:AddListener(function(isFocused)
toggleFocusInputGroup(not isFocused)
end)
self.view.gemCardRight.view.naviGroup.onIsFocusedChange:AddListener(function(isFocused)
toggleFocusInputGroup(not isFocused)
end)
end
HL.Commit(WeaponExhibitGemCardCtrl)