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

149 lines
3.8 KiB
Lua

local UIWidgetBase = require_ex('Common/Core/UIWidgetBase')
local State = {
None = 0,
Locked = 1,
CanUnlock = 2,
Unlocked = 3,
}
FacTechTreeNode = HL.Class('FacTechTreeNode', UIWidgetBase)
FacTechTreeNode.techId = HL.Field(HL.String) << ""
FacTechTreeNode.x = HL.Field(HL.Number) << 0
FacTechTreeNode.y = HL.Field(HL.Number) << 0
FacTechTreeNode.m_state = HL.Field(HL.Number) << State.None
FacTechTreeNode.m_onClickFunc = HL.Field(HL.Function)
FacTechTreeNode.m_onIsNaviTargetChanged = HL.Field(HL.Function)
FacTechTreeNode._OnFirstTimeInit = HL.Override() << function(self)
self.view.itemBtn.onClick:AddListener(function()
if self.m_onClickFunc then
self.m_onClickFunc()
end
end)
self.view.itemBtn.onIsNaviTargetChanged = function(isTarget)
if self.m_onIsNaviTargetChanged then
self.m_onIsNaviTargetChanged(isTarget)
end
end
end
FacTechTreeNode.InitFacTechTreeNode = HL.Method(HL.Table, HL.Boolean, HL.Function, HL.Function)
<< function(self, techInfo, recommend, onClickFun, onIsNaviTargetChanged)
self:_FirstTimeInit()
self.techId = techInfo.techId
self.x = techInfo.x
self.y = techInfo.y
self.gameObject.name = "Node-" .. techInfo.techId
self.m_onClickFunc = onClickFun
self.m_onIsNaviTargetChanged = onIsNaviTargetChanged
self:OnShowNameStateChange(false)
self:Refresh(recommend)
self.view.redDot:InitRedDot("TechTreeNode", techInfo.techId)
end
FacTechTreeNode.Refresh = HL.Method(HL.Boolean) << function(self, recommend)
local techTreeSystem = GameInstance.player.facTechTreeSystem
local techId = self.techId
local nodeData = Tables.facSTTNodeTable:GetValue(techId)
self.view.nameTxt.text = nodeData.name
local layerIsLocked = techTreeSystem:LayerIsLocked(nodeData.layer)
local isLocked = techTreeSystem:NodeIsLocked(nodeData.techId)
self.view.lockNode.gameObject:SetActiveIfNecessary(layerIsLocked)
self.view.completeNode.gameObject:SetActiveIfNecessary(not isLocked)
self.view.normalNode.gameObject:SetActiveIfNecessary(not layerIsLocked and isLocked)
local hasCornerIcon = not string.isEmpty(nodeData.cornerIcon)
self.view.cornerIconNodeN.gameObject:SetActiveIfNecessary(hasCornerIcon)
self.view.cornerIconNodeL.gameObject:SetActiveIfNecessary(hasCornerIcon)
if hasCornerIcon then
self.view.cornerIconN:LoadSprite(UIConst.UI_SPRITE_FAC_HUB_ICON, nodeData.cornerIcon)
self.view.cornerIconL:LoadSprite(UIConst.UI_SPRITE_FAC_HUB_ICON, nodeData.cornerIcon)
end
self.view.iconN:LoadSprite(UIConst.UI_SPRITE_FAC_TECH_ICON, nodeData.icon)
self.view.iconC:LoadSprite(UIConst.UI_SPRITE_FAC_TECH_ICON, nodeData.icon)
self.view.iconL:LoadSprite(UIConst.UI_SPRITE_FAC_TECH_ICON, nodeData.icon)
self.transform.localPosition = Vector3(self.x, self.y)
self.view.recommend.gameObject:SetActiveIfNecessary(recommend)
local preState = self.m_state
if not isLocked then
self.m_state = State.Unlocked
elseif not layerIsLocked then
self.m_state = State.CanUnlock
else
self.m_state = State.Locked
end
if preState == State.CanUnlock and self.m_state == State.Unlocked then
self.view.animationWrapper:Play("factechtree_treenode_unlock")
elseif preState == State.Locked and self.m_state == State.CanUnlock then
self.view.animationWrapper:Play("factechtree_treenodenormal_unlock")
end
end
FacTechTreeNode.OnSelect = HL.Method(HL.Boolean) << function(self, isSelect)
self.view.selected.gameObject:SetActiveIfNecessary(isSelect)
end
FacTechTreeNode.OnShowNameStateChange = HL.Method(HL.Boolean) << function(self, show)
self.view.nameNode.gameObject:SetActiveIfNecessary(show)
end
HL.Commit(FacTechTreeNode)
return FacTechTreeNode