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