PGRData/Script/matrix/xui/xuisettlewinmainline/XUiPanelExpBar.lua

117 lines
No EOL
3.9 KiB
Lua

local FILL_SPEED = 1
local MathfLerp = CS.UnityEngine.Mathf.Lerp
local CSTime = CS.UnityEngine.Time
local XUiPanelExpBar = XClass(nil, "XUiPanelExpBar")
function XUiPanelExpBar:Ctor(ui)
self.GameObject = ui.gameObject
self.Transform = ui.transform
self.ScheduleId = nil
XTool.InitUiObject(self)
self:InitView()
end
function XUiPanelExpBar:InitView()
self.ImgPlayerExpFillAdd.fillAmount = 0
self.ScheduleId = self.GameObject:ScheduleForever(function()
if not self.FullTimes then return end
local beginFillAmount = self.BeginFillAmount
if not beginFillAmount then return end
local finalFillAmount = self.FinalFillAmount
if not finalFillAmount then return end
local curLevel = self.CurLevel
if not curLevel then return end
local lastLevel = self.LastLevel
if not lastLevel then return end
local lerpPercent = FILL_SPEED * (self.StartTime)
self.StartTime = self.StartTime + CSTime.deltaTime
if curLevel > lastLevel then
local finalFullTimes = curLevel - lastLevel
if self.FullTimes == 0 then
self.ImgPlayerExpFill.fillAmount = MathfLerp(beginFillAmount, 1, lerpPercent)
elseif self.FullTimes < finalFullTimes then
self.ImgPlayerExpFill.fillAmount = MathfLerp(0, 1, lerpPercent)
else
self.ImgPlayerExpFill.fillAmount = MathfLerp(0, finalFillAmount, lerpPercent)
if lerpPercent >= 1 then
self.FullTimes = nil
end
end
if self.FullTimes and lerpPercent >= 1 then
-- self.FullTimes = self.FullTimes + 1 --这里是一条条涨上去的动画
self.FullTimes = finalFullTimes --跳过中间过程,只播首尾
if self.FullTimes >= finalFullTimes then
self.StartTime = 0
self.ImgPlayerExpFillAdd.fillAmount = finalFillAmount
end
end
else
self.ImgPlayerExpFill.fillAmount = MathfLerp(beginFillAmount, finalFillAmount, lerpPercent)
if lerpPercent >= 1 then
self.FullTimes = nil
end
end
end, 0)
end
function XUiPanelExpBar:LetsRoll(lastLevel, lastExp, lastMaxExp, curLevel, curExp, curMaxExp, addExp, txtLevelName)
self.BeginFillAmount = lastExp / lastMaxExp
self.FinalFillAmount = curExp / curMaxExp
self.CurLevel = curLevel
self.LastLevel = lastLevel
self.StartTime = 0
self.FullTimes = 0
if curLevel <= lastLevel then
self.ImgPlayerExpFillAdd.fillAmount = self.FinalFillAmount
end
self.ImgPlayerExpFill.gameObject:SetActiveEx(true)
if self.TxtPlayerLevel then
self.TxtPlayerLevel.text = curLevel
end
if self.TextLevel and txtLevelName then
self.TextLevel.text = txtLevelName
end
if self.TxtPlayerExp then
self.TxtPlayerExp.text = "+ " .. addExp
end
end
function XUiPanelExpBar:SkipRoll(lastLevel, lastExp, lastMaxExp, curLevel, curExp, curMaxExp, addExp)
local finalFillAmount = curExp / curMaxExp
self.ImgPlayerExpFill.fillAmount = finalFillAmount
self.ImgPlayerExpFillAdd.fillAmount = finalFillAmount
self.ImgPlayerExpFill.gameObject:SetActiveEx(true)
if self.TxtPlayerExp then
self.TxtPlayerExp.text = "+ " .. addExp
end
end
function XUiPanelExpBar:PreviewExpBar(curExp, maxExp, addExp)
local curFillAmount = curExp / maxExp
local addFillAmount = addExp / maxExp
self.ImgPlayerExpFill.fillAmount = curFillAmount
self.ImgPlayerExpFillAdd.fillAmount = addFillAmount
self.ImgPlayerExpFill.gameObject:SetActiveEx(true)
end
function XUiPanelExpBar:SetShareTag(isShare)
if self.ShareTag then
self.ShareTag.gameObject:SetActiveEx(isShare)
end
end
function XUiPanelExpBar:StopAnim()
XScheduleManager.UnSchedule(self.ScheduleId)
end
return XUiPanelExpBar