Files
Main/Assets/GameAssets/Resources/Lua/UI/Components/UIDynamicProcess/DynamicProcessSlider.lua
2025-01-25 04:38:09 +08:00

125 lines
3.7 KiB
Lua

------------------------------------------------
--作者: 王圣
--日期: 2020-12-29
--文件: DynamicProcessSlider.lua
--模块: DynamicProcessSlider
--描述: 动态进度条组件
------------------------------------------------
local DynamicProcessSlider = {
Trans = nil, -- Transform
Bg = nil,
Spr = nil,
Slider = nil,
HeadValue = 0,
Space = 0,
BgAndSprDis = 0,
SpaceCount = 0,
Derection = DynamicProcessDir.Width,
DataList = List:New()
}
--headValue : 进度条头部长(宽) 有些进度条头部并不是等比划分
--space : 进度条等比间隔
--bgAndSprDis Bg和Spr之间的间隔
function DynamicProcessSlider:New(trans, headValue, space, bgAndSprDis, derection)
local _m = Utils.DeepCopy(self)
_m.Trans = trans
_m.HeadValue = headValue
_m.Space = space
_m.BgAndSprDis = bgAndSprDis
_m.Derection = derection
if headValue == 0 or headValue == nil then
self.HeadValue = space
end
_m:FindAllComponents()
return _m
end
--查找组件
function DynamicProcessSlider:FindAllComponents()
local _myTrans = self.Trans
self.Bg = UIUtils.FindSpr(_myTrans,"Bg")
self.Spr = UIUtils.FindSpr(_myTrans, "Spr")
self.Slider = UIUtils.FindSlider(_myTrans, "Spr")
end
function DynamicProcessSlider:Init(spaceCount)
--设置Bg 和 Spr 的长(宽)
end
function DynamicProcessSlider:GetSprWidthOrHeight()
local _value = self.HeadValue + (self.SpaceCount - 1) * self.Space + self.BgAndSprDis
_value = _value - 2 * self.BgAndSprDis
return _value
end
function DynamicProcessSlider:GetBgWidthOrHeight()
local _value = self.HeadValue + (self.SpaceCount - 1) * self.Space + self.BgAndSprDis
return _value
end
--刷新进度
function DynamicProcessSlider:Refreash(point, dataList, spaceCount)
if #self.DataList then
if dataList ~= nil then
for i = 1, #dataList do
self.DataList:Add(dataList[i])
end
end
end
if self.SpaceCount == 0 then
self.SpaceCount = spaceCount
if self.Derection == DynamicProcessDir.Width then
self.Bg.width = math.floor( self:GetBgWidthOrHeight() )
self.Spr.width = math.floor( self:GetSprWidthOrHeight() )
else
self.Bg.height = math.floor( self:GetBgWidthOrHeight() )
self.Spr.height = math.floor( self:GetSprWidthOrHeight() )
end
end
local _isFind = false
local _curData = nil
local _frontData = nil
for i = 1, #self.DataList do
local _data = self.DataList[i]
if _data ~= nil then
if _data.Point >= point and not _isFind then
_curData = _data
_isFind = true
break
else
_frontData = _data
end
end
end
if not _isFind then
--进度已经满了
self.Slider.value = 1
else
local _frontPoint = 0
local _frontIndex = 1
if _frontData ~= nil then
_frontPoint = _frontData.Point
_frontIndex = _frontData.Index
end
local _value1 = (point - _frontPoint) / (_curData.Point - _frontPoint) --point / _curData.Point
local _frontWidth = (self.HeadValue + self.Space * (_frontIndex - 1) - self.BgAndSprDis)
local _width = 0
if _frontPoint == 0 then
_width = _value1 * self.HeadValue
else
_width = _value1 * self.Space + _frontWidth
end
--local _value2 = (self.HeadValue + self.Space * (_curData.Index - 1) - self.BgAndSprDis) / self:GetSprWidthOrHeight()
self.Slider.value = _width / self:GetSprWidthOrHeight()--_value1 * _value2
end
end
return DynamicProcessSlider