Files
Endfield-Data/LuaScripts/UI/Widgets/WikiCraftingTreeItem.lua
2025-12-02 20:37:18 +07:00

220 lines
5.6 KiB
Lua

local UIWidgetBase = require_ex('Common/Core/UIWidgetBase')
WikiCraftingTreeItem = HL.Class('WikiCraftingTreeItem', UIWidgetBase)
WikiCraftingTreeItem.m_args = HL.Field(HL.Table)
WikiCraftingTreeItem.m_hasWiki = HL.Field(HL.Boolean) << false
WikiCraftingTreeItem.m_isMain = HL.Field(HL.Boolean) << false
WikiCraftingTreeItem._OnFirstTimeInit = HL.Override() << function(self)
self.view.selectNode.cutBtn.onClick:AddListener(function()
if not self.m_hasWiki then
return
end
Notify(MessageConst.CHANGE_WIKI_CRAFTING_TREE, self.m_args.itemId)
end)
self.view.selectNode.btnTip.onClick:AddListener(function()
if self.m_isMain then
Notify(MessageConst.SHOW_TOAST, Language.LUA_WIKI_CRAFTING_CAN_NOT_SWITCH_MAIN)
elseif not self.m_hasWiki then
Notify(MessageConst.SHOW_TOAST, Language.LUA_WIKI_CRAFTING_CAN_NOT_SWITCH)
end
end)
end
WikiCraftingTreeItem.InitWikiCraftingTreeItem = HL.Method(HL.Table) << function(self, args)
self.m_args = args
self:_FirstTimeInit()
self.view.gameObject.name = args.itemId
self.view.itemBlack:InitItem({ id = args.itemId }, function()
if args.onClicked then
args.onClicked(args.itemId, self)
end
end)
self.view.itemBlack:SetEnableHoverTips(not DeviceInfo.usingController)
self:SetSelected(false)
self:SetMain(args.isShowMainIcon == true)
self.m_hasWiki = WikiUtils.getWikiEntryIdFromItemId(args.itemId) ~= nil
self.m_isMain = args.mainItemId == args.itemId
self:SetJumpBtn(self.m_isMain, self.m_hasWiki)
if args.playInAnimation == true then
self.view.animationWrapper:PlayInAnimation()
end
self:_InitController()
end
WikiCraftingTreeItem.GetItemId = HL.Method().Return(HL.String) << function(self)
return self.m_args.itemId
end
WikiCraftingTreeItem.SetMain = HL.Method(HL.Boolean) << function(self, isMain)
self.view.mainNode.gameObject:SetActive(isMain)
if isMain then
if self.m_args.playInAnimation then
self.view.mainNode:PlayInAnimation()
else
self.view.mainNode:PlayLoopAnimation()
end
end
end
WikiCraftingTreeItem.SetJumpBtn = HL.Method(HL.Boolean, HL.Boolean) << function(self, isMain, hasWiki)
local stateName
if isMain then
stateName = "Main"
elseif hasWiki then
stateName = "Jump"
else
stateName = "NoJump"
end
self.view.selectNode.stateController:SetState(stateName)
end
WikiCraftingTreeItem.SetSelected = HL.Method(HL.Boolean) << function(self, isSelected)
self.view.selectNode.gameObject:SetActive(isSelected)
self.view.itemBlack.view.nonDrawingGraphic.enabled = not isSelected
end
WikiCraftingTreeItem.GetButton = HL.Method().Return(HL.Userdata) << function(self)
return self.view.itemBlack.view.button
end
WikiCraftingTreeItem.SetLeftMountPointCount = HL.Method(HL.Number) << function(self, count)
CSUtils.UIContainerResize(self.view.leftNode, count)
LayoutRebuilder.ForceRebuildLayoutImmediate(self.view.leftNode)
end
WikiCraftingTreeItem.SetRightMountPointCount = HL.Method(HL.Number) << function(self, count)
CSUtils.UIContainerResize(self.view.rightNode, count)
LayoutRebuilder.ForceRebuildLayoutImmediate(self.view.rightNode)
end
WikiCraftingTreeItem.GetLeftMountPoint = HL.Method(Transform, HL.Number).Return(Vector2) << function(self, relativeTo, index)
local node = self.view.leftNode.transform:GetChild(CSIndex(index))
if node then
local pos = relativeTo:InverseTransformPoint(node.position)
return Vector2(pos.x, pos.y)
end
return Vector2.zero
end
WikiCraftingTreeItem.GetRightMountPoint = HL.Method(Transform, HL.Number).Return(Vector2) << function(self, relativeTo, index)
local node = self.view.rightNode.transform:GetChild(CSIndex(index))
if node then
local pos = relativeTo:InverseTransformPoint(node.position)
return Vector2(pos.x, pos.y)
end
return Vector2.zero
end
WikiCraftingTreeItem.HideExpandToggle = HL.Method() << function(self)
self.view.expandToggle.gameObject:SetActive(false)
end
WikiCraftingTreeItem.SetExpandToggle = HL.Method(HL.Boolean, HL.Function) << function(self, isOn, callback)
self.view.expandToggle.onValueChanged:RemoveAllListeners()
self.view.expandToggle.gameObject:SetActive(true)
self.view.expandToggle.isOn = isOn
InputManagerInst:SetBindingText(self.view.expandToggle.toggleBindingId,
isOn and Language.ui_wiki_fac_tree_item_less or Language.ui_wiki_fac_tree_item_more)
self.view.expandToggle.onValueChanged:AddListener(function(value)
InputManagerInst:SetBindingText(self.view.expandToggle.toggleBindingId,
value and Language.ui_wiki_fac_tree_item_less or Language.ui_wiki_fac_tree_item_more)
if callback then
callback(value)
end
end)
end
WikiCraftingTreeItem._InitController = HL.Method() << function(self)
if not DeviceInfo.usingController then
return
end
self.view.expandToggleKeyHint.gameObject:SetActive(false)
self.view.expandInputBindingGroup.enabled = self.view.itemBlack.view.button.isNaviTarget
self.view.expandToggleKeyHint.gameObject:SetActive(self.view.itemBlack.view.button.isNaviTarget)
self.view.itemBlack.view.button.onIsNaviTargetChanged = function(isNaviTarget)
self.view.expandToggleKeyHint.gameObject:SetActive(isNaviTarget)
self.view.expandInputBindingGroup.enabled = isNaviTarget
end
end
HL.Commit(WikiCraftingTreeItem)
return WikiCraftingTreeItem