2025-06-04 05:12:01 +08:00

63 lines
1.8 KiB
Plaintext

autoImport("CoreView")
BarrageView = class("BarrageView",CoreView)
BarrageView.yScale = 8
BarrageView.activeWidth = 1280
BarrageView.cellPath = ResourcePathHelper.UICell("MessageFlyer2D")
function BarrageView:ctor(go)
BarrageView.super.ctor(self,go)
self:Init()
end
function BarrageView:Init()
self.cacheLabel = {}
self.panel = self.gameObject:GetComponentInChildren(UIPanel)
end
function BarrageView:AddText(data)
local go = Game.AssetManager_UI:CreateAsset(BarrageView.cellPath, self.panel.gameObject);
local label = go:GetComponentInChildren(UILabel)
label.text = data.text
local size = math.random(GameConfig.Barrage.SizeMin, GameConfig.Barrage.SizeMax) / 10
local localScale = label.transform.localScale
localScale.x = size
localScale.y = size
label.transform.localScale = localScale
label.color = data.color
local fontSize = label.fontSize
-- caculate x value
local panelWidthPer = data.percent
local width = BarrageView.activeWidth
local maxX = width / 2 - string.len(label.text) * fontSize * localScale.x
local x = (panelWidthPer - 0.5) * BarrageView.activeWidth
if x > maxX then
x = maxX
end
-- caculate y value
local height = self:GetActiveHeight()
local minY = -height / 2 + fontSize * localScale.y * BarrageView.yScale / 2
local maxY = height / 2 - fontSize * localScale.y * BarrageView.yScale / 2
local y = math.random(minY,maxY)
go.transform.localPosition = Vector3(x , y, 0)
self.cacheLabel[data] = go
return go
end
function BarrageView:RemoveText(data)
local go = self.cacheLabel[data]
Game.GOLuaPoolManager:AddToUIPool(BarrageView.cellPath,go)
self.cacheLabel[data] = nil
return go
end
function BarrageView:GetActiveHeight()
local uiRoot = GameObjectUtil.Instance:FindCompInParents(self.gameObject, UIRoot)
if uiRoot ~= nil then
return uiRoot.activeHeight
end
return 0
end