Files
Endfield-Data/LuaScripts/UI/Widgets/AdventureRewardDocCell.lua
2026-01-31 21:42:01 +07:00

91 lines
2.7 KiB
Lua

local UIWidgetBase = require_ex('Common/Core/UIWidgetBase')
AdventureRewardDocCell = HL.Class('AdventureRewardDocCell', UIWidgetBase)
AdventureRewardDocCell._OnFirstTimeInit = HL.Override() << function(self)
end
AdventureRewardDocCell.m_index = HL.Field(HL.Number) << -1
AdventureRewardDocCell.m_extraSideDocs = HL.Field(HL.Number) << -1
AdventureRewardDocCell.m_rewardInfo = HL.Field(HL.Any) << nil
local REWARD_TYPE_STATE_NAME = {
[GEnums.AdventureRewardShowType.None] = "Gray",
[GEnums.AdventureRewardShowType.Blue] = "Blue",
[GEnums.AdventureRewardShowType.Purple] = "Purple",
[GEnums.AdventureRewardShowType.Yellow] = "Yellow",
}
AdventureRewardDocCell.InitAdventureRewardDocCell = HL.Method(HL.Any, HL.Number, HL.Number, HL.Number, HL.Number)
<< function(self, levelRewardInfo, docIndex, currIndex, drawOutPercent, extraSideDocs)
self:_FirstTimeInit()
self:UpdateDrawOut(currIndex, drawOutPercent)
self:UpdateCellExpand(currIndex, drawOutPercent)
self.m_rewardInfo = levelRewardInfo
self.m_index = docIndex
self.m_extraSideDocs = extraSideDocs
local isEmpty = levelRewardInfo == nil
self.view.viewRoot.gameObject:SetActive(not isEmpty)
if not isEmpty then
self.view.docState:SetState(REWARD_TYPE_STATE_NAME[levelRewardInfo.rewardType])
end
end
AdventureRewardDocCell.UpdateDrawOut = HL.Method(HL.Number, HL.Number) << function(self, currIndex, drawOutPercent)
local foldHeight = self.view.config.LEVEL_DOC_FOLD_HEIGHT
local expandHeight = self.view.config.LEVEL_DOC_EXPAND_HEIGHT
local dist = math.abs(currIndex - self.m_index)
local distPercent = 1 - math.max(math.min(dist, 1), 0)
local samplePercent = distPercent * drawOutPercent
local floorIndex = math.floor(currIndex + 0.5)
local expandPercent = 1 - math.max(math.min(dist, 1), 0)
self.view.layoutElement.preferredHeight = foldHeight + expandPercent * drawOutPercent * (expandHeight - foldHeight)
self.view.docState:SetState(floorIndex == self.m_index and "Select" or "Unselect")
self.view.animationWrapper:SampleClipAtPercent("adv_reward_document_select", samplePercent)
end
AdventureRewardDocCell.UpdateCellExpand = HL.Method(HL.Number, HL.Number) << function(self, currIndex, drawOutPercent)
local allIndex = self.m_index + 1 - currIndex + self.m_extraSideDocs
local allLength = self.m_extraSideDocs * 2 + 1
local allPercent = 0
if allLength ~= 0 then
allPercent = allIndex / allLength
end
allPercent = math.max(math.min(allPercent, 1), 0)
self.view.animationWrapper:SampleClipAtPercent("adv_reward_document_rotation", allPercent)
end
HL.Commit(AdventureRewardDocCell)
return AdventureRewardDocCell