From 3b82d5c13c6ba3fc6d4fd3b9a009052048a3943d Mon Sep 17 00:00:00 2001 From: Flamefire Date: Fri, 18 Oct 2013 23:25:42 +0200 Subject: [PATCH] Fix for inconsistent song Menu Multiple refactoring due to ambiguous meanings --- .../PartyModeTicTacToe/CPartyModeTicTacToe.cs | 22 +-- .../CPartyScreenTicTacToeConfig.cs | 44 +++-- Vocaluxe/Base/CMain.cs | 14 +- Vocaluxe/Base/CSongs.cs | 43 ++++- VocaluxeLib/IBasic.cs | 3 +- .../Menu/SongMenu/CSongMenuFramework.cs | 31 ++-- .../Menu/SongMenu/CSongMenuTileBoard.cs | 161 +++++++++--------- VocaluxeLib/Songs/CCategory.cs | 6 + 8 files changed, 180 insertions(+), 144 deletions(-) diff --git a/PartyModes/PartyModeTicTacToe/CPartyModeTicTacToe.cs b/PartyModes/PartyModeTicTacToe/CPartyModeTicTacToe.cs index d7730f65..b2633588 100644 --- a/PartyModes/PartyModeTicTacToe/CPartyModeTicTacToe.cs +++ b/PartyModes/PartyModeTicTacToe/CPartyModeTicTacToe.cs @@ -248,7 +248,7 @@ namespace VocaluxeLib.PartyModes.TicTacToe public override void DataFromScreen(string screenName, Object data) { - SDataFromScreen dataFrom = new SDataFromScreen(); + var dataFrom = new SDataFromScreen(); switch (screenName) { case "PartyScreenTicTacToeConfig": @@ -492,7 +492,7 @@ namespace VocaluxeLib.PartyModes.TicTacToe public override void SongSelected(int songID) { - EGameMode gm = EGameMode.TR_GAMEMODE_NORMAL; + var gm = EGameMode.TR_GAMEMODE_NORMAL; switch (_GameData.GameMode) { @@ -525,7 +525,7 @@ namespace VocaluxeLib.PartyModes.TicTacToe _GameData.Rounds = new List(); for (int i = 0; i < _GameData.NumFields; i++) { - CRound r = new CRound(); + var r = new CRound(); _GameData.Rounds.Add(r); } } @@ -540,11 +540,11 @@ namespace VocaluxeLib.PartyModes.TicTacToe _GameData.PlayerTeam2 = new List(); //Prepare Player-IDs - List ids1 = new List(); - List ids2 = new List(); + var ids1 = new List(); + var ids2 = new List(); //Add IDs to team-list while (_GameData.PlayerTeam1.Count < _GameData.NumFields + _GameData.NumJokerRetry[0] && - _GameData.PlayerTeam2.Count < _GameData.NumFields + _GameData.NumJokerRetry[1] ) + _GameData.PlayerTeam2.Count < _GameData.NumFields + _GameData.NumJokerRetry[1]) { if (ids1.Count == 0) { @@ -579,7 +579,7 @@ namespace VocaluxeLib.PartyModes.TicTacToe case 1: { //Prepare Player-IDs - List ids = new List(); + var ids = new List(); //Add IDs to team-list while (_GameData.PlayerTeam1.Count < _GameData.NumFields + _GameData.NumJokerRetry[0] && ids.Count == 0) { @@ -602,7 +602,7 @@ namespace VocaluxeLib.PartyModes.TicTacToe case 2: { //Prepare Player-IDs - List ids = new List(); + var ids = new List(); //Add IDs to team-list while (_GameData.PlayerTeam2.Count < _GameData.NumFields + _GameData.NumJokerRetry[1] && ids.Count == 0) { @@ -627,7 +627,7 @@ namespace VocaluxeLib.PartyModes.TicTacToe private void _PrepareSongList() { - EGameMode gm = EGameMode.TR_GAMEMODE_NORMAL; + var gm = EGameMode.TR_GAMEMODE_NORMAL; switch (_GameData.GameMode) { @@ -646,7 +646,7 @@ namespace VocaluxeLib.PartyModes.TicTacToe while (_GameData.Songs.Count < (_GameData.NumFields + _GameData.NumJokerRandom[0] + _GameData.NumJokerRandom[1])) { - List songs = new List(); + var songs = new List(); switch (_GameData.SongSource) { case ESongSource.TR_PLAYLIST: @@ -678,7 +678,7 @@ namespace VocaluxeLib.PartyModes.TicTacToe case ESongSource.TR_CATEGORY: CBase.Songs.SetCategory(_GameData.CategoryID); - for (int i = 0; i < CBase.Songs.NumSongsInCategory(_GameData.CategoryID); i++) + for (int i = 0; i < CBase.Songs.GetNumSongsVisible(); i++) { // ReSharper disable LoopCanBeConvertedToQuery foreach (EGameMode mode in CBase.Songs.GetVisibleSong(i).AvailableGameModes) diff --git a/PartyModes/PartyModeTicTacToe/CPartyScreenTicTacToeConfig.cs b/PartyModes/PartyModeTicTacToe/CPartyScreenTicTacToeConfig.cs index a03c839d..b967c56e 100644 --- a/PartyModes/PartyModeTicTacToe/CPartyScreenTicTacToeConfig.cs +++ b/PartyModes/PartyModeTicTacToe/CPartyScreenTicTacToeConfig.cs @@ -22,6 +22,7 @@ using System.Collections.Generic; using System.Linq; using System.Windows.Forms; using VocaluxeLib.Menu; +using VocaluxeLib.Songs; namespace VocaluxeLib.PartyModes.TicTacToe { @@ -61,7 +62,7 @@ namespace VocaluxeLib.PartyModes.TicTacToe _ThemeButtons = new string[] {_ButtonNext, _ButtonBack}; _Data = new SDataFromScreen(); - SFromScreenConfig config = new SFromScreenConfig + var config = new SFromScreenConfig { PlaylistID = 0, NumFields = 9, @@ -78,7 +79,7 @@ namespace VocaluxeLib.PartyModes.TicTacToe { try { - SDataToScreenConfig config = (SDataToScreenConfig)receivedData; + var config = (SDataToScreenConfig)receivedData; _Data.ScreenConfig.NumFields = config.NumFields; _Data.ScreenConfig.NumPlayerTeam1 = config.NumPlayerTeam1; _Data.ScreenConfig.NumPlayerTeam2 = config.NumPlayerTeam2; @@ -209,13 +210,13 @@ namespace VocaluxeLib.PartyModes.TicTacToe _SelectSlides[_SelectSlidePlaylist].Selection = _Data.ScreenConfig.PlaylistID; _SelectSlides[_SelectSlidePlaylist].Visible = _Data.ScreenConfig.SongSource == ESongSource.TR_PLAYLIST; - string[] categories = new string[CBase.Songs.GetNumCategories()]; + var categories = new string[CBase.Songs.GetNumCategories()]; for (int i = 0; i < CBase.Songs.GetNumCategories(); i++) categories[i] = CBase.Songs.GetCategory(i).Name; _SelectSlides[_SelectSlideCategory].Clear(); for (int i = 0; i < categories.Length; i++) { - string value = categories[i] + " (" + CBase.Songs.NumSongsInCategory(i) + " " + CBase.Language.Translate("TR_SONGS", _PartyModeID) + ")"; + string value = categories[i] + " (" + CBase.Songs.GetNumSongsNotSungInCategory(i) + " " + CBase.Language.Translate("TR_SONGS", _PartyModeID) + ")"; _SelectSlides[_SelectSlideCategory].AddValue(value); } _SelectSlides[_SelectSlideCategory].Selection = _Data.ScreenConfig.CategoryID; @@ -242,7 +243,7 @@ namespace VocaluxeLib.PartyModes.TicTacToe _Data.ScreenConfig.CategoryID = _SelectSlides[_SelectSlideCategory].Selection; _Data.ScreenConfig.GameMode = (EPartyGameMode)_SelectSlides[_SelectSlideGameMode].Selection; - EGameMode gm = EGameMode.TR_GAMEMODE_NORMAL; + var gm = EGameMode.TR_GAMEMODE_NORMAL; switch (_Data.ScreenConfig.GameMode) { @@ -282,25 +283,22 @@ namespace VocaluxeLib.PartyModes.TicTacToe } if (_Data.ScreenConfig.SongSource == ESongSource.TR_CATEGORY) { - if (CBase.Songs.GetNumCategories() > 0) - { - if (CBase.Songs.NumSongsInCategory(_Data.ScreenConfig.CategoryID) > 0) - { - CBase.Songs.SetCategory(_Data.ScreenConfig.CategoryID); - _ConfigOk = false; - for (int i = 0; i < CBase.Songs.NumSongsInCategory(_Data.ScreenConfig.CategoryID); i++) - { - _ConfigOk = CBase.Songs.GetVisibleSong(i).AvailableGameModes.Any(mode => mode == gm); - if (_ConfigOk) - break; - } - CBase.Songs.SetCategory(-1); - } - else - _ConfigOk = false; - } - else + if (CBase.Songs.GetNumCategories() == 0) _ConfigOk = false; + else if (CBase.Songs.GetNumSongsNotSungInCategory(_Data.ScreenConfig.CategoryID) <= 0) + _ConfigOk = false; + else + { + CBase.Songs.SetCategory(_Data.ScreenConfig.CategoryID); + _ConfigOk = false; + foreach (CSong song in CBase.Songs.GetVisibleSongs()) + { + _ConfigOk = song.AvailableGameModes.Any(mode => mode == gm); + if (_ConfigOk) + break; + } + CBase.Songs.SetCategory(-1); + } } if (_Data.ScreenConfig.SongSource == ESongSource.TR_ALLSONGS) { diff --git a/Vocaluxe/Base/CMain.cs b/Vocaluxe/Base/CMain.cs index 18867da3..7dd65963 100644 --- a/Vocaluxe/Base/CMain.cs +++ b/Vocaluxe/Base/CMain.cs @@ -598,9 +598,14 @@ namespace Vocaluxe.Base return CSongs.NumCategories; } - public int NumSongsInCategory(int categoryIndex) + public int GetNumSongsInCategory(int categoryIndex) { - return CSongs.NumSongsInCategory(categoryIndex); + return CSongs.GetNumSongsInCategory(categoryIndex); + } + + public int GetNumSongsNotSungInCategory(int categoryIndex) + { + return CSongs.GetNumSongsNotSungInCategory(categoryIndex); } public bool IsInCategory() @@ -655,10 +660,7 @@ namespace Vocaluxe.Base public CCategory GetCategory(int index) { - if (index >= CSongs.NumCategories) - return null; - - return new CCategory(CSongs.Categories[index]); + return CSongs.GetCategoryByIndex(index); } public void AddPartySongSung(int songID) diff --git a/Vocaluxe/Base/CSongs.cs b/Vocaluxe/Base/CSongs.cs index 05f7ac31..c2188a3b 100644 --- a/Vocaluxe/Base/CSongs.cs +++ b/Vocaluxe/Base/CSongs.cs @@ -66,7 +66,7 @@ namespace Vocaluxe.Base public static int NumSongsVisible { - get { return _CatIndex < 0 ? 0 : Categories[_CatIndex].Songs.Count(sp => !sp.IsSung); } + get { return VisibleSongs.Count; } } public static int NumCategories @@ -104,9 +104,19 @@ namespace Vocaluxe.Base /// /// Category index /// - public static int NumSongsInCategory(int catIndex) + public static int GetNumSongsInCategory(int catIndex) { - return _IsCatIndexValid(catIndex) ? Categories[catIndex].Songs.Count(sp => !sp.IsSung) : 0; + return _IsCatIndexValid(catIndex) ? Categories[catIndex].Songs.Count : 0; + } + + /// + /// Returns the number of song that are not sung in the category specified with CatIndex + /// + /// Category index + /// Number of visible songs in that category + public static int GetNumSongsNotSungInCategory(int catIndex) + { + return _IsCatIndexValid(catIndex) ? Categories[catIndex].GetNumSongsNotSung() : 0; } public static void NextCategory() @@ -159,9 +169,8 @@ namespace Vocaluxe.Base foreach (CSongPointer song in category.Songs.Where(song => song.SongID == songID)) { song.IsSung = true; - int catIndex = _GetCategoryNumber(category); - if (NumSongsInCategory(catIndex) == 0) - ResetPartySongSung(catIndex); + if (category.GetNumSongsNotSung() == 0) + ResetPartySongSung(_GetCategoryNumber(category)); return; } } @@ -251,7 +260,7 @@ namespace Vocaluxe.Base { get { - List songs = new List(); + var songs = new List(); if (_IsCatIndexValid(_CatIndex)) { // ReSharper disable LoopCanBeConvertedToQuery @@ -271,6 +280,24 @@ namespace Vocaluxe.Base get { return Categorizer.Categories.AsReadOnly(); } } + /// + /// Gets category with given index or null for invalid index + /// + /// + /// category with given index or null for invalid index + public static CCategory GetCategoryByIndex(int index) + { + if (!_IsCatIndexValid(index)) + return null; + + return Categorizer.Categories[index]; + } + + /// + /// Gets visible song with given index or null for invalid index or song not visible + /// + /// + /// visible song with given index or null for invalid index or song not visible public static CSong GetVisibleSongByIndex(int index) { if (index < 0) @@ -298,7 +325,7 @@ namespace Vocaluxe.Base _Songs.Clear(); CLog.StartBenchmark(2, "List Songs"); - List files = new List(); + var files = new List(); foreach (string p in CConfig.SongFolder) { string path = p; diff --git a/VocaluxeLib/IBasic.cs b/VocaluxeLib/IBasic.cs index 648224d7..fc9871a8 100644 --- a/VocaluxeLib/IBasic.cs +++ b/VocaluxeLib/IBasic.cs @@ -206,7 +206,8 @@ namespace VocaluxeLib int GetNumSongs(); int GetNumSongsVisible(); int GetNumCategories(); - int NumSongsInCategory(int categoryIndex); + int GetNumSongsInCategory(int categoryIndex); + int GetNumSongsNotSungInCategory(int categoryIndex); bool IsInCategory(); int GetCurrentCategoryIndex(); diff --git a/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs b/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs index be9dd224..916ab688 100644 --- a/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs +++ b/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs @@ -130,7 +130,6 @@ namespace VocaluxeLib.Menu.SongMenu { if ((_SelectedInternal != _SelectedPending) && (_Timer.ElapsedMilliseconds >= _PendingTime)) { - _Timer.Stop(); _Timer.Reset(); _SelectedInternal = _SelectedPending; } @@ -140,7 +139,6 @@ namespace VocaluxeLib.Menu.SongMenu { if (value == -1) { - _Timer.Stop(); _Timer.Reset(); _SelectedInternal = -1; @@ -148,26 +146,28 @@ namespace VocaluxeLib.Menu.SongMenu return; } - if ((value != _SelectedInternal) && (value != _SelectedPending)) + if (value == _SelectedPending) { - _Timer.Reset(); - _Timer.Start(); - - _SelectedPending = value; + if (_Timer.ElapsedMilliseconds >= _PendingTime || _SelectedInternal == -1) + { + _Timer.Reset(); + _SelectedInternal = _SelectedPending; + } } - - if ((value == _SelectedPending) && ((_Timer.ElapsedMilliseconds >= _PendingTime) || (_SelectedInternal == -1))) + else { - _Timer.Stop(); - _Timer.Reset(); - _SelectedInternal = _SelectedPending; + if (value != _SelectedInternal) + { + _Timer.Reset(); + _Timer.Start(); + } + _SelectedPending = value; } } } protected void _SetSelectedNow() { - _Timer.Stop(); _Timer.Reset(); _SelectedInternal = _SelectedPending; } @@ -518,7 +518,10 @@ namespace VocaluxeLib.Menu.SongMenu _Active = active; } - public virtual bool IsMouseOverActualSelection(SMouseEvent mEvent) { return false; } + public virtual bool IsMouseOverActualSelection(SMouseEvent mEvent) + { + return false; + } public virtual int GetSelectedSong() { diff --git a/VocaluxeLib/Menu/SongMenu/CSongMenuTileBoard.cs b/VocaluxeLib/Menu/SongMenu/CSongMenuTileBoard.cs index d263fe92..8cf5a77d 100644 --- a/VocaluxeLib/Menu/SongMenu/CSongMenuTileBoard.cs +++ b/VocaluxeLib/Menu/SongMenu/CSongMenuTileBoard.cs @@ -92,9 +92,9 @@ namespace VocaluxeLib.Menu.SongMenu { for (int j = 0; j < _NumW; j++) { - SRectF rect = new SRectF(_Theme.SongMenuTileBoard.TileRect.X + j * (_TileW + _SpaceW), - _Theme.SongMenuTileBoard.TileRect.Y + i * (_TileH + _SpaceH), _TileW, _TileH, _Rect.Z); - CStatic tile = new CStatic(_PartyModeID, _CoverTexture, Color, rect); + var rect = new SRectF(_Theme.SongMenuTileBoard.TileRect.X + j * (_TileW + _SpaceW), + _Theme.SongMenuTileBoard.TileRect.Y + i * (_TileH + _SpaceH), _TileW, _TileH, _Rect.Z); + var tile = new CStatic(_PartyModeID, _CoverTexture, Color, rect); _Tiles.Add(tile); } } @@ -129,6 +129,73 @@ namespace VocaluxeLib.Menu.SongMenu } } + private void _UpdatePreview() + { + //First hide everything so we just have to set what we actually want + _CoverBig.Texture = _CoverBigTexture; + _Artist.Text = String.Empty; + _Title.Text = String.Empty; + _SongLength.Text = String.Empty; + _DuetIcon.Visible = false; + _VideoIcon.Visible = false; + _MedleyCalcIcon.Visible = false; + _MedleyTagIcon.Visible = false; + + //Check if nothing is selected (for preview) + if (_PreviewSelected < 0) + return; + + if (CBase.Songs.IsInCategory()) + { + CSong song = CBase.Songs.GetVisibleSong(_PreviewSelected); + //Check if we have a valid song (song still visible, index >=0 etc is checked by framework) + if (song == null) + { + //Display at least the category + CCategory category = CBase.Songs.GetCategory(CBase.Songs.GetCurrentCategoryIndex()); + //Check if we have a valid category + if (category == null) + return; + _CoverBig.Texture = category.CoverTextureBig; + _Artist.Text = category.Name; + return; + } + _CoverBig.Texture = song.CoverTextureBig; + _Artist.Text = song.Artist; + _Title.Text = song.Title; + _DuetIcon.Visible = song.IsDuet; + _VideoIcon.Visible = song.VideoFileName != ""; + _MedleyCalcIcon.Visible = song.Medley.Source == EMedleySource.Calculated; + _MedleyTagIcon.Visible = song.Medley.Source == EMedleySource.Tag; + + float time = CBase.Sound.GetLength(_SongStream); + if (Math.Abs(song.Finish) > 0.001) + time = song.Finish; + + time -= song.Start; + var min = (int)Math.Floor(time / 60f); + var sec = (int)(time - min * 60f); + _SongLength.Text = min.ToString("00") + ":" + sec.ToString("00"); + } + else + { + CCategory category = CBase.Songs.GetCategory(_PreviewSelected); + //Check if we have a valid category + if (category == null) + return; + _CoverBig.Texture = category.CoverTextureBig; + _Artist.Text = category.Name; + + int num = category.GetNumSongsNotSung(); + // ReSharper disable ConvertIfStatementToConditionalTernaryExpression + if (num != 1) + // ReSharper restore ConvertIfStatementToConditionalTernaryExpression + _Title.Text = CBase.Language.Translate("TR_SCREENSONG_NUMSONGS").Replace("%v", num.ToString()); + else + _Title.Text = CBase.Language.Translate("TR_SCREENSONG_NUMSONG").Replace("%v", num.ToString()); + } + } + public override void OnShow() { if (CBase.Songs.GetTabs() == EOffOn.TR_CONFIG_OFF && CBase.Songs.GetNumCategories() > 0 && !CBase.Songs.IsInCategory()) @@ -141,33 +208,16 @@ namespace VocaluxeLib.Menu.SongMenu SetSelectedSong(_ActSong); _AfterCategoryChange(); - int actcat = _PreviewSelected; - if ((CBase.Songs.GetNumCategories() > 0) && (actcat < 0)) + if (_PreviewSelected < 0) { - _CoverBig.Texture = CBase.Songs.GetCategory(0).CoverTextureBig; - _Artist.Text = CBase.Songs.GetCategory(0).Name; - _Title.Text = String.Empty; - _SongLength.Text = String.Empty; _PreviewSelected = 0; _Locked = 0; - _DuetIcon.Visible = false; - _VideoIcon.Visible = false; - _MedleyCalcIcon.Visible = false; - _MedleyTagIcon.Visible = false; } if (CBase.Songs.GetNumSongsVisible() == 0 && CBase.Songs.GetSearchFilter() != "") { - _CoverBig.Texture = _CoverBigTexture; - _Artist.Text = String.Empty; - _Title.Text = String.Empty; - _SongLength.Text = String.Empty; _PreviewSelected = -1; _Locked = -1; - _DuetIcon.Visible = false; - _VideoIcon.Visible = false; - _MedleyCalcIcon.Visible = false; - _MedleyTagIcon.Visible = false; } } @@ -394,63 +444,12 @@ namespace VocaluxeLib.Menu.SongMenu tile.Draw(1.2f, tile.Rect.Z - 0.1f, EAspect.Crop); else { - // ReSharper disable ConvertIfStatementToConditionalTernaryExpression - if (tile.Texture != _CoverTexture) - // ReSharper restore ConvertIfStatementToConditionalTernaryExpression - tile.Draw(1f, tile.Rect.Z, EAspect.Crop); - else - tile.Draw(1f, tile.Rect.Z, EAspect.Stretch); + EAspect aspect = (tile.Texture != _CoverTexture) ? EAspect.Crop : EAspect.Stretch; + tile.Draw(1f, tile.Rect.Z, aspect); } } - if (CBase.Songs.IsInCategory()) - { - int actsong = _PreviewSelected; - if ((CBase.Songs.GetNumSongsVisible() > actsong) && (actsong >= 0)) - { - CSong song = CBase.Songs.GetVisibleSong(actsong); - - _CoverBig.Texture = song.CoverTextureBig; - _Artist.Text = song.Artist; - _Title.Text = song.Title; - _DuetIcon.Visible = song.IsDuet; - _VideoIcon.Visible = song.VideoFileName != ""; - _MedleyCalcIcon.Visible = song.Medley.Source == EMedleySource.Calculated; - _MedleyTagIcon.Visible = song.Medley.Source == EMedleySource.Tag; - - float time = CBase.Sound.GetLength(_SongStream); - if (Math.Abs(song.Finish) > 0.001) - time = song.Finish; - - time -= song.Start; - int min = (int)Math.Floor(time / 60f); - int sec = (int)(time - min * 60f); - _SongLength.Text = min.ToString("00") + ":" + sec.ToString("00"); - } - } - else - { - int actcat = _PreviewSelected; - if ((CBase.Songs.GetNumCategories() > actcat) && (actcat >= 0)) - { - _CoverBig.Texture = CBase.Songs.GetCategory(actcat).CoverTextureBig; - _Artist.Text = CBase.Songs.GetCategory(actcat).Name; - - int num = CBase.Songs.NumSongsInCategory(actcat); - // ReSharper disable ConvertIfStatementToConditionalTernaryExpression - if (num != 1) - // ReSharper restore ConvertIfStatementToConditionalTernaryExpression - _Title.Text = CBase.Language.Translate("TR_SCREENSONG_NUMSONGS").Replace("%v", num.ToString()); - else - _Title.Text = CBase.Language.Translate("TR_SCREENSONG_NUMSONG").Replace("%v", num.ToString()); - - _SongLength.Text = String.Empty; - _DuetIcon.Visible = false; - _VideoIcon.Visible = false; - _MedleyCalcIcon.Visible = false; - _MedleyTagIcon.Visible = false; - } - } + _UpdatePreview(); _TextBG.Draw(); @@ -458,11 +457,11 @@ namespace VocaluxeLib.Menu.SongMenu { if (_Vidtex.Color.A < 1) _CoverBig.Draw(1f, EAspect.Crop); - RectangleF bounds = new RectangleF(_CoverBig.Rect.X, _CoverBig.Rect.Y, _CoverBig.Rect.W, _CoverBig.Rect.H); + var bounds = new RectangleF(_CoverBig.Rect.X, _CoverBig.Rect.Y, _CoverBig.Rect.W, _CoverBig.Rect.H); RectangleF rect; CHelper.SetRect(bounds, out rect, _Vidtex.OrigAspect, EAspect.Crop); - SRectF vidRect = new SRectF(rect.X, rect.Y, rect.Width, rect.Height, _CoverBig.Rect.Z); - SRectF vidRectBounds = new SRectF(bounds.X, bounds.Y, bounds.Width, bounds.Height, 0f); + var vidRect = new SRectF(rect.X, rect.Y, rect.Width, rect.Height, _CoverBig.Rect.Z); + var vidRectBounds = new SRectF(bounds.X, bounds.Y, bounds.Width, bounds.Height, 0f); CBase.Drawing.DrawTexture(_Vidtex, vidRect, _Vidtex.Color, vidRectBounds); CBase.Drawing.DrawTextureReflection(_Vidtex, vidRect, _Vidtex.Color, vidRectBounds, _CoverBig.ReflectionSpace, _CoverBig.ReflectionHeight); @@ -490,7 +489,7 @@ namespace VocaluxeLib.Menu.SongMenu CStatic selCov = GetSelectedSongCover(); if (selCov.Texture == null) return false; - SRectF rect = new SRectF(selCov.Rect.X - selCov.Rect.W*0.2f, selCov.Rect.Y - selCov.Rect.H*0.2f, selCov.Rect.W*1.2f, selCov.Rect.H*1.2f, selCov.Rect.Z); + var rect = new SRectF(selCov.Rect.X - selCov.Rect.W * 0.2f, selCov.Rect.Y - selCov.Rect.H * 0.2f, selCov.Rect.W * 1.2f, selCov.Rect.H * 1.2f, selCov.Rect.Z); return CHelper.IsInBounds(rect, mEvent); } @@ -679,8 +678,8 @@ namespace VocaluxeLib.Menu.SongMenu { for (int j = 0; j < _NumW; j++) { - SRectF rect = new SRectF(_Rect.X + j * (_TileW + _SpaceW), _Rect.Y + i * (_TileH + _SpaceH), _TileW, _TileH, _Rect.Z); - CStatic tile = new CStatic(_PartyModeID, _CoverTexture, Color, rect); + var rect = new SRectF(_Rect.X + j * (_TileW + _SpaceW), _Rect.Y + i * (_TileH + _SpaceH), _TileW, _TileH, _Rect.Z); + var tile = new CStatic(_PartyModeID, _CoverTexture, Color, rect); _Tiles.Add(tile); } } diff --git a/VocaluxeLib/Songs/CCategory.cs b/VocaluxeLib/Songs/CCategory.cs index 4101d746..f8c203e3 100644 --- a/VocaluxeLib/Songs/CCategory.cs +++ b/VocaluxeLib/Songs/CCategory.cs @@ -19,6 +19,7 @@ using System.Collections.Generic; using VocaluxeLib.Draw; +using System.Linq; namespace VocaluxeLib.Songs { @@ -52,6 +53,11 @@ namespace VocaluxeLib.Songs } } + public int GetNumSongsNotSung() + { + return Songs.Count(sp => !sp.IsSung); + } + public CCategory(string name, CTexture coverSmall, CTexture coverBig) { Name = name;