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

239 lines
8.1 KiB
Lua

local UIWidgetBase = require_ex('Common/Core/UIWidgetBase')
WikiCraftingTreeBuilding = HL.Class('WikiCraftingTreeBuilding', UIWidgetBase)
local ActionOnSetNaviTarget = CS.Beyond.Input.ActionOnSetNaviTarget
WikiCraftingTreeBuilding.m_args = HL.Field(HL.Table)
WikiCraftingTreeBuilding.m_isDefaultCraft = HL.Field(HL.Boolean) << false
WikiCraftingTreeBuilding.m_isPinnedCraft = HL.Field(HL.Boolean) << false
WikiCraftingTreeBuilding.m_hasWiki = HL.Field(HL.Boolean) << false
WikiCraftingTreeBuilding._OnFirstTimeInit = HL.Override() << function(self)
if self.m_args.onClicked then
self.view.button.onClick:AddListener(function()
if not self.m_hasWiki then
return
end
self.m_args.onClicked(self.m_args.craftInfo.buildingId, self)
end)
end
self:RegisterMessage(MessageConst.CHANGE_WIKI_DEFAULT_CRAFT, function()
if self.m_args.isShowDefaultNode then
self:RefreshDefaultNode()
end
end)
self.view.selectNode.cutBtn.onClick:AddListener(function()
if not self.m_hasWiki then
return
end
Notify(MessageConst.CHANGE_WIKI_CRAFTING_TREE, FactoryUtils.getBuildingItemId(self.m_args.craftInfo.buildingId))
end)
end
WikiCraftingTreeBuilding.InitWikiCraftingTreeBuilding = HL.Method(HL.Table) << function(self, args)
self.m_args = args
self:_FirstTimeInit()
local hasTime = args.craftInfo.time and args.craftInfo.time > 0
self.view.timeNode.gameObject:SetActive(hasTime)
if hasTime then
self.view.timeTxt.text = string.format(Language["LUA_CRAFT_CELL_STANDARD_TIME"], FactoryUtils.getCraftTimeStr(args.craftInfo.time))
end
local name, iconFolder, iconId
local buildingId = args.craftInfo.buildingId
if not buildingId then
name = Language.LUA_OBTAIN_WAYS_MANUAL_CRAFT_NAME
iconFolder = UIConst.UI_SPRITE_ITEM_TIPS
iconId = UIConst.UI_MANUALCRAFT_ICON_ID
else
local _, buildingData = Tables.factoryBuildingTable:TryGetValue(buildingId)
if buildingData then
name = buildingData.name
iconFolder = UIConst.UI_SPRITE_FAC_BUILDING_PANEL_ICON
iconId = buildingData.iconOnPanel
end
end
local itemId = buildingId and FactoryUtils.getBuildingItemId(buildingId)
self.m_hasWiki = WikiUtils.getWikiEntryIdFromItemId(itemId) ~= nil
self.view.stateController:SetState(self.m_hasWiki and "Selectable" or "Unselectable")
self.view.button:ChangeActionOnSetNaviTarget(self.m_hasWiki and ActionOnSetNaviTarget.PressConfirmTriggerOnClick or ActionOnSetNaviTarget.None)
if name then
self.view.iconImg:LoadSprite(iconFolder, iconId)
self.view.titleTxt.text = name
end
self.view.extraItemNode.gameObject:SetActive(args.isShowExtraItemIcon)
self:SetSelected(false)
local modeStateName = "normal"
if not string.isEmpty(args.craftInfo.formulaMode) then
modeStateName = args.craftInfo.formulaMode
end
self.view.modeStateCtrl:SetState(modeStateName)
local pinnedCraftId
local chapterInfo = FactoryUtils.getCurChapterInfo()
if chapterInfo then
pinnedCraftId = CS.Beyond.Gameplay.RemoteFactory.RemoteFactoryUtil.GetPinBoardStrId(chapterInfo.pinBoard, GEnums.FCPinPosition.Formula:GetHashCode())
end
self.m_isPinnedCraft = pinnedCraftId ~= nil and pinnedCraftId == self.m_args.craftInfo.craftId
local isShowDefaultNode = args.isShowDefaultNode == true or (self.m_isPinnedCraft and not args.ignorePinCraft)
self.view.setDefaultNode.gameObject:SetActive(isShowDefaultNode)
if isShowDefaultNode then
self:RefreshDefaultNode()
self.view.setDefaultNode.button.onClick:RemoveAllListeners()
self.view.setDefaultNode.button.onClick:AddListener(function()
if self.m_isPinnedCraft or self.m_isDefaultCraft then
return
end
WikiUtils.setUserItemDefaultCraftId(args.itemId, args.craftInfo.craftId)
Notify(MessageConst.CHANGE_WIKI_DEFAULT_CRAFT)
end)
end
self:_InitController()
LayoutRebuilder.ForceRebuildLayoutImmediate(self.view.transform)
end
WikiCraftingTreeBuilding.RefreshDefaultNode = HL.Method() << function(self)
local defaultCraftId = WikiUtils.getItemDefaultCraftId(self.m_args.itemId)
if string.isEmpty(defaultCraftId) then
self.m_isDefaultCraft = self.m_args.craftIndex == 1
else
self.m_isDefaultCraft = defaultCraftId == self.m_args.craftInfo.craftId
end
local stateName = "Normal"
if self.m_isPinnedCraft then
stateName = "Pinned"
elseif self.m_isDefaultCraft then
stateName = "Default"
end
self.view.setDefaultNode.stateController:SetState(stateName)
if DeviceInfo.usingController then
self.view.setDefaultNode.root.gameObject:SetActive(self.m_isDefaultCraft or self.m_isPinnedCraft)
self.view.setDefaultNode.defaultNode.gameObject:SetActive(false)
self.view.setDefaultNode.lineImage.gameObject:SetActive(false)
end
end
WikiCraftingTreeBuilding.SetSelected = HL.Method(HL.Boolean) << function(self, isSelected)
self.view.selectNode.gameObject:SetActive(isSelected)
end
WikiCraftingTreeBuilding.GetButton = HL.Method().Return(HL.Userdata) << function(self)
return self.view.button
end
WikiCraftingTreeBuilding.GetLeftMountPoint = HL.Method(Transform).Return(Vector2) << function(self, relativeTo)
local pos = relativeTo:InverseTransformPoint(self.view.leftMountPoint.transform.position)
return Vector2(pos.x, pos.y)
end
WikiCraftingTreeBuilding.GetRightMountPoint = HL.Method(Transform).Return(Vector2) << function(self, relativeTo)
local pos = relativeTo:InverseTransformPoint(self.view.rightMountPoint.transform.position)
return Vector2(pos.x, pos.y)
end
WikiCraftingTreeBuilding._InitController = HL.Method() << function(self)
if not DeviceInfo.usingController then
return
end
self.view.setDefaultNode.inputBindingGroup.enabled = false
self.view.setDefaultNode.defaultNode.gameObject:SetActive(false)
local moreCraftCellParent
if self.m_args.moreCraftCell then
self.m_args.moreCraftCell.inputBindingGroup.enabled = self.view.button.isNaviTarget
moreCraftCellParent = self.m_args.moreCraftCell.transform.parent
end
self.view.setDefaultNode.lineImage.gameObject:SetActive(self.view.button.isNaviTarget)
self.view.button.onIsNaviTargetChanged = function(isNaviTarget)
local canSetDefault = not self.m_isDefaultCraft and not self.m_isPinnedCraft
if isNaviTarget then
self.view.setDefaultNode.inputBindingGroup.enabled = true
self.view.setDefaultNode.defaultNode.gameObject:SetActive(false)
if self.m_args.moreCraftCell then
self.m_args.moreCraftCell.inputBindingGroup.enabled = true
self.view.setDefaultNode.defaultNode.gameObject:SetActive(canSetDefault)
if self.m_args.moreCraftCell.btnLess.gameObject.activeSelf then
self.view.setDefaultNode.lineImage.gameObject:SetActive(canSetDefault)
self.m_args.moreCraftCell.gameObject:SetActive(true)
self.m_args.moreCraftCell.transform:SetParent(self.view.setDefaultNode.lessNode.transform, false)
self.m_args.moreCraftCell.transform.localPosition = Vector3.zero
end
end
else
self.view.setDefaultNode.inputBindingGroup.enabled = false
self.view.setDefaultNode.defaultNode.gameObject:SetActive(false)
if self.m_args.moreCraftCell then
self.m_args.moreCraftCell.inputBindingGroup.enabled = false
if self.m_args.moreCraftCell.btnLess.gameObject.activeSelf then
self.view.setDefaultNode.lineImage.gameObject:SetActive(false)
self.m_args.moreCraftCell.gameObject:SetActive(false)
self.m_args.moreCraftCell.transform:SetParent(moreCraftCellParent, false)
end
end
end
end
end
HL.Commit(WikiCraftingTreeBuilding)
return WikiCraftingTreeBuilding