diff --git a/Output/Readme.txt b/Output/Readme.txt
index c0d408a1..d6840537 100644
--- a/Output/Readme.txt
+++ b/Output/Readme.txt
@@ -1,4 +1,4 @@
-Vocaluxe 0.4 README
+Vocaluxe 0.4.1 README
----------------------------
=================================
diff --git a/Output/Themes/Genius/01_Standard.xml b/Output/Themes/Genius/01_Standard.xml
index f3174336..5b0d368f 100644
--- a/Output/Themes/Genius/01_Standard.xml
+++ b/Output/Themes/Genius/01_Standard.xml
@@ -328,6 +328,15 @@
NotesBGLeft.png
NotesBGMid.png
NotesBGRight.png
+ RapNotesLeft.png
+ RapNotesMid.png
+ RapNotesRight.png
+ RapNotesFillLeft.png
+ RapNotesFillMid.png
+ RapNotesFillRight.png
+ RapNotesBGLeft.png
+ RapNotesBGMid.png
+ RapNotesBGRight.png
PointsBar.png
PointsBarBG.png
LyricHelper.png
@@ -340,6 +349,7 @@
SearchBar.png
PlaylistBG.png
DuetIcon.png
+ RapIcon.png
VideoIcon.png
MedleyCalcIcon.png
MedleyTagIcon.png
diff --git a/Output/Themes/Genius/02_Ice_Blue.xml b/Output/Themes/Genius/02_Ice_Blue.xml
index 9d27bd3b..636e1a7a 100644
--- a/Output/Themes/Genius/02_Ice_Blue.xml
+++ b/Output/Themes/Genius/02_Ice_Blue.xml
@@ -328,6 +328,15 @@
NotesBGLeft.png
NotesBGMid.png
NotesBGRight.png
+ RapNotesLeft.png
+ RapNotesMid.png
+ RapNotesRight.png
+ RapNotesFillLeft.png
+ RapNotesFillMid.png
+ RapNotesFillRight.png
+ RapNotesBGLeft.png
+ RapNotesBGMid.png
+ RapNotesBGRight.png
PointsBar.png
PointsBarBG.png
LyricHelper.png
@@ -340,6 +349,7 @@
SearchBar.png
PlaylistBG.png
DuetIcon.png
+ RapIcon.png
VideoIcon.png
MedleyCalcIcon.png
MedleyTagIcon.png
diff --git a/Output/Themes/Genius/03_Crimson_Red.xml b/Output/Themes/Genius/03_Crimson_Red.xml
index c29f5e8e..3e8d405a 100644
--- a/Output/Themes/Genius/03_Crimson_Red.xml
+++ b/Output/Themes/Genius/03_Crimson_Red.xml
@@ -328,6 +328,15 @@
NotesBGLeft.png
NotesBGMid.png
NotesBGRight.png
+ RapNotesLeft.png
+ RapNotesMid.png
+ RapNotesRight.png
+ RapNotesFillLeft.png
+ RapNotesFillMid.png
+ RapNotesFillRight.png
+ RapNotesBGLeft.png
+ RapNotesBGMid.png
+ RapNotesBGRight.png
PointsBar.png
PointsBarBG.png
LyricHelper.png
@@ -340,6 +349,7 @@
SearchBar.png
PlaylistBG.png
DuetIcon.png
+ RapIcon.png
VideoIcon.png
MedleyCalcIcon.png
MedleyTagIcon.png
diff --git a/Output/Themes/Genius/RapIcon.png b/Output/Themes/Genius/RapIcon.png
new file mode 100644
index 00000000..097fa55e
Binary files /dev/null and b/Output/Themes/Genius/RapIcon.png differ
diff --git a/Output/Themes/Genius/RapNotesBGLeft.png b/Output/Themes/Genius/RapNotesBGLeft.png
new file mode 100644
index 00000000..0c321303
Binary files /dev/null and b/Output/Themes/Genius/RapNotesBGLeft.png differ
diff --git a/Output/Themes/Genius/RapNotesBGMid.png b/Output/Themes/Genius/RapNotesBGMid.png
new file mode 100644
index 00000000..989fa118
Binary files /dev/null and b/Output/Themes/Genius/RapNotesBGMid.png differ
diff --git a/Output/Themes/Genius/RapNotesBGRight.png b/Output/Themes/Genius/RapNotesBGRight.png
new file mode 100644
index 00000000..4d3b8238
Binary files /dev/null and b/Output/Themes/Genius/RapNotesBGRight.png differ
diff --git a/Output/Themes/Genius/RapNotesFillLeft.png b/Output/Themes/Genius/RapNotesFillLeft.png
new file mode 100644
index 00000000..732b0313
Binary files /dev/null and b/Output/Themes/Genius/RapNotesFillLeft.png differ
diff --git a/Output/Themes/Genius/RapNotesFillMid.png b/Output/Themes/Genius/RapNotesFillMid.png
new file mode 100644
index 00000000..172b394a
Binary files /dev/null and b/Output/Themes/Genius/RapNotesFillMid.png differ
diff --git a/Output/Themes/Genius/RapNotesFillRight.png b/Output/Themes/Genius/RapNotesFillRight.png
new file mode 100644
index 00000000..2a0c56b4
Binary files /dev/null and b/Output/Themes/Genius/RapNotesFillRight.png differ
diff --git a/Output/Themes/Genius/RapNotesLeft.png b/Output/Themes/Genius/RapNotesLeft.png
new file mode 100644
index 00000000..ee6365d9
Binary files /dev/null and b/Output/Themes/Genius/RapNotesLeft.png differ
diff --git a/Output/Themes/Genius/RapNotesMid.png b/Output/Themes/Genius/RapNotesMid.png
new file mode 100644
index 00000000..42146d41
Binary files /dev/null and b/Output/Themes/Genius/RapNotesMid.png differ
diff --git a/Output/Themes/Genius/RapNotesRight.png b/Output/Themes/Genius/RapNotesRight.png
new file mode 100644
index 00000000..0de874d0
Binary files /dev/null and b/Output/Themes/Genius/RapNotesRight.png differ
diff --git a/Output/Themes/Genius/Screens/ScreenSing.xml b/Output/Themes/Genius/Screens/ScreenSing.xml
index 30a03e2d..a3e0b439 100644
--- a/Output/Themes/Genius/Screens/ScreenSing.xml
+++ b/Output/Themes/Genius/Screens/ScreenSing.xml
@@ -1594,6 +1594,15 @@
NoteBackgroundLeft
NoteBackgroundMiddle
NoteBackgroundRight
+ RapNoteLeft
+ RapNoteMiddle
+ RapNoteRight
+ RapNoteFillLeft
+ RapNoteFillMiddle
+ RapNoteFillRight
+ RapNoteBackgroundLeft
+ RapNoteBackgroundMiddle
+ RapNoteBackgroundRight
Star
ToneHelper
Star
diff --git a/Output/Themes/Genius/Screens/ScreenSong.xml b/Output/Themes/Genius/Screens/ScreenSong.xml
index 61852554..b80cc556 100644
--- a/Output/Themes/Genius/Screens/ScreenSong.xml
+++ b/Output/Themes/Genius/Screens/ScreenSong.xml
@@ -846,6 +846,7 @@
CoverTile
DuetIcon
+ RapIcon
VideoIcon
MedleyCalcIcon
MedleyTagIcon
@@ -958,18 +959,29 @@
DuetIcon
- 200
+ 160
530
40
40
-1
+
+ RapIcon
+
+
+ 240
+ 530
+ 40
+ 40
+ -1
+
+
VideoIcon
- 120
+ 80
530
40
40
@@ -980,7 +992,7 @@
MedleyCalcIcon
- 280
+ 320
530
40
40
@@ -991,7 +1003,7 @@
MedleyTagIcon
- 280
+ 320
530
40
40
@@ -1099,18 +1111,29 @@
DuetIcon
- 200
+ 160
530
40
40
-1
+
+ RapIcon
+
+
+ 240
+ 530
+ 40
+ 40
+ -1
+
+
VideoIcon
- 120
+ 80
530
40
40
@@ -1121,7 +1144,7 @@
MedleyCalcIcon
- 280
+ 320
530
40
40
@@ -1132,7 +1155,7 @@
MedleyTagIcon
- 280
+ 320
530
40
40
diff --git a/Vocaluxe/Base/CGame.cs b/Vocaluxe/Base/CGame.cs
index a90b062a..444d5208 100644
--- a/Vocaluxe/Base/CGame.cs
+++ b/Vocaluxe/Base/CGame.cs
@@ -302,6 +302,9 @@ namespace Vocaluxe.Base
if(p == 0) tonePlayer = tone;
#endif
+ if (notes[note].Type == ENoteType.Rap || notes[note].Type == ENoteType.RapGolden)
+ tonePlayer = tone;
+
Players[p].NoteDiff = Math.Abs(tone - tonePlayer);
bool hit = Players[p].NoteDiff <= (2 - (int)CProfiles.GetDifficulty(Players[p].ProfileID));
@@ -311,7 +314,7 @@ namespace Vocaluxe.Base
//CRecord.RecordSetTone(p, Tone);
double points = (CSettings.MaxScore - CSettings.LinebonusScore) * (double)notes[note].PointsForBeat /
song.Notes.GetVoice(Players[p].VoiceNr).Points;
- if (notes[note].Type == ENoteType.Golden)
+ if (notes[note].Type == ENoteType.Golden || notes[note].Type == ENoteType.RapGolden)
Players[p].PointsGoldenNotes += points;
Players[p].Points += points;
@@ -411,7 +414,7 @@ namespace Vocaluxe.Base
{
if (note.StartBeat < nextStart)
{
- if (note.Hit && note.HitNote.Type == ENoteType.Golden)
+ if (note.Hit && (note.HitNote.Type == ENoteType.Golden || note.HitNote.Type == ENoteType.RapGolden))
Players[p].PointsGoldenNotes += note.Points;
Players[p].Points += note.Points;
}
@@ -421,7 +424,7 @@ namespace Vocaluxe.Base
}
while (line.NoteCount > n && n >= 0)
{
- if (line.Notes[n].Hit && line.Notes[n].HitNote.Type == ENoteType.Golden)
+ if (line.Notes[n].Hit && (line.Notes[n].HitNote.Type == ENoteType.Golden || line.Notes[n].HitNote.Type == ENoteType.RapGolden))
Players[p].PointsGoldenNotes -= line.Notes[n].Points;
Players[p].Points -= line.Notes[n].Points;
line.DeleteNote(n);
diff --git a/VocaluxeLib/Enums.cs b/VocaluxeLib/Enums.cs
index 02cb86a7..d73741e2 100644
--- a/VocaluxeLib/Enums.cs
+++ b/VocaluxeLib/Enums.cs
@@ -366,7 +366,9 @@ namespace VocaluxeLib
{
Normal,
Golden,
- Freestyle
+ Freestyle,
+ Rap,
+ RapGolden
}
public enum EMusicType
diff --git a/VocaluxeLib/Menu/SingNotes/CNoteBars.cs b/VocaluxeLib/Menu/SingNotes/CNoteBars.cs
index 5e6c50ee..585fb62f 100644
--- a/VocaluxeLib/Menu/SingNotes/CNoteBars.cs
+++ b/VocaluxeLib/Menu/SingNotes/CNoteBars.cs
@@ -84,7 +84,7 @@ namespace VocaluxeLib.Menu.SingNotes
_Flares.Clear();
_PerfectNoteEffect.Clear();
- foreach (CSongNote note in _Lines[_CurrentLine].Notes.Where(note => note.Type == ENoteType.Golden))
+ foreach (CSongNote note in _Lines[_CurrentLine].Notes.Where(note => (note.IsGoldenNote)))
_AddGoldenNote(_GetNoteRect(note));
}
@@ -109,8 +109,8 @@ namespace VocaluxeLib.Menu.SingNotes
{
SRectF rect = _GetNoteRect(note);
- _DrawNoteBG(rect, color);
- _DrawNoteBase(rect, new SColorF(_NoteBaseColor, _NoteBaseColor.A * Alpha), 1f);
+ _DrawNoteBG(rect, color, note.IsRapNote);
+ _DrawNoteBase(rect, new SColorF(_NoteBaseColor, _NoteBaseColor.A * Alpha), 1f, note.IsRapNote);
}
}
@@ -128,9 +128,9 @@ namespace VocaluxeLib.Menu.SingNotes
float factor = (note.Hit) ? 1f : 0.6f;
- _DrawNoteFill(rect, color, factor);
+ _DrawNoteFill(rect, color, factor, note.IsRapNote);
- if (note.EndBeat >= CBase.Game.GetRecordedBeat() && note.Hit && note.HitNote.Type == ENoteType.Golden)
+ if (note.EndBeat >= CBase.Game.GetRecordedBeat() && note.Hit && note.IsGoldenNote)
{
SRectF re = rect;
re.W = (CBase.Game.GetMidRecordedBeat() - note.StartBeat) / beats * Rect.W;
@@ -175,14 +175,22 @@ namespace VocaluxeLib.Menu.SingNotes
{
CSongLine line = _Lines[_CurrentLine];
float beats = line.LastNoteBeat - line.FirstNoteBeat + 1;
+ bool isRapNote = note.IsRapNote;
float width = note.Duration * Rect.W / beats;
+ float y = Rect.Y + (CBase.Settings.GetNumNoteLines() - 1 - (note.Tone - line.BaseLine) / 2f) * _NoteLineHeight - _AddNoteHeight / 2;
+ float height = _NoteLineHeight + _AddNoteHeight;
+
+ if (isRapNote) {
+ y = Rect.Y;
+ height = Rect.H;
+ }
var noteRect = new SRectF(
Rect.X + (note.StartBeat - line.FirstNoteBeat) * Rect.W / beats,
- Rect.Y + (CBase.Settings.GetNumNoteLines() - 1 - (note.Tone - line.BaseLine) / 2f) * _NoteLineHeight - _AddNoteHeight / 2,
+ y,
width,
- _NoteLineHeight + _AddNoteHeight,
+ height,
Rect.Z
);
return noteRect;
@@ -267,26 +275,26 @@ namespace VocaluxeLib.Menu.SingNotes
CBase.Drawing.DrawTexture(noteEnd, new SRectF(noteRect.X + noteRect.W - endsW, noteRect.Y, endsW, noteRect.H, noteRect.Z), color, false);
}
- private void _DrawNoteBase(SRectF rect, SColorF color, float factor)
+ private void _DrawNoteBase(SRectF rect, SColorF color, float factor, bool isRapNote = false)
{
- CTextureRef noteBegin = CBase.Themes.GetSkinTexture(_Theme.SkinLeft, _PartyModeID);
- CTextureRef noteMiddle = CBase.Themes.GetSkinTexture(_Theme.SkinMiddle, _PartyModeID);
- CTextureRef noteEnd = CBase.Themes.GetSkinTexture(_Theme.SkinRight, _PartyModeID);
+ CTextureRef noteBegin = CBase.Themes.GetSkinTexture(isRapNote ? _Theme.SkinRapLeft : _Theme.SkinLeft, _PartyModeID);
+ CTextureRef noteMiddle = CBase.Themes.GetSkinTexture(isRapNote ? _Theme.SkinRapMiddle : _Theme.SkinMiddle, _PartyModeID);
+ CTextureRef noteEnd = CBase.Themes.GetSkinTexture(isRapNote ? _Theme.SkinRapRight : _Theme.SkinRight, _PartyModeID);
_DrawNote(rect, color, noteBegin, noteMiddle, noteEnd, factor);
}
- private void _DrawNoteFill(SRectF rect, SColorF color, float factor)
+ private void _DrawNoteFill(SRectF rect, SColorF color, float factor, bool isRapNote = false)
{
- CTextureRef noteBegin = CBase.Themes.GetSkinTexture(_Theme.SkinFillLeft, _PartyModeID);
- CTextureRef noteMiddle = CBase.Themes.GetSkinTexture(_Theme.SkinFillMiddle, _PartyModeID);
- CTextureRef noteEnd = CBase.Themes.GetSkinTexture(_Theme.SkinFillRight, _PartyModeID);
+ CTextureRef noteBegin = CBase.Themes.GetSkinTexture(isRapNote ? _Theme.SkinRapFillLeft : _Theme.SkinFillLeft, _PartyModeID);
+ CTextureRef noteMiddle = CBase.Themes.GetSkinTexture(isRapNote ? _Theme.SkinRapFillMiddle : _Theme.SkinFillMiddle, _PartyModeID);
+ CTextureRef noteEnd = CBase.Themes.GetSkinTexture(isRapNote ? _Theme.SkinRapFillRight : _Theme.SkinFillRight, _PartyModeID);
_DrawNote(rect, color, noteBegin, noteMiddle, noteEnd, factor);
}
- private void _DrawNoteBG(SRectF rect, SColorF color)
+ private void _DrawNoteBG(SRectF rect, SColorF color, bool isRapNote = false)
{
const float period = 1500; //[ms]
@@ -300,9 +308,9 @@ namespace VocaluxeLib.Menu.SingNotes
var col = new SColorF(color, color.A * alpha);
- CTextureRef noteBegin = CBase.Themes.GetSkinTexture(_Theme.SkinBackgroundLeft, _PartyModeID);
- CTextureRef noteMiddle = CBase.Themes.GetSkinTexture(_Theme.SkinBackgroundMiddle, _PartyModeID);
- CTextureRef noteEnd = CBase.Themes.GetSkinTexture(_Theme.SkinBackgroundRight, _PartyModeID);
+ CTextureRef noteBegin = CBase.Themes.GetSkinTexture(isRapNote ? _Theme.SkinRapBackgroundLeft : _Theme.SkinBackgroundLeft, _PartyModeID);
+ CTextureRef noteMiddle = CBase.Themes.GetSkinTexture(isRapNote ? _Theme.SkinRapBackgroundMiddle : _Theme.SkinBackgroundMiddle, _PartyModeID);
+ CTextureRef noteEnd = CBase.Themes.GetSkinTexture(isRapNote ? _Theme.SkinRapBackgroundRight : _Theme.SkinBackgroundRight, _PartyModeID);
_DrawNote(rect, col, noteBegin, noteMiddle, noteEnd, 1f);
}
diff --git a/VocaluxeLib/Menu/SingNotes/CSingNotes.cs b/VocaluxeLib/Menu/SingNotes/CSingNotes.cs
index bedfb95c..4d49befc 100644
--- a/VocaluxeLib/Menu/SingNotes/CSingNotes.cs
+++ b/VocaluxeLib/Menu/SingNotes/CSingNotes.cs
@@ -49,6 +49,18 @@ namespace VocaluxeLib.Menu.SingNotes
public string SkinBackgroundMiddle;
public string SkinBackgroundRight;
+ public string SkinRapLeft;
+ public string SkinRapMiddle;
+ public string SkinRapRight;
+
+ public string SkinRapFillLeft;
+ public string SkinRapFillMiddle;
+ public string SkinRapFillRight;
+
+ public string SkinRapBackgroundLeft;
+ public string SkinRapBackgroundMiddle;
+ public string SkinRapBackgroundRight;
+
public string SkinGoldenStar;
public string SkinToneHelper;
public string SkinPerfectNoteStart;
diff --git a/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs b/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs
index e644159c..0068545c 100644
--- a/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs
+++ b/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs
@@ -30,6 +30,7 @@ namespace VocaluxeLib.Menu.SongMenu
public string CoverBackground;
public string CoverBigBackground;
public string DuetIcon;
+ public string RapIcon;
public string VideoIcon;
public string MedleyCalcIcon;
public string MedleyTagIcon;
@@ -68,6 +69,7 @@ namespace VocaluxeLib.Menu.SongMenu
public SThemeStatic StaticCoverBig;
public SThemeStatic StaticTextBG;
public SThemeStatic StaticDuetIcon;
+ public SThemeStatic StaticRapIcon;
public SThemeStatic StaticVideoIcon;
public SThemeStatic StaticMedleyCalcIcon;
public SThemeStatic StaticMedleyTagIcon;
@@ -117,6 +119,7 @@ namespace VocaluxeLib.Menu.SongMenu
public SThemeStatic StaticCoverBig;
public SThemeStatic StaticTextBG;
public SThemeStatic StaticDuetIcon;
+ public SThemeStatic StaticRapIcon;
public SThemeStatic StaticVideoIcon;
public SThemeStatic StaticMedleyCalcIcon;
public SThemeStatic StaticMedleyTagIcon;
diff --git a/VocaluxeLib/Menu/SongMenu/CSongMenuList.cs b/VocaluxeLib/Menu/SongMenu/CSongMenuList.cs
index 6c9c0640..e2003a06 100644
--- a/VocaluxeLib/Menu/SongMenu/CSongMenuList.cs
+++ b/VocaluxeLib/Menu/SongMenu/CSongMenuList.cs
@@ -33,6 +33,7 @@ namespace VocaluxeLib.Menu.SongMenu
private readonly CStatic _CoverBig;
private readonly CStatic _TextBG;
private readonly CStatic _DuetIcon;
+ private readonly CStatic _RapIcon;
private readonly CStatic _VideoIcon;
private readonly CStatic _MedleyCalcIcon;
private readonly CStatic _MedleyTagIcon;
@@ -123,10 +124,11 @@ namespace VocaluxeLib.Menu.SongMenu
_CoverBig = new CStatic(_Theme.SongMenuList.StaticCoverBig, _PartyModeID);
_TextBG = new CStatic(_Theme.SongMenuList.StaticTextBG, _PartyModeID);
_DuetIcon = new CStatic(_Theme.SongMenuList.StaticDuetIcon, _PartyModeID);
+ _RapIcon = new CStatic(_Theme.SongMenuList.StaticRapIcon, _PartyModeID);
_VideoIcon = new CStatic(_Theme.SongMenuList.StaticVideoIcon, _PartyModeID);
_MedleyCalcIcon = new CStatic(_Theme.SongMenuList.StaticMedleyCalcIcon, _PartyModeID);
_MedleyTagIcon = new CStatic(_Theme.SongMenuList.StaticMedleyTagIcon, _PartyModeID);
- _SubElements.AddRange(new IMenuElement[] {_Artist, _Title, _SongLength, _SongYear, _DuetIcon, _VideoIcon, _MedleyCalcIcon, _MedleyTagIcon});
+ _SubElements.AddRange(new IMenuElement[] {_Artist, _Title, _SongLength, _SongYear, _DuetIcon, _RapIcon, _VideoIcon, _MedleyCalcIcon, _MedleyTagIcon});
}
private void _ReadSubTheme()
@@ -137,6 +139,7 @@ namespace VocaluxeLib.Menu.SongMenu
_Theme.SongMenuList.TextTitle = (SThemeText)_Title.GetTheme();
_Theme.SongMenuList.StaticCoverBig = (SThemeStatic)_CoverBig.GetTheme();
_Theme.SongMenuList.StaticDuetIcon = (SThemeStatic)_DuetIcon.GetTheme();
+ _Theme.SongMenuList.StaticRapIcon = (SThemeStatic)_RapIcon.GetTheme();
_Theme.SongMenuList.StaticMedleyCalcIcon = (SThemeStatic)_MedleyCalcIcon.GetTheme();
_Theme.SongMenuList.StaticMedleyTagIcon = (SThemeStatic)_MedleyTagIcon.GetTheme();
_Theme.SongMenuList.StaticTextBG = (SThemeStatic)_TextBG.GetTheme();
@@ -222,6 +225,7 @@ namespace VocaluxeLib.Menu.SongMenu
_SongLength.Text = String.Empty;
_SongYear.Text = String.Empty;
_DuetIcon.Visible = false;
+ _RapIcon.Visible = false;
_VideoIcon.Visible = false;
_MedleyCalcIcon.Visible = false;
_MedleyTagIcon.Visible = false;
@@ -251,6 +255,7 @@ namespace VocaluxeLib.Menu.SongMenu
_Title.Text = song.Title;
_SongYear.Text = song.Year;
_DuetIcon.Visible = song.IsDuet;
+ _RapIcon.Visible = song.IsRap;
_VideoIcon.Visible = song.VideoFileName != "";
_MedleyCalcIcon.Visible = song.Medley.Source == EDataSource.Calculated;
_MedleyTagIcon.Visible = song.Medley.Source == EDataSource.Tag;
diff --git a/VocaluxeLib/Menu/SongMenu/CSongMenuTileBoard.cs b/VocaluxeLib/Menu/SongMenu/CSongMenuTileBoard.cs
index a5000bdf..621066e2 100644
--- a/VocaluxeLib/Menu/SongMenu/CSongMenuTileBoard.cs
+++ b/VocaluxeLib/Menu/SongMenu/CSongMenuTileBoard.cs
@@ -32,6 +32,7 @@ namespace VocaluxeLib.Menu.SongMenu
private CStatic _CoverBig;
private CStatic _TextBG;
private CStatic _DuetIcon;
+ private CStatic _RapIcon;
private CStatic _VideoIcon;
private CStatic _MedleyCalcIcon;
private CStatic _MedleyTagIcon;
@@ -118,10 +119,11 @@ namespace VocaluxeLib.Menu.SongMenu
_CoverBig = new CStatic(_Theme.SongMenuTileBoard.StaticCoverBig, _PartyModeID);
_TextBG = new CStatic(_Theme.SongMenuTileBoard.StaticTextBG, _PartyModeID);
_DuetIcon = new CStatic(_Theme.SongMenuTileBoard.StaticDuetIcon, _PartyModeID);
+ _RapIcon = new CStatic(_Theme.SongMenuTileBoard.StaticRapIcon, _PartyModeID);
_VideoIcon = new CStatic(_Theme.SongMenuTileBoard.StaticVideoIcon, _PartyModeID);
_MedleyCalcIcon = new CStatic(_Theme.SongMenuTileBoard.StaticMedleyCalcIcon, _PartyModeID);
_MedleyTagIcon = new CStatic(_Theme.SongMenuTileBoard.StaticMedleyTagIcon, _PartyModeID);
- _SubElements.AddRange(new IMenuElement[] {_Artist, _Title, _SongLength, _SongYear, _DuetIcon, _VideoIcon, _MedleyCalcIcon, _MedleyTagIcon});
+ _SubElements.AddRange(new IMenuElement[] {_Artist, _Title, _SongLength, _SongYear, _DuetIcon, _RapIcon, _VideoIcon, _MedleyCalcIcon, _MedleyTagIcon});
}
private void _UpdateTileSelection()
@@ -141,6 +143,7 @@ namespace VocaluxeLib.Menu.SongMenu
_Theme.SongMenuTileBoard.TextTitle = (SThemeText)_Title.GetTheme();
_Theme.SongMenuTileBoard.StaticCoverBig = (SThemeStatic)_CoverBig.GetTheme();
_Theme.SongMenuTileBoard.StaticDuetIcon = (SThemeStatic)_DuetIcon.GetTheme();
+ _Theme.SongMenuTileBoard.StaticRapIcon = (SThemeStatic)_RapIcon.GetTheme();
_Theme.SongMenuTileBoard.StaticMedleyCalcIcon = (SThemeStatic)_MedleyCalcIcon.GetTheme();
_Theme.SongMenuTileBoard.StaticMedleyTagIcon = (SThemeStatic)_MedleyTagIcon.GetTheme();
_Theme.SongMenuTileBoard.StaticTextBG = (SThemeStatic)_TextBG.GetTheme();
@@ -213,6 +216,7 @@ namespace VocaluxeLib.Menu.SongMenu
_SongLength.Text = String.Empty;
_SongYear.Text = String.Empty;
_DuetIcon.Visible = false;
+ _RapIcon.Visible = false;
_VideoIcon.Visible = false;
_MedleyCalcIcon.Visible = false;
_MedleyTagIcon.Visible = false;
@@ -242,6 +246,7 @@ namespace VocaluxeLib.Menu.SongMenu
_Title.Text = song.Title;
_SongYear.Text = song.Year;
_DuetIcon.Visible = song.IsDuet;
+ _RapIcon.Visible = song.IsRap;
_VideoIcon.Visible = song.VideoFileName != "";
_MedleyCalcIcon.Visible = song.Medley.Source == EDataSource.Calculated;
_MedleyTagIcon.Visible = song.Medley.Source == EDataSource.Tag;
diff --git a/VocaluxeLib/Songs/CBaseNote.cs b/VocaluxeLib/Songs/CBaseNote.cs
index 271283c3..d28750c2 100644
--- a/VocaluxeLib/Songs/CBaseNote.cs
+++ b/VocaluxeLib/Songs/CBaseNote.cs
@@ -82,6 +82,20 @@ namespace VocaluxeLib.Songs
}
public abstract int PointsForBeat { get; }
+
+ public bool IsRapNote
+ {
+ get { return IsNoteType(ENoteType.Rap, ENoteType.RapGolden); }
+ }
+
+ public bool IsGoldenNote
+ {
+ get { return IsNoteType(ENoteType.Golden, ENoteType.RapGolden); }
+ }
#endregion Properties
+
+ #region Methods
+ public abstract bool IsNoteType(params ENoteType[] noteTypes);
+ #endregion Methods
}
}
\ No newline at end of file
diff --git a/VocaluxeLib/Songs/CSong.cs b/VocaluxeLib/Songs/CSong.cs
index bc101698..dfef5a99 100644
--- a/VocaluxeLib/Songs/CSong.cs
+++ b/VocaluxeLib/Songs/CSong.cs
@@ -165,6 +165,7 @@ namespace VocaluxeLib.Songs
{
get { return Notes.VoiceCount > 1; }
}
+ public bool IsRap = false;
public readonly List Editions = new List();
public readonly List Genres = new List();
diff --git a/VocaluxeLib/Songs/CSongLoader.cs b/VocaluxeLib/Songs/CSongLoader.cs
index 762e9d3c..beebe242 100644
--- a/VocaluxeLib/Songs/CSongLoader.cs
+++ b/VocaluxeLib/Songs/CSongLoader.cs
@@ -570,9 +570,9 @@ namespace VocaluxeLib.Songs
break;
case ':':
case '*':
+ case 'R':
+ case 'G':
case 'F':
- case 'R': // Read R (RAP) and G (Golden RAP) notes as Freestyle notes currently. Final implementation needed!
- case 'G': // Read R (RAP) and G (Golden RAP) notes as Freestyle notes currently. Final implementation needed!
string[] noteData = line.Split(splitChars, 4);
if (noteData.Length < 4)
{
@@ -622,6 +622,16 @@ namespace VocaluxeLib.Songs
noteType = ENoteType.Golden;
else if (tag.Equals('F') || tag.Equals('R') || tag.Equals('G')) // Read R (RAP) and G (Golden RAP) notes as Freestyle notes currently. Final implementation needed!
noteType = ENoteType.Freestyle;
+ else if (tag.Equals('R'))
+ {
+ noteType = ENoteType.Rap;
+ _Song.IsRap = true;
+ }
+ else if (tag.Equals('G'))
+ {
+ noteType = ENoteType.RapGolden;
+ _Song.IsRap = true;
+ }
else
noteType = ENoteType.Normal;
diff --git a/VocaluxeLib/Songs/CSongNote.cs b/VocaluxeLib/Songs/CSongNote.cs
index 3079c61e..1a96b8e7 100644
--- a/VocaluxeLib/Songs/CSongNote.cs
+++ b/VocaluxeLib/Songs/CSongNote.cs
@@ -15,6 +15,8 @@
// along with Vocaluxe. If not, see .
#endregion
+using System.Linq;
+
namespace VocaluxeLib.Songs
{
///
@@ -37,6 +39,13 @@ namespace VocaluxeLib.Songs
}
#endregion Constructors
+ #region Methods
+ public override bool IsNoteType(params ENoteType[] noteTypes)
+ {
+ return noteTypes.Contains(Type);
+ }
+ #endregion Method
+
#region Properties
public ENoteType Type { get; set; }
@@ -49,8 +58,10 @@ namespace VocaluxeLib.Songs
switch (Type)
{
case ENoteType.Normal:
+ case ENoteType.Rap:
return 1;
case ENoteType.Golden:
+ case ENoteType.RapGolden:
return 2;
case ENoteType.Freestyle:
return 0;
diff --git a/VocaluxeLib/Songs/CSongWriter.cs b/VocaluxeLib/Songs/CSongWriter.cs
index bdae39c4..957905e3 100644
--- a/VocaluxeLib/Songs/CSongWriter.cs
+++ b/VocaluxeLib/Songs/CSongWriter.cs
@@ -187,6 +187,12 @@ namespace VocaluxeLib.Songs
case ENoteType.Freestyle:
tag = "F";
break;
+ case ENoteType.Rap:
+ tag = "R";
+ break;
+ case ENoteType.RapGolden:
+ tag = "G";
+ break;
default:
throw new NotImplementedException("Note type " + note.Type);
}
diff --git a/VocaluxeLib/Songs/CSungNote.cs b/VocaluxeLib/Songs/CSungNote.cs
index 3fd3b9a1..d010722c 100644
--- a/VocaluxeLib/Songs/CSungNote.cs
+++ b/VocaluxeLib/Songs/CSungNote.cs
@@ -15,6 +15,8 @@
// along with Vocaluxe. If not, see .
#endregion
+using System.Linq;
+
namespace VocaluxeLib.Songs
{
///
@@ -74,6 +76,10 @@ namespace VocaluxeLib.Songs
Perfect = result;
}
+ public override bool IsNoteType(params ENoteType[] noteTypes)
+ {
+ return HitNote != null && noteTypes.Contains(HitNote.Type);
+ }
#endregion Methods
public override int PointsForBeat