Merge branch 'develop' into newAcinerella42
This commit is contained in:
25 files changed
+1100
-166
No files matched your search
File renamed without changes.
@@ -0,0 +1,166 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<Info>
|
||||
<Name>Genius Blue</Name>
|
||||
<Folder>Genius</Folder>
|
||||
<Author>Jiiniasu</Author>
|
||||
</Info>
|
||||
<!--Cover definitions when a category is missing a cover-->
|
||||
<!--Possible types are: Default, Song, Artist, Letter, Edition, Genre, Language, Year, Decade, Date -->
|
||||
<CoverGenerator Type="Default">
|
||||
<Text>
|
||||
<!--<Text>: Text to be shown, %TEXT% will be replaced by the category or song name-->
|
||||
<Text>%TEXT%</Text>
|
||||
<Font>
|
||||
<Name>Normal</Name>
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Size> Maximum size of the text in px-->
|
||||
<Size>550</Size>
|
||||
</Font>
|
||||
<!--<Color>: Text color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>
|
||||
<R>0.855</R>
|
||||
<G>0.937</G>
|
||||
<B>0.945</B>
|
||||
<A>0.8</A>
|
||||
</Color>
|
||||
<!--<Margin>: Spacing of the text from the borders of the image in px-->
|
||||
<Margin Default="24">
|
||||
<Left>24</Left>
|
||||
</Margin>
|
||||
<!--<Indent>: Indentation of the text for multiple lines-->
|
||||
<Indent>100</Indent>
|
||||
</Text>
|
||||
<BackgroundColor>
|
||||
<R>1</R>
|
||||
<G>1</G>
|
||||
<B>1</B>
|
||||
<A>1</A>
|
||||
</BackgroundColor>
|
||||
<!--<Image>: Background image for the cover-->
|
||||
<Image>Cover.png</Image>
|
||||
<!--<ImageAlpha>Alpha value of the image in case the first cover is shown(optional)-->
|
||||
<ImageAlpha>1.0</ImageAlpha>
|
||||
<!--<ShowFirstCover>Whether the first cover of a category should be shown(optional)-->
|
||||
<ShowFirstCover>True</ShowFirstCover>
|
||||
</CoverGenerator>
|
||||
<CoverGenerator Type="Year">
|
||||
<Text>
|
||||
<!--<Text>: Text to be shown, %TEXT% will be replaced by the category or song name-->
|
||||
<Text>%TEXT%</Text>
|
||||
<Font>
|
||||
<Name>Normal</Name>
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Size> Maximum size of the text in px-->
|
||||
<Size>550</Size>
|
||||
</Font>
|
||||
<!--<Color>: Text color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>
|
||||
<R>0.855</R>
|
||||
<G>0.937</G>
|
||||
<B>0.945</B>
|
||||
<A>0.8</A>
|
||||
</Color>
|
||||
<!--<Margin>: Spacing of the text from the borders of the image in px-->
|
||||
<Margin Default="24">
|
||||
<Top>-150</Top>
|
||||
</Margin>
|
||||
<!--<Indent>: Indentation of the text for multiple lines-->
|
||||
<Indent>100</Indent>
|
||||
</Text>
|
||||
<BackgroundColor>
|
||||
<R>1</R>
|
||||
<G>1</G>
|
||||
<B>1</B>
|
||||
<A>1</A>
|
||||
</BackgroundColor>
|
||||
<!--<Image>: Background image for the cover-->
|
||||
<Image>Cover.png</Image>
|
||||
<!--<ImageAlpha>Alpha value of the image in case the first cover is shown(optional)-->
|
||||
<ImageAlpha>1.0</ImageAlpha>
|
||||
<!--<ShowFirstCover>Whether the first cover of a category should be shown(optional)-->
|
||||
<ShowFirstCover>True</ShowFirstCover>
|
||||
</CoverGenerator>
|
||||
<CoverGenerator Type="Artist">
|
||||
<Text>
|
||||
<!--<Text>: Text to be shown, %TEXT% will be replaced by the category or song name-->
|
||||
<Text>%TEXT%</Text>
|
||||
<Font>
|
||||
<Name>Normal</Name>
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Size> Maximum size of the text in px-->
|
||||
<Size>550</Size>
|
||||
</Font>
|
||||
<!--<Color>: Text color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>
|
||||
<R>0.855</R>
|
||||
<G>0.937</G>
|
||||
<B>0.945</B>
|
||||
<A>0.8</A>
|
||||
</Color>
|
||||
<!--<Margin>: Spacing of the text from the borders of the image in px-->
|
||||
<Margin Default="24">
|
||||
<Bottom>150</Bottom>
|
||||
</Margin>
|
||||
<!--<Indent>: Indentation of the text for multiple lines-->
|
||||
<Indent>100</Indent>
|
||||
</Text>
|
||||
<BackgroundColor>
|
||||
<R>1</R>
|
||||
<G>1</G>
|
||||
<B>1</B>
|
||||
<A>1</A>
|
||||
</BackgroundColor>
|
||||
<!--<Image>: Background image for the cover-->
|
||||
<Image>Cover.png</Image>
|
||||
<!--<ImageAlpha>Alpha value of the image in case the first cover is shown(optional)-->
|
||||
<ImageAlpha>1.0</ImageAlpha>
|
||||
<!--<ShowFirstCover>Whether the first cover of a category should be shown(optional)-->
|
||||
<ShowFirstCover>True</ShowFirstCover>
|
||||
</CoverGenerator>
|
||||
<CoverGenerator Type="Date">
|
||||
<Text>
|
||||
<!--<Text>: Text to be shown, %TEXT% will be replaced by the category or song name-->
|
||||
<Text>%TEXT%</Text>
|
||||
<Font>
|
||||
<Name>Normal</Name>
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Size> Maximum size of the text in px-->
|
||||
<Size>120</Size>
|
||||
</Font>
|
||||
<!--<Color>: Text color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>
|
||||
<R>0.855</R>
|
||||
<G>0.937</G>
|
||||
<B>0.945</B>
|
||||
<A>0.8</A>
|
||||
</Color>
|
||||
<!--<Margin>: Spacing of the text from the borders of the image in px-->
|
||||
<Margin Default="5">
|
||||
<Top>-150</Top>
|
||||
</Margin>
|
||||
<!--<Indent>: Indentation of the text for multiple lines-->
|
||||
<Indent>100</Indent>
|
||||
</Text>
|
||||
<BackgroundColor>
|
||||
<R>1</R>
|
||||
<G>1</G>
|
||||
<B>1</B>
|
||||
<A>1</A>
|
||||
</BackgroundColor>
|
||||
<!--<Image>: Background image for the cover-->
|
||||
<Image>Cover.png</Image>
|
||||
<!--<ImageAlpha>Alpha value of the image in case the first cover is shown(optional)-->
|
||||
<ImageAlpha>1.0</ImageAlpha>
|
||||
<!--<ShowFirstCover>Whether the first cover of a category should be shown(optional)-->
|
||||
<ShowFirstCover>True</ShowFirstCover>
|
||||
</CoverGenerator>
|
||||
</root>
|
||||
@@ -0,0 +1,166 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<Info>
|
||||
<Name>Genius Red</Name>
|
||||
<Folder>Genius</Folder>
|
||||
<Author>Jiiniasu</Author>
|
||||
</Info>
|
||||
<!--Cover definitions when a category is missing a cover-->
|
||||
<!--Possible types are: Default, Song, Artist, Letter, Edition, Genre, Language, Year, Decade, Date -->
|
||||
<CoverGenerator Type="Default">
|
||||
<Text>
|
||||
<!--<Text>: Text to be shown, %TEXT% will be replaced by the category or song name-->
|
||||
<Text>%TEXT%</Text>
|
||||
<Font>
|
||||
<Name>Normal</Name>
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Size> Maximum size of the text in px-->
|
||||
<Size>550</Size>
|
||||
</Font>
|
||||
<!--<Color>: Text color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>
|
||||
<R>0.988</R>
|
||||
<G>0.682</G>
|
||||
<B>0.733</B>
|
||||
<A>0.8</A>
|
||||
</Color>
|
||||
<!--<Margin>: Spacing of the text from the borders of the image in px-->
|
||||
<Margin Default="24">
|
||||
<Left>24</Left>
|
||||
</Margin>
|
||||
<!--<Indent>: Indentation of the text for multiple lines-->
|
||||
<Indent>100</Indent>
|
||||
</Text>
|
||||
<BackgroundColor>
|
||||
<R>1</R>
|
||||
<G>1</G>
|
||||
<B>1</B>
|
||||
<A>1</A>
|
||||
</BackgroundColor>
|
||||
<!--<Image>: Background image for the cover-->
|
||||
<Image>Cover.png</Image>
|
||||
<!--<ImageAlpha>Alpha value of the image in case the first cover is shown(optional)-->
|
||||
<ImageAlpha>1.0</ImageAlpha>
|
||||
<!--<ShowFirstCover>Whether the first cover of a category should be shown(optional)-->
|
||||
<ShowFirstCover>True</ShowFirstCover>
|
||||
</CoverGenerator>
|
||||
<CoverGenerator Type="Year">
|
||||
<Text>
|
||||
<!--<Text>: Text to be shown, %TEXT% will be replaced by the category or song name-->
|
||||
<Text>%TEXT%</Text>
|
||||
<Font>
|
||||
<Name>Normal</Name>
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Size> Maximum size of the text in px-->
|
||||
<Size>550</Size>
|
||||
</Font>
|
||||
<!--<Color>: Text color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>
|
||||
<R>0.988</R>
|
||||
<G>0.682</G>
|
||||
<B>0.733</B>
|
||||
<A>0.8</A>
|
||||
</Color>
|
||||
<!--<Margin>: Spacing of the text from the borders of the image in px-->
|
||||
<Margin Default="24">
|
||||
<Top>-150</Top>
|
||||
</Margin>
|
||||
<!--<Indent>: Indentation of the text for multiple lines-->
|
||||
<Indent>100</Indent>
|
||||
</Text>
|
||||
<BackgroundColor>
|
||||
<R>1</R>
|
||||
<G>1</G>
|
||||
<B>1</B>
|
||||
<A>1</A>
|
||||
</BackgroundColor>
|
||||
<!--<Image>: Background image for the cover-->
|
||||
<Image>Cover.png</Image>
|
||||
<!--<ImageAlpha>Alpha value of the image in case the first cover is shown(optional)-->
|
||||
<ImageAlpha>1.0</ImageAlpha>
|
||||
<!--<ShowFirstCover>Whether the first cover of a category should be shown(optional)-->
|
||||
<ShowFirstCover>True</ShowFirstCover>
|
||||
</CoverGenerator>
|
||||
<CoverGenerator Type="Artist">
|
||||
<Text>
|
||||
<!--<Text>: Text to be shown, %TEXT% will be replaced by the category or song name-->
|
||||
<Text>%TEXT%</Text>
|
||||
<Font>
|
||||
<Name>Normal</Name>
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Size> Maximum size of the text in px-->
|
||||
<Size>550</Size>
|
||||
</Font>
|
||||
<!--<Color>: Text color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>
|
||||
<R>0.988</R>
|
||||
<G>0.682</G>
|
||||
<B>0.733</B>
|
||||
<A>0.8</A>
|
||||
</Color>
|
||||
<!--<Margin>: Spacing of the text from the borders of the image in px-->
|
||||
<Margin Default="24">
|
||||
<Bottom>150</Bottom>
|
||||
</Margin>
|
||||
<!--<Indent>: Indentation of the text for multiple lines-->
|
||||
<Indent>100</Indent>
|
||||
</Text>
|
||||
<BackgroundColor>
|
||||
<R>1</R>
|
||||
<G>1</G>
|
||||
<B>1</B>
|
||||
<A>1</A>
|
||||
</BackgroundColor>
|
||||
<!--<Image>: Background image for the cover-->
|
||||
<Image>Cover.png</Image>
|
||||
<!--<ImageAlpha>Alpha value of the image in case the first cover is shown(optional)-->
|
||||
<ImageAlpha>1.0</ImageAlpha>
|
||||
<!--<ShowFirstCover>Whether the first cover of a category should be shown(optional)-->
|
||||
<ShowFirstCover>True</ShowFirstCover>
|
||||
</CoverGenerator>
|
||||
<CoverGenerator Type="Date">
|
||||
<Text>
|
||||
<!--<Text>: Text to be shown, %TEXT% will be replaced by the category or song name-->
|
||||
<Text>%TEXT%</Text>
|
||||
<Font>
|
||||
<Name>Normal</Name>
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Size> Maximum size of the text in px-->
|
||||
<Size>120</Size>
|
||||
</Font>
|
||||
<!--<Color>: Text color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>
|
||||
<R>0.988</R>
|
||||
<G>0.682</G>
|
||||
<B>0.733</B>
|
||||
<A>0.8</A>
|
||||
</Color>
|
||||
<!--<Margin>: Spacing of the text from the borders of the image in px-->
|
||||
<Margin Default="5">
|
||||
<Top>-150</Top>
|
||||
</Margin>
|
||||
<!--<Indent>: Indentation of the text for multiple lines-->
|
||||
<Indent>100</Indent>
|
||||
</Text>
|
||||
<BackgroundColor>
|
||||
<R>1</R>
|
||||
<G>1</G>
|
||||
<B>1</B>
|
||||
<A>1</A>
|
||||
</BackgroundColor>
|
||||
<!--<Image>: Background image for the cover-->
|
||||
<Image>Cover.png</Image>
|
||||
<!--<ImageAlpha>Alpha value of the image in case the first cover is shown(optional)-->
|
||||
<ImageAlpha>1.0</ImageAlpha>
|
||||
<!--<ShowFirstCover>Whether the first cover of a category should be shown(optional)-->
|
||||
<ShowFirstCover>True</ShowFirstCover>
|
||||
</CoverGenerator>
|
||||
</root>
|
||||
@@ -152,6 +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+# = 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,6 +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+# = 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>
|
||||
|
||||
+10
-1
@@ -132,12 +132,19 @@ 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
|
||||
[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 +156,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 +164,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,14 @@
|
||||
ScreenSong
|
||||
|
||||
++++++++++
|
||||
Version 7:
|
||||
|
||||
Add:
|
||||
<TextHelpBar>
|
||||
<TextHelpBarSearch>
|
||||
<TextHelpBarParty>
|
||||
Shows key shortcut and search usage as small text line at the bottom of the screen.
|
||||
|
||||
++++++++++
|
||||
Version 6:
|
||||
|
||||
@@ -43,4 +52,4 @@ to SongMenu
|
||||
Add:
|
||||
<StaticMedleyCalcIcon> and <StaticMedleyTagIcon>
|
||||
to SongMenu.SongMenuTileBoard
|
||||
++++++++++
|
||||
++++++++++
|
||||
@@ -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>6</ScreenVersion>
|
||||
<ScreenVersion>8</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>
|
||||
@@ -238,6 +263,48 @@
|
||||
<Font>Outline</Font>
|
||||
<Text>TR_SCREENSONG_SONGOPTIONS</Text>
|
||||
</Text>
|
||||
<Text Name="TextHelpBar">
|
||||
<X>40</X>
|
||||
<Y>700</Y>
|
||||
<Z>0</Z>
|
||||
<H>16</H>
|
||||
<MaxW>1200</MaxW>
|
||||
<Color Name="TextColor" />
|
||||
<SelColor Name="TextSelColor" />
|
||||
<Align>Left</Align>
|
||||
<ResizeAlign>Bottom</ResizeAlign>
|
||||
<Style>Normal</Style>
|
||||
<Font>Outline</Font>
|
||||
<Text>TR_SCREENSONG_HELPMESSAGE</Text>
|
||||
</Text>
|
||||
<Text Name="TextHelpBarSearch">
|
||||
<X>40</X>
|
||||
<Y>700</Y>
|
||||
<Z>0</Z>
|
||||
<H>16</H>
|
||||
<MaxW>1200</MaxW>
|
||||
<Color Name="TextColor" />
|
||||
<SelColor Name="TextSelColor" />
|
||||
<Align>Left</Align>
|
||||
<ResizeAlign>Bottom</ResizeAlign>
|
||||
<Style>Normal</Style>
|
||||
<Font>Outline</Font>
|
||||
<Text>TR_SCREENSONG_HELPMESSAGESEARCH</Text>
|
||||
</Text>
|
||||
<Text Name="TextHelpBarParty">
|
||||
<X>40</X>
|
||||
<Y>700</Y>
|
||||
<Z>0</Z>
|
||||
<H>16</H>
|
||||
<MaxW>1200</MaxW>
|
||||
<Color Name="TextColor" />
|
||||
<SelColor Name="TextSelColor" />
|
||||
<Align>Left</Align>
|
||||
<ResizeAlign>Bottom</ResizeAlign>
|
||||
<Style>Normal</Style>
|
||||
<Font>Outline</Font>
|
||||
<Text>TR_SCREENSONG_HELPMESSAGEPARTY</Text>
|
||||
</Text>
|
||||
</Texts>
|
||||
<Buttons>
|
||||
<Button Name="ButtonJoker1">
|
||||
@@ -746,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">
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -133,6 +133,11 @@ namespace Vocaluxe.Base
|
||||
{
|
||||
_UnloadCovers();
|
||||
_LoadCovers();
|
||||
|
||||
// Stefan1200: Added a workaround to fix issue #446, because switching the cover theme gets bugged on the song screen and needed a game restart.
|
||||
// Toggle the tabs view fixes this bug somehow.
|
||||
CSongs.Categorizer.Tabs = (CConfig.Config.Game.Tabs == EOffOn.TR_CONFIG_ON ? EOffOn.TR_CONFIG_OFF : EOffOn.TR_CONFIG_ON);
|
||||
CSongs.Categorizer.Tabs = CConfig.Config.Game.Tabs;
|
||||
}
|
||||
|
||||
private static void _UnloadCovers()
|
||||
@@ -288,4 +293,4 @@ namespace Vocaluxe.Base
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
#region license
|
||||
#region license
|
||||
// This file is part of Vocaluxe.
|
||||
//
|
||||
// Vocaluxe is free software: you can redistribute it and/or modify
|
||||
@@ -93,6 +93,89 @@ namespace Vocaluxe.Base
|
||||
if (_SearchString != "")
|
||||
searchStrings = _SearchString.ToUpper().Split(new char[] {' '});
|
||||
|
||||
String searchForArtist = null; // a:
|
||||
String searchForTitle = null; // t:
|
||||
String searchForGenre = null; // g:
|
||||
String searchForYear = null; // y:
|
||||
String searchForLanguage = null; // l:
|
||||
String searchForCreator = null; // c:
|
||||
String searchForEdition = null; // e:
|
||||
String searchForAlbum = null; // al:
|
||||
String searchForFileName = null; // fi:
|
||||
String searchForFolderName = null; // fo:
|
||||
bool expertSearch = false;
|
||||
|
||||
if (searchStrings != null)
|
||||
{
|
||||
foreach (String searchToken in searchStrings)
|
||||
{
|
||||
if (searchToken.Length < 3)
|
||||
continue;
|
||||
|
||||
String temp = searchToken.Substring(0, 2);
|
||||
bool foundIt = true;
|
||||
|
||||
switch (temp)
|
||||
{
|
||||
case "A:":
|
||||
searchForArtist = searchToken.Substring(2);
|
||||
break;
|
||||
case "T:":
|
||||
searchForTitle = searchToken.Substring(2);
|
||||
break;
|
||||
case "G:":
|
||||
searchForGenre = searchToken.Substring(2);
|
||||
break;
|
||||
case "Y:":
|
||||
searchForYear = searchToken.Substring(2);
|
||||
break;
|
||||
case "L:":
|
||||
searchForLanguage = searchToken.Substring(2);
|
||||
break;
|
||||
case "C:":
|
||||
searchForCreator = searchToken.Substring(2);
|
||||
break;
|
||||
case "E:":
|
||||
searchForEdition = searchToken.Substring(2);
|
||||
break;
|
||||
default:
|
||||
foundIt = false;
|
||||
break;
|
||||
}
|
||||
|
||||
if (foundIt)
|
||||
{
|
||||
if (!expertSearch) expertSearch = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (searchToken.Length < 4)
|
||||
continue;
|
||||
|
||||
foundIt = true;
|
||||
temp = searchToken.Substring(0, 3);
|
||||
|
||||
switch (temp)
|
||||
{
|
||||
case "AL:":
|
||||
searchForAlbum = searchToken.Substring(3);
|
||||
break;
|
||||
case "FI:":
|
||||
searchForFileName = searchToken.Substring(3);
|
||||
break;
|
||||
case "FO:":
|
||||
searchForFolderName = searchToken.Substring(3);
|
||||
break;
|
||||
default:
|
||||
foundIt = false;
|
||||
break;
|
||||
}
|
||||
|
||||
if (foundIt && !expertSearch)
|
||||
expertSearch = true;
|
||||
}
|
||||
}
|
||||
|
||||
foreach (CSong song in CSongs.Songs)
|
||||
{
|
||||
if (_PlaylistID != -1 && !CBase.Playlist.ContainsSong(_PlaylistID, song.ID))
|
||||
@@ -102,9 +185,85 @@ namespace Vocaluxe.Base
|
||||
{
|
||||
if (searchStrings == null)
|
||||
_FilteredSongs.Add(song);
|
||||
else if (expertSearch)
|
||||
{
|
||||
// Stefan1200: Stop at a maximum of 500 search result to prevent performance issues
|
||||
if (_FilteredSongs.Count >= 500)
|
||||
break;
|
||||
|
||||
if (searchForAlbum != null && song.Album.ToUpper().Contains(searchForAlbum))
|
||||
_FilteredSongs.Add(song);
|
||||
if (searchForArtist != null && song.Artist.ToUpper().Contains(searchForArtist))
|
||||
_FilteredSongs.Add(song);
|
||||
if (searchForTitle != null && song.Title.ToUpper().Contains(searchForTitle))
|
||||
_FilteredSongs.Add(song);
|
||||
if (searchForCreator != null && song.Creator.ToUpper().Contains(searchForCreator))
|
||||
_FilteredSongs.Add(song);
|
||||
if (searchForFileName != null && song.FileName.ToUpper().Contains(searchForFileName))
|
||||
_FilteredSongs.Add(song);
|
||||
if (searchForFolderName != null && song.FolderName.ToUpper().Contains(searchForFolderName))
|
||||
_FilteredSongs.Add(song);
|
||||
|
||||
if (searchForGenre != null)
|
||||
{
|
||||
foreach (String genre in song.Genres)
|
||||
{
|
||||
if (genre.ToUpper().Contains(searchForGenre))
|
||||
_FilteredSongs.Add(song);
|
||||
}
|
||||
}
|
||||
|
||||
if (searchForLanguage != null)
|
||||
{
|
||||
foreach (String language in song.Languages)
|
||||
{
|
||||
if (language.ToUpper().Contains(searchForLanguage))
|
||||
_FilteredSongs.Add(song);
|
||||
}
|
||||
}
|
||||
|
||||
if (searchForEdition != null)
|
||||
{
|
||||
foreach (String edition in song.Editions)
|
||||
{
|
||||
if (edition.ToUpper().Contains(searchForEdition))
|
||||
_FilteredSongs.Add(song);
|
||||
}
|
||||
}
|
||||
|
||||
if (searchForYear != null)
|
||||
{
|
||||
int pos = searchForYear.IndexOf("-");
|
||||
if (pos == -1)
|
||||
{
|
||||
if (song.Year.Contains(searchForYear))
|
||||
_FilteredSongs.Add(song);
|
||||
}
|
||||
else if (searchForYear.Length == 9)
|
||||
{
|
||||
int yearStart = -1;
|
||||
int yearEnd = -1;
|
||||
if (!Int32.TryParse(searchForYear.Substring(0, pos), out yearStart))
|
||||
continue;
|
||||
if (!Int32.TryParse(searchForYear.Substring(pos + 1), out yearEnd))
|
||||
continue;
|
||||
|
||||
// Stefan1200: Prevent searches like 0000-9999, limit for a max distance of 100 years
|
||||
if (yearEnd - yearStart > 100)
|
||||
continue;
|
||||
|
||||
int yearSearch = -1;
|
||||
if (!Int32.TryParse(song.Year, out yearSearch))
|
||||
continue;
|
||||
|
||||
if (yearSearch >= yearStart && yearSearch <= yearEnd)
|
||||
_FilteredSongs.Add(song);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
string search = song.Title.ToUpper() + " " + song.Artist.ToUpper() + " " + song.FolderName.ToUpper() + " " + song.FileName.ToUpper();
|
||||
string search = song.Title.ToUpper() + " " + song.Artist.ToUpper();
|
||||
|
||||
if (searchStrings.All(search.Contains))
|
||||
_FilteredSongs.Add(song);
|
||||
@@ -114,4 +273,4 @@ namespace Vocaluxe.Base
|
||||
_Changed = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
#region license
|
||||
#region license
|
||||
// This file is part of Vocaluxe.
|
||||
//
|
||||
// Vocaluxe is free software: you can redistribute it and/or modify
|
||||
@@ -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
|
||||
@@ -112,7 +113,7 @@ namespace Vocaluxe.Screens
|
||||
private float _Length = -1f;
|
||||
|
||||
private CVideoStream _CurrentVideo;
|
||||
private EAspect _VideoAspect = EAspect.Crop;
|
||||
private EAspect _VideoAspect = EAspect.Automatic;
|
||||
private CTextureRef _CurrentWebcamFrameTexture;
|
||||
private CTextureRef _Background;
|
||||
|
||||
@@ -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
|
||||
{
|
||||
@@ -287,6 +290,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 +391,7 @@ namespace Vocaluxe.Screens
|
||||
_SetPause(false);
|
||||
|
||||
_TimeRects.Clear();
|
||||
_Sso = CParty.GetSongSelectionOptions();
|
||||
|
||||
_SingNotes[_SingBars].Init(0);
|
||||
_AssignPlayerElements();
|
||||
@@ -463,17 +499,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 +562,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 +580,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 +594,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 +603,7 @@ namespace Vocaluxe.Screens
|
||||
_TimeToFirstNote = 0f;
|
||||
}
|
||||
|
||||
if (i == 0 && song.IsDuet)
|
||||
if (i == 1 && song.IsDuet)
|
||||
{
|
||||
_Lyrics[_LyricMainDuet].Clear();
|
||||
_Lyrics[_LyricSubDuet].Clear();
|
||||
@@ -610,23 +640,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 +695,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 +728,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;
|
||||
@@ -794,18 +824,21 @@ namespace Vocaluxe.Screens
|
||||
if (_CurrentVideo != null && CConfig.Config.Video.VideosInSongs == EOffOn.TR_CONFIG_ON && !_Webcam)
|
||||
{
|
||||
background = _CurrentVideo.Texture;
|
||||
aspect = _VideoAspect;
|
||||
}
|
||||
else if (_Webcam)
|
||||
{
|
||||
background = _CurrentWebcamFrameTexture;
|
||||
aspect = _VideoAspect;
|
||||
}
|
||||
else
|
||||
background = _Background;
|
||||
if (background != null)
|
||||
{
|
||||
SRectF bounds = CSettings.RenderRect;
|
||||
|
||||
if (_VideoAspect == EAspect.Automatic)
|
||||
_VideoAspect = (background.OrigAspect <= 1.5 ? EAspect.LetterBox : EAspect.Crop);
|
||||
aspect = _VideoAspect;
|
||||
|
||||
SRectF rect = CHelper.FitInBounds(bounds, background.OrigAspect, aspect);
|
||||
CDraw.DrawTexture(background, rect, background.Color, bounds);
|
||||
}
|
||||
@@ -876,7 +909,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,
|
||||
@@ -965,7 +998,7 @@ namespace Vocaluxe.Screens
|
||||
_CloseSong();
|
||||
|
||||
CGame.ResetPlayer();
|
||||
_LoadCurrentSong();
|
||||
_LoadCurrentSong(false);
|
||||
|
||||
_StartSong();
|
||||
}
|
||||
@@ -1045,7 +1078,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())
|
||||
{
|
||||
@@ -1061,6 +1094,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)
|
||||
@@ -1083,11 +1119,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 = song.VideoAspect;
|
||||
}
|
||||
|
||||
CDraw.RemoveTexture(ref _Background);
|
||||
@@ -1145,7 +1181,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();
|
||||
}
|
||||
|
||||
@@ -1196,8 +1246,8 @@ namespace Vocaluxe.Screens
|
||||
|
||||
if (CGame.GetSong() != null && CGame.GetSong().IsDuet)
|
||||
{
|
||||
bottomLyricsVisible = true;
|
||||
topLyricsVisible = false;
|
||||
bottomLyricsVisible = false;
|
||||
topLyricsVisible = true;
|
||||
duetLyricsVisible = true;
|
||||
}
|
||||
|
||||
@@ -1828,4 +1878,4 @@ namespace Vocaluxe.Screens
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+175
-44
@@ -1,4 +1,4 @@
|
||||
#region license
|
||||
#region license
|
||||
// This file is part of Vocaluxe.
|
||||
//
|
||||
// Vocaluxe is free software: you can redistribute it and/or modify
|
||||
@@ -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,14 +43,18 @@ 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 6; }
|
||||
get { return 8; }
|
||||
}
|
||||
|
||||
private const string _TextCategory = "TextCategory";
|
||||
private const string _TextSelection = "TextSelection";
|
||||
private const string _TextSearchBarTitle = "TextSearchBarTitle";
|
||||
private const string _TextSearchBar = "TextSearchBar";
|
||||
private const string _TextHelpBar = "TextHelpBar";
|
||||
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";
|
||||
@@ -63,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";
|
||||
@@ -71,12 +77,16 @@ 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";
|
||||
|
||||
private string _SearchText = String.Empty;
|
||||
private bool _SearchActive;
|
||||
|
||||
private int _JumpTo_lastCharTime = 0;
|
||||
private String _JumpTo_lastSearchString = "";
|
||||
|
||||
private readonly List<string> _ButtonsJoker = new List<string>();
|
||||
private readonly List<string> _TextsPlayer = new List<string>();
|
||||
private ESongOptionsView _CurSongOptionsView;
|
||||
@@ -93,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; }
|
||||
@@ -124,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++)
|
||||
@@ -134,9 +159,13 @@ namespace Vocaluxe.Screens
|
||||
tlist.Add(_TextSelection);
|
||||
tlist.Add(_TextSearchBarTitle);
|
||||
tlist.Add(_TextSearchBar);
|
||||
tlist.Add(_TextHelpBar);
|
||||
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};
|
||||
@@ -144,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()
|
||||
@@ -279,6 +312,57 @@ namespace Vocaluxe.Screens
|
||||
else if (!_Sso.Selection.PartyMode)
|
||||
_SearchActive = true;
|
||||
break;
|
||||
|
||||
case Keys.V:
|
||||
if (keyEvent.Mod == EModifier.Ctrl && !_Sso.Selection.PartyMode)
|
||||
_StartRandomVisibleSongs();
|
||||
break;
|
||||
|
||||
case Keys.R:
|
||||
if (keyEvent.Mod == EModifier.Ctrl && !_Sso.Selection.RandomOnly)
|
||||
_SelectNextRandom(-1);
|
||||
break;
|
||||
|
||||
case Keys.S:
|
||||
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;
|
||||
}
|
||||
if (!_SearchActive)
|
||||
{
|
||||
@@ -293,23 +377,9 @@ namespace Vocaluxe.Screens
|
||||
if (keyEvent.Mod == EModifier.Ctrl && !_Sso.Selection.PartyMode)
|
||||
_StartRandomAllSongs();
|
||||
break;
|
||||
case Keys.V:
|
||||
if (keyEvent.Mod == EModifier.Ctrl && !_Sso.Selection.PartyMode)
|
||||
_StartRandomVisibleSongs();
|
||||
break;
|
||||
|
||||
case Keys.R:
|
||||
if (keyEvent.Mod == EModifier.Ctrl && !_Sso.Selection.RandomOnly)
|
||||
_SelectNextRandom(-1);
|
||||
break;
|
||||
|
||||
case Keys.S:
|
||||
if (keyEvent.Mod == EModifier.Ctrl && CSongs.NumSongsVisible > 0 && !_Sso.Selection.PartyMode)
|
||||
_StartMedleySong(_SongMenu.GetPreviewSongNr());
|
||||
break;
|
||||
|
||||
case Keys.F:
|
||||
if (keyEvent.Mod == EModifier.Ctrl)
|
||||
if (keyEvent.Mod == EModifier.Ctrl && !_Sso.Selection.PartyMode)
|
||||
_SearchActive = true;
|
||||
break;
|
||||
|
||||
@@ -390,6 +460,10 @@ namespace Vocaluxe.Screens
|
||||
_ToggleSongOptions(ESongOptionsView.None);
|
||||
_StartRandomMedley(_SelectSlides[_SelectSlideOptionsNumMedleySongs].Selection + 1, !CSongs.IsInCategory);
|
||||
}
|
||||
else if (_Buttons[_ButtonOptionsHighscore].Selected)
|
||||
{
|
||||
_ShowHighscore();
|
||||
}
|
||||
break;
|
||||
|
||||
case Keys.Escape:
|
||||
@@ -565,6 +639,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)
|
||||
@@ -679,6 +757,9 @@ namespace Vocaluxe.Screens
|
||||
_DragAndDropCover.Visible = false;
|
||||
_Playlist.DragAndDropSongID = -1;
|
||||
|
||||
_Statics[_StaticShortInfoTop].Visible = false;
|
||||
_Texts[_TextShortInfoTop].Visible = false;
|
||||
|
||||
UpdateGame();
|
||||
}
|
||||
|
||||
@@ -727,12 +808,18 @@ namespace Vocaluxe.Screens
|
||||
|
||||
_Texts[_TextSearchBar].Visible = true;
|
||||
_Texts[_TextSearchBarTitle].Visible = true;
|
||||
_Texts[_TextHelpBar].Visible = false;
|
||||
_Texts[_TextHelpBarSearch].Visible = true;
|
||||
_Texts[_TextHelpBarParty].Visible = false;
|
||||
_Statics[_StaticSearchBar].Visible = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
_Texts[_TextSearchBar].Visible = false;
|
||||
_Texts[_TextSearchBarTitle].Visible = false;
|
||||
_Texts[_TextHelpBar].Visible = !_Sso.Selection.PartyMode;
|
||||
_Texts[_TextHelpBarSearch].Visible = false;
|
||||
_Texts[_TextHelpBarParty].Visible = _Sso.Selection.PartyMode;
|
||||
_Statics[_StaticSearchBar].Visible = false;
|
||||
}
|
||||
|
||||
@@ -848,6 +935,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))
|
||||
@@ -1042,8 +1178,14 @@ namespace Vocaluxe.Screens
|
||||
|
||||
private void _JumpTo(char letter)
|
||||
{
|
||||
// Stefan1200: Add all letters from a key press within one second to a search string. Clear search string, if last key press is older than one second.
|
||||
String searchString;
|
||||
if (Environment.TickCount - _JumpTo_lastCharTime < 1000)
|
||||
searchString = _JumpTo_lastSearchString + letter.ToString();
|
||||
else
|
||||
searchString = letter.ToString();
|
||||
|
||||
int start = 0;
|
||||
int curSelected = CSongs.IsInCategory ? _SongMenu.GetSelectedSongNr() : _SongMenu.GetSelectedCategory();
|
||||
bool firstLevel = CConfig.Config.Game.Tabs == EOffOn.TR_CONFIG_OFF && CSongs.IsInCategory;
|
||||
bool secondSort = CConfig.Config.Game.Tabs == EOffOn.TR_CONFIG_ON &&
|
||||
(CConfig.Config.Game.SongSorting == ESongSorting.TR_CONFIG_ARTIST ||
|
||||
@@ -1055,34 +1197,25 @@ namespace Vocaluxe.Screens
|
||||
//TODO: What's to do with multiple tags?
|
||||
//Flamefire: What? We only sorted by one tag, sorting by multiple tags (e.g. Album) will be by e.g. the first entry. That can be used here too as otherwhise it will confuse users because it jumps randomly
|
||||
ReadOnlyCollection<CSong> songs = CSongs.VisibleSongs;
|
||||
int ct = songs.Count;
|
||||
int visibleID = -1;
|
||||
switch (CConfig.Config.Game.SongSorting)
|
||||
{
|
||||
case ESongSorting.TR_CONFIG_ARTIST:
|
||||
case ESongSorting.TR_CONFIG_ARTIST_LETTER:
|
||||
if (curSelected >= 0 && curSelected < ct - 1 && songs[curSelected].Artist.StartsWith(letter.ToString(), StringComparison.OrdinalIgnoreCase))
|
||||
start = curSelected + 1;
|
||||
visibleID = _FindIndex(songs, start, element => element.Artist.StartsWith(letter.ToString(), StringComparison.OrdinalIgnoreCase));
|
||||
visibleID = _FindIndex(songs, start, element => element.Artist.StartsWith(searchString, StringComparison.OrdinalIgnoreCase));
|
||||
break;
|
||||
|
||||
case ESongSorting.TR_CONFIG_YEAR:
|
||||
case ESongSorting.TR_CONFIG_DECADE:
|
||||
if (curSelected >= 0 && curSelected < ct - 1 && songs[curSelected].Year.StartsWith(letter.ToString(), StringComparison.OrdinalIgnoreCase))
|
||||
start = curSelected + 1;
|
||||
visibleID = _FindIndex(songs, start, element => element.Year.StartsWith(letter.ToString(), StringComparison.OrdinalIgnoreCase));
|
||||
visibleID = _FindIndex(songs, start, element => element.Year.StartsWith(searchString, StringComparison.OrdinalIgnoreCase));
|
||||
break;
|
||||
|
||||
case ESongSorting.TR_CONFIG_TITLE_LETTER:
|
||||
if (curSelected >= 0 && curSelected < ct - 1 && songs[curSelected].Title.StartsWith(letter.ToString(), StringComparison.OrdinalIgnoreCase))
|
||||
start = curSelected + 1;
|
||||
visibleID = _FindIndex(songs, start, element => element.Title.StartsWith(letter.ToString(), StringComparison.OrdinalIgnoreCase));
|
||||
visibleID = _FindIndex(songs, start, element => element.Title.StartsWith(searchString, StringComparison.OrdinalIgnoreCase));
|
||||
break;
|
||||
|
||||
case ESongSorting.TR_CONFIG_FOLDER:
|
||||
if (curSelected >= 0 && curSelected < ct - 1 && songs[curSelected].Folder.StartsWith(letter.ToString(), StringComparison.OrdinalIgnoreCase))
|
||||
start = curSelected + 1;
|
||||
visibleID = _FindIndex(songs, start, element => element.Folder.StartsWith(letter.ToString(), StringComparison.OrdinalIgnoreCase));
|
||||
visibleID = _FindIndex(songs, start, element => element.FolderName.StartsWith(searchString, StringComparison.OrdinalIgnoreCase));
|
||||
break;
|
||||
}
|
||||
if (visibleID > -1)
|
||||
@@ -1091,22 +1224,17 @@ namespace Vocaluxe.Screens
|
||||
else if (secondSort && CSongs.IsInCategory)
|
||||
{
|
||||
ReadOnlyCollection<CSong> songs = CSongs.VisibleSongs;
|
||||
int ct = songs.Count;
|
||||
int visibleID = -1;
|
||||
switch (CConfig.Config.Game.SongSorting)
|
||||
{
|
||||
case ESongSorting.TR_CONFIG_FOLDER:
|
||||
case ESongSorting.TR_CONFIG_TITLE_LETTER:
|
||||
if (curSelected >= 0 && curSelected < ct - 1 && songs[curSelected].Artist.StartsWith(letter.ToString(), StringComparison.OrdinalIgnoreCase))
|
||||
start = curSelected + 1;
|
||||
visibleID = _FindIndex(songs, start, element => element.Artist.StartsWith(letter.ToString(), StringComparison.OrdinalIgnoreCase));
|
||||
visibleID = _FindIndex(songs, start, element => element.Artist.StartsWith(searchString, StringComparison.OrdinalIgnoreCase));
|
||||
break;
|
||||
|
||||
case ESongSorting.TR_CONFIG_ARTIST:
|
||||
case ESongSorting.TR_CONFIG_ARTIST_LETTER:
|
||||
if (curSelected >= 0 && curSelected < ct - 1 && songs[curSelected].Title.StartsWith(letter.ToString(), StringComparison.OrdinalIgnoreCase))
|
||||
start = curSelected + 1;
|
||||
visibleID = _FindIndex(songs, start, element => element.Title.StartsWith(letter.ToString(), StringComparison.OrdinalIgnoreCase));
|
||||
visibleID = _FindIndex(songs, start, element => element.Title.StartsWith(searchString, StringComparison.OrdinalIgnoreCase));
|
||||
break;
|
||||
}
|
||||
if (visibleID > -1)
|
||||
@@ -1115,13 +1243,14 @@ namespace Vocaluxe.Screens
|
||||
else if (!CSongs.IsInCategory)
|
||||
{
|
||||
ReadOnlyCollection<CCategory> categories = CSongs.Categories;
|
||||
int ct = categories.Count;
|
||||
if (curSelected >= 0 && curSelected < ct - 1 && categories[curSelected].Name.StartsWith(letter.ToString(), StringComparison.OrdinalIgnoreCase))
|
||||
start = curSelected + 1;
|
||||
int visibleID = _FindIndex(categories, start, element => element.Name.StartsWith(letter.ToString(), StringComparison.OrdinalIgnoreCase));
|
||||
int visibleID = _FindIndex(categories, start, element => element.Name.StartsWith(searchString, StringComparison.OrdinalIgnoreCase));
|
||||
if (visibleID > -1)
|
||||
_SongMenu.SetSelectedCategory(visibleID);
|
||||
}
|
||||
|
||||
// Stefan1200: Remember search string and current TickCount in class variables.
|
||||
_JumpTo_lastCharTime = Environment.TickCount;
|
||||
_JumpTo_lastSearchString = searchString;
|
||||
}
|
||||
|
||||
private void _ApplyNewSearchFilter(string newFilterString)
|
||||
@@ -1176,6 +1305,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;
|
||||
@@ -1232,6 +1362,7 @@ namespace Vocaluxe.Screens
|
||||
_SelectSlides[_SelectSlideOptionsPlaylistAdd].Visible = true;
|
||||
_Buttons[_ButtonOptionsSing].Visible = true;
|
||||
_Buttons[_ButtonOptionsPlaylist].Visible = true;
|
||||
_Buttons[_ButtonOptionsHighscore].Visible = true;
|
||||
_SelectElement(_Buttons[_ButtonOptionsSing]);
|
||||
_SetSelectSlidePlaylistToCurrentPlaylist();
|
||||
}
|
||||
@@ -1395,4 +1526,4 @@ namespace Vocaluxe.Screens
|
||||
}
|
||||
#endregion Playlist Actions
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
#region license
|
||||
#region license
|
||||
// This file is part of Vocaluxe.
|
||||
//
|
||||
// Vocaluxe is free software: you can redistribute it and/or modify
|
||||
@@ -101,6 +101,7 @@ namespace VocaluxeLib
|
||||
|
||||
switch (aspect)
|
||||
{
|
||||
case EAspect.Automatic:
|
||||
case EAspect.Crop:
|
||||
if (boundsAspectRatio >= aspectRatio)
|
||||
{
|
||||
@@ -138,7 +139,12 @@ namespace VocaluxeLib
|
||||
}
|
||||
break;
|
||||
case EAspect.LetterBox:
|
||||
if (boundsAspectRatio <= aspectRatio)
|
||||
if (boundsAspectRatio == aspectRatio) // Pillarbox
|
||||
{
|
||||
scaledWidth = bounds.W * 0.77f;
|
||||
scaledHeight = bounds.W / aspectRatio;
|
||||
}
|
||||
else if (boundsAspectRatio < aspectRatio)
|
||||
{
|
||||
scaledWidth = bounds.W;
|
||||
scaledHeight = bounds.W / aspectRatio;
|
||||
@@ -306,4 +312,4 @@ namespace VocaluxeLib
|
||||
return bmp;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -64,6 +64,7 @@ namespace VocaluxeLib
|
||||
#region Fonts
|
||||
public enum EAspect
|
||||
{
|
||||
Automatic,
|
||||
Crop,
|
||||
LetterBox,
|
||||
Stretch,
|
||||
@@ -436,4 +437,4 @@ namespace VocaluxeLib
|
||||
TR_USERROLE_PROFILEEDITOR = 32
|
||||
// ReSharper restore InconsistentNaming
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -344,19 +344,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:
|
||||
@@ -511,7 +545,9 @@ namespace VocaluxeLib.Menu.SongMenu
|
||||
}
|
||||
_TextBG.Draw();
|
||||
|
||||
CTextureRef vidtex = CBase.BackgroundMusic.IsPlayingPreview() ? CBase.BackgroundMusic.GetVideoTexture() : null;
|
||||
CTextureRef vidtex = null;
|
||||
if (CBase.Config.GetVideoPreview() == EOffOn.TR_CONFIG_ON)
|
||||
vidtex = (CBase.BackgroundMusic.IsPlayingPreview() ? CBase.BackgroundMusic.GetVideoTexture() : null);
|
||||
|
||||
if (vidtex != null)
|
||||
{
|
||||
@@ -592,13 +628,28 @@ namespace VocaluxeLib.Menu.SongMenu
|
||||
|
||||
private void _UpdateList(bool force = false)
|
||||
{
|
||||
bool isInCategory = CBase.Songs.IsInCategory();
|
||||
int itemCount = isInCategory ? CBase.Songs.GetNumSongsVisible() : CBase.Songs.GetNumCategories();
|
||||
int halfListLength = _ListLength / 2;
|
||||
int offset;
|
||||
|
||||
if (_SelectionNr < _Offset && _SelectionNr >= 0)
|
||||
offset = _SelectionNr;
|
||||
{
|
||||
if (_SelectionNr - halfListLength >= 0)
|
||||
offset = _SelectionNr - halfListLength;
|
||||
else
|
||||
offset = 0;
|
||||
}
|
||||
else if (_SelectionNr >= _Offset + _ListLength)
|
||||
offset = _SelectionNr - _ListLength + 1;
|
||||
{
|
||||
if (_SelectionNr + halfListLength > itemCount)
|
||||
offset = itemCount - _ListLength;
|
||||
else
|
||||
offset = _SelectionNr - halfListLength;
|
||||
}
|
||||
else
|
||||
offset = _Offset;
|
||||
|
||||
_UpdateList(offset, force);
|
||||
}
|
||||
|
||||
@@ -653,4 +704,4 @@ namespace VocaluxeLib.Menu.SongMenu
|
||||
base.LoadSkin();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -335,19 +335,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:
|
||||
@@ -485,7 +521,9 @@ namespace VocaluxeLib.Menu.SongMenu
|
||||
|
||||
_TextBG.Draw();
|
||||
|
||||
CTextureRef vidtex = CBase.BackgroundMusic.IsPlayingPreview() ? CBase.BackgroundMusic.GetVideoTexture() : null;
|
||||
CTextureRef vidtex = null;
|
||||
if (CBase.Config.GetVideoPreview() == EOffOn.TR_CONFIG_ON)
|
||||
vidtex = (CBase.BackgroundMusic.IsPlayingPreview() ? CBase.BackgroundMusic.GetVideoTexture() : null);
|
||||
|
||||
if (vidtex != null)
|
||||
{
|
||||
@@ -608,4 +646,4 @@ namespace VocaluxeLib.Menu.SongMenu
|
||||
Init();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -101,7 +101,7 @@ namespace VocaluxeLib.Songs
|
||||
public readonly List<string> BackgroundFileNames = new List<string>();
|
||||
public string VideoFileName = String.Empty;
|
||||
|
||||
public EAspect VideoAspect = EAspect.Crop;
|
||||
public EAspect VideoAspect = EAspect.Automatic;
|
||||
|
||||
public bool NotesLoaded { get; private set; }
|
||||
|
||||
@@ -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));
|
||||
@@ -518,4 +529,4 @@ namespace VocaluxeLib.Songs
|
||||
ShortEnd.Source = EDataSource.Calculated;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -110,6 +110,7 @@ namespace VocaluxeLib.Utils.Player
|
||||
|
||||
if (_Video != null || !SongHasVideo)
|
||||
return;
|
||||
|
||||
string videoFilePath = Path.Combine(_Song.Folder, _Song.VideoFileName);
|
||||
_Video = CBase.Video.Load(videoFilePath);
|
||||
if (_Video == null)
|
||||
@@ -175,4 +176,4 @@ namespace VocaluxeLib.Utils.Player
|
||||
_CloseVideo();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -135,7 +135,7 @@ deploy:
|
||||
release: $(APPVEYOR_REPO_TAG_NAME)
|
||||
description: $(APPVEYOR_REPO_COMMIT)
|
||||
auth_token:
|
||||
secure: JSlN/em0JdspVn8jwaQ4IjugY6OQi0au4Qq0rhctJmcfGMaEGnUAOmDFULI48REW
|
||||
secure: sGetWh2XUYs95VBT+QYNPtDW9Rh2/JBuxNNYXytpn7mMudUMcjSKDGErkCTum+ZE
|
||||
artifact: ReleaseZip
|
||||
prerelease: $(IS_BETA_RELEASE)
|
||||
on:
|
||||
@@ -147,7 +147,7 @@ deploy:
|
||||
release: Latest Nightly build
|
||||
description: $(APPVEYOR_REPO_COMMIT)
|
||||
auth_token:
|
||||
secure: JSlN/em0JdspVn8jwaQ4IjugY6OQi0au4Qq0rhctJmcfGMaEGnUAOmDFULI48REW
|
||||
secure: sGetWh2XUYs95VBT+QYNPtDW9Rh2/JBuxNNYXytpn7mMudUMcjSKDGErkCTum+ZE
|
||||
artifact: ReleaseZip
|
||||
prerelease: true
|
||||
on:
|
||||
|
||||
Reference in new issue
Block a user