prepared new lyric effects

This commit is contained in:
Alexander Eckart committed 2012-03-07 18:28:26 +01:00
1 parent 95053bbed8
commit 7381d3de20
2 files changed
+199 -9

No files matched your search

+195 -5
View File
@@ -15,7 +15,8 @@ namespace Vocaluxe.Menu
{ {
Fill, Fill,
Jump, Jump,
Slide Slide,
Zoom
} }
struct SNote struct SNote
@@ -23,6 +24,7 @@ namespace Vocaluxe.Menu
public string Text; public string Text;
public int StartBeat; public int StartBeat;
public int EndBeat; public int EndBeat;
public int Duration;
public ENoteType Type; public ENoteType Type;
} }
@@ -205,6 +207,7 @@ namespace Vocaluxe.Menu
n.Text = note.Text; n.Text = note.Text;
n.StartBeat = note.StartBeat; n.StartBeat = note.StartBeat;
n.EndBeat = note.EndBeat; n.EndBeat = note.EndBeat;
n.Duration = note.Duration;
n.Type = note.NoteType; n.Type = note.NoteType;
_Text.Text = note.Text; _Text.Text = note.Text;
@@ -229,6 +232,7 @@ namespace Vocaluxe.Menu
return _X - _width / 2; return _X - _width / 2;
} }
#region draw
public void Draw(float ActualBeat) public void Draw(float ActualBeat)
{ {
if (Visible || CSettings.GameState == EGameState.EditTheme) if (Visible || CSettings.GameState == EGameState.EditTheme)
@@ -236,12 +240,17 @@ namespace Vocaluxe.Menu
switch (_Style) switch (_Style)
{ {
case ELyricStyle.Fill: case ELyricStyle.Fill:
DrawFill(ActualBeat);
break; break;
case ELyricStyle.Jump: case ELyricStyle.Jump:
DrawJump(ActualBeat);
break; break;
case ELyricStyle.Slide: case ELyricStyle.Slide:
DrawSlide(ActualBeat); DrawSlide(ActualBeat);
break; break;
case ELyricStyle.Zoom:
DrawZoom(ActualBeat);
break;
default: default:
DrawSlide(ActualBeat); DrawSlide(ActualBeat);
break; break;
@@ -257,6 +266,8 @@ namespace Vocaluxe.Menu
{ {
_Text.X = x; _Text.X = x;
_Text.Style = EStyle.Bold; _Text.Style = EStyle.Bold;
_Text.Text = note.Text;
RectangleF rect = CDraw.GetTextBounds(_Text);
if (note.Type == ENoteType.Freestyle) if (note.Type == ENoteType.Freestyle)
_Text.Style = EStyle.BoldItalic; _Text.Style = EStyle.BoldItalic;
@@ -266,7 +277,7 @@ namespace Vocaluxe.Menu
if (CurrentBeat <= note.EndBeat) if (CurrentBeat <= note.EndBeat)
{ {
_Text.Color = ColorProcessed; _Text.Color = ColorProcessed;
_Text.Text = note.Text;
float diff = note.EndBeat - note.StartBeat; float diff = note.EndBeat - note.StartBeat;
if (diff == 0) if (diff == 0)
@@ -281,7 +292,6 @@ namespace Vocaluxe.Menu
else else
{ {
_Text.Color = ColorProcessed; _Text.Color = ColorProcessed;
_Text.Text = note.Text;
_Text.Draw(); _Text.Draw();
} }
@@ -289,14 +299,194 @@ namespace Vocaluxe.Menu
else else
{ {
_Text.Color = Color; _Text.Color = Color;
_Text.Text = note.Text;
_Text.Draw(); _Text.Draw();
} }
RectangleF rect = CDraw.GetTextBounds(_Text);
x += rect.Width; x += rect.Width;
} }
} }
private void DrawZoom(float CurrentBeat)
{
float x = _X - _width / 2; // most left position
//find last active note
int last_note = -1;
for (int i = 0; i < _Notes.Count; i++)
{
if (CurrentBeat >= _Notes[i].StartBeat)
last_note = i;
}
int zoom_note = -1;
float zoomx = 0f;
int current_note = -1;
foreach (SNote note in _Notes)
{
current_note++;
_Text.X = x;
_Text.Style = EStyle.Bold;
_Text.Text = note.Text;
RectangleF rect = CDraw.GetTextBounds(_Text);
if (note.Type == ENoteType.Freestyle)
_Text.Style = EStyle.BoldItalic;
if (CurrentBeat >= note.StartBeat)
{
if (CurrentBeat <= note.EndBeat)
{
zoom_note = current_note;
zoomx = _Text.X;
}
else
{
// already passed
if (current_note == last_note)
_Text.Color = ColorProcessed;
else
_Text.Color = Color;
_Text.Draw();
}
}
else
{
// not passed
_Text.Color = Color;
_Text.Draw();
}
x += rect.Width;
}
if (zoom_note > -1)
{
if (_Notes[zoom_note].Duration == 0)
return;
_Text.X = zoomx;
_Text.Text = _Notes[zoom_note].Text;
_Text.Color = ColorProcessed;
_Text.Style = EStyle.Bold;
if (_Notes[zoom_note].Type == ENoteType.Freestyle)
_Text.Style = EStyle.BoldItalic;
RectangleF rect = CDraw.GetTextBounds(_Text);
float diff = _Notes[zoom_note].EndBeat - _Notes[zoom_note].StartBeat;
float p = (CurrentBeat - _Notes[zoom_note].StartBeat) / _Notes[zoom_note].Duration;
if (p > 1f)
p = 1f;
p = 1f - p;
float ty = _Text.Y;
float tx = _Text.X;
float th = _Text.Height;
float tz = _Text.Z;
_Text.Height += _Text.Height * p * 0.4f;
RectangleF rectz = CDraw.GetTextBounds(_Text);
_Text.X -= (rectz.Width - rect.Width) / 2f;
_Text.Y -= (rectz.Height - rect.Height) / 2f;
_Text.Z -= 0.1f;
_Text.Draw();
_Text.Y = ty;
_Text.X = tx;
_Text.Height = th;
_Text.Z = tz;
}
}
private void DrawFill(float CurrentBeat)
{
float x = _X - _width / 2; // most left position
foreach (SNote note in _Notes)
{
_Text.X = x;
_Text.Style = EStyle.Bold;
_Text.Text = note.Text;
RectangleF rect = CDraw.GetTextBounds(_Text);
if (note.Type == ENoteType.Freestyle)
_Text.Style = EStyle.BoldItalic;
if (CurrentBeat >= note.StartBeat)
{
_Text.Color = ColorProcessed;
_Text.Draw();
}
else
{
// not passed
_Text.Color = Color;
_Text.Draw();
}
x += rect.Width;
}
}
private void DrawJump(float CurrentBeat)
{
float x = _X - _width / 2; // most left position
foreach (SNote note in _Notes)
{
_Text.X = x;
_Text.Style = EStyle.Bold;
_Text.Text = note.Text;
RectangleF rect = CDraw.GetTextBounds(_Text);
if (note.Type == ENoteType.Freestyle)
_Text.Style = EStyle.BoldItalic;
if (CurrentBeat >= note.StartBeat)
{
if (CurrentBeat <= note.EndBeat)
{
_Text.Color = ColorProcessed;
float diff = note.EndBeat - note.StartBeat;
if (diff == 0)
_Text.Draw();
else
{
float y = _Text.Y;
_Text.Y -= _Text.Height * 0.1f;
_Text.Draw();
_Text.Y = y;
}
}
else
{
// already passed
_Text.Color = Color;
_Text.Draw();
}
}
else
{
// not passed
_Text.Color = Color;
_Text.Draw();
}
x += rect.Width;
}
}
#endregion draw
public void UnloadTextures() public void UnloadTextures()
{ {
} }
+4 -4
View File
@@ -383,15 +383,15 @@ namespace Vocaluxe.Screens
break; break;
} }
Lyrics[htLyrics(LyricMain)].Draw(CGame.Beat);
Lyrics[htLyrics(LyricSub)].Draw(-100); Lyrics[htLyrics(LyricSub)].Draw(-100);
Lyrics[htLyrics(LyricMain)].Draw(CGame.Beat);
Lyrics[htLyrics(LyricMainDuet)].Draw(CGame.Beat);
Lyrics[htLyrics(LyricSubDuet)].Draw(-100); Lyrics[htLyrics(LyricSubDuet)].Draw(-100);
Lyrics[htLyrics(LyricMainDuet)].Draw(CGame.Beat);
Lyrics[htLyrics(LyricMainTop)].Draw(CGame.Beat);
Lyrics[htLyrics(LyricSubTop)].Draw(-100); Lyrics[htLyrics(LyricSubTop)].Draw(-100);
Lyrics[htLyrics(LyricMainTop)].Draw(CGame.Beat);
for (int i = 0; i < CGame.NumPlayer; i++) for (int i = 0; i < CGame.NumPlayer; i++)
{ {