Use basic Draw method in ScreenCredits and fix error when shown multiple times

This commit is contained in:
Flamefire committed 2014-10-19 18:18:50 +02:00
1 parent 60962e382b
commit 432ff4f4f3
2 files changed
+113 -128

No files matched your search

+108 -126
View File
@@ -43,7 +43,6 @@ namespace Vocaluxe.Screens
private readonly int _ParticleOffsetY; private readonly int _ParticleOffsetY;
public EDirection Direction; public EDirection Direction;
public float StartTimeUp; public float StartTimeUp;
public bool Active;
public CCreditName(CStatic image, CStatic imgDot, CParticleEffect particle, int particleOffsetX, int particleOffsetY) public CCreditName(CStatic image, CStatic imgDot, CParticleEffect particle, int particleOffsetX, int particleOffsetY)
{ {
@@ -52,7 +51,7 @@ namespace Vocaluxe.Screens
_Particle = particle; _Particle = particle;
_ParticleOffsetX = (int)Math.Round(particleOffsetX * image.Rect.W / image.Texture.OrigSize.Width - particle.Rect.W / 2); _ParticleOffsetX = (int)Math.Round(particleOffsetX * image.Rect.W / image.Texture.OrigSize.Width - particle.Rect.W / 2);
_ParticleOffsetY = (int)Math.Round(particleOffsetY * image.Rect.H / image.Texture.OrigSize.Height - particle.Rect.H / 2); _ParticleOffsetY = (int)Math.Round(particleOffsetY * image.Rect.H / image.Texture.OrigSize.Height - particle.Rect.H / 2);
Active = true; Visible = true;
} }
public float X public float X
@@ -80,6 +79,7 @@ namespace Vocaluxe.Screens
{ {
get { return _Image.Rect.W; } get { return _Image.Rect.W; }
} }
public float H public float H
{ {
get { return _Image.Rect.H; } get { return _Image.Rect.H; }
@@ -95,14 +95,15 @@ namespace Vocaluxe.Screens
} }
} }
public void Draw() public bool Visible
{ {
if (Active) set
{ {
_Image.Draw(); _Image.Visible = value;
_ImgDot.Draw(); _ImgDot.Visible = value;
_Particle.Draw(); _Particle.Visible = value;
} }
get { return _Image.Visible; }
} }
} }
@@ -142,7 +143,7 @@ namespace Vocaluxe.Screens
private CTextureRef _TexNamePantero; private CTextureRef _TexNamePantero;
private CTextureRef _TexNamePinky007; private CTextureRef _TexNamePinky007;
private static readonly SColorF _BGColor = new SColorF(0, 0.18f, 0.474f, 1); private SThemeBackground _BGTheme;
public override void Init() public override void Init()
{ {
@@ -181,6 +182,9 @@ namespace Vocaluxe.Screens
"of your abilities!"; "of your abilities!";
words = paragraph.Split(new char[] {' '}); words = paragraph.Split(new char[] {' '});
_Paragraphs.Add(words); _Paragraphs.Add(words);
_BGTheme.Type = EBackgroundTypes.Color;
_BGTheme.Color = new SThemeColor {Name = null, R = 0, G = 0.18f, B = 0.474f, A = 1};
} }
public override void LoadTheme(string xmlPath) public override void LoadTheme(string xmlPath)
@@ -240,6 +244,35 @@ namespace Vocaluxe.Screens
} }
} }
} }
CBackground bg = new CBackground(_BGTheme, -1);
_AddBackground(bg);
//Vocaluxe-Logo
_Logo = GetNewStatic(_TexLogo, new SColorF(1, 1, 1, 1),
new SRectF((float)(CSettings.RenderW - _TexLogo.OrigSize.Width) / 2, -270, _TexLogo.OrigSize.Width, _TexLogo.OrigSize.Height, -2));
_AddStatic(_Logo);
//Little stars for logo
var numstars = (int)(_Logo.Rect.W * 0.25f / 2f);
var partRect = new SRectF(_Logo.Rect.X, _Logo.Rect.Y, _Logo.Rect.W, _Logo.Rect.H, -1);
_StarsRed = _GetStarParticles(numstars, true, partRect, true);
_StarsBlue = _GetStarParticles(numstars, false, partRect, true);
_AddParticleEffect(_StarsRed);
_AddParticleEffect(_StarsBlue);
//Credit names
_CreditNames = new List<CCreditName>();
_AddNewCreditName(_TexNameBrunzel, 502, 29, true);
_AddNewCreditName(_TexNameDarkice, 360, 55, true);
_AddNewCreditName(_TexNameFlokuep, 214, 14, true);
_AddNewCreditName(_TexNameFlamefire, 496, 46, true);
_AddNewCreditName(_TexNameBohning, 383, 54, false);
_AddNewCreditName(_TexNameMesand, 525, 13, false);
_AddNewCreditName(_TexNameBabene03, 33, 26, false);
_AddNewCreditName(_TexNamePantero, 311, 45, false);
_AddNewCreditName(_TexNamePinky007, 113, 50, false);
} }
public override void ReloadTheme(string xmlPath) {} public override void ReloadTheme(string xmlPath) {}
@@ -290,10 +323,10 @@ namespace Vocaluxe.Screens
private void _AddNewCreditName(CTextureRef texture, int particleOffsetX, int particleOffsetY, bool bigParticles) private void _AddNewCreditName(CTextureRef texture, int particleOffsetX, int particleOffsetY, bool bigParticles)
{ {
bool isRight = _CreditNames.Count % 2 == 0; bool isRed = _CreditNames.Count % 2 == 0;
int partRectSize = bigParticles ? 25 : 20; int partRectSize = bigParticles ? 25 : 20;
int partCount = bigParticles ? 8 : 6; int partCount = bigParticles ? 8 : 6;
CTextureRef texDot = isRight ? _TexRedDot : _TexBlueDot; CTextureRef texDot = isRed ? _TexRedDot : _TexBlueDot;
CStatic image = GetNewStatic(texture, new SColorF(1, 1, 1, 1), new SRectF(-1, -1, 400, 120, -4)); CStatic image = GetNewStatic(texture, new SColorF(1, 1, 1, 1), new SRectF(-1, -1, 400, 120, -4));
@@ -301,50 +334,35 @@ namespace Vocaluxe.Screens
SRectF imgDotRect = particleRect; SRectF imgDotRect = particleRect;
imgDotRect.Z = -5; imgDotRect.Z = -5;
CStatic imgDot = GetNewStatic(texDot, new SColorF(1, 1, 1, 1), imgDotRect); CStatic imgDot = GetNewStatic(texDot, new SColorF(1, 1, 1, 1), imgDotRect);
CParticleEffect particle = _GetStarParticles(partCount, isRight, particleRect, bigParticles); CParticleEffect particle = _GetStarParticles(partCount, isRed, particleRect, bigParticles);
var credit = new CCreditName(image, imgDot, particle, particleOffsetX, particleOffsetY); var credit = new CCreditName(image, imgDot, particle, particleOffsetX, particleOffsetY);
if (isRight)
{
credit.X = CSettings.RenderW;
credit.Direction = EDirection.Right;
}
else
{
credit.X = -450;
credit.Direction = EDirection.Left;
}
credit.Y = 580;
_CreditNames.Add(credit); _CreditNames.Add(credit);
_AddStatic(image);
_AddStatic(imgDot);
_AddParticleEffect(particle);
} }
public override void OnShow() public override void OnShow()
{ {
base.OnShow(); base.OnShow();
//Vocaluxe-Logo foreach (CText text in _ParagraphTexts)
_Logo = GetNewStatic(_TexLogo, new SColorF(1, 1, 1, 1), text.Visible = false;
new SRectF((float)(CSettings.RenderW - _TexLogo.OrigSize.Width) / 2, -270, _TexLogo.OrigSize.Width, _TexLogo.OrigSize.Height, -2)); bool isRight = true;
foreach (CCreditName name in _CreditNames)
//Little stars for logo {
var numstars = (int)(_Logo.Rect.W * 0.25f / 2f); name.Visible = true;
var partRect = new SRectF(_Logo.Rect.X, _Logo.Rect.Y, _Logo.Rect.W, _Logo.Rect.H, -1); name.Direction = isRight ? EDirection.Right : EDirection.Left;
_StarsRed = _GetStarParticles(numstars, true, partRect, true); name.X = -name.W;
_StarsBlue = _GetStarParticles(numstars, false, partRect, true); name.Y = 580;
name.Alpha = 1;
//Credit names isRight = !isRight;
_CreditNames = new List<CCreditName>(); }
_Logo.Y = -270;
_AddNewCreditName(_TexNameBrunzel, 502, 29, true); _StarsRed.Y = _Logo.Y;
_AddNewCreditName(_TexNameDarkice, 360, 55, true); _StarsBlue.Y = _Logo.Y;
_AddNewCreditName(_TexNameFlokuep, 214, 14, true);
_AddNewCreditName(_TexNameFlamefire, 496, 46, true);
_AddNewCreditName(_TexNameBohning, 383, 54, false);
_AddNewCreditName(_TexNameMesand, 525, 13, false);
_AddNewCreditName(_TexNameBabene03, 33, 26, false);
_AddNewCreditName(_TexNamePantero, 311, 45, false);
_AddNewCreditName(_TexNamePinky007, 113, 50, false);
_TextTimer.Reset(); _TextTimer.Reset();
_LogoTimer.Reset(); _LogoTimer.Reset();
@@ -358,31 +376,6 @@ namespace Vocaluxe.Screens
_LogoTimer.Start(); _LogoTimer.Start();
} }
public override void Draw()
{
base.Draw();
//Draw background
CDraw.DrawRect(_BGColor, CSettings.RenderRect);
//Draw stars
_StarsBlue.Draw();
_StarsRed.Draw();
_Logo.Draw();
//Draw credit-entries
foreach (CCreditName cn in _CreditNames)
cn.Draw();
//Draw Text
if (_TextTimer.IsRunning)
{
foreach (CText text in _ParagraphTexts)
text.Draw();
}
}
private bool _Animation() private bool _Animation()
{ {
bool active = false; bool active = false;
@@ -396,10 +389,7 @@ namespace Vocaluxe.Screens
if (_LogoTimer.ElapsedMilliseconds >= 2000 && !_CreditsTimer.IsRunning) if (_LogoTimer.ElapsedMilliseconds >= 2000 && !_CreditsTimer.IsRunning)
_CreditsTimer.Start(); _CreditsTimer.Start();
if (_LogoTimer.ElapsedMilliseconds >= 3000) if (_LogoTimer.ElapsedMilliseconds >= 3000)
{
_LogoTimer.Stop(); _LogoTimer.Stop();
_LogoTimer.Reset();
}
} }
if (_CreditsTimer.IsRunning) if (_CreditsTimer.IsRunning)
@@ -408,71 +398,63 @@ namespace Vocaluxe.Screens
for (int i = 0; i < _CreditNames.Count; i++) for (int i = 0; i < _CreditNames.Count; i++)
{ {
if (_CreditNames[i].Active) if (!_CreditNames[i].Visible)
continue;
switch (_CreditNames[i].Direction)
{ {
switch (_CreditNames[i].Direction) case EDirection.Right:
{ if (i * 4000f <= _CreditsTimer.ElapsedMilliseconds)
case EDirection.Right: {
if (i * 4000f <= _CreditsTimer.ElapsedMilliseconds) _CreditNames[i].X = -450 + (((CSettings.RenderW - _CreditNames[i].W) / 2) / 3000f) * (_CreditsTimer.ElapsedMilliseconds - (i * 4000f));
//Check if name is in middle of screen and should go up
if (_CreditNames[i].X >= (CSettings.RenderW - _CreditNames[i].W) / 2)
{ {
_CreditNames[i].X = -450 + (((CSettings.RenderW - _CreditNames[i].W) / 2) / 3000f) * (_CreditsTimer.ElapsedMilliseconds - (i * 4000f)); _CreditNames[i].Direction = EDirection.Up;
_CreditNames[i].StartTimeUp = _CreditsTimer.ElapsedMilliseconds;
//Check if name is in middle of screen and should go up
if (_CreditNames[i].X >= (CSettings.RenderW - _CreditNames[i].W) / 2)
{
_CreditNames[i].Direction = EDirection.Up;
_CreditNames[i].StartTimeUp = _CreditsTimer.ElapsedMilliseconds;
}
} }
break; }
break;
case EDirection.Left: case EDirection.Left:
if (i * 4000f <= _CreditsTimer.ElapsedMilliseconds) if (i * 4000f <= _CreditsTimer.ElapsedMilliseconds)
{
_CreditNames[i].X = CSettings.RenderW -
(((CSettings.RenderW - _CreditNames[i].W) / 2) / 3000f) * (_CreditsTimer.ElapsedMilliseconds - (i * 4000f));
//Check if name is in middle of screen and should go up
if (_CreditNames[i].X <= (CSettings.RenderW - _CreditNames[i].W) / 2)
{ {
_CreditNames[i].X = CSettings.RenderW - _CreditNames[i].Direction = EDirection.Up;
(((CSettings.RenderW - _CreditNames[i].W) / 2) / 3000f) * (_CreditsTimer.ElapsedMilliseconds - (i * 4000f)); _CreditNames[i].StartTimeUp = _CreditsTimer.ElapsedMilliseconds;
//Check if name is in middle of screen and should go up
if (_CreditNames[i].X <= (CSettings.RenderW - _CreditNames[i].W) / 2)
{
_CreditNames[i].Direction = EDirection.Up;
_CreditNames[i].StartTimeUp = _CreditsTimer.ElapsedMilliseconds;
}
} }
break; }
break;
case EDirection.Up: case EDirection.Up:
_CreditNames[i].Y = 580 - (430f / 3000f) * (_CreditsTimer.ElapsedMilliseconds - _CreditNames[i].StartTimeUp); _CreditNames[i].Y = 580 - (430f / 3000f) * (_CreditsTimer.ElapsedMilliseconds - _CreditNames[i].StartTimeUp);
//Set name inactive //Set name inactive
if (_CreditNames[i].Y <= 160f) if (_CreditNames[i].Y <= 160f)
{
_CreditNames[i].Visible = false;
//Check, if last name is shown
if (i == _CreditNames.Count - 1)
{ {
_CreditNames[i].Active = false; _CreditsTimer.Stop();
//Check, if last name is set to false _TextTimer.Start();
if (i == _CreditNames.Count - 1) foreach (CText text in _ParagraphTexts)
{ text.Visible = true;
//Stop and reset timer for next time
_CreditsTimer.Stop();
_CreditsTimer.Reset();
//Start Text-Timer
_TextTimer.Start();
}
}
else if (_CreditNames[i].Y <= 360f)
{
//Fade names out
float alpha = (360 - _CreditNames[i].Y) / 200;
//Catch some bad alpha-values
if (alpha > 1)
alpha = 1;
else if (alpha < 0)
alpha = 0;
_CreditNames[i].Alpha = 1 - alpha;
} }
}
else if (_CreditNames[i].Y <= 360f)
{
//Fade names out
float alpha = ((360 - _CreditNames[i].Y) / 200).Clamp(0, 1);
_CreditNames[i].Alpha = 1 - alpha;
}
break; break;
}
} }
} }
} }
+5 -2
View File
@@ -187,8 +187,11 @@ namespace VocaluxeLib.Menu
{ {
_Theme.Color.Get(_PartyModeID, out Color); _Theme.Color.Get(_PartyModeID, out Color);
foreach (string s in _Theme.SlideShowTextures) if (_Theme.Type == EBackgroundTypes.SlideShow)
_SlideShowTextures.Add(CBase.Themes.GetSkinTexture(s, _PartyModeID)); {
foreach (string s in _Theme.SlideShowTextures)
_SlideShowTextures.Add(CBase.Themes.GetSkinTexture(s, _PartyModeID));
}
if (_Theme.Type == EBackgroundTypes.Video) if (_Theme.Type == EBackgroundTypes.Video)
_VideoStream = CBase.Themes.GetSkinVideo(_Theme.VideoName, _PartyModeID, true); _VideoStream = CBase.Themes.GetSkinVideo(_Theme.VideoName, _PartyModeID, true);