Merge branch 'develop' into ScalingFix
This commit is contained in:
18 files changed
+551
-120
No files matched your search
@@ -152,9 +152,10 @@
|
||||
<string name="TR_SCREENSONG_NUMSONGS">(%v songs)</string>
|
||||
<string name="TR_SCREENSONG_NUMSONG">(%v song)</string>
|
||||
<string name="TR_SCREENSONG_ARTIST_TITLE">%a - %t</string>
|
||||
<string name="TR_SCREENSONG_HELPMESSAGE">A-Z = Jump to the letter • F3 = Search • CTRL+R = Random selection • CTRL+S = Start medley • CTRL+A = Start all random • CTRL+V = Start visible random • Space = Open song options • ESC = Back to main menu</string>
|
||||
<string name="TR_SCREENSONG_HELPMESSAGE">A-Z = Jump to the letter • F3 = Search • CTRL+R = Random selection • CTRL+S = Start medley • CTRL+# = Change song sorting • CTRL+T = Enable/Disable category view • Space = Open song options • ESC = Back to main menu</string>
|
||||
<string name="TR_SCREENSONG_HELPMESSAGESEARCH">A-Z = Search artist and title, prefixes for the search → a: = artist • t: = title • c: = creator • e: = edition • g: = genre • y: = year (e.g. 1999 or 1980-1989) • l: = language • al: = album • fi: = file name • fo: = folder name</string>
|
||||
<string name="TR_SCREENSONG_HELPMESSAGEPARTY">1-6 = Press your team number to use a random song joker</string>
|
||||
<string name="TR_SCREENSONG_SORTING">Sorting: %s</string>
|
||||
<string name="TR_SCREENSING_PAUSE">Pause</string>
|
||||
<string name="TR_SCREENSING_BUTTON_CANCEL">Stop singing</string>
|
||||
<string name="TR_SCREENSING_BUTTON_CONTINUE">Continue</string>
|
||||
|
||||
@@ -147,9 +147,10 @@
|
||||
<string name="TR_SCREENSONG_NUMSONGS">(%v Lieder)</string>
|
||||
<string name="TR_SCREENSONG_NUMSONG">(%v Lied)</string>
|
||||
<string name="TR_SCREENSONG_ARTIST_TITLE">%a -%t</string>
|
||||
<string name="TR_SCREENSONG_HELPMESSAGE">A-Z = Zum Buchstaben springen • F3 = Suchen • STRG+R = Zufällige Auswahl • STRG+S = Starte Medley • STRG+A = Alle zufällig starten • STRG+V = Sichtbare zufällig starten • Leertaste = Lied-Optionen öffnen • ESC = Zurück zum Hauptmenü</string>
|
||||
<string name="TR_SCREENSONG_HELPMESSAGE">A-Z = Zum Buchstaben springen • F3 = Suchen • STRG+R = Zufällige Auswahl • STRG+S = Starte Medley • STRG+# = Song Sortierung ändern • STRG+T = Kategorieansicht ein-/ausschalten • Leertaste = Lied-Optionen öffnen • ESC = Zurück zum Hauptmenü</string>
|
||||
<string name="TR_SCREENSONG_HELPMESSAGESEARCH">A-Z = Interpreten und Titel durchsuchen, Präfixe für die Suche → a: = Interpret • t: = Titel • c: = Ersteller • e: = Edition • g: = Genre • y: = Jahr (z.B. 1999 oder 1980-1989) • l: = Sprache • al: = Album • fi: = Dateiname • fo: = Ordnername</string>
|
||||
<string name="TR_SCREENSONG_HELPMESSAGEPARTY">1-6 = Drücke die Teamnummer um einen Zufallssong Joker zu verwenden</string>
|
||||
<string name="TR_SCREENSONG_SORTING">Sortierung: %s</string>
|
||||
<string name="TR_SCREENSING_PAUSE">Pause</string>
|
||||
<string name="TR_SCREENSING_BUTTON_CANCEL">Lied beenden</string>
|
||||
<string name="TR_SCREENSING_BUTTON_CONTINUE">Fortfahren</string>
|
||||
|
||||
+11
-1
@@ -132,12 +132,20 @@ Song screen
|
||||
[F3] to open/close the song search menu
|
||||
[SPACE] to open/close the song menu
|
||||
[TAB] to switch selection of song menu and playlist (if opened)
|
||||
[CTRL] + [H] to show the highscore of the selected song
|
||||
[CTRL] + [T] to toggle category / tabs view
|
||||
[CTRL] + [1]..[0] to change the song sorting (just changed for runtime, not saved!), in order from keys 1 to 0:
|
||||
folder, artist, artist by letter, title by letter, edition, genre, language, year, decade, date added
|
||||
[CTRL] + [R] to select a random song
|
||||
[CTRL] + [A] to sing all songs
|
||||
[CTRL] + [S] to sing current song in medley version
|
||||
[CTRL] + [V] to sing all songs from a category
|
||||
[CTRL] + [L] to filter the song list to the current displayed playlist. Press again to remove this filter.
|
||||
[NUM_1]..[NUM_6] to use a Joker for team 1..6
|
||||
[A]..[Z] to jump to category/song title starting with that letter
|
||||
[A]..[Z] to jump to category/song title starting with that letters (multiple letters possible)
|
||||
[PAGE UP] or [PAGE DOWN] to scroll one page up/down
|
||||
[CTRL] + [PAGE UP or DOWN] to go inside next or previous category while being in a category
|
||||
[HOME] or [END] to scroll up to first song or down to last song
|
||||
|
||||
Name selection screen
|
||||
[1]..[6] to activate player selection.
|
||||
@@ -149,6 +157,7 @@ Name selection screen
|
||||
Sing screen
|
||||
[P] to toggle pause.
|
||||
[CTRL] + [S] to skip a song if there is another one in the playlist.
|
||||
[CTRL] + [RIGHT] to skip 30 seconds within the playing song (not in party modes).
|
||||
[T] to change the time format of the timer.
|
||||
[I] to change view of player information.
|
||||
[W] to activate the configured webcam.
|
||||
@@ -156,6 +165,7 @@ Sing screen
|
||||
|
||||
Score and highscore screen
|
||||
[LEFT] or [RIGHT] to show (high)scores of another round (if there is more than one)
|
||||
if opened from song list screen: Switch between game modes (Normal, Medley, Duet, Short)
|
||||
|
||||
|
||||
=================================
|
||||
|
||||
@@ -1,5 +1,22 @@
|
||||
ScreenSong
|
||||
|
||||
++++++++++
|
||||
Version 9:
|
||||
|
||||
Add:
|
||||
<TextSongYear>
|
||||
|
||||
Changed values at:
|
||||
<TextSongLength>
|
||||
|
||||
++++++++++
|
||||
Version 8:
|
||||
|
||||
Add:
|
||||
<ButtonOptionsHighscore> to SongMenu
|
||||
<TextShortInfoTop>
|
||||
<StaticShortInfoTop>
|
||||
|
||||
++++++++++
|
||||
Version 7:
|
||||
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
<Color Name="BackgroundColorAlpha" />
|
||||
<Rect>
|
||||
<X>0</X>
|
||||
<Y>0</Y>
|
||||
<Y>610</Y>
|
||||
<W>1280</W>
|
||||
<H>90</H>
|
||||
<Z>-0.75</Z>
|
||||
@@ -136,7 +136,7 @@
|
||||
<Color Name="LyricHelperDuet" />
|
||||
<Rect>
|
||||
<X>40</X>
|
||||
<Y>10</Y>
|
||||
<Y>623</Y>
|
||||
<W>45</W>
|
||||
<H>36</H>
|
||||
<Z>-1</Z>
|
||||
@@ -1501,7 +1501,7 @@
|
||||
<Lyric Name="LyricMainDuet">
|
||||
<Rect>
|
||||
<X>637</X>
|
||||
<Y>7</Y>
|
||||
<Y>620</Y>
|
||||
<W>1200</W>
|
||||
<H>42</H>
|
||||
<Z>-1</Z>
|
||||
@@ -1512,7 +1512,7 @@
|
||||
<Lyric Name="LyricSubDuet">
|
||||
<Rect>
|
||||
<X>637</X>
|
||||
<Y>48</Y>
|
||||
<Y>662</Y>
|
||||
<W>1200</W>
|
||||
<H>35</H>
|
||||
<Z>-1</Z>
|
||||
|
||||
@@ -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>9</ScreenVersion>
|
||||
</Informations>
|
||||
<Backgrounds>
|
||||
<Background Name="Background1">
|
||||
@@ -70,8 +70,33 @@
|
||||
<Z>-2.1</Z>
|
||||
</Rect>
|
||||
</Static>
|
||||
<Static Name="StaticShortInfoTop">
|
||||
<Skin />
|
||||
<Color Name="BackgroundColorAlpha" />
|
||||
<Rect>
|
||||
<X>490</X>
|
||||
<Y>0</Y>
|
||||
<W>300</W>
|
||||
<H>30</H>
|
||||
<Z>-0.75</Z>
|
||||
</Rect>
|
||||
</Static>
|
||||
</Statics>
|
||||
<Texts>
|
||||
<Text Name="TextShortInfoTop">
|
||||
<X>640</X>
|
||||
<Y>2</Y>
|
||||
<Z>-1</Z>
|
||||
<H>25</H>
|
||||
<MaxW>280</MaxW>
|
||||
<Color Name="TextColor" />
|
||||
<SelColor Name="TextSelColor" />
|
||||
<Align>Center</Align>
|
||||
<ResizeAlign>Center</ResizeAlign>
|
||||
<Style>Normal</Style>
|
||||
<Font>Outline</Font>
|
||||
<Text>TR_SCREENSONG_SORTING</Text>
|
||||
</Text>
|
||||
<Text Name="TextPlayer1">
|
||||
<X>950</X>
|
||||
<Y>65</Y>
|
||||
@@ -788,6 +813,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">
|
||||
@@ -853,19 +905,33 @@
|
||||
<Text />
|
||||
</TextTitle>
|
||||
<TextSongLength Name="TextSongLength">
|
||||
<X>222</X>
|
||||
<X>391</X>
|
||||
<Y>490</Y>
|
||||
<Z>-1.01</Z>
|
||||
<H>28</H>
|
||||
<MaxW>340</MaxW>
|
||||
<MaxW>100</MaxW>
|
||||
<Color Name="TextColor" />
|
||||
<SelColor Name="TextSelColor" />
|
||||
<Align>Center</Align>
|
||||
<Align>Right</Align>
|
||||
<ResizeAlign>Top</ResizeAlign>
|
||||
<Style>Bold</Style>
|
||||
<Font>Outline</Font>
|
||||
<Text />
|
||||
</TextSongLength>
|
||||
<TextSongYear Name="TextSongYear">
|
||||
<X>52</X>
|
||||
<Y>490</Y>
|
||||
<Z>-1.01</Z>
|
||||
<H>28</H>
|
||||
<MaxW>100</MaxW>
|
||||
<Color Name="TextColor" />
|
||||
<SelColor Name="TextSelColor" />
|
||||
<Align>Left</Align>
|
||||
<ResizeAlign>Top</ResizeAlign>
|
||||
<Style>Bold</Style>
|
||||
<Font>Outline</Font>
|
||||
<Text />
|
||||
</TextSongYear>
|
||||
<StaticCoverBig Name="StaticCoverBig">
|
||||
<Skin />
|
||||
<Color Name="Visible" />
|
||||
@@ -980,19 +1046,33 @@
|
||||
<Text />
|
||||
</TextTitle>
|
||||
<TextSongLength Name="TextSongLength">
|
||||
<X>222</X>
|
||||
<X>391</X>
|
||||
<Y>490</Y>
|
||||
<Z>-1.01</Z>
|
||||
<H>28</H>
|
||||
<MaxW>340</MaxW>
|
||||
<MaxW>100</MaxW>
|
||||
<Color Name="TextColor" />
|
||||
<SelColor Name="TextSelColor" />
|
||||
<Align>Center</Align>
|
||||
<Align>Right</Align>
|
||||
<ResizeAlign>Top</ResizeAlign>
|
||||
<Style>Bold</Style>
|
||||
<Font>Outline</Font>
|
||||
<Text />
|
||||
</TextSongLength>
|
||||
<TextSongYear Name="TextSongYear">
|
||||
<X>52</X>
|
||||
<Y>490</Y>
|
||||
<Z>-1.01</Z>
|
||||
<H>28</H>
|
||||
<MaxW>100</MaxW>
|
||||
<Color Name="TextColor" />
|
||||
<SelColor Name="TextSelColor" />
|
||||
<Align>Left</Align>
|
||||
<ResizeAlign>Top</ResizeAlign>
|
||||
<Style>Bold</Style>
|
||||
<Font>Outline</Font>
|
||||
<Text />
|
||||
</TextSongYear>
|
||||
<StaticCoverBig Name="StaticCoverBig">
|
||||
<Skin />
|
||||
<Color Name="Visible" />
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -688,7 +688,7 @@ namespace Vocaluxe.Base
|
||||
{
|
||||
//Check if folder exists
|
||||
if (Directory.Exists(folder))
|
||||
SongFolders.Add(folder);
|
||||
SongFolders.Add(Path.GetFullPath(folder));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -853,4 +853,4 @@ namespace Vocaluxe.Base
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -181,8 +181,12 @@ namespace Vocaluxe.Base
|
||||
sortList.Sort(_SortByFieldArtistTitle);
|
||||
break;
|
||||
}
|
||||
|
||||
if (_SongSorting == ESongSorting.TR_CONFIG_DATEADDED)
|
||||
sortList.Reverse();
|
||||
|
||||
_SortedSongs = sortList.ToArray();
|
||||
_Changed = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -30,6 +30,7 @@ using VocaluxeLib.Draw;
|
||||
using VocaluxeLib.Log;
|
||||
using VocaluxeLib.Menu;
|
||||
using VocaluxeLib.Menu.SingNotes;
|
||||
using VocaluxeLib.PartyModes;
|
||||
using VocaluxeLib.Songs;
|
||||
|
||||
namespace Vocaluxe.Screens
|
||||
@@ -123,6 +124,7 @@ namespace Vocaluxe.Screens
|
||||
private float _RemainingTimeToFirstNote;
|
||||
private float _TimeToFirstNoteDuet;
|
||||
private float _RemainingTimeToFirstNoteDuet;
|
||||
private float _TimeShowSongTextTotal;
|
||||
|
||||
private Stopwatch _TimerSongText;
|
||||
private Stopwatch _TimerDuetText1;
|
||||
@@ -132,6 +134,7 @@ namespace Vocaluxe.Screens
|
||||
private bool _Webcam;
|
||||
|
||||
private CBackground _SlideShow;
|
||||
private SScreenSongOptions _Sso;
|
||||
|
||||
public override EMusicType CurrentMusicType
|
||||
{
|
||||
@@ -264,9 +267,15 @@ namespace Vocaluxe.Screens
|
||||
if (_Buttons[_ButtonCancel].Selected)
|
||||
_Stop();
|
||||
if (_Buttons[_ButtonRestartGame].Selected)
|
||||
{
|
||||
_RestartGame();
|
||||
_SetPause(false);
|
||||
}
|
||||
if (_Buttons[_ButtonRestartRound].Selected)
|
||||
{
|
||||
_RestartRound();
|
||||
_SetPause(false);
|
||||
}
|
||||
if (_Buttons[_ButtonSkip].Selected)
|
||||
{
|
||||
_NextSong();
|
||||
@@ -287,6 +296,38 @@ namespace Vocaluxe.Screens
|
||||
if (CConfig.Config.Debug.SaveModifiedSongs == EOffOn.TR_CONFIG_ON)
|
||||
song.Save();
|
||||
break;
|
||||
|
||||
// Restart Round and reload song file header
|
||||
case Keys.R:
|
||||
if (keyEvent.Mod == EModifier.Ctrl && _Pause)
|
||||
{
|
||||
_SetPause(false);
|
||||
_RestartRound();
|
||||
}
|
||||
break;
|
||||
|
||||
// Restart Round and reload song file header
|
||||
case Keys.F5:
|
||||
if (_Pause)
|
||||
{
|
||||
_SetPause(false);
|
||||
_RestartRound();
|
||||
}
|
||||
break;
|
||||
|
||||
// Skip 30 seconds
|
||||
case Keys.Right:
|
||||
if (keyEvent.Mod == EModifier.Ctrl && !_Pause && !_Sso.Selection.PartyMode)
|
||||
{
|
||||
if (_TimerSongText.IsRunning)
|
||||
_TimerSongText.Stop();
|
||||
|
||||
float newTime = _CurrentTime + 30f;
|
||||
if (CSound.GetLength(_CurrentStream) < (_CurrentTime + 30f))
|
||||
newTime = CSound.GetLength(_CurrentStream) - 1f;
|
||||
CSound.SetPosition(_CurrentStream, newTime);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -356,6 +397,7 @@ namespace Vocaluxe.Screens
|
||||
_SetPause(false);
|
||||
|
||||
_TimeRects.Clear();
|
||||
_Sso = CParty.GetSongSelectionOptions();
|
||||
|
||||
_SingNotes[_SingBars].Init(0);
|
||||
_AssignPlayerElements();
|
||||
@@ -463,17 +505,11 @@ namespace Vocaluxe.Screens
|
||||
|
||||
if (alpha.Length > 2)
|
||||
{
|
||||
_Lyrics[_LyricMainDuet].Alpha = alpha[0];
|
||||
_Lyrics[_LyricSubDuet].Alpha = alpha[1];
|
||||
_Lyrics[_LyricMainDuet].Alpha = alpha[2];
|
||||
_Lyrics[_LyricSubDuet].Alpha = alpha[3];
|
||||
|
||||
_Statics[_StaticLyricsDuet].Alpha = alpha[0];
|
||||
_Statics[_StaticLyricHelperDuet].Alpha = alpha[0];
|
||||
|
||||
_Lyrics[_LyricMain].Alpha = alpha[2];
|
||||
_Lyrics[_LyricSub].Alpha = alpha[3];
|
||||
|
||||
_Statics[_StaticLyrics].Alpha = alpha[2];
|
||||
_Statics[_StaticLyricHelper].Alpha = alpha[2];
|
||||
_Statics[_StaticLyricsDuet].Alpha = alpha[2];
|
||||
_Statics[_StaticLyricHelperDuet].Alpha = alpha[2];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -532,7 +568,7 @@ namespace Vocaluxe.Screens
|
||||
_SingNotes[_SingBars].PlayerNotes[j].SetLine(nr);
|
||||
}
|
||||
|
||||
if (i == 0 && !song.IsDuet || i == 1 && song.IsDuet)
|
||||
if (i == 0)
|
||||
{
|
||||
_Lyrics[_LyricMain].SetLine(lines[nr]);
|
||||
_Lyrics[_LyricMainTop].SetLine(lines[nr]);
|
||||
@@ -550,7 +586,7 @@ namespace Vocaluxe.Screens
|
||||
_Lyrics[_LyricSubTop].Clear();
|
||||
}
|
||||
}
|
||||
if (i == 0 && song.IsDuet)
|
||||
if (i == 1 && song.IsDuet)
|
||||
{
|
||||
_Lyrics[_LyricMainDuet].SetLine(lines[nr]);
|
||||
_TimeToFirstNoteDuet = CGame.GetTimeFromBeats(lines[nr].FirstNoteBeat - lines[nr].StartBeat, song.BPM);
|
||||
@@ -564,7 +600,7 @@ namespace Vocaluxe.Screens
|
||||
}
|
||||
else
|
||||
{
|
||||
if (i == 0 && !song.IsDuet || i == 1 && song.IsDuet)
|
||||
if (i == 0)
|
||||
{
|
||||
_Lyrics[_LyricMain].Clear();
|
||||
_Lyrics[_LyricSub].Clear();
|
||||
@@ -573,7 +609,7 @@ namespace Vocaluxe.Screens
|
||||
_TimeToFirstNote = 0f;
|
||||
}
|
||||
|
||||
if (i == 0 && song.IsDuet)
|
||||
if (i == 1 && song.IsDuet)
|
||||
{
|
||||
_Lyrics[_LyricMainDuet].Clear();
|
||||
_Lyrics[_LyricSubDuet].Clear();
|
||||
@@ -610,23 +646,23 @@ namespace Vocaluxe.Screens
|
||||
|
||||
private void _UpdateSongText()
|
||||
{
|
||||
if (_TimerSongText.IsRunning && !_Lyrics[_LyricMainDuet].Visible && !_Lyrics[_LyricMainTop].Visible)
|
||||
if (_TimerSongText.IsRunning)
|
||||
{
|
||||
float t = _TimerSongText.ElapsedMilliseconds / 1000f;
|
||||
if (t < 10f)
|
||||
if (t < _TimeShowSongTextTotal)
|
||||
{
|
||||
_Statics[_StaticSongText].Visible = true;
|
||||
_Texts[_TextSongName].Visible = true;
|
||||
|
||||
if (t < 7f)
|
||||
if (t < (_TimeShowSongTextTotal - 3f))
|
||||
{
|
||||
_Statics[_StaticSongText].Color.A = 1f;
|
||||
_Texts[_TextSongName].Color.A = 1f;
|
||||
}
|
||||
else
|
||||
{
|
||||
_Statics[_StaticSongText].Color.A = (10f - t) / 3f;
|
||||
_Texts[_TextSongName].Color.A = (10f - t) / 3f;
|
||||
_Statics[_StaticSongText].Color.A = (_TimeShowSongTextTotal - t) / 3f;
|
||||
_Texts[_TextSongName].Color.A = (_TimeShowSongTextTotal - t) / 3f;
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -665,7 +701,7 @@ namespace Vocaluxe.Screens
|
||||
timer.Stop();
|
||||
}
|
||||
}
|
||||
else if (!timer.IsRunning && timer.ElapsedMilliseconds == 0 && _Lyrics[_LyricMainDuet].Alpha > 0 && CGame.GetSong().IsDuet)
|
||||
else if (!timer.IsRunning && timer.ElapsedMilliseconds == 0 && _Lyrics[_LyricMainTop].Alpha > 0 && CGame.GetSong().IsDuet)
|
||||
timer.Start();
|
||||
else
|
||||
textName.Visible = false;
|
||||
@@ -698,7 +734,7 @@ namespace Vocaluxe.Screens
|
||||
_TimerDuetText2.Stop();
|
||||
}
|
||||
}
|
||||
else if (!_TimerDuetText2.IsRunning && _TimerDuetText2.ElapsedMilliseconds == 0 && _Lyrics[_LyricMain].Alpha > 0 && CGame.GetSong().IsDuet)
|
||||
else if (!_TimerDuetText2.IsRunning && _TimerDuetText2.ElapsedMilliseconds == 0 && _Lyrics[_LyricMainDuet].Alpha > 0 && CGame.GetSong().IsDuet)
|
||||
_TimerDuetText2.Start();
|
||||
else
|
||||
_Texts[_TextDuetName2].Visible = false;
|
||||
@@ -879,7 +915,7 @@ namespace Vocaluxe.Screens
|
||||
_Statics[_StaticLyricHelperTop].Color.R,
|
||||
_Statics[_StaticLyricHelperTop].Color.G,
|
||||
_Statics[_StaticLyricHelperTop].Color.B,
|
||||
_Statics[_StaticLyricHelperTop].Color.A * _Statics[_StaticLyricHelper].Alpha * alpha);
|
||||
_Statics[_StaticLyricHelperTop].Color.A * _Statics[_StaticLyricHelperTop].Alpha * alpha);
|
||||
|
||||
float distance = _Lyrics[_LyricMainTop].GetCurrentLyricPosX() - rect.X - rect.W;
|
||||
CDraw.DrawTexture(_Statics[_StaticLyricHelperTop].Texture,
|
||||
@@ -968,7 +1004,7 @@ namespace Vocaluxe.Screens
|
||||
_CloseSong();
|
||||
|
||||
CGame.ResetPlayer();
|
||||
_LoadCurrentSong();
|
||||
_LoadCurrentSong(false);
|
||||
|
||||
_StartSong();
|
||||
}
|
||||
@@ -1048,7 +1084,7 @@ namespace Vocaluxe.Screens
|
||||
/// <summary>
|
||||
/// Prepare streams and screen for current song.
|
||||
/// </summary>
|
||||
private void _LoadCurrentSong()
|
||||
private void _LoadCurrentSong(bool reloadNotes = true)
|
||||
{
|
||||
if (CGame.IsFinished())
|
||||
{
|
||||
@@ -1064,6 +1100,9 @@ namespace Vocaluxe.Screens
|
||||
return;
|
||||
}
|
||||
|
||||
if (!_Sso.Selection.PartyMode && (CGame.GameMode == EGameMode.TR_GAMEMODE_NORMAL || CGame.GameMode == EGameMode.TR_GAMEMODE_DUET))
|
||||
song.ReloadSong(reloadNotes);
|
||||
|
||||
string songname = song.Artist + " - " + song.Title;
|
||||
int rounds = CGame.GetNumSongs();
|
||||
if (rounds > 1)
|
||||
@@ -1086,11 +1125,11 @@ namespace Vocaluxe.Screens
|
||||
voiceAssignments[i] = CGame.Players[i].VoiceNr;
|
||||
}
|
||||
|
||||
_VideoAspect = EAspect.Automatic;
|
||||
if (!String.IsNullOrEmpty(song.VideoFileName))
|
||||
{
|
||||
_CurrentVideo = CVideo.Load(Path.Combine(song.Folder, song.VideoFileName));
|
||||
CVideo.Skip(_CurrentVideo, song.Start, song.VideoGap);
|
||||
_VideoAspect = EAspect.Automatic;
|
||||
}
|
||||
|
||||
CDraw.RemoveTexture(ref _Background);
|
||||
@@ -1148,7 +1187,21 @@ namespace Vocaluxe.Screens
|
||||
_TimerDuetText1.Reset();
|
||||
_TimerDuetText2.Reset();
|
||||
|
||||
if (!song.IsDuet)
|
||||
float realGap = song.Gap - song.Start;
|
||||
_TimeShowSongTextTotal = 10f;
|
||||
if (_Lyrics[_LyricMainDuet].Visible || _Lyrics[_LyricMainTop].Visible)
|
||||
{
|
||||
if (realGap < 11f)
|
||||
{
|
||||
_TimeShowSongTextTotal = 0;
|
||||
}
|
||||
else if (realGap < 17f)
|
||||
{
|
||||
_TimeShowSongTextTotal = realGap - 7f;
|
||||
}
|
||||
}
|
||||
|
||||
if (_TimeShowSongTextTotal > 0)
|
||||
_TimerSongText.Start();
|
||||
}
|
||||
|
||||
@@ -1199,8 +1252,8 @@ namespace Vocaluxe.Screens
|
||||
|
||||
if (CGame.GetSong() != null && CGame.GetSong().IsDuet)
|
||||
{
|
||||
bottomLyricsVisible = true;
|
||||
topLyricsVisible = false;
|
||||
bottomLyricsVisible = false;
|
||||
topLyricsVisible = true;
|
||||
duetLyricsVisible = true;
|
||||
}
|
||||
|
||||
|
||||
+152
-10
@@ -19,6 +19,7 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Linq;
|
||||
using System.Timers;
|
||||
using System.Windows.Forms;
|
||||
using Vocaluxe.Base;
|
||||
using VocaluxeLib;
|
||||
@@ -42,7 +43,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 9; }
|
||||
}
|
||||
|
||||
private const string _TextCategory = "TextCategory";
|
||||
@@ -53,6 +54,7 @@ namespace Vocaluxe.Screens
|
||||
private const string _TextHelpBarSearch = "TextHelpBarSearch";
|
||||
private const string _TextHelpBarParty = "TextHelpBarParty";
|
||||
private const string _TextOptionsTitle = "TextOptionsTitle";
|
||||
private const string _TextShortInfoTop = "TextShortInfoTop";
|
||||
|
||||
private const string _ButtonOpenOptions = "ButtonOpenOptions";
|
||||
private const string _ButtonOptionsSing = "ButtonOptionsSing";
|
||||
@@ -66,6 +68,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";
|
||||
@@ -74,6 +77,7 @@ namespace Vocaluxe.Screens
|
||||
|
||||
private const string _StaticSearchBar = "StaticSearchBar";
|
||||
private const string _StaticOptionsBG = "StaticOptionsBG";
|
||||
private const string _StaticShortInfoTop = "StaticShortInfoTop";
|
||||
private const string _SongMenuName = "SongMenu";
|
||||
private const string _PlaylistName = "Playlist";
|
||||
|
||||
@@ -99,6 +103,20 @@ namespace Vocaluxe.Screens
|
||||
private ISongMenu _SongMenu;
|
||||
private CPlaylist _Playlist;
|
||||
|
||||
private System.Timers.Timer _TimerShortInfoText;
|
||||
|
||||
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 +148,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++)
|
||||
@@ -144,8 +163,9 @@ namespace Vocaluxe.Screens
|
||||
tlist.Add(_TextHelpBarSearch);
|
||||
tlist.Add(_TextHelpBarParty);
|
||||
tlist.Add(_TextOptionsTitle);
|
||||
tlist.Add(_TextShortInfoTop);
|
||||
|
||||
_ThemeStatics = new string[] {_StaticSearchBar, _StaticOptionsBG};
|
||||
_ThemeStatics = new string[] {_StaticSearchBar, _StaticOptionsBG, _StaticShortInfoTop};
|
||||
_ThemeTexts = tlist.ToArray();
|
||||
_ThemeButtons = blist.ToArray();
|
||||
_ThemeSelectSlides = new string[] {_SelectSlideOptionsMode, _SelectSlideOptionsPlaylistAdd, _SelectSlideOptionsPlaylistOpen, _SelectSlideOptionsNumMedleySongs};
|
||||
@@ -153,6 +173,10 @@ namespace Vocaluxe.Screens
|
||||
_ThemePlaylists = new string[] {_PlaylistName};
|
||||
|
||||
_DragAndDropCover = GetNewStatic();
|
||||
|
||||
_TimerShortInfoText = new System.Timers.Timer(5000);
|
||||
_TimerShortInfoText.AutoReset = false;
|
||||
_TimerShortInfoText.Elapsed += OnTimedEventShortInfoText;
|
||||
}
|
||||
|
||||
protected override void _OnSongMenuChanged()
|
||||
@@ -303,13 +327,56 @@ namespace Vocaluxe.Screens
|
||||
if (keyEvent.Mod == EModifier.Ctrl && CSongs.NumSongsVisible > 0 && !_Sso.Selection.PartyMode)
|
||||
_StartMedleySong(_SongMenu.GetPreviewSongNr());
|
||||
break;
|
||||
|
||||
case Keys.T:
|
||||
if (keyEvent.Mod == EModifier.Ctrl && !_Sso.Selection.PartyMode)
|
||||
{
|
||||
_ToggleTabs();
|
||||
}
|
||||
break;
|
||||
|
||||
case Keys.D0:
|
||||
case Keys.D1:
|
||||
case Keys.D2:
|
||||
case Keys.D3:
|
||||
case Keys.D4:
|
||||
case Keys.D5:
|
||||
case Keys.D6:
|
||||
case Keys.D7:
|
||||
case Keys.D8:
|
||||
case Keys.D9:
|
||||
if (keyEvent.Mod == EModifier.Ctrl && !_Sso.Selection.PartyMode)
|
||||
{
|
||||
int tempSortNr = -1;
|
||||
int.TryParse(keyEvent.Key.ToString().Substring(1), out tempSortNr);
|
||||
|
||||
if (tempSortNr == 0)
|
||||
tempSortNr = 10;
|
||||
|
||||
_ToggleSort(tempSortNr);
|
||||
}
|
||||
break;
|
||||
|
||||
case Keys.H:
|
||||
if (keyEvent.Mod == EModifier.Ctrl && CSongs.NumSongsVisible > 0 && !_Sso.Selection.PartyMode)
|
||||
{
|
||||
_ShowHighscore();
|
||||
}
|
||||
break;
|
||||
|
||||
case Keys.L:
|
||||
if (keyEvent.Mod == EModifier.Ctrl)
|
||||
{
|
||||
_TogglePlaylistFilter();
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (!_SearchActive)
|
||||
{
|
||||
switch (keyEvent.Key)
|
||||
{
|
||||
case Keys.Space:
|
||||
if (!_Sso.Selection.PartyMode)
|
||||
if (!_Sso.Selection.PartyMode && !_Playlist.isPlaylistNameEditMode())
|
||||
_ToggleSongOptions(ESongOptionsView.General);
|
||||
break;
|
||||
|
||||
@@ -400,6 +467,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 +646,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)
|
||||
@@ -689,6 +764,9 @@ namespace Vocaluxe.Screens
|
||||
_DragAndDropCover.Visible = false;
|
||||
_Playlist.DragAndDropSongID = -1;
|
||||
|
||||
_Statics[_StaticShortInfoTop].Visible = false;
|
||||
_Texts[_TextShortInfoTop].Visible = false;
|
||||
|
||||
UpdateGame();
|
||||
}
|
||||
|
||||
@@ -798,9 +876,6 @@ namespace Vocaluxe.Screens
|
||||
CParty.OnSongChange(_SelectedSongID, ref _Sso);
|
||||
}
|
||||
|
||||
_Sso = CParty.GetSongSelectionOptions();
|
||||
|
||||
|
||||
if (_Sso.Selection.PartyMode)
|
||||
{
|
||||
CSongs.Sort(_Sso.Sorting.SongSorting, _Sso.Sorting.Tabs, _Sso.Sorting.IgnoreArticles, _Sso.Sorting.SearchString, _Sso.Sorting.DuetOptions, _Sso.Sorting.FilterPlaylistID);
|
||||
@@ -864,6 +939,55 @@ namespace Vocaluxe.Screens
|
||||
}
|
||||
}
|
||||
|
||||
private void _ToggleSort(int sortNr)
|
||||
{
|
||||
if (CBase.Songs.IsInCategory() && _Sso.Selection.CategoryChangeAllowed)
|
||||
{
|
||||
CBase.Songs.SetCategory(-1);
|
||||
}
|
||||
|
||||
CSongs.Sorter.SongSorting = (ESongSorting)sortNr;
|
||||
CConfig.Config.Game.SongSorting = CSongs.Sorter.SongSorting;
|
||||
_Sso.Sorting.SongSorting = CSongs.Sorter.SongSorting;
|
||||
|
||||
_SongMenu.Update(_Sso);
|
||||
_SongMenu.OnShow();
|
||||
|
||||
_Texts[_TextShortInfoTop].Text = CBase.Language.Translate("TR_SCREENSONG_SORTING").Replace("%s", CBase.Language.Translate(_Sso.Sorting.SongSorting.ToString()));
|
||||
_Statics[_StaticShortInfoTop].Visible = true;
|
||||
_Texts[_TextShortInfoTop].Visible = true;
|
||||
_TimerShortInfoText.Stop();
|
||||
_TimerShortInfoText.Enabled = true;
|
||||
}
|
||||
|
||||
private void OnTimedEventShortInfoText(Object source, ElapsedEventArgs e)
|
||||
{
|
||||
_Statics[_StaticShortInfoTop].Visible = false;
|
||||
_Texts[_TextShortInfoTop].Visible = false;
|
||||
}
|
||||
|
||||
private void _ToggleTabs()
|
||||
{
|
||||
EOffOn tmpStatus = CSongs.Categorizer.Tabs;
|
||||
|
||||
if (tmpStatus == EOffOn.TR_CONFIG_ON)
|
||||
CSongs.Categorizer.Tabs = EOffOn.TR_CONFIG_OFF;
|
||||
else
|
||||
CSongs.Categorizer.Tabs = EOffOn.TR_CONFIG_ON;
|
||||
|
||||
CConfig.Config.Game.Tabs = CSongs.Categorizer.Tabs;
|
||||
_Sso.Sorting.Tabs = CSongs.Categorizer.Tabs;
|
||||
_SongMenu.Update(_Sso);
|
||||
_SongMenu.OnShow();
|
||||
}
|
||||
|
||||
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))
|
||||
@@ -1082,7 +1206,7 @@ namespace Vocaluxe.Screens
|
||||
{
|
||||
case ESongSorting.TR_CONFIG_ARTIST:
|
||||
case ESongSorting.TR_CONFIG_ARTIST_LETTER:
|
||||
visibleID = _FindIndex(songs, start, element => element.Artist.StartsWith(searchString, StringComparison.OrdinalIgnoreCase));
|
||||
visibleID = _FindIndex(songs, start, element => (_Sso.Sorting.IgnoreArticles == EOffOn.TR_CONFIG_ON ? element.ArtistSorting.StartsWith(searchString, StringComparison.OrdinalIgnoreCase) : element.Artist.StartsWith(searchString, StringComparison.OrdinalIgnoreCase)));
|
||||
break;
|
||||
|
||||
case ESongSorting.TR_CONFIG_YEAR:
|
||||
@@ -1091,7 +1215,7 @@ namespace Vocaluxe.Screens
|
||||
break;
|
||||
|
||||
case ESongSorting.TR_CONFIG_TITLE_LETTER:
|
||||
visibleID = _FindIndex(songs, start, element => element.Title.StartsWith(searchString, StringComparison.OrdinalIgnoreCase));
|
||||
visibleID = _FindIndex(songs, start, element => (_Sso.Sorting.IgnoreArticles == EOffOn.TR_CONFIG_ON ? element.TitleSorting.StartsWith(searchString, StringComparison.OrdinalIgnoreCase) : element.Title.StartsWith(searchString, StringComparison.OrdinalIgnoreCase)));
|
||||
break;
|
||||
|
||||
case ESongSorting.TR_CONFIG_FOLDER:
|
||||
@@ -1109,12 +1233,12 @@ namespace Vocaluxe.Screens
|
||||
{
|
||||
case ESongSorting.TR_CONFIG_FOLDER:
|
||||
case ESongSorting.TR_CONFIG_TITLE_LETTER:
|
||||
visibleID = _FindIndex(songs, start, element => element.Artist.StartsWith(searchString, StringComparison.OrdinalIgnoreCase));
|
||||
visibleID = _FindIndex(songs, start, element => (_Sso.Sorting.IgnoreArticles == EOffOn.TR_CONFIG_ON ? element.ArtistSorting.StartsWith(searchString, StringComparison.OrdinalIgnoreCase) : element.Artist.StartsWith(searchString, StringComparison.OrdinalIgnoreCase)));
|
||||
break;
|
||||
|
||||
case ESongSorting.TR_CONFIG_ARTIST:
|
||||
case ESongSorting.TR_CONFIG_ARTIST_LETTER:
|
||||
visibleID = _FindIndex(songs, start, element => element.Title.StartsWith(searchString, StringComparison.OrdinalIgnoreCase));
|
||||
visibleID = _FindIndex(songs, start, element => (_Sso.Sorting.IgnoreArticles == EOffOn.TR_CONFIG_ON ? element.TitleSorting.StartsWith(searchString, StringComparison.OrdinalIgnoreCase) : element.Title.StartsWith(searchString, StringComparison.OrdinalIgnoreCase)));
|
||||
break;
|
||||
}
|
||||
if (visibleID > -1)
|
||||
@@ -1133,6 +1257,22 @@ namespace Vocaluxe.Screens
|
||||
_JumpTo_lastSearchString = searchString;
|
||||
}
|
||||
|
||||
public void _TogglePlaylistFilter()
|
||||
{
|
||||
if (_Sso.Sorting.FilterPlaylistID == _Playlist.ActivePlaylistID)
|
||||
{
|
||||
if (_Playlist.ActivePlaylistID == -1)
|
||||
return;
|
||||
|
||||
_Sso.Sorting.FilterPlaylistID = -1;
|
||||
}
|
||||
else
|
||||
_Sso.Sorting.FilterPlaylistID = _Playlist.ActivePlaylistID;
|
||||
|
||||
CSongs.Sort(_Sso.Sorting.SongSorting, _Sso.Sorting.Tabs, _Sso.Sorting.IgnoreArticles, _Sso.Sorting.SearchString, _Sso.Sorting.DuetOptions, _Sso.Sorting.FilterPlaylistID);
|
||||
_SongMenu.OnShow();
|
||||
}
|
||||
|
||||
private void _ApplyNewSearchFilter(string newFilterString)
|
||||
{
|
||||
CParty.SetSearchString(newFilterString, _SearchActive);
|
||||
@@ -1185,6 +1325,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 +1382,7 @@ namespace Vocaluxe.Screens
|
||||
_SelectSlides[_SelectSlideOptionsPlaylistAdd].Visible = true;
|
||||
_Buttons[_ButtonOptionsSing].Visible = true;
|
||||
_Buttons[_ButtonOptionsPlaylist].Visible = true;
|
||||
_Buttons[_ButtonOptionsHighscore].Visible = true;
|
||||
_SelectElement(_Buttons[_ButtonOptionsSing]);
|
||||
_SetSelectSlidePlaylistToCurrentPlaylist();
|
||||
}
|
||||
|
||||
@@ -972,6 +972,11 @@ namespace VocaluxeLib.Menu
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool isPlaylistNameEditMode()
|
||||
{
|
||||
return _EditMode == EEditMode.PlaylistName;
|
||||
}
|
||||
|
||||
private void _PrepareList()
|
||||
{
|
||||
_PlaylistElements.Clear();
|
||||
@@ -1197,4 +1202,4 @@ namespace VocaluxeLib.Menu
|
||||
}
|
||||
#endregion ThemeEdit
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -63,6 +63,7 @@ namespace VocaluxeLib.Menu.SongMenu
|
||||
public SThemeText TextArtist;
|
||||
public SThemeText TextTitle;
|
||||
public SThemeText TextSongLength;
|
||||
public SThemeText TextSongYear;
|
||||
|
||||
public SThemeStatic StaticCoverBig;
|
||||
public SThemeStatic StaticTextBG;
|
||||
@@ -111,6 +112,7 @@ namespace VocaluxeLib.Menu.SongMenu
|
||||
public SThemeText TextArtist;
|
||||
public SThemeText TextTitle;
|
||||
public SThemeText TextSongLength;
|
||||
public SThemeText TextSongYear;
|
||||
|
||||
public SThemeStatic StaticCoverBig;
|
||||
public SThemeStatic StaticTextBG;
|
||||
@@ -220,7 +222,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();
|
||||
}
|
||||
|
||||
|
||||
@@ -43,6 +43,7 @@ namespace VocaluxeLib.Menu.SongMenu
|
||||
private readonly CText _Artist;
|
||||
private readonly CText _Title;
|
||||
private readonly CText _SongLength;
|
||||
private readonly CText _SongYear;
|
||||
|
||||
private float _SpaceW;
|
||||
private float _SpaceH;
|
||||
@@ -118,19 +119,21 @@ namespace VocaluxeLib.Menu.SongMenu
|
||||
_Artist = new CText(_Theme.SongMenuList.TextArtist, _PartyModeID);
|
||||
_Title = new CText(_Theme.SongMenuList.TextTitle, _PartyModeID);
|
||||
_SongLength = new CText(_Theme.SongMenuList.TextSongLength, _PartyModeID);
|
||||
_SongYear = new CText(_Theme.SongMenuList.TextSongYear, _PartyModeID);
|
||||
_CoverBig = new CStatic(_Theme.SongMenuList.StaticCoverBig, _PartyModeID);
|
||||
_TextBG = new CStatic(_Theme.SongMenuList.StaticTextBG, _PartyModeID);
|
||||
_DuetIcon = new CStatic(_Theme.SongMenuList.StaticDuetIcon, _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, _DuetIcon, _VideoIcon, _MedleyCalcIcon, _MedleyTagIcon});
|
||||
_SubElements.AddRange(new IMenuElement[] {_Artist, _Title, _SongLength, _SongYear, _DuetIcon, _VideoIcon, _MedleyCalcIcon, _MedleyTagIcon});
|
||||
}
|
||||
|
||||
private void _ReadSubTheme()
|
||||
{
|
||||
_Theme.SongMenuList.TextArtist = (SThemeText)_Artist.GetTheme();
|
||||
_Theme.SongMenuList.TextSongLength = (SThemeText)_SongLength.GetTheme();
|
||||
_Theme.SongMenuList.TextSongYear = (SThemeText)_SongYear.GetTheme();
|
||||
_Theme.SongMenuList.TextTitle = (SThemeText)_Title.GetTheme();
|
||||
_Theme.SongMenuList.StaticCoverBig = (SThemeStatic)_CoverBig.GetTheme();
|
||||
_Theme.SongMenuList.StaticDuetIcon = (SThemeStatic)_DuetIcon.GetTheme();
|
||||
@@ -217,6 +220,7 @@ namespace VocaluxeLib.Menu.SongMenu
|
||||
_Artist.Text = String.Empty;
|
||||
_Title.Text = String.Empty;
|
||||
_SongLength.Text = String.Empty;
|
||||
_SongYear.Text = String.Empty;
|
||||
_DuetIcon.Visible = false;
|
||||
_VideoIcon.Visible = false;
|
||||
_MedleyCalcIcon.Visible = false;
|
||||
@@ -245,6 +249,7 @@ namespace VocaluxeLib.Menu.SongMenu
|
||||
_CoverBig.Texture = song.CoverTextureBig;
|
||||
_Artist.Text = song.Artist;
|
||||
_Title.Text = song.Title;
|
||||
_SongYear.Text = song.Year;
|
||||
_DuetIcon.Visible = song.IsDuet;
|
||||
_VideoIcon.Visible = song.VideoFileName != "";
|
||||
_MedleyCalcIcon.Visible = song.Medley.Source == EDataSource.Calculated;
|
||||
@@ -344,19 +349,53 @@ namespace VocaluxeLib.Menu.SongMenu
|
||||
break;
|
||||
|
||||
case Keys.PageUp:
|
||||
if (catChangePossible)
|
||||
if (catChangePossible && CBase.Songs.IsInCategory() && (keyEvent.Mod == EModifier.Ctrl || keyEvent.Mod == EModifier.Alt))
|
||||
{
|
||||
_PrevCategory();
|
||||
keyEvent.Handled = true;
|
||||
}
|
||||
else if (moveAllowed)
|
||||
{
|
||||
if ((_SelectionNr - _ListLength) <= 0)
|
||||
_SelectionNr = 0;
|
||||
else
|
||||
_SelectionNr = _SelectionNr - _ListLength;
|
||||
keyEvent.Handled = true;
|
||||
}
|
||||
break;
|
||||
|
||||
case Keys.PageDown:
|
||||
if (catChangePossible)
|
||||
if (catChangePossible && CBase.Songs.IsInCategory() && (keyEvent.Mod == EModifier.Ctrl || keyEvent.Mod == EModifier.Alt))
|
||||
{
|
||||
_NextCategory();
|
||||
keyEvent.Handled = true;
|
||||
}
|
||||
else if (moveAllowed)
|
||||
{
|
||||
int maxCount_PageDown = (CBase.Songs.GetTabs() == EOffOn.TR_CONFIG_ON && !CBase.Songs.IsInCategory() ? CBase.Songs.GetNumCategories() : CBase.Songs.GetNumSongsVisible());
|
||||
if ((_SelectionNr + _ListLength) >= maxCount_PageDown)
|
||||
_SelectionNr = maxCount_PageDown - 1;
|
||||
else
|
||||
_SelectionNr = _SelectionNr + _ListLength;
|
||||
keyEvent.Handled = true;
|
||||
}
|
||||
break;
|
||||
|
||||
case Keys.Home:
|
||||
if (moveAllowed)
|
||||
{
|
||||
_SelectionNr = 0;
|
||||
keyEvent.Handled = true;
|
||||
}
|
||||
break;
|
||||
|
||||
case Keys.End:
|
||||
int maxCount_End = (CBase.Songs.GetTabs() == EOffOn.TR_CONFIG_ON && !CBase.Songs.IsInCategory() ? CBase.Songs.GetNumCategories() : CBase.Songs.GetNumSongsVisible());
|
||||
if (moveAllowed)
|
||||
{
|
||||
_SelectionNr = maxCount_End - 1;
|
||||
keyEvent.Handled = true;
|
||||
}
|
||||
break;
|
||||
|
||||
case Keys.Left:
|
||||
|
||||
@@ -42,6 +42,7 @@ namespace VocaluxeLib.Menu.SongMenu
|
||||
private CText _Artist;
|
||||
private CText _Title;
|
||||
private CText _SongLength;
|
||||
private CText _SongYear;
|
||||
|
||||
private int _NumW;
|
||||
private int _NumH;
|
||||
@@ -113,13 +114,14 @@ namespace VocaluxeLib.Menu.SongMenu
|
||||
_Artist = new CText(_Theme.SongMenuTileBoard.TextArtist, _PartyModeID);
|
||||
_Title = new CText(_Theme.SongMenuTileBoard.TextTitle, _PartyModeID);
|
||||
_SongLength = new CText(_Theme.SongMenuTileBoard.TextSongLength, _PartyModeID);
|
||||
_SongYear = new CText(_Theme.SongMenuTileBoard.TextSongYear, _PartyModeID);
|
||||
_CoverBig = new CStatic(_Theme.SongMenuTileBoard.StaticCoverBig, _PartyModeID);
|
||||
_TextBG = new CStatic(_Theme.SongMenuTileBoard.StaticTextBG, _PartyModeID);
|
||||
_DuetIcon = new CStatic(_Theme.SongMenuTileBoard.StaticDuetIcon, _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, _DuetIcon, _VideoIcon, _MedleyCalcIcon, _MedleyTagIcon});
|
||||
_SubElements.AddRange(new IMenuElement[] {_Artist, _Title, _SongLength, _SongYear, _DuetIcon, _VideoIcon, _MedleyCalcIcon, _MedleyTagIcon});
|
||||
}
|
||||
|
||||
private void _UpdateTileSelection()
|
||||
@@ -135,6 +137,7 @@ namespace VocaluxeLib.Menu.SongMenu
|
||||
{
|
||||
_Theme.SongMenuTileBoard.TextArtist = (SThemeText)_Artist.GetTheme();
|
||||
_Theme.SongMenuTileBoard.TextSongLength = (SThemeText)_SongLength.GetTheme();
|
||||
_Theme.SongMenuTileBoard.TextSongYear = (SThemeText)_SongYear.GetTheme();
|
||||
_Theme.SongMenuTileBoard.TextTitle = (SThemeText)_Title.GetTheme();
|
||||
_Theme.SongMenuTileBoard.StaticCoverBig = (SThemeStatic)_CoverBig.GetTheme();
|
||||
_Theme.SongMenuTileBoard.StaticDuetIcon = (SThemeStatic)_DuetIcon.GetTheme();
|
||||
@@ -208,6 +211,7 @@ namespace VocaluxeLib.Menu.SongMenu
|
||||
_Artist.Text = String.Empty;
|
||||
_Title.Text = String.Empty;
|
||||
_SongLength.Text = String.Empty;
|
||||
_SongYear.Text = String.Empty;
|
||||
_DuetIcon.Visible = false;
|
||||
_VideoIcon.Visible = false;
|
||||
_MedleyCalcIcon.Visible = false;
|
||||
@@ -236,6 +240,7 @@ namespace VocaluxeLib.Menu.SongMenu
|
||||
_CoverBig.Texture = song.CoverTextureBig;
|
||||
_Artist.Text = song.Artist;
|
||||
_Title.Text = song.Title;
|
||||
_SongYear.Text = song.Year;
|
||||
_DuetIcon.Visible = song.IsDuet;
|
||||
_VideoIcon.Visible = song.VideoFileName != "";
|
||||
_MedleyCalcIcon.Visible = song.Medley.Source == EDataSource.Calculated;
|
||||
@@ -335,19 +340,55 @@ namespace VocaluxeLib.Menu.SongMenu
|
||||
break;
|
||||
|
||||
case Keys.PageUp:
|
||||
if (catChangePossible)
|
||||
if (catChangePossible && CBase.Songs.IsInCategory() && (keyEvent.Mod == EModifier.Ctrl || keyEvent.Mod == EModifier.Alt))
|
||||
{
|
||||
_PrevCategory();
|
||||
keyEvent.Handled = true;
|
||||
}
|
||||
else if (moveAllowed)
|
||||
{
|
||||
int numSongsPerPage = _NumH * _NumW;
|
||||
if ((_SelectionNr - numSongsPerPage) <= 0)
|
||||
_SelectionNr = 0;
|
||||
else
|
||||
_SelectionNr = _SelectionNr - numSongsPerPage;
|
||||
keyEvent.Handled = true;
|
||||
}
|
||||
break;
|
||||
|
||||
case Keys.PageDown:
|
||||
if (catChangePossible)
|
||||
if (catChangePossible && CBase.Songs.IsInCategory() && (keyEvent.Mod == EModifier.Ctrl || keyEvent.Mod == EModifier.Alt))
|
||||
{
|
||||
_NextCategory();
|
||||
keyEvent.Handled = true;
|
||||
}
|
||||
else if (moveAllowed)
|
||||
{
|
||||
int numSongsPerPage = _NumH * _NumW;
|
||||
int maxCount_PageDown = (CBase.Songs.GetTabs() == EOffOn.TR_CONFIG_ON && !CBase.Songs.IsInCategory() ? CBase.Songs.GetNumCategories() : CBase.Songs.GetNumSongsVisible());
|
||||
if ((_SelectionNr + numSongsPerPage) >= maxCount_PageDown)
|
||||
_SelectionNr = maxCount_PageDown - 1;
|
||||
else
|
||||
_SelectionNr = _SelectionNr + numSongsPerPage;
|
||||
keyEvent.Handled = true;
|
||||
}
|
||||
break;
|
||||
|
||||
case Keys.Home:
|
||||
if (moveAllowed)
|
||||
{
|
||||
_SelectionNr = 0;
|
||||
keyEvent.Handled = true;
|
||||
}
|
||||
break;
|
||||
|
||||
case Keys.End:
|
||||
int maxCount_End = (CBase.Songs.GetTabs() == EOffOn.TR_CONFIG_ON && !CBase.Songs.IsInCategory() ? CBase.Songs.GetNumCategories() : CBase.Songs.GetNumSongsVisible());
|
||||
if (moveAllowed)
|
||||
{
|
||||
_SelectionNr = maxCount_End - 1;
|
||||
keyEvent.Handled = true;
|
||||
}
|
||||
break;
|
||||
|
||||
case Keys.Left:
|
||||
|
||||
@@ -288,6 +288,17 @@ namespace VocaluxeLib.Songs
|
||||
return loader.ReadNotes();
|
||||
}
|
||||
|
||||
public bool ReloadSong(bool reloadNotes)
|
||||
{
|
||||
var loader = new CSongLoader(this);
|
||||
bool retValue = loader.ReadHeader();
|
||||
if (!retValue)
|
||||
return false;
|
||||
|
||||
retValue = loader.ReadNotes(reloadNotes);
|
||||
return retValue;
|
||||
}
|
||||
|
||||
public bool Save()
|
||||
{
|
||||
return Save(Path.Combine(Folder, FileName));
|
||||
|
||||
@@ -82,12 +82,16 @@ namespace VocaluxeLib.Songs
|
||||
_Song.Languages.Clear();
|
||||
_Song.Genres.Clear();
|
||||
_Song.UnknownTags.Clear();
|
||||
_Song.BackgroundFileNames.Clear();
|
||||
_Song._Comment = "";
|
||||
_Song.ManualEncoding = false;
|
||||
_Song.Medley.Source = EDataSource.None;
|
||||
_Song._CalculateMedley = true;
|
||||
_Song.Preview.Source = EDataSource.None;
|
||||
_Song.ShortEnd.Source = EDataSource.None;
|
||||
_Song.Start = 0;
|
||||
_Song.VideoGap = 0;
|
||||
_Song.Preview.StartTime = 0;
|
||||
|
||||
var headerFlags = new EHeaderFlags();
|
||||
StreamReader sr = null;
|
||||
@@ -761,4 +765,4 @@ namespace VocaluxeLib.Songs
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user