Merge pull request #464 from Vocaluxe/SongScreen-Highscore

Keyboard shortcut and button to show the highscores of the selected song
This commit is contained in:
daggeg authored and GitHub committed 2020-01-26 17:05:22 +01:00
commit 431256a225
5 files changed
+145 -59

No files matched your search

+28 -1
View File
@@ -2,7 +2,7 @@
<Screen xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Informations>
<ScreenName>ScreenSong</ScreenName>
<ScreenVersion>7</ScreenVersion>
<ScreenVersion>8</ScreenVersion>
</Informations>
<Backgrounds>
<Background Name="Background1">
@@ -788,6 +788,33 @@
<Text>TR_SCREENSONG_BUTTON_STARTMEDLEY</Text>
</Text>
</Button>
<Button Name="ButtonOptionsHighscore">
<Skin>SongSelectButton</Skin>
<SkinSelected>SongSelectButton</SkinSelected>
<Rect>
<X>40</X>
<Y>290</Y>
<W>360</W>
<H>40</H>
<Z>-2.11</Z>
</Rect>
<Color Name="ButtonColor" />
<SelColor Name="ButtonSelColor" />
<Text Name="Text">
<X>180</X>
<Y>7</Y>
<Z>0</Z>
<H>25</H>
<MaxW>350</MaxW>
<Color Name="ButtonTextColor" />
<SelColor Name="ButtonTextSelColor" />
<Align>Center</Align>
<ResizeAlign>Center</ResizeAlign>
<Style>Bold</Style>
<Font>Outline</Font>
<Text>TR_SCREENHIGHSCORE_HIGHSCORE</Text>
</Text>
</Button>
</Buttons>
<SongMenus>
<SongMenu Name="SongMenu">
+19 -42
View File
@@ -316,56 +316,33 @@ namespace Vocaluxe.Base
CSound.SetGlobalVolume(CConfig.PreviewMusicVolume);
}
//Change song position only if song is changed or near to end
bool songChanged = _CurPlayer.SongID != song.ID;
if (!songChanged && _CurPlayer.Position + 30 < _CurPlayer.Length)
return;
_PreviewPlayer.Load(song);
//Change song position only if song is changed or near to end
if (songChanged || _CurPlayer.Position + 30 < _CurPlayer.Length || _PreviewStartHelperTask == null)
lock (_PreviewStartHelperTaskLock)
{
lock (_PreviewStartHelperTaskLock)
_PreviewStartHelperTask = new Task(() =>
{
_PreviewStartHelperTask = new Task(() =>
{
float length = _PreviewPlayer.Length;
if (length < 1)
length = 30; // If length is unknow or invalid assume a length of 30s
float length = _PreviewPlayer.Length;
if (length < 1)
length = 30; // If length is unknow or invalid assume a length of 30s
if (start < 0)
start = (song.Preview.Source == EDataSource.None) ? length / 4f : song.Preview.StartTime;
if (start > length - 5f)
start = Math.Max(0f, Math.Min(length / 4f, length - 5f));
if (start >= 0.5f)
start -= 0.5f;
if (start < 0)
start = (song.Preview.Source == EDataSource.None) ? length / 4f : song.Preview.StartTime;
if (start > length - 5f)
start = Math.Max(0f, Math.Min(length / 4f, length - 5f));
if (start >= 0.5f)
start -= 0.5f;
_PreviewPlayer.Position = start;
Play();
});
}
_CurPlayer = _PreviewPlayer;
_PreviewPlayer.Position = start;
Play();
});
}
else
{
if (_PreviewStartHelperTask != null)
{
lock (_PreviewStartHelperTaskLock)
{
// Recheck the condition as it cloud have change before we got the lock
if (_PreviewStartHelperTask != null)
{
_PreviewStartHelperTask = null;
}
}
}
_PreviewPlayer.Position = _CurPlayer.Position;
_CurPlayer = _PreviewPlayer;
Play();
}
_CurPlayer = _PreviewPlayer;
}
public static void StopPreview()
@@ -460,4 +437,4 @@ namespace Vocaluxe.Base
return _BGMusicFiles.Contains(element);
}
}
}
}
+58 -14
View File
@@ -49,6 +49,7 @@ namespace Vocaluxe.Screens
private int _Round;
private int _Pos;
private bool _IsDuet;
private bool _FromScreenSong = false;
public override EMusicType CurrentMusicType
{
@@ -113,11 +114,13 @@ namespace Vocaluxe.Screens
break;
case Keys.Down:
_ChangePos(1);
if (!_FromScreenSong)
_ChangePos(1);
break;
case Keys.Up:
_ChangePos(-1);
if (!_FromScreenSong)
_ChangePos(-1);
break;
case Keys.Left:
@@ -234,13 +237,37 @@ namespace Vocaluxe.Screens
{
_Pos = 0;
int rounds = CGame.NumRounds;
_Scores = new List<SDBScoreEntry>[rounds];
for (int round = 0; round < rounds; round++)
if (rounds == 0)
{
int songID = CGame.GetSong(round).ID;
EGameMode gameMode = CGame.GetGameMode(round);
_FromScreenSong = true;
_Round = (int)EGameMode.TR_GAMEMODE_NORMAL;
_Scores = new List<SDBScoreEntry>[4];
int songID = CScreenSong.getSelectedSongID();
EHighscoreStyle style = CBase.Config.GetHighscoreStyle();
_Scores[round] = CDataBase.LoadScore(songID, gameMode, style);
bool foundHighscoreEntries = false;
for (int gameModeNum = 0; gameModeNum < 4; gameModeNum++)
{
_Scores[gameModeNum] = CDataBase.LoadScore(songID, (EGameMode)gameModeNum, style);
if (!foundHighscoreEntries && _Scores[gameModeNum].Count > 0)
{
_Round = gameModeNum;
foundHighscoreEntries = true;
}
}
}
else
{
_FromScreenSong = false;
_Scores = new List<SDBScoreEntry>[rounds];
for (int round = 0; round < rounds; round++)
{
int songID = CGame.GetSong(round).ID;
EGameMode gameMode = CGame.GetGameMode(round);
EHighscoreStyle style = CBase.Config.GetHighscoreStyle();
_Scores[round] = CDataBase.LoadScore(songID, gameMode, style);
}
}
}
@@ -248,15 +275,21 @@ namespace Vocaluxe.Screens
{
_IsDuet = false;
CPoints points = CGame.GetPoints();
CSong song = CGame.GetSong(_Round);
CSong song;
if (_FromScreenSong)
song = CSongs.GetSong(CScreenSong.getSelectedSongID());
else
song = CGame.GetSong(_Round);
if (song == null)
return;
_Texts[_TextSongName].Text = song.Artist + " - " + song.Title;
if (points.NumRounds > 1)
if (points != null && !_FromScreenSong && points.NumRounds > 1)
_Texts[_TextSongName].Text += " (" + (_Round + 1) + "/" + points.NumRounds + ")";
switch (CGame.GetGameMode(_Round))
switch ((_FromScreenSong ? (EGameMode)_Round : CGame.GetGameMode(_Round)))
{
case EGameMode.TR_GAMEMODE_NORMAL:
_Texts[_TextSongMode].Text = "TR_GAMEMODE_NORMAL";
@@ -296,9 +329,20 @@ namespace Vocaluxe.Screens
private void _ChangeRound(int num)
{
CPoints points = CGame.GetPoints();
_Round += num;
_Round = _Round.Clamp(0, points.NumRounds - 1);
if (_FromScreenSong)
{
if (_Round == (int)EGameMode.TR_GAMEMODE_SHORTSONG)
_Round = (int)EGameMode.TR_GAMEMODE_NORMAL;
else
++_Round;
}
else
{
CPoints points = CGame.GetPoints();
_Round += num;
_Round = _Round.Clamp(0, points.NumRounds - 1);
}
_UpdateRound();
}
@@ -307,4 +351,4 @@ namespace Vocaluxe.Screens
CParty.LeavingHighscore();
}
}
}
}
+39 -1
View File
@@ -42,7 +42,7 @@ namespace Vocaluxe.Screens
// Version number for theme files. Increment it, if you've changed something on the theme files!
protected override int _ScreenVersion
{
get { return 7; }
get { return 8; }
}
private const string _TextCategory = "TextCategory";
@@ -66,6 +66,7 @@ namespace Vocaluxe.Screens
private const string _ButtonOptionsRandomMedley = "ButtonOptionsRandomMedley";
private const string _ButtonOptionsStartMedley = "ButtonOptionsStartMedley";
private const string _ButtonStart = "ButtonStart";
private const string _ButtonOptionsHighscore = "ButtonOptionsHighscore";
private const string _SelectSlideOptionsMode = "SelectSlideOptionsMode";
private const string _SelectSlideOptionsPlaylistAdd = "SelectSlideOptionsPlaylistAdd";
@@ -99,6 +100,18 @@ namespace Vocaluxe.Screens
private ISongMenu _SongMenu;
private CPlaylist _Playlist;
private static int _StaticSelectedSongID;
private static void setStaticSelectedSongID(int songID)
{
_StaticSelectedSongID = songID;
}
public static int getSelectedSongID()
{
return _StaticSelectedSongID;
}
public override EMusicType CurrentMusicType
{
get { return CSongs.IsInCategory ? EMusicType.Preview : EMusicType.Background; }
@@ -130,6 +143,7 @@ namespace Vocaluxe.Screens
blist.Add(_ButtonStart);
blist.Add(_ButtonOptionsRandomMedley);
blist.Add(_ButtonOptionsStartMedley);
blist.Add(_ButtonOptionsHighscore);
_TextsPlayer.Clear();
for (int i = 0; i < CSettings.MaxNumPlayer; i++)
@@ -303,6 +317,13 @@ namespace Vocaluxe.Screens
if (keyEvent.Mod == EModifier.Ctrl && CSongs.NumSongsVisible > 0 && !_Sso.Selection.PartyMode)
_StartMedleySong(_SongMenu.GetPreviewSongNr());
break;
case Keys.H:
if (keyEvent.Mod == EModifier.Ctrl && CSongs.NumSongsVisible > 0 && !_Sso.Selection.PartyMode)
{
_ShowHighscore();
}
break;
}
if (!_SearchActive)
{
@@ -400,6 +421,10 @@ namespace Vocaluxe.Screens
_ToggleSongOptions(ESongOptionsView.None);
_StartRandomMedley(_SelectSlides[_SelectSlideOptionsNumMedleySongs].Selection + 1, !CSongs.IsInCategory);
}
else if (_Buttons[_ButtonOptionsHighscore].Selected)
{
_ShowHighscore();
}
break;
case Keys.Escape:
@@ -575,6 +600,10 @@ namespace Vocaluxe.Screens
_StartRandomMedley(_SelectSlides[_SelectSlideOptionsNumMedleySongs].Selection + 1, !CSongs.IsInCategory);
return true;
}
else if (_Buttons[_ButtonOptionsHighscore].Selected)
{
_ShowHighscore();
}
else if (_Sso.Selection.RandomOnly && _Sso.Selection.NumJokers != null)
{
if (_Buttons[_ButtonStart].Selected)
@@ -864,6 +893,13 @@ namespace Vocaluxe.Screens
}
}
private void _ShowHighscore()
{
CGame.ClearSongs();
CScreenSong.setStaticSelectedSongID(CSongs.VisibleSongs[_SongMenu.GetPreviewSongNr()].ID);
CBase.Graphics.FadeTo(EScreen.Highscore);
}
private void _StartSong(int songNr)
{
if (CSongs.IsInCategory && (songNr >= 0))
@@ -1185,6 +1221,7 @@ namespace Vocaluxe.Screens
_Buttons[_ButtonOptionsOpenSelectedItem].Visible = false;
_Buttons[_ButtonOptionsRandomMedley].Visible = false;
_Buttons[_ButtonOptionsStartMedley].Visible = false;
_Buttons[_ButtonOptionsHighscore].Visible = false;
_Texts[_TextOptionsTitle].Visible = false;
_Statics[_StaticOptionsBG].Visible = false;
_Buttons[_ButtonOpenOptions].Visible = true;
@@ -1241,6 +1278,7 @@ namespace Vocaluxe.Screens
_SelectSlides[_SelectSlideOptionsPlaylistAdd].Visible = true;
_Buttons[_ButtonOptionsSing].Visible = true;
_Buttons[_ButtonOptionsPlaylist].Visible = true;
_Buttons[_ButtonOptionsHighscore].Visible = true;
_SelectElement(_Buttons[_ButtonOptionsSing]);
_SetSelectSlidePlaylistToCurrentPlaylist();
}
@@ -220,7 +220,7 @@ namespace VocaluxeLib.Menu.SongMenu
EScreen check = CBase.Graphics.GetNextScreenType();
if (CBase.Graphics.GetNextScreenType() == EScreen.Sing)
_ResetPreview(false);
else if (CBase.Graphics.GetNextScreenType() != EScreen.Names || CBase.Config.GetBackgroundMusicStatus() == EBackgroundMusicOffOn.TR_CONFIG_OFF)
else if ((CBase.Graphics.GetNextScreenType() != EScreen.Names && CBase.Graphics.GetNextScreenType() != EScreen.Highscore) || CBase.Config.GetBackgroundMusicStatus() == EBackgroundMusicOffOn.TR_CONFIG_OFF)
_ResetPreview();
}