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

302 lines
7.9 KiB
Lua

local uiCtrl = require_ex('UI/Panels/Base/UICtrl')
local PANEL_ID = PanelId.FacTechTreePopUp
FacTechTreePopUpCtrl = HL.Class('FacTechTreePopUpCtrl', uiCtrl.UICtrl)
FacTechTreePopUpCtrl.s_messages = HL.StaticField(HL.Table) << {
[MessageConst.HIDE_TECH_TREE_POP_UP] = 'HideUI',
[MessageConst.CLOSE_TECH_TREE_POP_UP] = 'CloseUI',
}
FacTechTreePopUpCtrl.ShowPopUp = HL.StaticMethod(HL.Table) << function(args)
local ctrl = FacTechTreePopUpCtrl.AutoOpen(PANEL_ID, nil, false)
ctrl:_ShowPopUp(args)
end
FacTechTreePopUpCtrl.m_getItemCell = HL.Field(HL.Function)
FacTechTreePopUpCtrl.m_unlockItems = HL.Field(HL.Forward('UIListCache'))
FacTechTreePopUpCtrl.m_args = HL.Field(HL.Table)
FacTechTreePopUpCtrl.m_onStageFinishCb = HL.Field(HL.Function)
FacTechTreePopUpCtrl.m_disableClick = HL.Field(HL.Boolean) << false
FacTechTreePopUpCtrl.OnCreate = HL.Override(HL.Any) << function(self, arg)
self.view.mask.onClick:AddListener(function()
self:_OnClickUI()
end)
self.m_getItemCell = UIUtils.genCachedCellFunction(self.view.rewardNode.rewardsList)
self.view.rewardNode.rewardsList.onUpdateCell:AddListener(function(obj, csIndex)
self:_OnUpdateItemCell(self.m_getItemCell(obj), LuaIndex(csIndex))
end)
self.m_unlockItems = UIUtils.genCellCache(self.view.unlockNode.item)
self:_InitController()
end
FacTechTreePopUpCtrl.OnHide = HL.Override() << function(self)
self.m_args = nil
end
FacTechTreePopUpCtrl._OnClickUI = HL.Method() << function(self)
if self.m_disableClick then
return
end
if self.m_onStageFinishCb then
self.m_onStageFinishCb()
end
end
FacTechTreePopUpCtrl.HideUI = HL.Method(HL.Table) << function(self, args)
local onHide = args.onHide
self:PlayAnimationOutWithCallback(function()
self:Hide()
if onHide then
onHide()
end
end)
end
FacTechTreePopUpCtrl.CloseUI = HL.Method() << function(self)
self:Close()
end
FacTechTreePopUpCtrl._ShowPopUp = HL.Method(HL.Table) << function(self, args)
self.m_args = args
self.m_onStageFinishCb = args.onStageFinishCb
local state = args.state
self.m_disableClick = true
if state == 1 then
self.view.animationWrapper:PlayWithTween("factechtreepopup_in", function()
self.m_disableClick = false
end)
else
self.view.animationWrapper:SampleClipAtPercent("factechtreepopup_in", 1)
self.view.animationWrapper:PlayWithTween("factechtreepopup_change", function()
self.m_disableClick = false
end)
end
local unlockItems = args.unlockItems
local buildingInfo = args.buildingInfo
local rewardsItems = args.rewardsItems
local nodeData = Tables.facSTTNodeTable:GetValue(args.techId)
self.view.name.text = nodeData.name
local sprite = self:LoadSprite(UIConst.UI_SPRITE_FAC_TECH_ICON, nodeData.icon.."_big")
self.view.icon.sprite = sprite
self.view.iconS.sprite = sprite
if unlockItems and #unlockItems > 0 then
self:_ShowUnlock()
else
self.view.unlockNode.gameObject:SetActiveIfNecessary(false)
end
if buildingInfo and buildingInfo.buildingId and not string.isEmpty(buildingInfo.buildingId) then
self:_ShowLevelUp()
else
self.view.upgradeNode.gameObject:SetActiveIfNecessary(false)
end
if rewardsItems and #rewardsItems > 0 then
self:_ShowRewards()
else
self.view.rewardNode.gameObject:SetActiveIfNecessary(false)
end
end
FacTechTreePopUpCtrl._ShowUnlock = HL.Method() << function(self)
local node = self.view.unlockNode
local unlockItems = self.m_args.unlockItems
node.gameObject:SetActiveIfNecessary(true)
self.m_unlockItems:Refresh(#unlockItems, function(cell, index)
cell:InitItem({id = unlockItems[index]}, true)
if DeviceInfo.usingController then
cell:SetExtraInfo({
tipsPosType = UIConst.UI_TIPS_POS_TYPE.LeftMid,
tipsPosTransform = self.view.unlockNode.unlockContent,
isSideTips = true,
})
end
end)
local techId = self.m_args.techId
local techData = Tables.facSTTNodeTable:GetValue(techId)
self.view.desc:SetAndResolveTextStyle(techData.unlockDesc)
end
FacTechTreePopUpCtrl._ShowLevelUp = HL.Method() << function(self)
local node = self.view.upgradeNode
local buildingInfo = self.m_args.buildingInfo
node.gameObject:SetActiveIfNecessary(true)
local buildingId = buildingInfo.buildingId
local level = buildingInfo.level
local buildingData = Tables.factoryBuildingTable:GetValue(buildingId)
node.buildingName.text = string.format(Language.LUA_FAC_TECHTREE_POPUP_BUILDING_NAME, buildingData.name)
node.level.gameObject:SetActiveIfNecessary(true)
node.craft.gameObject:SetActiveIfNecessary(false)
node.level.lText.text = buildingInfo.level - 1
node.level.rText.text = buildingInfo.level
node.char.gameObject:SetActiveIfNecessary(false)
local showContract = false
local curCount = 0
local lastCount = 0
node.contract.gameObject:SetActiveIfNecessary(showContract)
if showContract then
node.contract.lText.text = lastCount
node.contract.rText.text = curCount
end
local showCraft = false
local curCraftCount = 0
local lastCraftCount = 0
if buildingData.type == GEnums.FacBuildingType.Processor then
for _,craftData in pairs(Tables.factoryProcessorCraftTable) do
if craftData.usableLevel <= level and FactoryUtils.isSpMachineFormulaUnlocked(craftData.id) then
curCraftCount = curCraftCount + 1
end
if craftData.usableLevel <= level - 1 and FactoryUtils.isSpMachineFormulaUnlocked(craftData.id) then
lastCraftCount = lastCraftCount + 1
end
end
if curCraftCount ~= lastCraftCount then
showCraft = true
end
end
node.craft.gameObject:SetActiveIfNecessary(showCraft)
if showCraft then
node.craft.lText.text = lastCraftCount
node.craft.rText.text = curCraftCount
end
local techId = self.m_args.techId
local techData = Tables.facSTTNodeTable:GetValue(techId)
self.view.desc:SetAndResolveTextStyle(techData.unlockDesc)
end
FacTechTreePopUpCtrl._ShowRewards = HL.Method() << function(self)
local node = self.view.rewardNode
local rewardsItems = self.m_args.rewardsItems
node.gameObject:SetActiveIfNecessary(true)
node.rewardsList:UpdateCount(#rewardsItems)
self.view.desc.text = Language.LUA_FAC_TECHTREE_REWARDS_TIPS
end
FacTechTreePopUpCtrl._OnUpdateItemCell = HL.Method(HL.Userdata, HL.Number) << function(self, cell, index)
local rewardsItems = self.m_args.rewardsItems
local info = rewardsItems[index]
cell:InitItem(info, true)
if DeviceInfo.usingController then
cell:SetExtraInfo({
tipsPosType = UIConst.UI_TIPS_POS_TYPE.LeftMid,
tipsPosTransform = self.view.rewardNode.rewardsListRectTransform,
isSideTips = true,
})
end
end
FacTechTreePopUpCtrl._InitController = HL.Method() << function(self)
if not DeviceInfo.usingController then
return
end
self.view.controllerHintPlaceholder:InitControllerHintPlaceholder({self.view.inputGroup.groupId})
self.view.unlockNode.selectableNaviGroup.onIsFocusedChange:AddListener(function(isFocused)
if not isFocused then
Notify(MessageConst.HIDE_ITEM_TIPS)
end
end)
self.view.rewardNode.selectableNaviGroup.onIsFocusedChange:AddListener(function(isFocused)
if not isFocused then
Notify(MessageConst.HIDE_ITEM_TIPS)
end
end)
end
HL.Commit(FacTechTreePopUpCtrl)