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

224 lines
8.2 KiB
Lua

local wikiDetailBaseCtrl = require_ex('UI/Panels/WikiDetailBase/WikiDetailBaseCtrl')
local PANEL_ID = PanelId.WikiItem
WikiItemCtrl = HL.Class('WikiItemCtrl', wikiDetailBaseCtrl.WikiDetailBaseCtrl)
local SHOW_CRAFT_TREE_GROUP_TABLE = {
wiki_group_item_nature = true,
wiki_group_item_material = true,
wiki_group_item_product = true,
wiki_group_item_usable = true,
}
WikiItemCtrl.OnShow = HL.Override() << function(self)
WikiItemCtrl.Super.OnShow(self)
self:_PlayBgDecoAnim()
end
WikiItemCtrl.OnClose = HL.Override() << function(self)
end
WikiItemCtrl.GetPanelId = HL.Override().Return(HL.Number) << function(self)
return PANEL_ID
end
WikiItemCtrl._OnPhaseItemBind = HL.Override() << function(self)
WikiItemCtrl.Super._OnPhaseItemBind(self)
self:_PlayBgDecoAnim()
end
WikiItemCtrl._RefreshCenter = HL.Override() << function(self)
WikiItemCtrl.Super._RefreshCenter(self)
local _, itemData = Tables.itemTable:TryGetValue(self.m_wikiEntryShowData.wikiEntryData.refItemId)
self.view.wikiItemImg.gameObject:SetActive(itemData ~= nil)
if itemData then
self.view.wikiItemImg:LoadSprite(UIConst.UI_SPRITE_ITEM_BIG, itemData.iconId)
end
if self.m_phase then
self.m_phase:ActiveCommonSceneItem(true)
end
end
WikiItemCtrl.m_isBtnInited = HL.Field(HL.Boolean) << false
WikiItemCtrl._RefreshRight = HL.Override() << function(self)
local view = self.view.right
if not self.m_isBtnInited then
self.m_isBtnInited = true
view.viewBtn.onClick:AddListener(function()
self:_StartCoroutine(function()
coroutine.step()
self.view.right.naviGroup:ManuallyStopFocus()
self.view.right.controllerFocusHintNode.gameObject:SetActive(true)
end)
self.m_phase:CreatePhasePanelItem(PanelId.WikiCraftingTree, {
wikiEntryShowData = self.m_wikiEntryShowData,
forceShowBackBtn = true,
})
end)
end
view.viewBtn.gameObject:SetActive(SHOW_CRAFT_TREE_GROUP_TABLE[self.m_wikiEntryShowData.wikiGroupData.groupId] == true)
local itemId = self.m_wikiEntryShowData.wikiEntryData.refItemId
view.itemObtainWaysForWiki:InitItemObtainWays(itemId, nil, self.m_itemTipsPosInfo, function(cell, craftCellView)
self:_OnClickRightItemCell(cell, craftCellView)
end)
local lastCraftFirstSelectable, lastCraftNaviGroup = self:_InitItemObtainWaysController(view.itemObtainWaysForWiki)
view.itemAsInput:InitItemAsInput{
itemId = itemId,
itemTipsPosInfo = self.m_itemTipsPosInfo,
onClickItem = function(cell, craftCellView)
self:_OnClickRightItemCell(cell, craftCellView)
end,
}
for i = 1, view.itemAsInput.m_obtainCells:GetCount() do
local obtainCell = view.itemAsInput.m_obtainCells:GetItem(i)
obtainCell.content.onIsNaviTargetChanged = function(isTarget)
if isTarget then
self.view.right.scrollRect:ScrollToNaviTarget(obtainCell.content)
Notify(MessageConst.HIDE_ITEM_TIPS)
end
end
obtainCell.content.useExplicitNaviSelect = true
if lastCraftFirstSelectable and obtainCell.content.isActiveAndEnabled then
obtainCell.content.banExplicitOnUp = false
obtainCell.content:SetExplicitSelectOnUp(lastCraftFirstSelectable)
lastCraftFirstSelectable.useExplicitNaviSelect = true
lastCraftFirstSelectable.banExplicitOnLeft = true
lastCraftFirstSelectable.banExplicitOnRight = true
lastCraftFirstSelectable.banExplicitOnUp = true
lastCraftFirstSelectable.banExplicitOnDown = false
lastCraftFirstSelectable:SetExplicitSelectOnDown(obtainCell.content)
else
obtainCell.content.banExplicitOnUp = true
end
if obtainCell.content.isActiveAndEnabled and lastCraftNaviGroup then
obtainCell.titleNaviGroup.naviPartnerOnUp:Clear()
obtainCell.titleNaviGroup.naviPartnerOnDown:Clear()
lastCraftNaviGroup.naviPartnerOnDown:Add(obtainCell.titleNaviGroup)
obtainCell.titleNaviGroup.naviPartnerOnUp:Add(lastCraftNaviGroup)
lastCraftNaviGroup = obtainCell.titleNaviGroup
end
local firstItemSelectable
for j = 1, obtainCell.craftCells:GetCount() do
local craftCell = obtainCell.craftCells:GetItem(j)
if DeviceInfo.usingController then
InputManagerInst:ToggleBinding(craftCell.pinBtn.view.pinToggle.toggleBindingId, false)
end
craftCell.pinKeyHint.gameObject:SetActive(false)
for k = 1, craftCell.itemCells:GetCount() do
local selectable = craftCell.itemCells:GetItem(k).view.button
selectable.useExplicitNaviSelect = false
selectable.onIsNaviTargetChanged = function(isTarget)
self:_OnRightItemIsNaviTargetChanged(isTarget, selectable, craftCell)
end
if firstItemSelectable == nil then
firstItemSelectable = selectable
end
if k == 1 then
lastCraftFirstSelectable = selectable
end
end
craftCell.selectableNaviGroup.naviPartnerOnUp:Clear()
craftCell.selectableNaviGroup.naviPartnerOnDown:Clear()
if lastCraftNaviGroup then
if j == 1 then
if not obtainCell.content.isActiveAndEnabled then
craftCell.selectableNaviGroup.naviPartnerOnUp:Add(lastCraftNaviGroup)
lastCraftNaviGroup.naviPartnerOnDown:Add(craftCell.selectableNaviGroup)
end
else
craftCell.selectableNaviGroup.naviPartnerOnUp:Add(lastCraftNaviGroup)
lastCraftNaviGroup.naviPartnerOnDown:Add(craftCell.selectableNaviGroup)
end
end
lastCraftNaviGroup = craftCell.selectableNaviGroup
end
if firstItemSelectable and obtainCell.content.isActiveAndEnabled then
obtainCell.content.banExplicitOnDown = false
obtainCell.content:SetExplicitSelectOnDown(firstItemSelectable)
firstItemSelectable.useExplicitNaviSelect = true
firstItemSelectable.banExplicitOnLeft = true
firstItemSelectable.banExplicitOnRight = true
firstItemSelectable.banExplicitOnDown = true
firstItemSelectable.banExplicitOnUp = false
firstItemSelectable:SetExplicitSelectOnUp(obtainCell.content)
else
obtainCell.content.banExplicitOnDown = true
end
end
local isWeaponPotentialItem, itemData = Tables.weaponPotentialUpItemTable:TryGetValue(itemId)
view.itemWeaponPotential.gameObject:SetActive(isWeaponPotentialItem)
if isWeaponPotentialItem then
view.itemWeaponPotential.itemCellCache = view.itemWeaponPotential.itemCellCache or
UIUtils.genCellCache(view.itemWeaponPotential.itemCell)
view.itemWeaponPotential.itemCellCache:Refresh(#itemData.weaponIds, function(cell, index)
cell:InitItem({id = itemData.weaponIds[CSIndex(index)]}, function(itemBundle)
self:_OnClickRightItemCell(cell)
end)
cell.view.button.onIsNaviTargetChanged = function(isTarget)
self:_OnRightItemIsNaviTargetChanged(isTarget, cell.view.button)
end
if self.m_itemTipsPosInfo then
cell:SetExtraInfo(self.m_itemTipsPosInfo)
end
end)
end
local isFocusEnabled = view.itemAsInput.m_obtainCells:GetCount() > 0 or
(view.itemObtainWaysForWiki.m_obtainCells:GetCount() > 0 and
view.itemObtainWaysForWiki.view.gameObject.activeSelf) or
isWeaponPotentialItem
view.naviGroup.enabled = isFocusEnabled
self.view.right.controllerFocusHintNode.gameObject:SetActive(isFocusEnabled)
end
WikiItemCtrl._PlayBgDecoAnim = HL.Method() << function(self)
if self.m_phase then
self.m_phase:ActiveCommonSceneItem(true)
self.m_phase:PlayDecoAnim("wiki_uideco_grouptocommonpanel")
end
end
HL.Commit(WikiItemCtrl)