Finished progress bar animation
This commit is contained in:
1 parent
742332b92d
commit
6ebbfb37bd
2 files changed
+78
-13
No files matched your search
@@ -603,6 +603,9 @@ namespace Vocaluxe.Screens
|
|||||||
_DynamicLyricsTop = true;
|
_DynamicLyricsTop = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (int p = 0; p < CGame.NumPlayers; p++)
|
||||||
|
_ProgressBars[_ProgressBarsRating[p, CGame.NumPlayers]].Reset();
|
||||||
|
|
||||||
_SetDuetLyricsVisibility(song.IsDuet);
|
_SetDuetLyricsVisibility(song.IsDuet);
|
||||||
_SetNormalLyricsVisibility();
|
_SetNormalLyricsVisibility();
|
||||||
|
|
||||||
|
|||||||
@@ -121,19 +121,14 @@ namespace VocaluxeLib.Menu
|
|||||||
public float Progress
|
public float Progress
|
||||||
{
|
{
|
||||||
get { return _ProgressTarget; }
|
get { return _ProgressTarget; }
|
||||||
set
|
set { _ProgressTarget = value; }
|
||||||
{
|
|
||||||
if (value != _ProgressTarget)
|
|
||||||
{
|
|
||||||
_ProgressTarget = value;
|
|
||||||
_UpdateProgress();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
private float _ProgressCurrent;
|
private float _ProgressCurrent;
|
||||||
|
private float _ProgressLast = -1f;
|
||||||
|
|
||||||
private SColorF _ColorProgressCurrent;
|
private SColorF _ColorProgressCurrent;
|
||||||
private SColorF _ColorProgressTarget;
|
private SColorF _ColorProgressTarget;
|
||||||
|
private SColorF _ColorProgressLast;
|
||||||
|
|
||||||
private SRectF _RectProgressBegin;
|
private SRectF _RectProgressBegin;
|
||||||
private SRectF _RectProgressMid;
|
private SRectF _RectProgressMid;
|
||||||
@@ -142,9 +137,13 @@ namespace VocaluxeLib.Menu
|
|||||||
private CTextureRef _TextureProgressBegin;
|
private CTextureRef _TextureProgressBegin;
|
||||||
private CTextureRef _TextureProgressEnd;
|
private CTextureRef _TextureProgressEnd;
|
||||||
|
|
||||||
|
private Stopwatch _AnimTimer;
|
||||||
|
private float _AnimDuration;
|
||||||
|
|
||||||
public CProgressBar(int partyModeID)
|
public CProgressBar(int partyModeID)
|
||||||
{
|
{
|
||||||
_PartyModeID = partyModeID;
|
_PartyModeID = partyModeID;
|
||||||
|
_AnimTimer = new Stopwatch();
|
||||||
}
|
}
|
||||||
|
|
||||||
public CProgressBar(CProgressBar pb)
|
public CProgressBar(CProgressBar pb)
|
||||||
@@ -167,6 +166,8 @@ namespace VocaluxeLib.Menu
|
|||||||
|
|
||||||
Alpha = pb.Alpha;
|
Alpha = pb.Alpha;
|
||||||
Visible = pb.Visible;
|
Visible = pb.Visible;
|
||||||
|
|
||||||
|
_AnimTimer = new Stopwatch();
|
||||||
}
|
}
|
||||||
|
|
||||||
public CProgressBar(SThemeProgressBar theme, int partyModeID)
|
public CProgressBar(SThemeProgressBar theme, int partyModeID)
|
||||||
@@ -176,6 +177,8 @@ namespace VocaluxeLib.Menu
|
|||||||
_Theme.ProgressColors.Sort((x, y) => x.From.CompareTo(y.From));
|
_Theme.ProgressColors.Sort((x, y) => x.From.CompareTo(y.From));
|
||||||
_UpdateProgress();
|
_UpdateProgress();
|
||||||
ThemeLoaded = true;
|
ThemeLoaded = true;
|
||||||
|
|
||||||
|
_AnimTimer = new Stopwatch();
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool LoadTheme(string xmlPath, string elementName, CXmlReader xmlReader)
|
public bool LoadTheme(string xmlPath, string elementName, CXmlReader xmlReader)
|
||||||
@@ -184,6 +187,11 @@ namespace VocaluxeLib.Menu
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Reset()
|
||||||
|
{
|
||||||
|
_ProgressLast = -1;
|
||||||
|
}
|
||||||
|
|
||||||
public void Draw()
|
public void Draw()
|
||||||
{
|
{
|
||||||
Draw(1f);
|
Draw(1f);
|
||||||
@@ -196,6 +204,7 @@ namespace VocaluxeLib.Menu
|
|||||||
|
|
||||||
if (Visible || forceDraw || (CBase.Settings.GetProgramState() == EProgramState.EditTheme))
|
if (Visible || forceDraw || (CBase.Settings.GetProgramState() == EProgramState.EditTheme))
|
||||||
{
|
{
|
||||||
|
_UpdateProgress();
|
||||||
|
|
||||||
//Draw background
|
//Draw background
|
||||||
SColorF color = new SColorF(ColorBackground.R, ColorBackground.G, ColorBackground.B, ColorBackground.A * Alpha);
|
SColorF color = new SColorF(ColorBackground.R, ColorBackground.G, ColorBackground.B, ColorBackground.A * Alpha);
|
||||||
@@ -289,15 +298,69 @@ namespace VocaluxeLib.Menu
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void _UpdateProgress()
|
private void _UpdateProgress()
|
||||||
|
{
|
||||||
|
if (_ProgressCurrent == _ProgressTarget)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (_ProgressLast != -1)
|
||||||
|
_CheckAnimation();
|
||||||
|
|
||||||
|
_UpdateProgressColor();
|
||||||
|
|
||||||
|
if (_ProgressLast == -1)
|
||||||
|
_ProgressCurrent = _ProgressLast = _ProgressTarget;
|
||||||
|
|
||||||
|
_UpdateProgressLeft();
|
||||||
|
_UpdateProgressMid();
|
||||||
|
_UpdateProgressRight();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void _CheckAnimation()
|
||||||
|
{
|
||||||
|
//Check if animation needs to be started
|
||||||
|
if (_Theme.AnimateColoring == EOffOn.TR_CONFIG_ON || _Theme.AnimateMovement == EOffOn.TR_CONFIG_ON)
|
||||||
|
{
|
||||||
|
if (!_AnimTimer.IsRunning)
|
||||||
|
{
|
||||||
|
_AnimTimer.Restart();
|
||||||
|
//Calc animation duration in ms based on rect size and progress change
|
||||||
|
if (_Theme.Direction == EDirection.Left || _Theme.Direction == EDirection.Right)
|
||||||
|
_AnimDuration = Math.Max(100f, (_Theme.Rect.W * 0.015f * 1000) * Math.Abs(_ProgressTarget - _ProgressCurrent));
|
||||||
|
else
|
||||||
|
_AnimDuration = Math.Max(100f, (_Theme.Rect.H * 0.015f * 1000) * Math.Abs(_ProgressTarget - _ProgressCurrent));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//Movement animation
|
||||||
|
if (_Theme.AnimateMovement == EOffOn.TR_CONFIG_ON)
|
||||||
|
_ProgressCurrent = _ProgressLast + (_AnimTimer.ElapsedMilliseconds / _AnimDuration).Clamp(0, 1) * (_ProgressTarget - _ProgressLast);
|
||||||
|
|
||||||
|
//Check if animation needs to be stopped
|
||||||
|
if (_ProgressCurrent == _ProgressTarget)
|
||||||
|
{
|
||||||
|
_AnimTimer.Stop();
|
||||||
|
|
||||||
|
_ProgressLast = _ProgressCurrent = _ProgressTarget;
|
||||||
|
_ColorProgressLast = _ColorProgressCurrent = _ColorProgressTarget;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void _UpdateProgressColor()
|
||||||
{
|
{
|
||||||
foreach (SThemeProgressBarColor col in _Theme.ProgressColors)
|
foreach (SThemeProgressBarColor col in _Theme.ProgressColors)
|
||||||
if (col.From < _ProgressTarget)
|
if (col.From < _ProgressTarget)
|
||||||
col.Color.Get(_PartyModeID, out _ColorProgressTarget);
|
col.Color.Get(_PartyModeID, out _ColorProgressTarget);
|
||||||
|
|
||||||
_ColorProgressCurrent = _ColorProgressTarget;
|
if(_ProgressLast != -1 && _Theme.AnimateColoring == EOffOn.TR_CONFIG_ON)
|
||||||
_UpdateProgressLeft();
|
{
|
||||||
_UpdateProgressMid();
|
float animFactor = (_AnimTimer.ElapsedMilliseconds / _AnimDuration).Clamp(0, 1);
|
||||||
_UpdateProgressRight();
|
|
||||||
|
_ColorProgressCurrent.R = _ColorProgressLast.R + animFactor * (_ColorProgressTarget.R - _ColorProgressLast.R);
|
||||||
|
_ColorProgressCurrent.G = _ColorProgressLast.G + animFactor * (_ColorProgressTarget.G - _ColorProgressLast.G);
|
||||||
|
_ColorProgressCurrent.B = _ColorProgressLast.B + animFactor * (_ColorProgressTarget.B - _ColorProgressLast.B);
|
||||||
|
_ColorProgressCurrent.A = _ColorProgressLast.A + animFactor * (_ColorProgressTarget.A - _ColorProgressLast.A);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
_ColorProgressCurrent = _ColorProgressLast = _ColorProgressTarget;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void _UpdateProgressLeft()
|
private void _UpdateProgressLeft()
|
||||||
@@ -328,7 +391,6 @@ namespace VocaluxeLib.Menu
|
|||||||
|
|
||||||
private void _UpdateProgressMid()
|
private void _UpdateProgressMid()
|
||||||
{
|
{
|
||||||
_ProgressCurrent = _ProgressTarget;
|
|
||||||
switch (_Theme.Direction)
|
switch (_Theme.Direction)
|
||||||
{
|
{
|
||||||
case EDirection.Right:
|
case EDirection.Right:
|
||||||
|
|||||||
Reference in new issue
Block a user