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

133 lines
4.1 KiB
Lua

local UIWidgetBase = require_ex('Common/Core/UIWidgetBase')
PuzzleChessboardConditionItem = HL.Class('PuzzleChessboardConditionItem', UIWidgetBase)
PuzzleChessboardConditionItem.m_group1ConditionCells = HL.Field(HL.Forward("UIListCache"))
PuzzleChessboardConditionItem.m_group2ConditionCells = HL.Field(HL.Forward("UIListCache"))
PuzzleChessboardConditionItem._OnFirstTimeInit = HL.Override() << function(self)
self.m_group1ConditionCells = UIUtils.genCellCache(self.view.rectangleNode.colorGroup1.conditionCell)
self.m_group2ConditionCells = UIUtils.genCellCache(self.view.rectangleNode.colorGroup2.conditionCell)
end
PuzzleChessboardConditionItem.InitPuzzleChessboardConditionItem = HL.Method(HL.Table, HL.Number, HL.Number, HL.Number)
<< function(self, eColor2ConditionsTbl, cellSize, spacing, gridNum)
self:_FirstTimeInit()
self:UpdateContent(eColor2ConditionsTbl, cellSize, spacing, gridNum)
self:Toggle(true)
end
PuzzleChessboardConditionItem.UpdateContent = HL.Method(HL.Table, HL.Number, HL.Number, HL.Number)
<< function(self, eColor2ConditionsTbl, cellSize, spacing, gridNum)
local overflow = false
local empty = true
local index = 1
for eColor, conditionsTbl in pairs(eColor2ConditionsTbl) do
local colorGroupId = 'colorGroup' .. index
local rectangleNode = self.view.rectangleNode
rectangleNode.colorGroup1.gameObject:SetActiveIfNecessary(index >= 1)
rectangleNode.colorGroup2.gameObject:SetActiveIfNecessary(index >= 2)
local rectangleGroup = rectangleNode[colorGroupId]
if rectangleGroup then
rectangleGroup.overBG.gameObject:SetActiveIfNecessary(conditionsTbl.overflow)
end
local conditions = conditionsTbl.conditions
local count = #conditions
if count >= 0 then
if index == 1 then
self.m_group1ConditionCells:Refresh(count, function(cell, index)
cell:InitPuzzleChessboardConditionCell(eColor, conditions[index])
end)
elseif index == 2 then
self.m_group2ConditionCells:Refresh(count, function(cell, index)
cell:InitPuzzleChessboardConditionCell(eColor, conditions[index])
end)
end
if count > 0 then
empty = false
end
end
local numberNode = self.view.numberNode
numberNode.colorGroup1.gameObject:SetActiveIfNecessary(index >= 1)
numberNode.colorGroup2.gameObject:SetActiveIfNecessary(index >= 2)
numberNode.line.gameObject:SetActiveIfNecessary(index >= 2)
local numberGroup = numberNode[colorGroupId]
if numberGroup then
local stateCount = conditionsTbl.stateCount
numberGroup.overflow.gameObject:SetActiveIfNecessary(stateCount < 0)
numberGroup.correct.gameObject:SetActiveIfNecessary(stateCount == 0)
local alpha = stateCount == 0 and self.config.NUMBER_NODE_CORRECT_ALPHA or 1
numberGroup.canvasGroup.alpha = alpha
numberGroup.txtNum.text = conditionsTbl.rawCount
local color = UIUtils.getPuzzleColorByColorType(eColor)
numberGroup.txtNum.color = color
numberGroup.correct.color = color
end
overflow = overflow or conditionsTbl.overflow
index = index + 1
end
local calcSizeDelta
local size = (cellSize + spacing) * gridNum
calcSizeDelta = Vector2(0, size)
self.view.overflow.sizeDelta = calcSizeDelta
self.view.overflow.gameObject:SetActiveIfNecessary(overflow)
self.view.emptyNode.gameObject:SetActiveIfNecessary(empty)
self.view.contentNode.gameObject:SetActiveIfNecessary(not empty)
end
PuzzleChessboardConditionItem.Toggle = HL.Method(HL.Boolean) << function(self, rectangle)
self.view.rectangleNode.gameObject:SetActiveIfNecessary(rectangle)
self.view.numberNode.gameObject:SetActiveIfNecessary(not rectangle)
end
HL.Commit(PuzzleChessboardConditionItem)
return PuzzleChessboardConditionItem