Files
Endfield-Data/LuaScripts/Phase/FacTechTree/PhaseFacTechTree.lua
2025-12-02 20:37:18 +07:00

189 lines
4.7 KiB
Lua

local phaseBase = require_ex('Phase/Core/PhaseBase')
local PHASE_ID = PhaseId.FacTechTree
local DEFAULT_FAC_TECH_PACKAGE_ID = "tech_group_tundra"
PhaseFacTechTree = HL.Class('PhaseFacTechTree', phaseBase.PhaseBase)
PhaseFacTechTree.m_currentPanelItem = HL.Field(HL.Forward("PhasePanelItem"))
PhaseFacTechTree.s_messages = HL.StaticField(HL.Table) << {
[MessageConst.FAC_TECH_TREE_OPEN_PACKAGE_PANEL] = { 'OpenPackagePanel', true },
[MessageConst.FAC_TECH_TREE_OPEN_TREE_PANEL] = { 'OpenTreePanel', true },
}
PhaseFacTechTree._OnInit = HL.Override() << function(self)
PhaseFacTechTree.Super._OnInit(self)
end
PhaseFacTechTree._DoPhaseTransitionIn = HL.Override(HL.Boolean, HL.Opt(HL.Table)) << function(self, fastMode, args)
local facTechTreeSystem = GameInstance.player.facTechTreeSystem
if self.arg then
local techId = self.arg.techId
local packageId = self.arg.packageId
local layerId = self.arg.layerId
if not string.isEmpty(techId) then
local techCfg = Tables.facSTTNodeTable[techId]
self.m_currentPanelItem = self:CreatePhasePanelItem(PanelId.FacTechTree, {
techId = techId,
packageId = techCfg.groupId
})
return
end
if not string.isEmpty(layerId) then
local layerCfg = Tables.facSTTLayerTable[layerId]
self.m_currentPanelItem = self:CreatePhasePanelItem(PanelId.FacTechTree, {
layerId = layerId,
packageId = layerCfg.groupId
})
return
end
if not string.isEmpty(packageId) then
self.m_currentPanelItem = self:CreatePhasePanelItem(PanelId.FacTechTree, {
packageId = packageId
})
return
end
else
local success, levelBasicInfo = DataManager.levelBasicInfoTable:TryGetValue(GameWorld.worldInfo.curLevelId)
if not success then
self.m_currentPanelItem = self:CreatePhasePanelItem(PanelId.FacTechPackage)
return
end
local isInSpaceShip = Utils.isInSpaceShip()
local domainId = isInSpaceShip and GameInstance.player.inventory.spaceshipDomainId or levelBasicInfo.domainName
local hasDomain = not string.isEmpty(domainId)
local facTechPackageId = hasDomain and Tables.domainDataTable[domainId].facTechPackageId or DEFAULT_FAC_TECH_PACKAGE_ID
if facTechTreeSystem:PackageIsLocked(facTechPackageId) or facTechTreeSystem:PackageIsHidden(facTechPackageId) then
facTechPackageId = DEFAULT_FAC_TECH_PACKAGE_ID
end
if facTechPackageId ~= DEFAULT_FAC_TECH_PACKAGE_ID then
self.m_currentPanelItem = self:CreatePhasePanelItem(PanelId.FacTechTree, { packageId = facTechPackageId })
else
if facTechTreeSystem:PackageIsLocked(DEFAULT_FAC_TECH_PACKAGE_ID) then
self.m_currentPanelItem = self:CreatePhasePanelItem(PanelId.FacTechPackage)
else
self.m_currentPanelItem = self:CreatePhasePanelItem(PanelId.FacTechTree, { packageId = DEFAULT_FAC_TECH_PACKAGE_ID })
end
end
end
end
PhaseFacTechTree._DoPhaseTransitionOut = HL.Override(HL.Boolean, HL.Opt(HL.Table)) << function(self, fastMode, args)
end
PhaseFacTechTree._DoPhaseTransitionBehind = HL.Override(HL.Boolean, HL.Opt(HL.Table)) << function(self, fastMode, args)
end
PhaseFacTechTree._DoPhaseTransitionBackToTop = HL.Override(HL.Boolean, HL.Opt(HL.Table)) << function(self, fastMode,
args)
end
PhaseFacTechTree._OnActivated = HL.Override() << function(self)
end
PhaseFacTechTree._OnDeActivated = HL.Override() << function(self)
end
PhaseFacTechTree._OnDestroy = HL.Override() << function(self)
PhaseFacTechTree.Super._OnDestroy(self)
end
PhaseFacTechTree._OnRefresh = HL.Override() << function(self)
if self.arg == nil or string.isEmpty(self.arg.techId) or self.m_currentPanelItem.uiCtrl.AutoSelect == nil then
return
end
self.m_currentPanelItem.uiCtrl:AutoSelect(self.arg.techId)
end
PhaseFacTechTree.OpenTreePanel = HL.Method(HL.Any) << function(self, args)
local arg = unpack(args)
self:RemovePhasePanelItem(self.m_currentPanelItem)
self.m_currentPanelItem = self:CreatePhasePanelItem(PanelId.FacTechTree, { packageId = arg })
end
PhaseFacTechTree.OpenPackagePanel = HL.Method(HL.Table) << function(self, args)
self:RemovePhasePanelItem(self.m_currentPanelItem)
self.m_currentPanelItem = self:CreatePhasePanelItem(PanelId.FacTechPackage, args)
end
HL.Commit(PhaseFacTechTree)