Merge remote-tracking branch 'remotes/flokuep/medley' into medley

This commit is contained in:
Alexander Eckart committed 2012-06-24 21:17:00 +02:00
commit c203da4fc1
103 files changed
+11276 -1448

No files matched your search

+27 -5
View File
@@ -23,6 +23,7 @@
<TR_GAMEMODE_NORMAL>Normal</TR_GAMEMODE_NORMAL>
<TR_GAMEMODE_DUET>Duett</TR_GAMEMODE_DUET>
<TR_GAMEMODE_MEDLEY>Medley</TR_GAMEMODE_MEDLEY>
<TR_GAMEMODE_SHORTSONG>Kurz-Version</TR_GAMEMODE_SHORTSONG>
<!--General: Ratings-->
<TR_RATING_VOCAL_HERO>Vocal Hero</TR_RATING_VOCAL_HERO>
<TR_RATING_SUPERSTAR>Superstar</TR_RATING_SUPERSTAR>
@@ -88,6 +89,10 @@
<TR_CONFIG_OWN_MUSIC>Eigene Musik und Hintergrundmusik</TR_CONFIG_OWN_MUSIC>
<TR_CONFIG_NO_OWN_MUSIC>Keine eigene Musik</TR_CONFIG_NO_OWN_MUSIC>
<TR_CONFIG_ONLY_OWN_MUSIC>Nur eigene Musik</TR_CONFIG_ONLY_OWN_MUSIC>
<!--Config: FadePlayerInfo-->
<TR_CONFIG_FADEPLAYERINFO_ALL>Alle</TR_CONFIG_FADEPLAYERINFO_ALL>
<TR_CONFIG_FADEPLAYERINFO_INFO>Nur Namen und Avatar</TR_CONFIG_FADEPLAYERINFO_INFO>
<TR_CONFIG_FADEPLAYERINFO_OFF>Keine</TR_CONFIG_FADEPLAYERINFO_OFF>
<!--Screens-->
<!--ScreenLoad-->
<TR_SCREENLOAD_LOADING>Laden</TR_SCREENLOAD_LOADING>
@@ -101,13 +106,23 @@
<TR_SCREENMAIN_BUTTON_PROFILES>Profile</TR_SCREENMAIN_BUTTON_PROFILES>
<!--ScreenNames-->
<TR_SCREENNAMES_MENU>Spielerauswahl</TR_SCREENNAMES_MENU>
<TR_SCREENNAMES_BUTTON_1PLAYER>1 Spieler</TR_SCREENNAMES_BUTTON_1PLAYER>
<TR_SCREENNAMES_BUTTON_2PLAYER>2 Spieler</TR_SCREENNAMES_BUTTON_2PLAYER>
<TR_SCREENNAMES_BUTTON_3PLAYER>3 Spieler</TR_SCREENNAMES_BUTTON_3PLAYER>
<TR_SCREENNAMES_WARNING_SG>Warnung: Dem Spieler %v ist kein Mikrofon zugeordnet!</TR_SCREENNAMES_WARNING_SG>
<TR_SCREENNAMES_WARNING_PL>Warnung: Den Spielern %v sind keine Mikrofone zugeordnet!</TR_SCREENNAMES_WARNING_PL>
<TR_SCREENNAMES_PLAYER>Spieler</TR_SCREENNAMES_PLAYER>
<TR_SCREENNAMES_1PLAYER>1 Spieler</TR_SCREENNAMES_1PLAYER>
<TR_SCREENNAMES_2PLAYER>2 Spieler</TR_SCREENNAMES_2PLAYER>
<TR_SCREENNAMES_3PLAYER>3 Spieler</TR_SCREENNAMES_3PLAYER>
<TR_SCREENNAMES_4PLAYER>4 Spieler</TR_SCREENNAMES_4PLAYER>
<TR_SCREENNAMES_5PLAYER>5 Spieler</TR_SCREENNAMES_5PLAYER>
<TR_SCREENNAMES_6PLAYER>6 Spieler</TR_SCREENNAMES_6PLAYER>
<TR_SCREENNAMES_WARNING_MICS_SG>Warnung: Dem Spieler %v ist kein Mikrofon zugeordnet!</TR_SCREENNAMES_WARNING_MICS_SG>
<TR_SCREENNAMES_WARNING_MICS_PL>Warnung: Den Spielern %v sind keine Mikrofone zugeordnet!</TR_SCREENNAMES_WARNING_MICS_PL>
<TR_SCREENNAMES_WARNING_PROFILES_SG>Warnung: Dem Spieler %v ist kein Profil zugeordnet!</TR_SCREENNAMES_WARNING_PROFILES_SG>
<TR_SCREENNAMES_WARNING_PROFILES_PL>Warnung: Den Spielern %v sind keine Profile zugeordnet!</TR_SCREENNAMES_WARNING_PROFILES_PL>
<!--ScreenSong-->
<TR_SCREENSONG_MENU>Songauswahl</TR_SCREENSONG_MENU>
<TR_SCREENSONG_BUTTON_SING>Lied singen</TR_SCREENSONG_BUTTON_SING>
<TR_SCREENSONG_BUTTON_PLAYLIST>Zur Playlist hinzufügen</TR_SCREENSONG_BUTTON_PLAYLIST>
<TR_SCREENSONG_BUTTON_CANCEL>Schließen</TR_SCREENSONG_BUTTON_CANCEL>
<TR_SCREENSONG_SONGOPTIONS>Lied-Optionen</TR_SCREENSONG_SONGOPTIONS>
<TR_SCREENSONG_SEARCH>Suche:</TR_SCREENSONG_SEARCH>
<TR_SCREENSONG_NOLANGUAGE>Ohne Sprache</TR_SCREENSONG_NOLANGUAGE>
<TR_SCREENSONG_NOYEAR>Ohne Jahr</TR_SCREENSONG_NOYEAR>
@@ -142,6 +157,7 @@
<TR_SCRENNO_BUTTON_SOUND>Sound</TR_SCRENNO_BUTTON_SOUND>
<TR_SCREENO_BUTTON_RECORD>Aufnahme</TR_SCREENO_BUTTON_RECORD>
<TR_SCREENO_BUTTON_VIDEO>Video</TR_SCREENO_BUTTON_VIDEO>
<TR_SCREENO_BUTTON_LYRICS>Songtext</TR_SCREENO_BUTTON_LYRICS>
<TR_SCREENO_BUTTON_THEME>Design</TR_SCREENO_BUTTON_THEME>
<!--ScreenOptionsGame-->
<TR_SCREENOGAME_OPTIONS>Spieleinstellungen</TR_SCREENOGAME_OPTIONS>
@@ -174,11 +190,17 @@
<TR_SCREENOTHEME_NOTELINES>Noten-Linien anzeigen</TR_SCREENOTHEME_NOTELINES>
<TR_SCREENOTHEME_TONEHELPER>Ton-Helfer anzeigen</TR_SCREENOTHEME_TONEHELPER>
<TR_SCREENOTHEME_TIMERLOOK>Aussehen des Timers</TR_SCREENOTHEME_TIMERLOOK>
<TR_SCREENOTHEME_FADEINFO>Spieler-Infos ein/ausblenden</TR_SCREENOTHEME_FADEINFO>
<TR_SCREENOTHEME_COVERLOADING>Cover Ladeverhalten</TR_SCREENOTHEME_COVERLOADING>
<!--ScreenOptionsLyrics-->
<TR_SCREENOLYRICS_OPTIONS>Songtexteinstellungen</TR_SCREENOLYRICS_OPTIONS>
<TR_SCREENOLYRICS_STYLE>Stil</TR_SCREENOLYRICS_STYLE>
<TR_SCREENOLYRICS_ONTOP>Oben anzeigen</TR_SCREENOLYRICS_ONTOP>
<!--ScreenOptionsVideo-->
<TR_SCREENOVIDEO_OPTIONS>Videoeinstellungen</TR_SCREENOVIDEO_OPTIONS>
<TR_SCREENOVIDEO_VIDEOBACKGROUNDS>Video-Hintergründe</TR_SCREENOVIDEO_VIDEOBACKGROUNDS>
<TR_SCREENOVIDEO_VIDEOPREVIEW>Video-Vorschau</TR_SCREENOVIDEO_VIDEOPREVIEW>
<TR_SCREENOVIDEO_VIDEOINSONGS>Videos während des Singens</TR_SCREENOVIDEO_VIDEOINSONGS>
<TR_SCREENO_VIDEO_VIDEOSTOBACKGROUND>Videos der Hintergrundmusik</TR_SCREENO_VIDEO_VIDEOSTOBACKGROUND>
</Texts>
</root>
+27 -5
View File
@@ -23,6 +23,7 @@
<TR_GAMEMODE_NORMAL>Normal</TR_GAMEMODE_NORMAL>
<TR_GAMEMODE_DUET>Duet</TR_GAMEMODE_DUET>
<TR_GAMEMODE_MEDLEY>Medley</TR_GAMEMODE_MEDLEY>
<TR_GAMEMODE_SHORTSONG>Short version</TR_GAMEMODE_SHORTSONG>
<!--General: Ratings-->
<TR_RATING_VOCAL_HERO>Vocal Hero</TR_RATING_VOCAL_HERO>
<TR_RATING_SUPERSTAR>Superstar</TR_RATING_SUPERSTAR>
@@ -88,6 +89,10 @@
<TR_CONFIG_OWN_MUSIC>Own Music and Background Music</TR_CONFIG_OWN_MUSIC>
<TR_CONFIG_NO_OWN_MUSIC>No own Music</TR_CONFIG_NO_OWN_MUSIC>
<TR_CONFIG_ONLY_OWN_MUSIC>Only own Music</TR_CONFIG_ONLY_OWN_MUSIC>
<!--Config: FadePlayerInfo-->
<TR_CONFIG_FADEPLAYERINFO_ALL>All</TR_CONFIG_FADEPLAYERINFO_ALL>
<TR_CONFIG_FADEPLAYERINFO_INFO>Only names and avatars</TR_CONFIG_FADEPLAYERINFO_INFO>
<TR_CONFIG_FADEPLAYERINFO_OFF>Nothing</TR_CONFIG_FADEPLAYERINFO_OFF>
<!--Screens-->
<!--ScreenLoad-->
<TR_SCREENLOAD_LOADING>Loading</TR_SCREENLOAD_LOADING>
@@ -101,13 +106,23 @@
<TR_SCREENMAIN_BUTTON_PROFILES>Profiles</TR_SCREENMAIN_BUTTON_PROFILES>
<!--ScreenNames-->
<TR_SCREENNAMES_MENU>Player Selection</TR_SCREENNAMES_MENU>
<TR_SCREENNAMES_BUTTON_1PLAYER>1 Player</TR_SCREENNAMES_BUTTON_1PLAYER>
<TR_SCREENNAMES_BUTTON_2PLAYER>2 Player</TR_SCREENNAMES_BUTTON_2PLAYER>
<TR_SCREENNAMES_BUTTON_3PLAYER>3 Player</TR_SCREENNAMES_BUTTON_3PLAYER>
<TR_SCREENNAMES_WARNING_SG>Warning: There is no mic assigned to player %v!</TR_SCREENNAMES_WARNING_SG>
<TR_SCREENNAMES_WARNING_PL>Warning: There are no mics assigned to players %v!</TR_SCREENNAMES_WARNING_PL>
<TR_SCREENNAMES_PLAYER>Player</TR_SCREENNAMES_PLAYER>
<TR_SCREENNAMES_1PLAYER>1 Player</TR_SCREENNAMES_1PLAYER>
<TR_SCREENNAMES_2PLAYER>2 Player</TR_SCREENNAMES_2PLAYER>
<TR_SCREENNAMES_3PLAYER>3 Player</TR_SCREENNAMES_3PLAYER>
<TR_SCREENNAMES_4PLAYER>4 Player</TR_SCREENNAMES_4PLAYER>
<TR_SCREENNAMES_5PLAYER>5 Player</TR_SCREENNAMES_5PLAYER>
<TR_SCREENNAMES_6PLAYER>6 Player</TR_SCREENNAMES_6PLAYER>
<TR_SCREENNAMES_WARNING_MICS_SG>Warning: There is no mic assigned to player %v!</TR_SCREENNAMES_WARNING_MICS_SG>
<TR_SCREENNAMES_WARNING_MICS_PL>Warning: There are no mics assigned to players %v!</TR_SCREENNAMES_WARNING_MICS_PL>
<TR_SCREENNAMES_WARNING_PROFILES_SG>Warning: There is no profile assigned to player %v!</TR_SCREENNAMES_WARNING_PROFILES_SG>
<TR_SCREENNAMES_WARNING_PROFILES_PL>Warning: There are no profiles assigned to players %v!</TR_SCREENNAMES_WARNING_PROFILES_PL>
<!--ScreenSong-->
<TR_SCREENSONG_MENU>Song Selection</TR_SCREENSONG_MENU>
<TR_SCREENSONG_BUTTON_SING>Sing</TR_SCREENSONG_BUTTON_SING>
<TR_SCREENSONG_BUTTON_PLAYLIST>Add to playlist</TR_SCREENSONG_BUTTON_PLAYLIST>
<TR_SCREENSONG_BUTTON_CANCEL>Close</TR_SCREENSONG_BUTTON_CANCEL>
<TR_SCREENSONG_SONGOPTIONS>Song Options</TR_SCREENSONG_SONGOPTIONS>
<TR_SCREENSONG_SEARCH>Search:</TR_SCREENSONG_SEARCH>
<TR_SCREENSONG_NOLANGUAGE>No Language</TR_SCREENSONG_NOLANGUAGE>
<TR_SCREENSONG_NOYEAR>No Year</TR_SCREENSONG_NOYEAR>
@@ -142,6 +157,7 @@
<TR_SCRENNO_BUTTON_SOUND>Sound</TR_SCRENNO_BUTTON_SOUND>
<TR_SCREENO_BUTTON_RECORD>Record</TR_SCREENO_BUTTON_RECORD>
<TR_SCREENO_BUTTON_VIDEO>Video</TR_SCREENO_BUTTON_VIDEO>
<TR_SCREENO_BUTTON_LYRICS>Lyrics</TR_SCREENO_BUTTON_LYRICS>
<TR_SCREENO_BUTTON_THEME>Theme</TR_SCREENO_BUTTON_THEME>
<!--ScreenOptionsGame-->
<TR_SCREENOGAME_OPTIONS>Game Options</TR_SCREENOGAME_OPTIONS>
@@ -174,11 +190,17 @@
<TR_SCREENOTHEME_NOTELINES>Show Note-Lines</TR_SCREENOTHEME_NOTELINES>
<TR_SCREENOTHEME_TONEHELPER>Show Tone-Helper</TR_SCREENOTHEME_TONEHELPER>
<TR_SCREENOTHEME_TIMERLOOK>Timer-Look</TR_SCREENOTHEME_TIMERLOOK>
<TR_SCREENOTHEME_FADEINFO>Fade player-info</TR_SCREENOTHEME_FADEINFO>
<TR_SCREENOTHEME_COVERLOADING>Cover Loading Behavior</TR_SCREENOTHEME_COVERLOADING>
<!--ScreenOptionsLyrics-->
<TR_SCREENOLYRICS_OPTIONS>Lyrics Options</TR_SCREENOLYRICS_OPTIONS>
<TR_SCREENOLYRICS_STYLE>Style</TR_SCREENOLYRICS_STYLE>
<TR_SCREENOLYRICS_ONTOP>Lyrics on top</TR_SCREENOLYRICS_ONTOP>
<!--ScreenOptionsVideo-->
<TR_SCREENOVIDEO_OPTIONS>Video Options</TR_SCREENOVIDEO_OPTIONS>
<TR_SCREENOVIDEO_VIDEOBACKGROUNDS>Video Backgrounds</TR_SCREENOVIDEO_VIDEOBACKGROUNDS>
<TR_SCREENOVIDEO_VIDEOPREVIEW>Video Preview</TR_SCREENOVIDEO_VIDEOPREVIEW>
<TR_SCREENOVIDEO_VIDEOINSONGS>Videos while singing</TR_SCREENOVIDEO_VIDEOINSONGS>
<TR_SCREENO_VIDEO_VIDEOSTOBACKGROUND>Display current backgroundmusic video</TR_SCREENO_VIDEO_VIDEOSTOBACKGROUND>
</Texts>
</root>
+12 -5
View File
@@ -101,11 +101,17 @@
<TR_SCREENMAIN_BUTTON_PROFILES>Profils</TR_SCREENMAIN_BUTTON_PROFILES>
<!--ScreenNames-->
<TR_SCREENNAMES_MENU>Sélection des joueurs</TR_SCREENNAMES_MENU>
<TR_SCREENNAMES_BUTTON_1PLAYER>1 joueur</TR_SCREENNAMES_BUTTON_1PLAYER>
<TR_SCREENNAMES_BUTTON_2PLAYER>2 joueurs</TR_SCREENNAMES_BUTTON_2PLAYER>
<TR_SCREENNAMES_BUTTON_3PLAYER>3 joueurs</TR_SCREENNAMES_BUTTON_3PLAYER>
<TR_SCREENNAMES_WARNING_SG>Attention: Aucun micro n'est assigné au joueur %v!</TR_SCREENNAMES_WARNING_SG>
<TR_SCREENNAMES_WARNING_PL>Attention: Aucun micro n'est assigné aux joueurs %v!</TR_SCREENNAMES_WARNING_PL>
<TR_SCREENNAMES_PLAYER>Joueur</TR_SCREENNAMES_PLAYER>
<TR_SCREENNAMES_1PLAYER>1 joueur</TR_SCREENNAMES_1PLAYER>
<TR_SCREENNAMES_2PLAYER>2 joueurs</TR_SCREENNAMES_2PLAYER>
<TR_SCREENNAMES_3PLAYER>3 joueurs</TR_SCREENNAMES_3PLAYER>
<TR_SCREENNAMES_4PLAYER>4 joueurs</TR_SCREENNAMES_4PLAYER>
<TR_SCREENNAMES_5PLAYER>5 joueurs</TR_SCREENNAMES_5PLAYER>
<TR_SCREENNAMES_6PLAYER>6 joueurs</TR_SCREENNAMES_6PLAYER>
<TR_SCREENNAMES_WARNING_MICS_SG>Attention: Aucun micro n'est assigné au joueur %v!</TR_SCREENNAMES_WARNING_MICS_SG>
<TR_SCREENNAMES_WARNING_MICS_PL>Attention: Aucun micro n'est assigné aux joueurs %v!</TR_SCREENNAMES_WARNING_MICS_PL>
<TR_SCREENNAMES_WARNING_PROFILES_SG>Attention: Aucun profil n'est assigné au joueur %v!</TR_SCREENNAMES_WARNING_PROFILES_SG>
<TR_SCREENNAMES_WARNING_PROFILES_PL>Attention: Aucun profils n'est assigné aux joueurs %v!</TR_SCREENNAMES_WARNING_PROFILES_PL>
<!--ScreenSong-->
<TR_SCREENSONG_MENU>Choix de la chanson</TR_SCREENSONG_MENU>
<TR_SCREENSONG_SEARCH>Rechercher:</TR_SCREENSONG_SEARCH>
@@ -180,5 +186,6 @@
<TR_SCREENOVIDEO_VIDEOBACKGROUNDS>Vidéo en arrière plan</TR_SCREENOVIDEO_VIDEOBACKGROUNDS>
<TR_SCREENOVIDEO_VIDEOPREVIEW>Prévisualisation des Vidéos</TR_SCREENOVIDEO_VIDEOPREVIEW>
<TR_SCREENOVIDEO_VIDEOINSONGS>Vidéos pendant que l'on chante</TR_SCREENOVIDEO_VIDEOINSONGS>
<TR_SCREENO_VIDEO_VIDEOSTOBACKGROUND>Afficher la vidéo de la musique de fond</TR_SCREENO_VIDEO_VIDEOSTOBACKGROUND>
</Texts>
</root>
+12 -5
View File
@@ -101,11 +101,17 @@
<TR_SCREENMAIN_BUTTON_PROFILES>Perfiles</TR_SCREENMAIN_BUTTON_PROFILES>
<!--ScreenNames-->
<TR_SCREENNAMES_MENU>Selección de Jugadores</TR_SCREENNAMES_MENU>
<TR_SCREENNAMES_BUTTON_1PLAYER>Jugador 1</TR_SCREENNAMES_BUTTON_1PLAYER>
<TR_SCREENNAMES_BUTTON_2PLAYER>Jugador 2</TR_SCREENNAMES_BUTTON_2PLAYER>
<TR_SCREENNAMES_BUTTON_3PLAYER>Jugador 3</TR_SCREENNAMES_BUTTON_3PLAYER>
<TR_SCREENNAMES_WARNING_SG>Advertencia: ¡No hay micrófonos asignados al jugador %v!</TR_SCREENNAMES_WARNING_SG>
<TR_SCREENNAMES_WARNING_PL>Advertencia: ¡No hay micrófonos asignados a los jugadores %v!</TR_SCREENNAMES_WARNING_PL>
<TR_SCREENNAMES_PLAYER>Jugador</TR_SCREENNAMES_PLAYER>
<TR_SCREENNAMES_1PLAYER>Jugador 1</TR_SCREENNAMES_1PLAYER>
<TR_SCREENNAMES_2PLAYER>Jugador 2</TR_SCREENNAMES_2PLAYER>
<TR_SCREENNAMES_3PLAYER>Jugador 3</TR_SCREENNAMES_3PLAYER>
<TR_SCREENNAMES_4PLAYER>Jugador 4</TR_SCREENNAMES_4PLAYER>
<TR_SCREENNAMES_5PLAYER>Jugador 5</TR_SCREENNAMES_5PLAYER>
<TR_SCREENNAMES_6PLAYER>Jugador 6</TR_SCREENNAMES_6PLAYER>
<TR_SCREENNAMES_WARNING_MICS_SG>Advertencia: ¡No hay micrófonos asignados al jugador %v!</TR_SCREENNAMES_WARNING_MICS_SG>
<TR_SCREENNAMES_WARNING_MICS_PL>Advertencia: ¡No hay micrófonos asignados a los jugadores %v!</TR_SCREENNAMES_WARNING_MICS_PL>
<TR_SCREENNAMES_WARNING_PROFILES_SG>Advertencia: ¡No hay perfil asignados al jugador %v!</TR_SCREENNAMES_WARNING_PROFILES_SG>
<TR_SCREENNAMES_WARNING_PROFILES_PL>Advertencia: ¡No hay perfiles asignados a los jugadores %v!</TR_SCREENNAMES_WARNING_PROFILES_PL>
<!--ScreenSong-->
<TR_SCREENSONG_MENU>Selección de Canciones</TR_SCREENSONG_MENU>
<TR_SCREENSONG_SEARCH>Buscar:</TR_SCREENSONG_SEARCH>
@@ -180,5 +186,6 @@
<TR_SCREENOVIDEO_VIDEOBACKGROUNDS>Videos de Fondo</TR_SCREENOVIDEO_VIDEOBACKGROUNDS>
<TR_SCREENOVIDEO_VIDEOPREVIEW>Previsualización del Video</TR_SCREENOVIDEO_VIDEOPREVIEW>
<TR_SCREENOVIDEO_VIDEOINSONGS>Videos al Cantar</TR_SCREENOVIDEO_VIDEOINSONGS>
<TR_SCREENO_VIDEO_VIDEOSTOBACKGROUND>TODO: Display current backgroundmusic video</TR_SCREENO_VIDEO_VIDEOSTOBACKGROUND>
</Texts>
</root>
+23
View File
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<Info>
<PlaylistName>Test</PlaylistName>
</Info>
<Songs>
<Song1>
<Artist>2raumwohnung</Artist>
<Title>36 grad</Title>
<GameMode>TR_GAMEMODE_NORMAL</GameMode>
</Song1>
<Song2>
<Artist>Aura Dione</Artist>
<Title>Geronimo</Title>
<GameMode>TR_GAMEMODE_SHORTSONG</GameMode>
</Song2>
<Song3>
<Artist>Die Toten Hosen</Artist>
<Title>Tage wie diese</Title>
<GameMode>TR_GAMEMODE_MEDLEY</GameMode>
</Song3>
</Songs>
</root>
+2 -5
View File
@@ -12,9 +12,6 @@
<Skin>Cursor</Skin>
<W>40,000</W>
<H>40,000</H>
<R>0,675</R>
<G>0,890</G>
<B>0,969</B>
<A>1,000</A>
<Color>StaticColor</Color>
</Cursor>
</root>
</root>
Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,442 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<PopupScreenPlayerControl>
<ScreenVersion>1</ScreenVersion>
<StaticBG>
<!--<Skin>: Texture name-->
<Skin>Menu</Skin>
<!--<X>, <Y>, <Z>, <W>, <H>: Static position, width and height-->
<X>49</X>
<Y>0</Y>
<Z>0,00</Z>
<W>1181</W>
<H>50</H>
<!--<Color>: Static color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>Visible</Color>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</StaticBG>
<StaticCover>
<!--<Skin>: Texture name-->
<Skin>CoverBackground</Skin>
<!--<X>, <Y>, <Z>, <W>, <H>: Static position, width and height-->
<X>50</X>
<Y>0</Y>
<Z>0,00</Z>
<W>50</W>
<H>50</H>
<!--<Color>: Static color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>Visible</Color>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</StaticCover>
<ButtonPrevious>
<!--<Skin>: Texture name-->
<Skin>PreviousIcon</Skin>
<!--<SkinSelected>: Texture name for selected button-->
<SkinSelected>PreviousIcon</SkinSelected>
<!--<X>, <Y>, <Z>, <W>, <H>: Button position, width and height-->
<X>125</X>
<Y>0</Y>
<Z>0,00</Z>
<W>50</W>
<H>50</H>
<!--<Color>: Button color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonColor</Color>
<!--<SColor>: Selected button color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonSColor</SColor>
<Text>
<!--<X>, <Y>: Text position-->
<X>75</X>
<Y>2</Y>
<!--<H>: Text height-->
<H>32</H>
<!--<MaxW>: Maximum text width (if exists)-->
<MaxW>142</MaxW>
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonTextColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonTextSColor</SColor>
<!--<Align>: Text align: Left, Center, Right-->
<Align>Center</Align>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Normal</Font>
<!--<Text>: Text or translation tag-->
<Text></Text>
</Text>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
<!--<SReflection> If exists:-->
<!-- <Space>: Reflection Space of selected button-->
<!-- <Height>: Reflection Height of selected button-->
</ButtonPrevious>
<ButtonPlay>
<!--<Skin>: Texture name-->
<Skin>PlayIcon</Skin>
<!--<SkinSelected>: Texture name for selected button-->
<SkinSelected>PlayIcon</SkinSelected>
<!--<X>, <Y>, <Z>, <W>, <H>: Button position, width and height-->
<X>200</X>
<Y>5</Y>
<Z>0,00</Z>
<W>40</W>
<H>40</H>
<!--<Color>: Button color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonColor</Color>
<!--<SColor>: Selected button color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonSColor</SColor>
<Text>
<!--<X>, <Y>: Text position-->
<X>75</X>
<Y>2</Y>
<!--<H>: Text height-->
<H>32</H>
<!--<MaxW>: Maximum text width (if exists)-->
<MaxW>142</MaxW>
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonTextColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonTextSColor</SColor>
<!--<Align>: Text align: Left, Center, Right-->
<Align>Center</Align>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Normal</Font>
<!--<Text>: Text or translation tag-->
<Text></Text>
</Text>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
<!--<SReflection> If exists:-->
<!-- <Space>: Reflection Space of selected button-->
<!-- <Height>: Reflection Height of selected button-->
</ButtonPlay>
<ButtonPause>
<!--<Skin>: Texture name-->
<Skin>PauseIcon</Skin>
<!--<SkinSelected>: Texture name for selected button-->
<SkinSelected>PauseIcon</SkinSelected>
<!--<X>, <Y>, <Z>, <W>, <H>: Button position, width and height-->
<X>200</X>
<Y>5</Y>
<Z>0,00</Z>
<W>40</W>
<H>40</H>
<!--<Color>: Button color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonColor</Color>
<!--<SColor>: Selected button color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonSColor</SColor>
<Text>
<!--<X>, <Y>: Text position-->
<X>75</X>
<Y>2</Y>
<!--<H>: Text height-->
<H>32</H>
<!--<MaxW>: Maximum text width (if exists)-->
<MaxW>142</MaxW>
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonTextColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonTextSColor</SColor>
<!--<Align>: Text align: Left, Center, Right-->
<Align>Center</Align>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Normal</Font>
<!--<Text>: Text or translation tag-->
<Text></Text>
</Text>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
<!--<SReflection> If exists:-->
<!-- <Space>: Reflection Space of selected button-->
<!-- <Height>: Reflection Height of selected button-->
</ButtonPause>
<ButtonNext>
<!--<Skin>: Texture name-->
<Skin>NextIcon</Skin>
<!--<SkinSelected>: Texture name for selected button-->
<SkinSelected>NextIcon</SkinSelected>
<!--<X>, <Y>, <Z>, <W>, <H>: Button position, width and height-->
<X>265</X>
<Y>0</Y>
<Z>0,00</Z>
<W>50</W>
<H>50</H>
<!--<Color>: Button color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonColor</Color>
<!--<SColor>: Selected button color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonSColor</SColor>
<Text>
<!--<X>, <Y>: Text position-->
<X>190</X>
<Y>25</Y>
<!--<H>: Text height-->
<H>32</H>
<!--<MaxW>: Maximum text width (if exists)-->
<MaxW>142</MaxW>
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonTextColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonTextSColor</SColor>
<!--<Align>: Text align: Left, Center, Right-->
<Align>Center</Align>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Normal</Font>
<!--<Text>: Text or translation tag-->
<Text></Text>
</Text>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
<!--<SReflection> If exists:-->
<!-- <Space>: Reflection Space of selected button-->
<!-- <Height>: Reflection Height of selected button-->
</ButtonNext>
<ButtonRepeat>
<!--<Skin>: Texture name-->
<Skin>RepeatIcon</Skin>
<!--<SkinSelected>: Texture name for selected button-->
<SkinSelected>RepeatIcon</SkinSelected>
<!--<X>, <Y>, <Z>, <W>, <H>: Button position, width and height-->
<X>330</X>
<Y>0</Y>
<Z>0,00</Z>
<W>50</W>
<H>50</H>
<!--<Color>: Button color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonColor</Color>
<!--<SColor>: Selected button color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonSColor</SColor>
<Text>
<!--<X>, <Y>: Text position-->
<X>405</X>
<Y>25</Y>
<!--<H>: Text height-->
<H>32</H>
<!--<MaxW>: Maximum text width (if exists)-->
<MaxW>142</MaxW>
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonTextColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonTextSColor</SColor>
<!--<Align>: Text align: Left, Center, Right-->
<Align>Center</Align>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Normal</Font>
<!--<Text>: Text or translation tag-->
<Text></Text>
</Text>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
<!--<SReflection> If exists:-->
<!-- <Space>: Reflection Space of selected button-->
<!-- <Height>: Reflection Height of selected button-->
</ButtonRepeat>
<ButtonShowVideo>
<!--<Skin>: Texture name-->
<Skin>VideoIcon</Skin>
<!--<SkinSelected>: Texture name for selected button-->
<SkinSelected>VideoIcon</SkinSelected>
<!--<X>, <Y>, <Z>, <W>, <H>: Button position, width and height-->
<X>405</X>
<Y>0</Y>
<Z>0,00</Z>
<W>50</W>
<H>50</H>
<!--<Color>: Button color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonColor</Color>
<!--<SColor>: Selected button color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonSColor</SColor>
<Text>
<!--<X>, <Y>: Text position-->
<X>315</X>
<Y>0</Y>
<!--<H>: Text height-->
<H>32</H>
<!--<MaxW>: Maximum text width (if exists)-->
<MaxW>142</MaxW>
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonTextColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonTextSColor</SColor>
<!--<Align>: Text align: Left, Center, Right-->
<Align>Center</Align>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Normal</Font>
<!--<Text>: Text or translation tag-->
<Text></Text>
</Text>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
<!--<SReflection> If exists:-->
<!-- <Space>: Reflection Space of selected button-->
<!-- <Height>: Reflection Height of selected button-->
</ButtonShowVideo>
<ButtonToBackgroundVideo>
<!--<Skin>: Texture name-->
<Skin>VideoIcon</Skin>
<!--<SkinSelected>: Texture name for selected button-->
<SkinSelected>VideoIcon</SkinSelected>
<!--<X>, <Y>, <Z>, <W>, <H>: Button position, width and height-->
<X>480</X>
<Y>0</Y>
<Z>0,00</Z>
<W>50</W>
<H>50</H>
<!--<Color>: Button color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonColor</Color>
<!--<SColor>: Selected button color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonSColor</SColor>
<Text>
<!--<X>, <Y>: Text position-->
<X>315</X>
<Y>0</Y>
<!--<H>: Text height-->
<H>32</H>
<!--<MaxW>: Maximum text width (if exists)-->
<MaxW>142</MaxW>
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonTextColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonTextSColor</SColor>
<!--<Align>: Text align: Left, Center, Right-->
<Align>Center</Align>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Normal</Font>
<!--<Text>: Text or translation tag-->
<Text></Text>
</Text>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
<!--<SReflection> If exists:-->
<!-- <Space>: Reflection Space of selected button-->
<!-- <Height>: Reflection Height of selected button-->
</ButtonToBackgroundVideo>
<ButtonSing>
<!--<Skin>: Texture name-->
<Skin>DuetIcon</Skin>
<!--<SkinSelected>: Texture name for selected button-->
<SkinSelected>DuetIcon</SkinSelected>
<!--<X>, <Y>, <Z>, <W>, <H>: Button position, width and height-->
<X>555</X>
<Y>0</Y>
<Z>0,00</Z>
<W>50</W>
<H>50</H>
<!--<Color>: Button color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonColor</Color>
<!--<SColor>: Selected button color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonSColor</SColor>
<Text>
<!--<X>, <Y>: Text position-->
<X>380</X>
<Y>0</Y>
<!--<H>: Text height-->
<H>32</H>
<!--<MaxW>: Maximum text width (if exists)-->
<MaxW>142</MaxW>
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonTextColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonTextSColor</SColor>
<!--<Align>: Text align: Left, Center, Right-->
<Align>Center</Align>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Normal</Font>
<!--<Text>: Text or translation tag-->
<Text></Text>
</Text>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
<!--<SReflection> If exists:-->
<!-- <Space>: Reflection Space of selected button-->
<!-- <Height>: Reflection Height of selected button-->
</ButtonSing>
<TextCurrentSong>
<!--<X>, <Y>: Text position-->
<X>630</X>
<Y>0</Y>
<!--<Z>: Text position-->
<Z>0,00</Z>
<!--<H>: Text height-->
<H>50</H>
<!--<MaxW>: Maximum text width (if exists)-->
<MaxW>650</MaxW>
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>StaticColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>TextSColor</SColor>
<!--<Align>: Text align: Left, Center, Right-->
<Align>Left</Align>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Text or translation tag-->
<Text />
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</TextCurrentSong>
</PopupScreenPlayerControl>
</root>
+463 -293
View File
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<ScreenNames>
<ScreenVersion>1</ScreenVersion>
<ScreenVersion>2</ScreenVersion>
<Background1>
<!--<Type>: Background type: None, Color, Texture, Video-->
<Type>Video</Type>
@@ -29,12 +29,204 @@
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</Static1>
<StaticWarning>
<StaticPlayer1>
<!--<Skin>: Texture name-->
<Skin>PlayerSelector</Skin>
<!--<X>, <Y>, <Z>, <W>, <H>: Static position, width and height-->
<X>15</X>
<Y>100</Y>
<Z>-2,00</Z>
<W>118</W>
<H>118</H>
<!--<Color>: Static color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>Player1</Color>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</StaticPlayer1>
<StaticPlayer2>
<!--<Skin>: Texture name-->
<Skin>PlayerSelector</Skin>
<!--<X>, <Y>, <Z>, <W>, <H>: Static position, width and height-->
<X>15</X>
<Y>255</Y>
<Z>-2,00</Z>
<W>118</W>
<H>118</H>
<!--<Color>: Static color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>Player2</Color>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</StaticPlayer2>
<StaticPlayer3>
<!--<Skin>: Texture name-->
<Skin>PlayerSelector</Skin>
<!--<X>, <Y>, <Z>, <W>, <H>: Static position, width and height-->
<X>15</X>
<Y>410</Y>
<Z>-2,00</Z>
<W>118</W>
<H>118</H>
<!--<Color>: Static color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>Player3</Color>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</StaticPlayer3>
<StaticPlayer4>
<!--<Skin>: Texture name-->
<Skin>PlayerSelector</Skin>
<!--<X>, <Y>, <Z>, <W>, <H>: Static position, width and height-->
<X>1147</X>
<Y>100</Y>
<Z>-2,00</Z>
<W>118</W>
<H>118</H>
<!--<Color>: Static color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>Player4</Color>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</StaticPlayer4>
<StaticPlayer5>
<!--<Skin>: Texture name-->
<Skin>PlayerSelector</Skin>
<!--<X>, <Y>, <Z>, <W>, <H>: Static position, width and height-->
<X>1147</X>
<Y>255</Y>
<Z>-2,00</Z>
<W>118</W>
<H>118</H>
<!--<Color>: Static color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>Player5</Color>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</StaticPlayer5>
<StaticPlayer6>
<!--<Skin>: Texture name-->
<Skin>PlayerSelector</Skin>
<!--<X>, <Y>, <Z>, <W>, <H>: Static position, width and height-->
<X>1147</X>
<Y>410</Y>
<Z>-2,00</Z>
<W>118</W>
<H>118</H>
<!--<Color>: Static color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>Player6</Color>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</StaticPlayer6>
<StaticPlayerAvatar1>
<!--<Skin>: Texture name-->
<Skin>Invisible</Skin>
<!--<X>, <Y>, <Z>, <W>, <H>: Static position, width and height-->
<X>20</X>
<Y>105</Y>
<Z>-3,00</Z>
<W>108</W>
<H>108</H>
<!--<Color>: Static color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>Visible</Color>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</StaticPlayerAvatar1>
<StaticPlayerAvatar2>
<!--<Skin>: Texture name-->
<Skin>Invisible</Skin>
<!--<X>, <Y>, <Z>, <W>, <H>: Static position, width and height-->
<X>20</X>
<Y>260</Y>
<Z>-3,00</Z>
<W>108</W>
<H>108</H>
<!--<Color>: Static color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>Visible</Color>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</StaticPlayerAvatar2>
<StaticPlayerAvatar3>
<!--<Skin>: Texture name-->
<Skin>Invisible</Skin>
<!--<X>, <Y>, <Z>, <W>, <H>: Static position, width and height-->
<X>20</X>
<Y>415</Y>
<Z>-3,00</Z>
<W>108</W>
<H>108</H>
<!--<Color>: Static color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>Visible</Color>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</StaticPlayerAvatar3>
<StaticPlayerAvatar4>
<!--<Skin>: Texture name-->
<Skin>Invisible</Skin>
<!--<X>, <Y>, <Z>, <W>, <H>: Static position, width and height-->
<X>1152</X>
<Y>105</Y>
<Z>-3,00</Z>
<W>108</W>
<H>108</H>
<!--<Color>: Static color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>Visible</Color>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</StaticPlayerAvatar4>
<StaticPlayerAvatar5>
<!--<Skin>: Texture name-->
<Skin>Invisible</Skin>
<!--<X>, <Y>, <Z>, <W>, <H>: Static position, width and height-->
<X>1152</X>
<Y>260</Y>
<Z>-3,00</Z>
<W>108</W>
<H>108</H>
<!--<Color>: Static color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>Visible</Color>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</StaticPlayerAvatar5>
<StaticPlayerAvatar6>
<!--<Skin>: Texture name-->
<Skin>Invisible</Skin>
<!--<X>, <Y>, <Z>, <W>, <H>: Static position, width and height-->
<X>1152</X>
<Y>415</Y>
<Z>-3,00</Z>
<W>108</W>
<H>108</H>
<!--<Color>: Static color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>Visible</Color>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</StaticPlayerAvatar6>
<StaticWarningMics>
<!--<Skin>: Texture name-->
<Skin>Invisible</Skin>
<!--<X>, <Y>, <Z>, <W>, <H>: Static position, width and height-->
<X>145</X>
<Y>660</Y>
<Y>663</Y>
<Z>0,00</Z>
<W>990</W>
<H>50</H>
@@ -44,7 +236,23 @@
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</StaticWarning>
</StaticWarningMics>
<StaticWarningProfiles>
<!--<Skin>: Texture name-->
<Skin>Invisible</Skin>
<!--<X>, <Y>, <Z>, <W>, <H>: Static position, width and height-->
<X>145</X>
<Y>715</Y>
<Z>0,00</Z>
<W>990</W>
<H>50</H>
<!--<Color>: Static color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>StaticWarningColor</Color>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</StaticWarningProfiles>
<Text1>
<!--<X>, <Y>: Text position-->
<X>640</X>
@@ -72,10 +280,10 @@
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</Text1>
<TextWarning>
<TextWarningMics>
<!--<X>, <Y>: Text position-->
<X>640</X>
<Y>612</Y>
<Y>615</Y>
<!--<Z>: Text position-->
<Z>0,00</Z>
<!--<H>: Text height-->
@@ -99,7 +307,197 @@
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</TextWarning>
</TextWarningMics>
<TextWarningProfiles>
<!--<X>, <Y>: Text position-->
<X>640</X>
<Y>650</Y>
<!--<Z>: Text position-->
<Z>0,00</Z>
<!--<H>: Text height-->
<H>32</H>
<!--<MaxW>: Maximum text width (if exists)-->
<MaxW>970</MaxW>
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>TextWarningColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>TextWarningColor</SColor>
<!--<Align>: Text align: Left, Center, Right-->
<Align>Center</Align>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Text or translation tag-->
<Text />
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</TextWarningProfiles>
<TextPlayer1>
<!--<X>, <Y>: Text position-->
<X>74</X>
<Y>219</Y>
<!--<Z>: Text position-->
<Z>0,00</Z>
<!--<H>: Text height-->
<H>20</H>
<!--<MaxW>: Maximum text width (if exists)-->
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>Player1</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>TextSColor</SColor>
<!--<Align>: Text align: Left, Center, Right-->
<Align>Center</Align>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Text or translation tag-->
<Text />
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</TextPlayer1>
<TextPlayer2>
<!--<X>, <Y>: Text position-->
<X>74</X>
<Y>374</Y>
<!--<Z>: Text position-->
<Z>0,00</Z>
<!--<H>: Text height-->
<H>20</H>
<!--<MaxW>: Maximum text width (if exists)-->
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>Player2</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>TextSColor</SColor>
<!--<Align>: Text align: Left, Center, Right-->
<Align>Center</Align>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Text or translation tag-->
<Text />
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</TextPlayer2>
<TextPlayer3>
<!--<X>, <Y>: Text position-->
<X>74</X>
<Y>529</Y>
<!--<Z>: Text position-->
<Z>0,00</Z>
<!--<H>: Text height-->
<H>20</H>
<!--<MaxW>: Maximum text width (if exists)-->
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>Player3</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>TextSColor</SColor>
<!--<Align>: Text align: Left, Center, Right-->
<Align>Center</Align>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Text or translation tag-->
<Text />
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</TextPlayer3>
<TextPlayer4>
<!--<X>, <Y>: Text position-->
<X>1206</X>
<Y>219</Y>
<!--<Z>: Text position-->
<Z>0,00</Z>
<!--<H>: Text height-->
<H>20</H>
<!--<MaxW>: Maximum text width (if exists)-->
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>Player4</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>TextSColor</SColor>
<!--<Align>: Text align: Left, Center, Right-->
<Align>Center</Align>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Text or translation tag-->
<Text />
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</TextPlayer4>
<TextPlayer5>
<!--<X>, <Y>: Text position-->
<X>1206</X>
<Y>374</Y>
<!--<Z>: Text position-->
<Z>0,00</Z>
<!--<H>: Text height-->
<H>20</H>
<!--<MaxW>: Maximum text width (if exists)-->
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>Player5</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>TextSColor</SColor>
<!--<Align>: Text align: Left, Center, Right-->
<Align>Center</Align>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Text or translation tag-->
<Text />
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</TextPlayer5>
<TextPlayer6>
<!--<X>, <Y>: Text position-->
<X>1206</X>
<Y>529</Y>
<!--<Z>: Text position-->
<Z>0,00</Z>
<!--<H>: Text height-->
<H>20</H>
<!--<MaxW>: Maximum text width (if exists)-->
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>Player6</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>TextSColor</SColor>
<!--<Align>: Text align: Left, Center, Right-->
<Align>Center</Align>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Text or translation tag-->
<Text />
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</TextPlayer6>
<ButtonBack>
<!--<Skin>: Texture name-->
<Skin>Button</Skin>
@@ -107,7 +505,7 @@
<SkinSelected>Button</SkinSelected>
<!--<X>, <Y>, <Z>, <W>, <H>: Button position, width and height-->
<X>145</X>
<Y>600</Y>
<Y>603</Y>
<Z>0,00</Z>
<W>150</W>
<H>50</H>
@@ -162,7 +560,7 @@
<SkinSelected>Button</SkinSelected>
<!--<X>, <Y>, <Z>, <W>, <H>: Button position, width and height-->
<X>985</X>
<Y>600</Y>
<Y>603</Y>
<Z>0,00</Z>
<W>150</W>
<H>50</H>
@@ -210,148 +608,7 @@
<Height>26</Height>
</SReflection>
</ButtonStart>
<Button1Player>
<!--<Skin>: Texture name-->
<Skin>Button</Skin>
<!--<SkinSelected>: Texture name for selected button-->
<SkinSelected>Button</SkinSelected>
<!--<X>, <Y>, <Z>, <W>, <H>: Button position, width and height-->
<X>145</X>
<Y>150</Y>
<Z>0,00</Z>
<W>150</W>
<H>50</H>
<!--<Color>: Button color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonColor</Color>
<!--<SColor>: Selected button color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonSColor</SColor>
<Text>
<!--<X>, <Y>: Text position-->
<X>75</X>
<Y>10</Y>
<!--<H>: Text height-->
<H>32</H>
<!--<MaxW>: Maximum text width (if exists)-->
<MaxW>142</MaxW>
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonTextSColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonTextSColor</SColor>
<!--<Align>: Text align: Left, Center, Right-->
<Align>Center</Align>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Text or translation tag-->
<Text>TR_SCREENNAMES_BUTTON_1PLAYER</Text>
</Text>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
<!--<SReflection> If exists:-->
<!-- <Space>: Reflection Space of selected button-->
<!-- <Height>: Reflection Height of selected button-->
</Button1Player>
<Button2Player>
<!--<Skin>: Texture name-->
<Skin>Button</Skin>
<!--<SkinSelected>: Texture name for selected button-->
<SkinSelected>Button</SkinSelected>
<!--<X>, <Y>, <Z>, <W>, <H>: Button position, width and height-->
<X>145</X>
<Y>315</Y>
<Z>0,00</Z>
<W>150</W>
<H>50</H>
<!--<Color>: Button color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonColor</Color>
<!--<SColor>: Selected button color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonSColor</SColor>
<Text>
<!--<X>, <Y>: Text position-->
<X>75</X>
<Y>10</Y>
<!--<H>: Text height-->
<H>32</H>
<!--<MaxW>: Maximum text width (if exists)-->
<MaxW>142</MaxW>
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonTextSColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonTextSColor</SColor>
<!--<Align>: Text align: Left, Center, Right-->
<Align>Center</Align>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Text or translation tag-->
<Text>TR_SCREENNAMES_BUTTON_2PLAYER</Text>
</Text>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
<!--<SReflection> If exists:-->
<!-- <Space>: Reflection Space of selected button-->
<!-- <Height>: Reflection Height of selected button-->
</Button2Player>
<Button3Player>
<!--<Skin>: Texture name-->
<Skin>Button</Skin>
<!--<SkinSelected>: Texture name for selected button-->
<SkinSelected>Button</SkinSelected>
<!--<X>, <Y>, <Z>, <W>, <H>: Button position, width and height-->
<X>145</X>
<Y>480</Y>
<Z>0,00</Z>
<W>150</W>
<H>50</H>
<!--<Color>: Button color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonColor</Color>
<!--<SColor>: Selected button color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonSColor</SColor>
<Text>
<!--<X>, <Y>: Text position-->
<X>75</X>
<Y>10</Y>
<!--<H>: Text height-->
<H>32</H>
<!--<MaxW>: Maximum text width (if exists)-->
<MaxW>142</MaxW>
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonTextSColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonTextSColor</SColor>
<!--<Align>: Text align: Left, Center, Right-->
<Align>Center</Align>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Text or translation tag-->
<Text>TR_SCREENNAMES_BUTTON_3PLAYER</Text>
</Text>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
<!--<SReflection> If exists:-->
<!-- <Space>: Reflection Space of selected button-->
<!-- <Height>: Reflection Height of selected button-->
</Button3Player>
<SelectSlidePlayerMic1>
<SelectSlidePlayerNumber>
<!--<Skin>: Texture name-->
<Skin>Invisible</Skin>
<!--<SkinArrowLeft>: Texture name of left arrow-->
@@ -367,32 +624,32 @@
<!--<SkinHighlighted>: Texture name for highlighted SelectSlide-->
<SkinHighlighted>SelectSlidePlayer</SkinHighlighted>
<!--<X>, <Y>, <Z>, <W>, <H>: SelectSlide position, width and height-->
<X>305</X>
<Y>100</Y>
<X>70</X>
<Y>548</Y>
<Z>0,00</Z>
<W>905</W>
<H>150</H>
<W>1140</W>
<H>45</H>
<!--<ArrowLeftX>, <ArrowLeftY>, <ArrowLeftZ>, <ArrowLeftW>, <ArrowLeftH>: Left arrow position, width and height-->
<ArrowLeftX>305</ArrowLeftX>
<ArrowLeftY>155</ArrowLeftY>
<ArrowLeftX>75</ArrowLeftX>
<ArrowLeftY>553</ArrowLeftY>
<ArrowLeftZ>0,00</ArrowLeftZ>
<ArrowLeftW>40</ArrowLeftW>
<ArrowLeftH>40</ArrowLeftH>
<!--<ArrowRightX>, <ArrowRightY>, <ArrowRightZ>, <ArrowRightW>, <ArrowRightH>: Right arrow position, width and height-->
<ArrowRightX>1180</ArrowRightX>
<ArrowRightY>155</ArrowRightY>
<ArrowRightX>1170</ArrowRightX>
<ArrowRightY>553</ArrowRightY>
<ArrowRightZ>0,00</ArrowRightZ>
<ArrowRightW>40</ArrowRightW>
<ArrowRightH>40</ArrowRightH>
<!--<Color>: SelectSlide color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>Player1Dim</Color>
<Color>SelectSlideColor</Color>
<!--<SColor>: Selected SelectSlide color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>Player1Dim</SColor>
<SColor>SelectSlideSColor</SColor>
<!--<HColor>: Highlighted SelectSlide color from ColorScheme (high priority)-->
<!--or <HR>, <HG>, <HB>, <HA> (lower priority)-->
<HColor>Player1</HColor>
<HColor>SelectSlideHColor</HColor>
<!--<ArrowColor>: Arrow color from ColorScheme (high priority)-->
<!--or <ArrowR>, <ArrowG>, <ArrowB>, <ArrowA> (lower priority)-->
<ArrowColor>ArrowColor</ArrowColor>
@@ -404,7 +661,7 @@
<TextColor>TextColor</TextColor>
<!--<TextSColor>: Selected text color from ColorScheme (high priority)-->
<!--or <TextSR>, <TextSG>, <TextSB>, <TextSA> (lower priority)-->
<TextSColor>Player1</TextSColor>
<TextSColor>TextSColor</TextSColor>
<!--<TextH>: Text height-->
<TextH>32,00</TextH>
<!--<TextMaxW>: Maximum text width (if exists)-->
@@ -415,136 +672,49 @@
<TextStyle>Bold</TextStyle>
<!--<NumVisible>: Number of visible elements in the slide-->
<NumVisible>6</NumVisible>
</SelectSlidePlayerMic1>
<SelectSlidePlayerMic2>
<!--<Skin>: Texture name-->
<Skin>Invisible</Skin>
<!--<SkinArrowLeft>: Texture name of left arrow-->
<SkinArrowLeft>SelectSlideArrowLeft</SkinArrowLeft>
<!--<SkinArrowRight>: Texture name of right arrow-->
<SkinArrowRight>SelectSlideArrowRight</SkinArrowRight>
<!--<SkinSelected>: Texture name for selected SelectSlide-->
<SkinSelected>SelectSlidePlayer</SkinSelected>
<!--<SkinArrowLeftSelected>: Texture name of selected left arrow-->
<SkinArrowLeftSelected>SelectSlideArrowLeft</SkinArrowLeftSelected>
<!--<SkinArrowRightSelected>: Texture name of selected right arrow-->
<SkinArrowRightSelected>SelectSlideArrowRight</SkinArrowRightSelected>
<!--<SkinHighlighted>: Texture name for highlighted SelectSlide-->
<SkinHighlighted>SelectSlidePlayer</SkinHighlighted>
<!--<X>, <Y>, <Z>, <W>, <H>: SelectSlide position, width and height-->
<X>305</X>
<Y>265</Y>
</SelectSlidePlayerNumber>
<NameSelection>
<!--<X>, <Y>, <Z>, <W>, <H>: NameSelection position, width and height-->
<X>172</X>
<Y>127</Y>
<Z>0,00</Z>
<W>905</W>
<H>150</H>
<!--<ArrowLeftX>, <ArrowLeftY>, <ArrowLeftZ>, <ArrowLeftW>, <ArrowLeftH>: Left arrow position, width and height-->
<ArrowLeftX>305</ArrowLeftX>
<ArrowLeftY>320</ArrowLeftY>
<ArrowLeftZ>0,00</ArrowLeftZ>
<ArrowLeftW>40</ArrowLeftW>
<ArrowLeftH>40</ArrowLeftH>
<!--<ArrowRightX>, <ArrowRightY>, <ArrowRightZ>, <ArrowRightW>, <ArrowRightH>: Right arrow position, width and height-->
<ArrowRightX>1180</ArrowRightX>
<ArrowRightY>320</ArrowRightY>
<ArrowRightZ>0,00</ArrowRightZ>
<ArrowRightW>40</ArrowRightW>
<ArrowRightH>40</ArrowRightH>
<!--<Color>: SelectSlide color from ColorScheme (high priority)-->
<W>945</W>
<H>393</H>
<!--<SkinEmptyTile>: Texture name-->
<SkinEmptyTile>CoverTile</SkinEmptyTile>
<!--<ColorEmptyTile>: Static color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>Player2Dim</Color>
<!--<SColor>: Selected SelectSlide color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>Player2Dim</SColor>
<!--<HColor>: Highlighted SelectSlide color from ColorScheme (high priority)-->
<!--or <HR>, <HG>, <HB>, <HA> (lower priority)-->
<HColor>Player2</HColor>
<!--<ArrowColor>: Arrow color from ColorScheme (high priority)-->
<!--or <ArrowR>, <ArrowG>, <ArrowB>, <ArrowA> (lower priority)-->
<ArrowColor>ArrowColor</ArrowColor>
<!--<ArrowSColor>: Selected arrow color from ColorScheme (high priority)-->
<!--or <ArrowSR>, <ArrowSG>, <ArrowSB>, <ArrowSA> (lower priority)-->
<ArrowSColor>ArrowSColor</ArrowSColor>
<!--<TextColor>: Text color from ColorScheme (high priority)-->
<!--or <TextR>, <TextG>, <TextB>, <TextA> (lower priority)-->
<TextColor>TextColor</TextColor>
<!--<TextSColor>: Selected text color from ColorScheme (high priority)-->
<!--or <TextSR>, <TextSG>, <TextSB>, <TextSA> (lower priority)-->
<TextSColor>Player2</TextSColor>
<!--<TextH>: Text height-->
<TextH>32,00</TextH>
<!--<TextMaxW>: Maximum text width (if exists)-->
<TextMaxW>186,00</TextMaxW>
<!--<TextFont>: Text font name-->
<TextFont>Outline</TextFont>
<!--<TextStyle>: Text style: Normal, Italic, Bold, BoldItalic-->
<TextStyle>Bold</TextStyle>
<!--<NumVisible>: Number of visible elements in the slide-->
<NumVisible>6</NumVisible>
</SelectSlidePlayerMic2>
<SelectSlidePlayerMic3>
<!--<Skin>: Texture name-->
<Skin>Invisible</Skin>
<!--<SkinArrowLeft>: Texture name of left arrow-->
<SkinArrowLeft>SelectSlideArrowLeft</SkinArrowLeft>
<!--<SkinArrowRight>: Texture name of right arrow-->
<SkinArrowRight>SelectSlideArrowRight</SkinArrowRight>
<!--<SkinSelected>: Texture name for selected SelectSlide-->
<SkinSelected>SelectSlidePlayer</SkinSelected>
<!--<SkinArrowLeftSelected>: Texture name of selected left arrow-->
<SkinArrowLeftSelected>SelectSlideArrowLeft</SkinArrowLeftSelected>
<!--<SkinArrowRightSelected>: Texture name of selected right arrow-->
<SkinArrowRightSelected>SelectSlideArrowRight</SkinArrowRightSelected>
<!--<SkinHighlighted>: Texture name for highlighted SelectSlide-->
<SkinHighlighted>SelectSlidePlayer</SkinHighlighted>
<!--<X>, <Y>, <Z>, <W>, <H>: SelectSlide position, width and height-->
<X>305</X>
<Y>430</Y>
<Z>0,00</Z>
<W>905</W>
<H>150</H>
<!--<ArrowLeftX>, <ArrowLeftY>, <ArrowLeftZ>, <ArrowLeftW>, <ArrowLeftH>: Left arrow position, width and height-->
<ArrowLeftX>305</ArrowLeftX>
<ArrowLeftY>485</ArrowLeftY>
<ArrowLeftZ>0,00</ArrowLeftZ>
<ArrowLeftW>40</ArrowLeftW>
<ArrowLeftH>40</ArrowLeftH>
<!--<ArrowRightX>, <ArrowRightY>, <ArrowRightZ>, <ArrowRightW>, <ArrowRightH>: Right arrow position, width and height-->
<ArrowRightX>1180</ArrowRightX>
<ArrowRightY>485</ArrowRightY>
<ArrowRightZ>0,00</ArrowRightZ>
<ArrowRightW>40</ArrowRightW>
<ArrowRightH>40</ArrowRightH>
<!--<Color>: SelectSlide color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>Player3Dim</Color>
<!--<SColor>: Selected SelectSlide color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>Player3Dim</SColor>
<!--<HColor>: Highlighted SelectSlide color from ColorScheme (high priority)-->
<!--or <HR>, <HG>, <HB>, <HA> (lower priority)-->
<HColor>Player3</HColor>
<!--<ArrowColor>: Arrow color from ColorScheme (high priority)-->
<!--or <ArrowR>, <ArrowG>, <ArrowB>, <ArrowA> (lower priority)-->
<ArrowColor>ArrowColor</ArrowColor>
<!--<ArrowSColor>: Selected arrow color from ColorScheme (high priority)-->
<!--or <ArrowSR>, <ArrowSG>, <ArrowSB>, <ArrowSA> (lower priority)-->
<ArrowSColor>ArrowSColor</ArrowSColor>
<!--<TextColor>: Text color from ColorScheme (high priority)-->
<!--or <TextR>, <TextG>, <TextB>, <TextA> (lower priority)-->
<TextColor>TextColor</TextColor>
<!--<TextSColor>: Selected text color from ColorScheme (high priority)-->
<!--or <TextSR>, <TextSG>, <TextSB>, <TextSA> (lower priority)-->
<TextSColor>Player3</TextSColor>
<!--<TextH>: Text height-->
<TextH>32,00</TextH>
<!--<TextMaxW>: Maximum text width (if exists)-->
<TextMaxW>186,00</TextMaxW>
<!--<TextFont>: Text font name-->
<TextFont>Outline</TextFont>
<!--<TextStyle>: Text style: Normal, Italic, Bold, BoldItalic-->
<TextStyle>Bold</TextStyle>
<!--<NumVisible>: Number of visible elements in the slide-->
<NumVisible>6</NumVisible>
</SelectSlidePlayerMic3>
<R>1,00</R>
<G>1,00</G>
<B>1,00</B>
<A>0,20</A>
<!--<SkinTileSelected>: Texture name-->
<SkinTileSelected>PlayerSelector</SkinTileSelected>
<!--<Tiles>: Options for tiles-->
<Tiles>
<!--<W>, <H>: Width and height of tile-->
<W>100</W>
<H>100</H>
<!--<NumW>, <NumH>: Number of tiles-->
<NumW>8</NumW>
<NumH>3</NumH>
<!--<SpaceW>, <SpaceH>: Space between tiles-->
<SpaceW>20,71</SpaceW>
<SpaceH>30,00</SpaceH>
<!--<Name>: Options for player-name-->
<Name>
<!--<Space>: Space between name and tile-->
<Space>2,0</Space>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Color>: Text color from ColorScheme (high priority)-->
<Color>TextColor</Color>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<H>: Text height-->
<H>20</H>
</Name>
</Tiles>
</NameSelection>
</ScreenNames>
</root>
</root>
@@ -62,7 +62,7 @@
<!--<SkinSelected>: Texture name for selected button-->
<SkinSelected>Button</SkinSelected>
<!--<X>, <Y>, <Z>, <W>, <H>: Button position, width and height-->
<X>145</X>
<X>54,7</X>
<Y>600</Y>
<Z>0,00</Z>
<W>150</W>
@@ -117,7 +117,7 @@
<!--<SkinSelected>: Texture name for selected button-->
<SkinSelected>Button</SkinSelected>
<!--<X>, <Y>, <Z>, <W>, <H>: Button position, width and height-->
<X>355</X>
<X>259,4</X>
<Y>600</Y>
<Z>0,00</Z>
<W>150</W>
@@ -172,7 +172,7 @@
<!--<SkinSelected>: Texture name for selected button-->
<SkinSelected>Button</SkinSelected>
<!--<X>, <Y>, <Z>, <W>, <H>: Button position, width and height-->
<X>565</X>
<X>464,1</X>
<Y>600</Y>
<Z>0,00</Z>
<W>150</W>
@@ -227,7 +227,7 @@
<!--<SkinSelected>: Texture name for selected button-->
<SkinSelected>Button</SkinSelected>
<!--<X>, <Y>, <Z>, <W>, <H>: Button position, width and height-->
<X>775</X>
<X>668,8</X>
<Y>600</Y>
<Z>0,00</Z>
<W>150</W>
@@ -276,13 +276,68 @@
<Height>26</Height>
</SReflection>
</ButtonOptionsVideo>
<ButtonOptionsLyrics>
<!--<Skin>: Texture name-->
<Skin>Button</Skin>
<!--<SkinSelected>: Texture name for selected button-->
<SkinSelected>Button</SkinSelected>
<!--<X>, <Y>, <Z>, <W>, <H>: Button position, width and height-->
<X>873,5</X>
<Y>600</Y>
<Z>0,00</Z>
<W>150</W>
<H>50</H>
<!--<Color>: Button color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonColor</Color>
<!--<SColor>: Selected button color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonSColor</SColor>
<Text>
<!--<X>, <Y>: Text position-->
<X>75</X>
<Y>10</Y>
<!--<H>: Text height-->
<H>32</H>
<!--<MaxW>: Maximum text width (if exists)-->
<MaxW>142</MaxW>
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonTextColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonTextSColor</SColor>
<!--<Align>: Text align: Left, Center, Right-->
<Align>Center</Align>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Text or translation tag-->
<Text>TR_SCREENO_BUTTON_LYRICS</Text>
</Text>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
<Reflection>
<Space>10</Space>
<Height>26</Height>
</Reflection>
<!--<SReflection> If exists:-->
<!-- <Space>: Reflection Space of selected button-->
<!-- <Height>: Reflection Height of selected button-->
<SReflection>
<Space>10</Space>
<Height>26</Height>
</SReflection>
</ButtonOptionsLyrics>
<ButtonOptionsTheme>
<!--<Skin>: Texture name-->
<Skin>Button</Skin>
<!--<SkinSelected>: Texture name for selected button-->
<SkinSelected>Button</SkinSelected>
<!--<X>, <Y>, <Z>, <W>, <H>: Button position, width and height-->
<X>985</X>
<X>1078,2</X>
<Y>600</Y>
<Z>0,00</Z>
<W>150</W>
@@ -332,4 +387,4 @@
</SReflection>
</ButtonOptionsTheme>
</ScreenOptions>
</root>
</root>
@@ -0,0 +1,299 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<ScreenOptionsLyrics>
<ScreenVersion>1</ScreenVersion>
<Background1>
<!--<Type>: Background type: None, Color, Texture, Video-->
<Type>Video</Type>
<!--<Video>: Background video name-->
<Video>BG_Video</Video>
<!--<Skin>: Background Texture name-->
<Skin>BG_Options</Skin>
<!--<Color>: Background color for type "Color" from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>BackgroundColor</Color>
</Background1>
<Static1>
<!--<Skin>: Texture name-->
<Skin>Menu</Skin>
<!--<X>, <Y>, <Z>, <W>, <H>: Static position, width and height-->
<X>40</X>
<Y>40</Y>
<Z>0,00</Z>
<W>1200</W>
<H>50</H>
<!--<Color>: Static color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>StaticColor</Color>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</Static1>
<Text1>
<!--<X>, <Y>: Text position-->
<X>640</X>
<Y>48</Y>
<!--<Z>: Text position-->
<Z>0,00</Z>
<!--<H>: Text height-->
<H>32</H>
<!--<MaxW>: Maximum text width (if exists)-->
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>StaticColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>TextSColor</SColor>
<!--<Align>: Text align: Left, Center, Right-->
<Align>Center</Align>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Text or translation tag-->
<Text>TR_SCREENOLYRICS_OPTIONS</Text>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</Text1>
<Text2>
<!--<X>, <Y>: Text position-->
<X>75</X>
<Y>105</Y>
<!--<Z>: Text position-->
<Z>0,00</Z>
<!--<H>: Text height-->
<H>32</H>
<!--<MaxW>: Maximum text width (if exists)-->
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>StaticColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>TextSColor</SColor>
<!--<Align>: Text align: Left, Center, Right-->
<Align>Left</Align>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Text or translation tag-->
<Text>TR_SCREENOLYRICS_STYLE</Text>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</Text2>
<Text3>
<!--<X>, <Y>: Text position-->
<X>75</X>
<Y>165</Y>
<!--<Z>: Text position-->
<Z>0,00</Z>
<!--<H>: Text height-->
<H>32</H>
<!--<MaxW>: Maximum text width (if exists)-->
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>StaticColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>TextSColor</SColor>
<!--<Align>: Text align: Left, Center, Right-->
<Align>Left</Align>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Text or translation tag-->
<Text>TR_SCREENOLYRICS_ONTOP</Text>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</Text3>
<ButtonExit>
<!--<Skin>: Texture name-->
<Skin>Button</Skin>
<!--<SkinSelected>: Texture name for selected button-->
<SkinSelected>Button</SkinSelected>
<!--<X>, <Y>, <Z>, <W>, <H>: Button position, width and height-->
<X>145</X>
<Y>600</Y>
<Z>0,00</Z>
<W>150</W>
<H>50</H>
<!--<Color>: Button color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonColor</Color>
<!--<SColor>: Selected button color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonSColor</SColor>
<Text>
<!--<X>, <Y>: Text position-->
<X>75</X>
<Y>10</Y>
<!--<H>: Text height-->
<H>32</H>
<!--<MaxW>: Maximum text width (if exists)-->
<MaxW>142</MaxW>
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonTextColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonTextSColor</SColor>
<!--<Align>: Text align: Left, Center, Right-->
<Align>Center</Align>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Text or translation tag-->
<Text>TR_BUTTON_BACK</Text>
</Text>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
<Reflection>
<Space>10</Space>
<Height>26</Height>
</Reflection>
<!--<SReflection> If exists:-->
<!-- <Space>: Reflection Space of selected button-->
<!-- <Height>: Reflection Height of selected button-->
<SReflection>
<Space>10</Space>
<Height>26</Height>
</SReflection>
</ButtonExit>
<SelectSlideLyricStyle>
<!--<Skin>: Texture name-->
<Skin>Invisible</Skin>
<!--<SkinArrowLeft>: Texture name of left arrow-->
<SkinArrowLeft>SelectSlideArrowLeft</SkinArrowLeft>
<!--<SkinArrowRight>: Texture name of right arrow-->
<SkinArrowRight>SelectSlideArrowRight</SkinArrowRight>
<!--<SkinSelected>: Texture name for selected SelectSlide-->
<SkinSelected>SelectSlide</SkinSelected>
<!--<SkinArrowLeftSelected>: Texture name of selected left arrow-->
<SkinArrowLeftSelected>SelectSlideArrowLeft</SkinArrowLeftSelected>
<!--<SkinArrowRightSelected>: Texture name of selected right arrow-->
<SkinArrowRightSelected>SelectSlideArrowRight</SkinArrowRightSelected>
<!--<SkinHighlighted>: Texture name for highlighted SelectSlide-->
<SkinHighlighted>SelectSlide</SkinHighlighted>
<!--<X>, <Y>, <Z>, <W>, <H>: SelectSlide position, width and height-->
<X>500</X>
<Y>100</Y>
<Z>0,00</Z>
<W>700</W>
<H>50</H>
<!--<ArrowLeftX>, <ArrowLeftY>, <ArrowLeftZ>, <ArrowLeftW>, <ArrowLeftH>: Left arrow position, width and height-->
<ArrowLeftX>505</ArrowLeftX>
<ArrowLeftY>105</ArrowLeftY>
<ArrowLeftZ>0,00</ArrowLeftZ>
<ArrowLeftW>40</ArrowLeftW>
<ArrowLeftH>40</ArrowLeftH>
<!--<ArrowRightX>, <ArrowRightY>, <ArrowRightZ>, <ArrowRightW>, <ArrowRightH>: Right arrow position, width and height-->
<ArrowRightX>1170</ArrowRightX>
<ArrowRightY>105</ArrowRightY>
<ArrowRightZ>0,00</ArrowRightZ>
<ArrowRightW>40</ArrowRightW>
<ArrowRightH>40</ArrowRightH>
<!--<Color>: SelectSlide color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>SelectSlideColor</Color>
<!--<SColor>: Selected SelectSlide color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>SelectSlideSColor</SColor>
<!--<HColor>: Highlighted SelectSlide color from ColorScheme (high priority)-->
<!--or <HR>, <HG>, <HB>, <HA> (lower priority)-->
<HColor>SelectSlideHColor</HColor>
<!--<ArrowColor>: Arrow color from ColorScheme (high priority)-->
<!--or <ArrowR>, <ArrowG>, <ArrowB>, <ArrowA> (lower priority)-->
<ArrowColor>ArrowColor</ArrowColor>
<!--<ArrowSColor>: Selected arrow color from ColorScheme (high priority)-->
<!--or <ArrowSR>, <ArrowSG>, <ArrowSB>, <ArrowSA> (lower priority)-->
<ArrowSColor>ArrowSColor</ArrowSColor>
<!--<TextColor>: Text color from ColorScheme (high priority)-->
<!--or <TextR>, <TextG>, <TextB>, <TextA> (lower priority)-->
<TextColor>TextColor</TextColor>
<!--<TextSColor>: Selected text color from ColorScheme (high priority)-->
<!--or <TextSR>, <TextSG>, <TextSB>, <TextSA> (lower priority)-->
<TextSColor>TextSColor</TextSColor>
<!--<TextH>: Text height-->
<TextH>32,00</TextH>
<!--<TextMaxW>: Maximum text width (if exists)-->
<TextMaxW>205,33</TextMaxW>
<!--<TextFont>: Text font name-->
<TextFont>Outline</TextFont>
<!--<TextStyle>: Text style: Normal, Italic, Bold, BoldItalic-->
<TextStyle>Bold</TextStyle>
<!--<NumVisible>: Number of visible elements in the slide-->
<NumVisible>4</NumVisible>
</SelectSlideLyricStyle>
<SelectSlideLyricsOnTop>
<!--<Skin>: Texture name-->
<Skin>Invisible</Skin>
<!--<SkinArrowLeft>: Texture name of left arrow-->
<SkinArrowLeft>SelectSlideArrowLeft</SkinArrowLeft>
<!--<SkinArrowRight>: Texture name of right arrow-->
<SkinArrowRight>SelectSlideArrowRight</SkinArrowRight>
<!--<SkinSelected>: Texture name for selected SelectSlide-->
<SkinSelected>SelectSlide</SkinSelected>
<!--<SkinArrowLeftSelected>: Texture name of selected left arrow-->
<SkinArrowLeftSelected>SelectSlideArrowLeft</SkinArrowLeftSelected>
<!--<SkinArrowRightSelected>: Texture name of selected right arrow-->
<SkinArrowRightSelected>SelectSlideArrowRight</SkinArrowRightSelected>
<!--<SkinHighlighted>: Texture name for highlighted SelectSlide-->
<SkinHighlighted>SelectSlide</SkinHighlighted>
<!--<X>, <Y>, <Z>, <W>, <H>: SelectSlide position, width and height-->
<X>500</X>
<Y>160</Y>
<Z>0,00</Z>
<W>700</W>
<H>50</H>
<!--<ArrowLeftX>, <ArrowLeftY>, <ArrowLeftZ>, <ArrowLeftW>, <ArrowLeftH>: Left arrow position, width and height-->
<ArrowLeftX>505</ArrowLeftX>
<ArrowLeftY>165</ArrowLeftY>
<ArrowLeftZ>0,00</ArrowLeftZ>
<ArrowLeftW>40</ArrowLeftW>
<ArrowLeftH>40</ArrowLeftH>
<!--<ArrowRightX>, <ArrowRightY>, <ArrowRightZ>, <ArrowRightW>, <ArrowRightH>: Right arrow position, width and height-->
<ArrowRightX>1170</ArrowRightX>
<ArrowRightY>165</ArrowRightY>
<ArrowRightZ>0,00</ArrowRightZ>
<ArrowRightW>40</ArrowRightW>
<ArrowRightH>40</ArrowRightH>
<!--<Color>: SelectSlide color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>SelectSlideColor</Color>
<!--<SColor>: Selected SelectSlide color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>SelectSlideSColor</SColor>
<!--<HColor>: Highlighted SelectSlide color from ColorScheme (high priority)-->
<!--or <HR>, <HG>, <HB>, <HA> (lower priority)-->
<HColor>SelectSlideHColor</HColor>
<!--<ArrowColor>: Arrow color from ColorScheme (high priority)-->
<!--or <ArrowR>, <ArrowG>, <ArrowB>, <ArrowA> (lower priority)-->
<ArrowColor>ArrowColor</ArrowColor>
<!--<ArrowSColor>: Selected arrow color from ColorScheme (high priority)-->
<!--or <ArrowSR>, <ArrowSG>, <ArrowSB>, <ArrowSA> (lower priority)-->
<ArrowSColor>ArrowSColor</ArrowSColor>
<!--<TextColor>: Text color from ColorScheme (high priority)-->
<!--or <TextR>, <TextG>, <TextB>, <TextA> (lower priority)-->
<TextColor>TextColor</TextColor>
<!--<TextSColor>: Selected text color from ColorScheme (high priority)-->
<!--or <TextSR>, <TextSG>, <TextSB>, <TextSA> (lower priority)-->
<TextSColor>TextSColor</TextSColor>
<!--<TextH>: Text height-->
<TextH>32,00</TextH>
<!--<TextMaxW>: Maximum text width (if exists)-->
<TextMaxW>205,33</TextMaxW>
<!--<TextFont>: Text font name-->
<TextFont>Outline</TextFont>
<!--<TextStyle>: Text style: Normal, Italic, Bold, BoldItalic-->
<TextStyle>Bold</TextStyle>
<!--<NumVisible>: Number of visible elements in the slide-->
<NumVisible>2</NumVisible>
</SelectSlideLyricsOnTop>
</ScreenOptionsLyrics>
</root>
@@ -704,7 +704,7 @@
<!--<TextStyle>: Text style: Normal, Italic, Bold, BoldItalic-->
<TextStyle>Bold</TextStyle>
<!--<NumVisible>: Number of visible elements in the slide-->
<NumVisible>4</NumVisible>
<NumVisible>7</NumVisible>
</SelectSlideRecordChannel1>
<SelectSlideRecordChannel2>
<!--<Skin>: Texture name-->
@@ -769,7 +769,7 @@
<!--<TextStyle>: Text style: Normal, Italic, Bold, BoldItalic-->
<TextStyle>Bold</TextStyle>
<!--<NumVisible>: Number of visible elements in the slide-->
<NumVisible>4</NumVisible>
<NumVisible>7</NumVisible>
</SelectSlideRecordChannel2>
<SelectSlideDelay>
<!--<Skin>: Texture name-->
@@ -40,16 +40,10 @@
<!--<MaxW>: Maximum text width (if exists)-->
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<R>0,68</R>
<G>0,89</G>
<B>0,97</B>
<A>1,00</A>
<Color>StaticColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SR>0,68</SR>
<SG>0,89</SG>
<SB>0,97</SB>
<SA>1,00</SA>
<SColor>TextSColor</SColor>
<!--<Align>: Text align: Left, Center, Right-->
<Align>Center</Align>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
@@ -394,4 +388,4 @@
<NumVisible>1</NumVisible>
</SelectSlideBackgroundMusicSource>
</ScreenOptionsSound>
</root>
</root>
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<ScreenOptionsTheme>
<ScreenVersion>2</ScreenVersion>
<ScreenVersion>3</ScreenVersion>
<Background1>
<!--<Type>: Background type: None, Color, Texture, Video-->
<Type>Video</Type>
@@ -141,6 +141,22 @@
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</Static8>
<Static9>
<!--<Skin>: Texture name-->
<Skin>Invisible</Skin>
<!--<X>, <Y>, <Z>, <W>, <H>: Static position, width and height-->
<X>50</X>
<Y>520</Y>
<Z>0,00</Z>
<W>460</W>
<H>50</H>
<!--<Color>: Static color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>StaticColor</Color>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</Static9>
<Text1>
<!--<X>, <Y>: Text position-->
<X>640</X>
@@ -352,11 +368,38 @@
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Text or translation tag-->
<Text>TR_SCREENOTHEME_COVERLOADING</Text>
<Text>TR_SCREENOTHEME_FADEINFO</Text>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</Text8>
<Text9>
<!--<X>, <Y>: Text position-->
<X>75</X>
<Y>525</Y>
<!--<Z>: Text position-->
<Z>0,00</Z>
<!--<H>: Text height-->
<H>32</H>
<!--<MaxW>: Maximum text width (if exists)-->
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>StaticColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>TextSColor</SColor>
<!--<Align>: Text align: Left, Center, Right-->
<Align>Left</Align>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Text or translation tag-->
<Text>TR_SCREENOTHEME_COVERLOADING</Text>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</Text9>
<ButtonExit>
<!--<Skin>: Texture name-->
<Skin>Button</Skin>
@@ -802,7 +845,7 @@
<!--<NumVisible>: Number of visible elements in the slide-->
<NumVisible>2</NumVisible>
</SelectSlideTimerLook>
<SelectSlideCoverLoading>
<SelectSlideFadeInfo>
<!--<Skin>: Texture name-->
<Skin>Invisible</Skin>
<!--<SkinArrowLeft>: Texture name of left arrow-->
@@ -865,7 +908,72 @@
<!--<TextStyle>: Text style: Normal, Italic, Bold, BoldItalic-->
<TextStyle>Bold</TextStyle>
<!--<NumVisible>: Number of visible elements in the slide-->
<NumVisible>2</NumVisible>
</SelectSlideFadeInfo>
<SelectSlideCoverLoading>
<!--<Skin>: Texture name-->
<Skin>Invisible</Skin>
<!--<SkinArrowLeft>: Texture name of left arrow-->
<SkinArrowLeft>SelectSlideArrowLeft</SkinArrowLeft>
<!--<SkinArrowRight>: Texture name of right arrow-->
<SkinArrowRight>SelectSlideArrowRight</SkinArrowRight>
<!--<SkinSelected>: Texture name for selected SelectSlide-->
<SkinSelected>SelectSlide</SkinSelected>
<!--<SkinArrowLeftSelected>: Texture name of selected left arrow-->
<SkinArrowLeftSelected>SelectSlideArrowLeft</SkinArrowLeftSelected>
<!--<SkinArrowRightSelected>: Texture name of selected right arrow-->
<SkinArrowRightSelected>SelectSlideArrowRight</SkinArrowRightSelected>
<!--<SkinHighlighted>: Texture name for highlighted SelectSlide-->
<SkinHighlighted>SelectSlide</SkinHighlighted>
<!--<X>, <Y>, <Z>, <W>, <H>: SelectSlide position, width and height-->
<X>500</X>
<Y>520</Y>
<Z>0,00</Z>
<W>700</W>
<H>50</H>
<!--<ArrowLeftX>, <ArrowLeftY>, <ArrowLeftZ>, <ArrowLeftW>, <ArrowLeftH>: Left arrow position, width and height-->
<ArrowLeftX>505</ArrowLeftX>
<ArrowLeftY>525</ArrowLeftY>
<ArrowLeftZ>0,00</ArrowLeftZ>
<ArrowLeftW>40</ArrowLeftW>
<ArrowLeftH>40</ArrowLeftH>
<!--<ArrowRightX>, <ArrowRightY>, <ArrowRightZ>, <ArrowRightW>, <ArrowRightH>: Right arrow position, width and height-->
<ArrowRightX>1170</ArrowRightX>
<ArrowRightY>525</ArrowRightY>
<ArrowRightZ>0,00</ArrowRightZ>
<ArrowRightW>40</ArrowRightW>
<ArrowRightH>40</ArrowRightH>
<!--<Color>: SelectSlide color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>SelectSlideColor</Color>
<!--<SColor>: Selected SelectSlide color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>SelectSlideSColor</SColor>
<!--<HColor>: Highlighted SelectSlide color from ColorScheme (high priority)-->
<!--or <HR>, <HG>, <HB>, <HA> (lower priority)-->
<HColor>SelectSlideHColor</HColor>
<!--<ArrowColor>: Arrow color from ColorScheme (high priority)-->
<!--or <ArrowR>, <ArrowG>, <ArrowB>, <ArrowA> (lower priority)-->
<ArrowColor>ArrowColor</ArrowColor>
<!--<ArrowSColor>: Selected arrow color from ColorScheme (high priority)-->
<!--or <ArrowSR>, <ArrowSG>, <ArrowSB>, <ArrowSA> (lower priority)-->
<ArrowSColor>ArrowSColor</ArrowSColor>
<!--<TextColor>: Text color from ColorScheme (high priority)-->
<!--or <TextR>, <TextG>, <TextB>, <TextA> (lower priority)-->
<TextColor>TextColor</TextColor>
<!--<TextSColor>: Selected text color from ColorScheme (high priority)-->
<!--or <TextSR>, <TextSG>, <TextSB>, <TextSA> (lower priority)-->
<TextSColor>TextSColor</TextSColor>
<!--<TextH>: Text height-->
<TextH>32,00</TextH>
<!--<TextMaxW>: Maximum text width (if exists)-->
<TextMaxW>616,00</TextMaxW>
<!--<TextFont>: Text font name-->
<TextFont>Outline</TextFont>
<!--<TextStyle>: Text style: Normal, Italic, Bold, BoldItalic-->
<TextStyle>Bold</TextStyle>
<!--<NumVisible>: Number of visible elements in the slide-->
<NumVisible>1</NumVisible>
</SelectSlideCoverLoading>
</ScreenOptionsTheme>
</root>
</root>
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<ScreenOptionsVideo>
<ScreenVersion>1</ScreenVersion>
<ScreenVersion>2</ScreenVersion>
<Background1>
<!--<Type>: Background type: None, Color, Texture, Video-->
<Type>Video</Type>
@@ -185,6 +185,33 @@
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</Text4>
<Text5>
<!--<X>, <Y>: Text position-->
<X>75</X>
<Y>285</Y>
<!--<Z>: Text position-->
<Z>0,00</Z>
<!--<H>: Text height-->
<H>32</H>
<!--<MaxW>: Maximum text width (if exists)-->
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>StaticColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>TextSColor</SColor>
<!--<Align>: Text align: Left, Center, Right-->
<Align>Left</Align>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Normal</Font>
<!--<Text>: Text or translation tag-->
<Text>TR_SCREENO_VIDEO_VIDEOSTOBACKGROUND</Text>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</Text5>
<ButtonExit>
<!--<Skin>: Texture name-->
<Skin>Button</Skin>
@@ -435,5 +462,70 @@
<!--<NumVisible>: Number of visible elements in the slide-->
<NumVisible>3</NumVisible>
</SelectSlideVideosInSongs>
<SelectSlideVideosToBackground>
<!--<Skin>: Texture name-->
<Skin>Invisible</Skin>
<!--<SkinArrowLeft>: Texture name of left arrow-->
<SkinArrowLeft>SelectSlideArrowLeft</SkinArrowLeft>
<!--<SkinArrowRight>: Texture name of right arrow-->
<SkinArrowRight>SelectSlideArrowRight</SkinArrowRight>
<!--<SkinSelected>: Texture name for selected SelectSlide-->
<SkinSelected>SelectSlide</SkinSelected>
<!--<SkinArrowLeftSelected>: Texture name of selected left arrow-->
<SkinArrowLeftSelected>SelectSlideArrowLeft</SkinArrowLeftSelected>
<!--<SkinArrowRightSelected>: Texture name of selected right arrow-->
<SkinArrowRightSelected>SelectSlideArrowRight</SkinArrowRightSelected>
<!--<SkinHighlighted>: Texture name for highlighted SelectSlide-->
<SkinHighlighted>SelectSlide</SkinHighlighted>
<!--<X>, <Y>, <Z>, <W>, <H>: SelectSlide position, width and height-->
<X>500</X>
<Y>280</Y>
<Z>0,00</Z>
<W>700</W>
<H>50</H>
<!--<ArrowLeftX>, <ArrowLeftY>, <ArrowLeftZ>, <ArrowLeftW>, <ArrowLeftH>: Left arrow position, width and height-->
<ArrowLeftX>505</ArrowLeftX>
<ArrowLeftY>225</ArrowLeftY>
<ArrowLeftZ>0,00</ArrowLeftZ>
<ArrowLeftW>40</ArrowLeftW>
<ArrowLeftH>40</ArrowLeftH>
<!--<ArrowRightX>, <ArrowRightY>, <ArrowRightZ>, <ArrowRightW>, <ArrowRightH>: Right arrow position, width and height-->
<ArrowRightX>1170</ArrowRightX>
<ArrowRightY>225</ArrowRightY>
<ArrowRightZ>0,00</ArrowRightZ>
<ArrowRightW>40</ArrowRightW>
<ArrowRightH>40</ArrowRightH>
<!--<Color>: SelectSlide color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>SelectSlideColor</Color>
<!--<SColor>: Selected SelectSlide color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>SelectSlideSColor</SColor>
<!--<HColor>: Highlighted SelectSlide color from ColorScheme (high priority)-->
<!--or <HR>, <HG>, <HB>, <HA> (lower priority)-->
<HColor>SelectSlideHColor</HColor>
<!--<ArrowColor>: Arrow color from ColorScheme (high priority)-->
<!--or <ArrowR>, <ArrowG>, <ArrowB>, <ArrowA> (lower priority)-->
<ArrowColor>ArrowColor</ArrowColor>
<!--<ArrowSColor>: Selected arrow color from ColorScheme (high priority)-->
<!--or <ArrowSR>, <ArrowSG>, <ArrowSB>, <ArrowSA> (lower priority)-->
<ArrowSColor>ArrowSColor</ArrowSColor>
<!--<TextColor>: Text color from ColorScheme (high priority)-->
<!--or <TextR>, <TextG>, <TextB>, <TextA> (lower priority)-->
<TextColor>TextColor</TextColor>
<!--<TextSColor>: Selected text color from ColorScheme (high priority)-->
<!--or <TextSR>, <TextSG>, <TextSB>, <TextSA> (lower priority)-->
<TextSColor>TextSColor</TextSColor>
<!--<TextH>: Text height-->
<TextH>32,00</TextH>
<!--<TextMaxW>: Maximum text width (if exists)-->
<TextMaxW>205,33</TextMaxW>
<!--<TextFont>: Text font name-->
<TextFont>Normal</TextFont>
<!--<TextStyle>: Text style: Normal, Italic, Bold, BoldItalic-->
<TextStyle>Bold</TextStyle>
<!--<NumVisible>: Number of visible elements in the slide-->
<NumVisible>3</NumVisible>
</SelectSlideVideosToBackground>
</ScreenOptionsVideo>
</root>
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
+265 -2
View File
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<ScreenSong>
<ScreenVersion>2</ScreenVersion>
<ScreenVersion>3</ScreenVersion>
<Background1>
<!--<Type>: Background type: None, Color, Texture, Video-->
<Type>Video</Type>
@@ -33,6 +33,25 @@
<Height>26</Height>
</Reflection>
</Static1>
<StaticOptionsBG>
<!--<Skin>: Texture name-->
<Skin>SongMenuBG</Skin>
<!--<X>, <Y>, <Z>, <W>, <H>: Static position, width and height-->
<X>40</X>
<Y>40</Y>
<Z>-2,10</Z>
<W>360</W>
<H>360</H>
<!--<Color>: Static color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<R>1</R>
<G>1</G>
<B>1</B>
<A>1</A>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</StaticOptionsBG>
<StaticSearchBar>
<!--<Skin>: Texture name-->
<Skin>Menu</Skin>
@@ -53,6 +72,175 @@
<Height>26</Height>
</Reflection>
</StaticSearchBar>
<ButtonOptionsSing>
<!--<Skin>: Texture name-->
<Skin>Button</Skin>
<!--<SkinSelected>: Texture name for selected button-->
<SkinSelected>Button</SkinSelected>
<!--<X>, <Y>, <Z>, <W>, <H>: Button position, width and height-->
<X>40</X>
<Y>90</Y>
<Z>-2,11</Z>
<W>360</W>
<H>40</H>
<!--<Color>: Button color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonColor</Color>
<!--<SColor>: Selected button color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonSColor</SColor>
<Text>
<!--<X>, <Y>: Text position-->
<X>180</X>
<Y>5</Y>
<!--<H>: Text height-->
<H>30</H>
<!--<MaxW>: Maximum text width (if exists)-->
<MaxW>350</MaxW>
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonTextColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonTextSColor</SColor>
<!--<Align>: Text align: Left, Center, Right-->
<Align>Center</Align>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Text or translation tag-->
<Text>TR_SCREENSONG_BUTTON_SING</Text>
</Text>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
<!--<SReflection> If exists:-->
<!-- <Space>: Reflection Space of selected button-->
<!-- <Height>: Reflection Height of selected button-->
</ButtonOptionsSing>
<ButtonOptionsPlaylist>
<!--<Skin>: Texture name-->
<Skin>Button</Skin>
<!--<SkinSelected>: Texture name for selected button-->
<SkinSelected>Button</SkinSelected>
<!--<X>, <Y>, <Z>, <W>, <H>: Button position, width and height-->
<X>40</X>
<Y>180</Y>
<Z>-2,11</Z>
<W>360</W>
<H>40</H>
<!--<Color>: Button color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonColor</Color>
<!--<SColor>: Selected button color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonSColor</SColor>
<Text>
<!--<X>, <Y>: Text position-->
<X>180</X>
<Y>5</Y>
<!--<H>: Text height-->
<H>30</H>
<!--<MaxW>: Maximum text width (if exists)-->
<MaxW>350</MaxW>
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonTextColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonTextSColor</SColor>
<!--<Align>: Text align: Left, Center, Right-->
<Align>Center</Align>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Text or translation tag-->
<Text>TR_SCREENSONG_BUTTON_PLAYLIST</Text>
</Text>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
<!--<SReflection> If exists:-->
<!-- <Space>: Reflection Space of selected button-->
<!-- <Height>: Reflection Height of selected button-->
</ButtonOptionsPlaylist>
<ButtonOptionsClose>
<!--<Skin>: Texture name-->
<Skin>Button</Skin>
<!--<SkinSelected>: Texture name for selected button-->
<SkinSelected>Button</SkinSelected>
<!--<X>, <Y>, <Z>, <W>, <H>: Button position, width and height-->
<X>40</X>
<Y>225</Y>
<Z>-2,11</Z>
<W>360</W>
<H>40</H>
<!--<Color>: Button color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonColor</Color>
<!--<SColor>: Selected button color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonSColor</SColor>
<Text>
<!--<X>, <Y>: Text position-->
<X>180</X>
<Y>5</Y>
<!--<H>: Text height-->
<H>30</H>
<!--<MaxW>: Maximum text width (if exists)-->
<MaxW>350</MaxW>
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonTextColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonTextSColor</SColor>
<!--<Align>: Text align: Left, Center, Right-->
<Align>Center</Align>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Text or translation tag-->
<Text>TR_SCREENSONG_BUTTON_CANCEL</Text>
</Text>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
<!--<SReflection> If exists:-->
<!-- <Space>: Reflection Space of selected button-->
<!-- <Height>: Reflection Height of selected button-->
</ButtonOptionsClose>
<TextOptionsTitle>
<!--<X>, <Y>: Text position-->
<X>200</X>
<Y>45</Y>
<!--<Z>: Text position-->
<Z>-2,11</Z>
<!--<H>: Text height-->
<H>40</H>
<!--<MaxW>: Maximum text width (if exists)-->
<MaxW>350</MaxW>
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>StaticColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>TextSColor</SColor>
<!--<Align>: Text align: Left, Center, Right-->
<Align>Center</Align>
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
<Style>Bold</Style>
<!--<Font>: Text font name-->
<Font>Outline</Font>
<!--<Text>: Text or translation tag-->
<Text>TR_SCREENSONG_SONGOPTIONS</Text>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</TextOptionsTitle>
<TextCategory>
<!--<X>, <Y>: Text position-->
<X>220</X>
@@ -171,6 +359,71 @@
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</TextSearchBar>
<SelectSlideOptionsMode>
<!--<Skin>: Texture name-->
<Skin>Button</Skin>
<!--<SkinArrowLeft>: Texture name of left arrow-->
<SkinArrowLeft>SelectSlideArrowLeft</SkinArrowLeft>
<!--<SkinArrowRight>: Texture name of right arrow-->
<SkinArrowRight>SelectSlideArrowRight</SkinArrowRight>
<!--<SkinSelected>: Texture name for selected SelectSlide-->
<SkinSelected>SelectSlide</SkinSelected>
<!--<SkinArrowLeftSelected>: Texture name of selected left arrow-->
<SkinArrowLeftSelected>SelectSlideArrowLeft</SkinArrowLeftSelected>
<!--<SkinArrowRightSelected>: Texture name of selected right arrow-->
<SkinArrowRightSelected>SelectSlideArrowRight</SkinArrowRightSelected>
<!--<SkinHighlighted>: Texture name for highlighted SelectSlide-->
<SkinHighlighted>SelectSlide</SkinHighlighted>
<!--<X>, <Y>, <Z>, <W>, <H>: SelectSlide position, width and height-->
<X>40</X>
<Y>135</Y>
<Z>-2,11</Z>
<W>360</W>
<H>40</H>
<!--<ArrowLeftX>, <ArrowLeftY>, <ArrowLeftZ>, <ArrowLeftW>, <ArrowLeftH>: Left arrow position, width and height-->
<ArrowLeftX>45</ArrowLeftX>
<ArrowLeftY>140</ArrowLeftY>
<ArrowLeftZ>-2,12</ArrowLeftZ>
<ArrowLeftW>30</ArrowLeftW>
<ArrowLeftH>30</ArrowLeftH>
<!--<ArrowRightX>, <ArrowRightY>, <ArrowRightZ>, <ArrowRightW>, <ArrowRightH>: Right arrow position, width and height-->
<ArrowRightX>365</ArrowRightX>
<ArrowRightY>140</ArrowRightY>
<ArrowRightZ>-2,12</ArrowRightZ>
<ArrowRightW>30</ArrowRightW>
<ArrowRightH>30</ArrowRightH>
<!--<Color>: SelectSlide color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonColor</Color>
<!--<SColor>: Selected SelectSlide color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>ButtonSColor</SColor>
<!--<HColor>: Highlighted SelectSlide color from ColorScheme (high priority)-->
<!--or <HR>, <HG>, <HB>, <HA> (lower priority)-->
<HColor>SelectSlideHColor</HColor>
<!--<ArrowColor>: Arrow color from ColorScheme (high priority)-->
<!--or <ArrowR>, <ArrowG>, <ArrowB>, <ArrowA> (lower priority)-->
<ArrowColor>ArrowColor</ArrowColor>
<!--<ArrowSColor>: Selected arrow color from ColorScheme (high priority)-->
<!--or <ArrowSR>, <ArrowSG>, <ArrowSB>, <ArrowSA> (lower priority)-->
<ArrowSColor>ArrowSColor</ArrowSColor>
<!--<TextColor>: Text color from ColorScheme (high priority)-->
<!--or <TextR>, <TextG>, <TextB>, <TextA> (lower priority)-->
<TextColor>TextColor</TextColor>
<!--<TextSColor>: Selected text color from ColorScheme (high priority)-->
<!--or <TextSR>, <TextSG>, <TextSB>, <TextSA> (lower priority)-->
<TextSColor>TextSColor</TextSColor>
<!--<TextH>: Text height-->
<TextH>30</TextH>
<!--<TextMaxW>: Maximum text width (if exists)-->
<TextMaxW>280</TextMaxW>
<!--<TextFont>: Text font name-->
<TextFont>Outline</TextFont>
<!--<TextStyle>: Text style: Normal, Italic, Bold, BoldItalic-->
<TextStyle>Bold</TextStyle>
<!--<NumVisible>: Number of visible elements in the slide-->
<NumVisible>1</NumVisible>
</SelectSlideOptionsMode>
<SongMenu>
<!--<CoverBackground>: Texture name of cover background/tiles-->
<CoverBackground>CoverTile</CoverBackground>
@@ -202,6 +455,10 @@
<NumW>6</NumW>
<!--<NumH>: Number of tiles vertical-->
<NumH>4</NumH>
<!--<NumWsmall>: Number of tiles horizontal-->
<NumWsmall>4</NumWsmall>
<!--<NumHsmall>: Number of tiles vertical-->
<NumHsmall>4</NumHsmall>
<!--<SpaceW>: Space between tiles horizontal-->
<SpaceW>10,00</SpaceW>
<!--<SpaceH>: Space between tiles vertical-->
@@ -212,6 +469,12 @@
<TileRectZ>-1,00</TileRectZ>
<TileRectW>830</TileRectW>
<TileRectH>550</TileRectH>
<!--<TileRectSmallSmallX>, <TileRectSmallY>, <TileRectSmallZ>, <TileRectSmallW>, <TileRectSmallH>: SongMenu position, width and height-->
<TileRectSmallX>410</TileRectSmallX>
<TileRectSmallY>40</TileRectSmallY>
<TileRectSmallZ>-1,00</TileRectSmallZ>
<TileRectSmallW>550</TileRectSmallW>
<TileRectSmallH>550</TileRectSmallH>
<TextArtist>
<!--<X>, <Y>: Text position-->
<X>222</X>
@@ -395,4 +658,4 @@
</SongMenuTileBoard>
</SongMenu>
</ScreenSong>
</root>
</root>
+56 -7
View File
@@ -33,9 +33,9 @@
<A>1,000</A>
</Player4>
<Player5>
<R>0,000</R>
<G>0,500</G>
<B>1,000</B>
<R>1,000</R>
<G>0,800</G>
<B>0,000</B>
<A>1,000</A>
</Player5>
<Player6>
@@ -71,9 +71,9 @@
<A>0,500</A>
</Player4Dim>
<Player5Dim>
<R>0,000</R>
<G>0,500</G>
<B>1,000</B>
<R>1,000</R>
<G>0,800</G>
<B>0,000</B>
<A>0,500</A>
</Player5Dim>
<Player6Dim>
@@ -82,6 +82,42 @@
<B>0,500</B>
<A>0,500</A>
</Player6Dim>
<Player1Dim2>
<R>0,000</R>
<G>0,000</G>
<B>1,000</B>
<A>0,400</A>
</Player1Dim2>
<Player2Dim2>
<R>1,000</R>
<G>0,000</G>
<B>0,000</B>
<A>0,400</A>
</Player2Dim2>
<Player3Dim2>
<R>0,000</R>
<G>1,000</G>
<B>0,000</B>
<A>0,400</A>
</Player3Dim2>
<Player4Dim2>
<R>0,500</R>
<G>0,000</G>
<B>1,000</B>
<A>0,400</A>
</Player4Dim2>
<Player5Dim2>
<R>1,000</R>
<G>0,800</G>
<B>0,000</B>
<A>0,400</A>
</Player5Dim2>
<Player6Dim2>
<R>1,000</R>
<G>0,000</G>
<B>0,500</B>
<A>0,400</A>
</Player6Dim2>
<BackgroundColor>
<R>0,000</R>
<G>0,000</G>
@@ -214,6 +250,12 @@
<B>0,300</B>
<A>1,000</A>
</LyricSubColor>
<LyricHelper>
<R>0,00</R>
<G>0,00</G>
<B>1,00</B>
<A>0,50</A>
</LyricHelper>
<TimeBar>
<R>0,800</R>
<G>0,950</G>
@@ -266,6 +308,13 @@
<MedleyCalcIcon>MedleyCalcIcon.png</MedleyCalcIcon>
<MedleyTagIcon>MedleyTagIcon.png</MedleyTagIcon>
<Invisible>Invisible.png</Invisible>
<PlayerSelector>PlayerSelector.png</PlayerSelector>
<PreviousIcon>PreviousIcon.png</PreviousIcon>
<NextIcon>NextIcon.png</NextIcon>
<PlayIcon>PlayIcon.png</PlayIcon>
<PauseIcon>PauseIcon.png</PauseIcon>
<RepeatIcon>RepeatIcon.png</RepeatIcon>
<SongMenuBG>SongMenuBG.png</SongMenuBG>
</Skins>
<Videos>
<BG_Video>[Blue]BG_Video.mp4</BG_Video>
@@ -273,4 +322,4 @@
<IntroMid>[Blue]IntroMid.mp4</IntroMid>
<IntroOut>[Blue]IntroOut.mp4</IntroOut>
</Videos>
</root>
</root>
+104 -55
View File
@@ -33,9 +33,9 @@
<A>1,000</A>
</Player4>
<Player5>
<R>0,000</R>
<G>0,500</G>
<B>1,000</B>
<R>1,000</R>
<G>0,800</G>
<B>0,000</B>
<A>1,000</A>
</Player5>
<Player6>
@@ -71,9 +71,9 @@
<A>0,500</A>
</Player4Dim>
<Player5Dim>
<R>0,000</R>
<G>0,500</G>
<B>1,000</B>
<R>1,000</R>
<G>0,800</G>
<B>0,000</B>
<A>0,500</A>
</Player5Dim>
<Player6Dim>
@@ -82,88 +82,124 @@
<B>0,500</B>
<A>0,500</A>
</Player6Dim>
<BackgroundColor>
<Player1Dim2>
<R>0,000</R>
<G>0,000</G>
<B>0,750</B>
<B>1,000</B>
<A>0,400</A>
</Player1Dim2>
<Player2Dim2>
<R>1,000</R>
<G>0,000</G>
<B>0,000</B>
<A>0,400</A>
</Player2Dim2>
<Player3Dim2>
<R>0,000</R>
<G>1,000</G>
<B>0,000</B>
<A>0,400</A>
</Player3Dim2>
<Player4Dim2>
<R>0,500</R>
<G>0,000</G>
<B>1,000</B>
<A>0,400</A>
</Player4Dim2>
<Player5Dim2>
<R>1,000</R>
<G>0,800</G>
<B>0,000</B>
<A>0,400</A>
</Player5Dim2>
<Player6Dim2>
<R>1,000</R>
<G>0,000</G>
<B>0,500</B>
<A>0,400</A>
</Player6Dim2>
<BackgroundColor>
<R>0,000</R>
<G>0,750</G>
<B>0,000</B>
<A>1,000</A>
</BackgroundColor>
<StaticColor>
<R>0,675</R>
<G>0,890</G>
<B>0,969</B>
<R>0,709</R>
<G>0,968</G>
<B>0,674</B>
<A>1,000</A>
</StaticColor>
<StaticWarningColor>
<R>0,675</R>
<G>0,890</G>
<B>0,969</B>
<R>0,709</R>
<G>0,968</G>
<B>0,674</B>
<A>1,000</A>
</StaticWarningColor>
<ButtonColor>
<R>0,675</R>
<G>0,890</G>
<B>0,969</B>
<R>0,709</R>
<G>0,968</G>
<B>0,674</B>
<A>0,300</A>
</ButtonColor>
<ButtonSColor>
<R>0,675</R>
<G>0,890</G>
<B>0,969</B>
<R>0,709</R>
<G>0,968</G>
<B>0,674</B>
<A>1,000</A>
</ButtonSColor>
<ButtonTextColor>
<R>0,675</R>
<G>0,890</G>
<B>0,969</B>
<R>0,709</R>
<G>0,968</G>
<B>0,674</B>
<A>0,500</A>
</ButtonTextColor>
<ButtonTextSColor>
<R>0,675</R>
<G>0,890</G>
<B>0,969</B>
<R>0,709</R>
<G>0,968</G>
<B>0,674</B>
<A>1,000</A>
</ButtonTextSColor>
<SelectSlideColor>
<R>0,675</R>
<G>0,890</G>
<B>0,969</B>
<R>0,709</R>
<G>0,968</G>
<B>0,674</B>
<A>1,000</A>
</SelectSlideColor>
<SelectSlideHColor>
<R>0,675</R>
<G>0,890</G>
<B>0,969</B>
<R>0,709</R>
<G>0,968</G>
<B>0,674</B>
<A>1,000</A>
</SelectSlideHColor>
<SelectSlideSColor>
<R>0,675</R>
<G>0,890</G>
<B>0,969</B>
<R>0,709</R>
<G>0,968</G>
<B>0,674</B>
<A>0,500</A>
</SelectSlideSColor>
<ArrowColor>
<R>0,675</R>
<G>0,890</G>
<B>0,969</B>
<R>0,709</R>
<G>0,968</G>
<B>0,674</B>
<A>0,300</A>
</ArrowColor>
<ArrowSColor>
<R>0,675</R>
<G>0,890</G>
<B>0,969</B>
<R>0,709</R>
<G>0,968</G>
<B>0,674</B>
<A>1,000</A>
</ArrowSColor>
<TextColor>
<R>0,675</R>
<G>0,890</G>
<B>0,969</B>
<R>0,709</R>
<G>0,968</G>
<B>0,674</B>
<A>0,500</A>
</TextColor>
<TextSColor>
<R>0,675</R>
<G>0,890</G>
<B>0,969</B>
<R>0,709</R>
<G>0,968</G>
<B>0,674</B>
<A>1,000</A>
</TextSColor>
<TextWarningColor>
@@ -198,8 +234,8 @@
</Invisible>
<LyricHighlight>
<R>0,000</R>
<G>0,000</G>
<B>1,000</B>
<G>1,000</G>
<B>0,000</B>
<A>1,000</A>
</LyricHighlight>
<LyricMainColor>
@@ -214,17 +250,23 @@
<B>0,300</B>
<A>1,000</A>
</LyricSubColor>
<LyricHelper>
<R>0,00</R>
<G>1,00</G>
<B>0,00</B>
<A>0,50</A>
</LyricHelper>
<TimeBar>
<R>0,800</R>
<G>0,950</G>
<B>1,000</B>
<G>1,000</G>
<B>0,811</B>
<A>0,500</A>
</TimeBar>
<TimeBarSentence>
<R>0,800</R>
<G>0,950</G>
<B>1,000</B>
<A>0,850</A>
<G>1,000</G>
<B>0,811</B>
<A>0,811</A>
</TimeBarSentence>
</ColorSchemes>
<Skins>
@@ -266,6 +308,13 @@
<MedleyCalcIcon>MedleyCalcIcon.png</MedleyCalcIcon>
<MedleyTagIcon>MedleyTagIcon.png</MedleyTagIcon>
<Invisible>Invisible.png</Invisible>
<PlayerSelector>PlayerSelector.png</PlayerSelector>
<PreviousIcon>PreviousIcon.png</PreviousIcon>
<NextIcon>NextIcon.png</NextIcon>
<PlayIcon>PlayIcon.png</PlayIcon>
<PauseIcon>PauseIcon.png</PauseIcon>
<RepeatIcon>RepeatIcon.png</RepeatIcon>
<SongMenuBG>SongMenuBG.png</SongMenuBG>
</Skins>
<Videos>
<BG_Video>[Green]BG_Video.mp4</BG_Video>
@@ -273,4 +322,4 @@
<IntroMid>[Green]IntroMid.mp4</IntroMid>
<IntroOut>[Green]IntroOut.mp4</IntroOut>
</Videos>
</root>
</root>
+105 -56
View File
@@ -33,9 +33,9 @@
<A>1,000</A>
</Player4>
<Player5>
<R>0,000</R>
<G>0,500</G>
<B>1,000</B>
<R>1,000</R>
<G>0,800</G>
<B>0,000</B>
<A>1,000</A>
</Player5>
<Player6>
@@ -71,9 +71,9 @@
<A>0,500</A>
</Player4Dim>
<Player5Dim>
<R>0,000</R>
<G>0,500</G>
<B>1,000</B>
<R>1,000</R>
<G>0,800</G>
<B>0,000</B>
<A>0,500</A>
</Player5Dim>
<Player6Dim>
@@ -82,88 +82,124 @@
<B>0,500</B>
<A>0,500</A>
</Player6Dim>
<BackgroundColor>
<Player1Dim2>
<R>0,000</R>
<G>0,000</G>
<B>0,750</B>
<B>1,000</B>
<A>0,400</A>
</Player1Dim2>
<Player2Dim2>
<R>1,000</R>
<G>0,000</G>
<B>0,000</B>
<A>0,400</A>
</Player2Dim2>
<Player3Dim2>
<R>0,000</R>
<G>1,000</G>
<B>0,000</B>
<A>0,400</A>
</Player3Dim2>
<Player4Dim2>
<R>0,500</R>
<G>0,000</G>
<B>1,000</B>
<A>0,400</A>
</Player4Dim2>
<Player5Dim2>
<R>1,000</R>
<G>0,800</G>
<B>0,000</B>
<A>0,400</A>
</Player5Dim2>
<Player6Dim2>
<R>1,000</R>
<G>0,000</G>
<B>0,500</B>
<A>0,400</A>
</Player6Dim2>
<BackgroundColor>
<R>0,750</R>
<G>0,000</G>
<B>0,000</B>
<A>1,000</A>
</BackgroundColor>
<StaticColor>
<R>0,675</R>
<G>0,890</G>
<B>0,969</B>
<R>0,968</R>
<G>0,674</G>
<B>0,674</B>
<A>1,000</A>
</StaticColor>
<StaticWarningColor>
<R>0,675</R>
<G>0,890</G>
<B>0,969</B>
<R>0,968</R>
<G>0,674</G>
<B>0,674</B>
<A>1,000</A>
</StaticWarningColor>
<ButtonColor>
<R>0,675</R>
<G>0,890</G>
<B>0,969</B>
<R>0,968</R>
<G>0,674</G>
<B>0,674</B>
<A>0,300</A>
</ButtonColor>
<ButtonSColor>
<R>0,675</R>
<G>0,890</G>
<B>0,969</B>
<R>0,968</R>
<G>0,674</G>
<B>0,674</B>
<A>1,000</A>
</ButtonSColor>
<ButtonTextColor>
<R>0,675</R>
<G>0,890</G>
<B>0,969</B>
<R>0,968</R>
<G>0,674</G>
<B>0,674</B>
<A>0,500</A>
</ButtonTextColor>
<ButtonTextSColor>
<R>0,675</R>
<G>0,890</G>
<B>0,969</B>
<R>0,968</R>
<G>0,674</G>
<B>0,674</B>
<A>1,000</A>
</ButtonTextSColor>
<SelectSlideColor>
<R>0,675</R>
<G>0,890</G>
<B>0,969</B>
<R>0,968</R>
<G>0,674</G>
<B>0,674</B>
<A>1,000</A>
</SelectSlideColor>
<SelectSlideHColor>
<R>0,675</R>
<G>0,890</G>
<B>0,969</B>
<R>0,968</R>
<G>0,674</G>
<B>0,674</B>
<A>1,000</A>
</SelectSlideHColor>
<SelectSlideSColor>
<R>0,675</R>
<G>0,890</G>
<B>0,969</B>
<R>0,968</R>
<G>0,674</G>
<B>0,674</B>
<A>0,500</A>
</SelectSlideSColor>
<ArrowColor>
<R>0,675</R>
<G>0,890</G>
<B>0,969</B>
<R>0,968</R>
<G>0,674</G>
<B>0,674</B>
<A>0,300</A>
</ArrowColor>
<ArrowSColor>
<R>0,675</R>
<G>0,890</G>
<B>0,969</B>
<R>0,968</R>
<G>0,674</G>
<B>0,674</B>
<A>1,000</A>
</ArrowSColor>
<TextColor>
<R>0,675</R>
<G>0,890</G>
<B>0,969</B>
<R>0,968</R>
<G>0,674</G>
<B>0,674</B>
<A>0,500</A>
</TextColor>
<TextSColor>
<R>0,675</R>
<G>0,890</G>
<B>0,969</B>
<R>0,968</R>
<G>0,674</G>
<B>0,674</B>
<A>1,000</A>
</TextSColor>
<TextWarningColor>
@@ -197,9 +233,9 @@
<A>0,000</A>
</Invisible>
<LyricHighlight>
<R>0,000</R>
<R>1,000</R>
<G>0,000</G>
<B>1,000</B>
<B>0,000</B>
<A>1,000</A>
</LyricHighlight>
<LyricMainColor>
@@ -214,16 +250,22 @@
<B>0,300</B>
<A>1,000</A>
</LyricSubColor>
<LyricHelper>
<R>1,00</R>
<G>0,00</G>
<B>0,00</B>
<A>0,50</A>
</LyricHelper>
<TimeBar>
<R>0,800</R>
<G>0,950</G>
<B>1,000</B>
<R>1,000</R>
<G>0,800</G>
<B>0,800</B>
<A>0,500</A>
</TimeBar>
<TimeBarSentence>
<R>0,800</R>
<G>0,950</G>
<B>1,000</B>
<R>1,000</R>
<G>0,800</G>
<B>0,800</B>
<A>0,850</A>
</TimeBarSentence>
</ColorSchemes>
@@ -266,6 +308,13 @@
<MedleyCalcIcon>MedleyCalcIcon.png</MedleyCalcIcon>
<MedleyTagIcon>MedleyTagIcon.png</MedleyTagIcon>
<Invisible>Invisible.png</Invisible>
<PlayerSelector>PlayerSelector.png</PlayerSelector>
<PreviousIcon>PreviousIcon.png</PreviousIcon>
<NextIcon>NextIcon.png</NextIcon>
<PlayIcon>PlayIcon.png</PlayIcon>
<PauseIcon>PauseIcon.png</PauseIcon>
<RepeatIcon>RepeatIcon.png</RepeatIcon>
<SongMenuBG>SongMenuBG.png</SongMenuBG>
</Skins>
<Videos>
<BG_Video>[Red]BG_Video.mp4</BG_Video>
@@ -273,4 +322,4 @@
<IntroMid>[Red]IntroMid.mp4</IntroMid>
<IntroOut>[Red]IntroOut.mp4</IntroOut>
</Videos>
</root>
</root>
+106 -57
View File
@@ -33,9 +33,9 @@
<A>1,000</A>
</Player4>
<Player5>
<R>0,000</R>
<G>0,500</G>
<B>1,000</B>
<R>1,000</R>
<G>0,800</G>
<B>0,000</B>
<A>1,000</A>
</Player5>
<Player6>
@@ -71,9 +71,9 @@
<A>0,500</A>
</Player4Dim>
<Player5Dim>
<R>0,000</R>
<G>0,500</G>
<B>1,000</B>
<R>1,000</R>
<G>0,800</G>
<B>0,000</B>
<A>0,500</A>
</Player5Dim>
<Player6Dim>
@@ -82,88 +82,124 @@
<B>0,500</B>
<A>0,500</A>
</Player6Dim>
<BackgroundColor>
<Player1Dim2>
<R>0,000</R>
<G>0,000</G>
<B>0,750</B>
<B>1,000</B>
<A>0,400</A>
</Player1Dim2>
<Player2Dim2>
<R>1,000</R>
<G>0,000</G>
<B>0,000</B>
<A>0,400</A>
</Player2Dim2>
<Player3Dim2>
<R>0,000</R>
<G>1,000</G>
<B>0,000</B>
<A>0,400</A>
</Player3Dim2>
<Player4Dim2>
<R>0,500</R>
<G>0,000</G>
<B>1,000</B>
<A>0,400</A>
</Player4Dim2>
<Player5Dim2>
<R>1,000</R>
<G>0,800</G>
<B>0,000</B>
<A>0,400</A>
</Player5Dim2>
<Player6Dim2>
<R>1,000</R>
<G>0,000</G>
<B>0,500</B>
<A>0,400</A>
</Player6Dim2>
<BackgroundColor>
<R>0,750</R>
<G>0,750</G>
<B>0,000</B>
<A>1,000</A>
</BackgroundColor>
<StaticColor>
<R>0,675</R>
<G>0,890</G>
<B>0,969</B>
<R>0,968</R>
<G>0,956</G>
<B>0,674</B>
<A>1,000</A>
</StaticColor>
<StaticWarningColor>
<R>0,675</R>
<G>0,890</G>
<B>0,969</B>
<R>0,968</R>
<G>0,956</G>
<B>0,674</B>
<A>1,000</A>
</StaticWarningColor>
<ButtonColor>
<R>0,675</R>
<G>0,890</G>
<B>0,969</B>
<R>0,968</R>
<G>0,956</G>
<B>0,674</B>
<A>0,300</A>
</ButtonColor>
<ButtonSColor>
<R>0,675</R>
<G>0,890</G>
<B>0,969</B>
<R>0,968</R>
<G>0,956</G>
<B>0,674</B>
<A>1,000</A>
</ButtonSColor>
<ButtonTextColor>
<R>0,675</R>
<G>0,890</G>
<B>0,969</B>
<R>0,968</R>
<G>0,956</G>
<B>0,674</B>
<A>0,500</A>
</ButtonTextColor>
<ButtonTextSColor>
<R>0,675</R>
<G>0,890</G>
<B>0,969</B>
<R>0,968</R>
<G>0,956</G>
<B>0,674</B>
<A>1,000</A>
</ButtonTextSColor>
<SelectSlideColor>
<R>0,675</R>
<G>0,890</G>
<B>0,969</B>
<R>0,968</R>
<G>0,956</G>
<B>0,674</B>
<A>1,000</A>
</SelectSlideColor>
<SelectSlideHColor>
<R>0,675</R>
<G>0,890</G>
<B>0,969</B>
<R>0,968</R>
<G>0,956</G>
<B>0,674</B>
<A>1,000</A>
</SelectSlideHColor>
<SelectSlideSColor>
<R>0,675</R>
<G>0,890</G>
<B>0,969</B>
<R>0,968</R>
<G>0,956</G>
<B>0,674</B>
<A>0,500</A>
</SelectSlideSColor>
<ArrowColor>
<R>0,675</R>
<G>0,890</G>
<B>0,969</B>
<R>0,968</R>
<G>0,956</G>
<B>0,674</B>
<A>0,300</A>
</ArrowColor>
<ArrowSColor>
<R>0,675</R>
<G>0,890</G>
<B>0,969</B>
<R>0,968</R>
<G>0,956</G>
<B>0,674</B>
<A>1,000</A>
</ArrowSColor>
<TextColor>
<R>0,675</R>
<G>0,890</G>
<B>0,969</B>
<R>0,968</R>
<G>0,956</G>
<B>0,674</B>
<A>0,500</A>
</TextColor>
<TextSColor>
<R>0,675</R>
<G>0,890</G>
<B>0,969</B>
<R>0,968</R>
<G>0,956</G>
<B>0,674</B>
<A>1,000</A>
</TextSColor>
<TextWarningColor>
@@ -197,9 +233,9 @@
<A>0,000</A>
</Invisible>
<LyricHighlight>
<R>0,000</R>
<G>0,000</G>
<B>1,000</B>
<R>1,000</R>
<G>1,000</G>
<B>0,000</B>
<A>1,000</A>
</LyricHighlight>
<LyricMainColor>
@@ -214,16 +250,22 @@
<B>0,300</B>
<A>1,000</A>
</LyricSubColor>
<LyricHelper>
<R>1,00</R>
<G>1,00</G>
<B>0,00</B>
<A>0,50</A>
</LyricHelper>
<TimeBar>
<R>0,800</R>
<G>0,950</G>
<B>1,000</B>
<R>0,949</R>
<G>1,000</G>
<B>0,800</B>
<A>0,500</A>
</TimeBar>
<TimeBarSentence>
<R>0,800</R>
<G>0,950</G>
<B>1,000</B>
<R>0,949</R>
<G>1,000</G>
<B>0,800</B>
<A>0,850</A>
</TimeBarSentence>
</ColorSchemes>
@@ -266,6 +308,13 @@
<MedleyCalcIcon>MedleyCalcIcon.png</MedleyCalcIcon>
<MedleyTagIcon>MedleyTagIcon.png</MedleyTagIcon>
<Invisible>Invisible.png</Invisible>
<PlayerSelector>PlayerSelector.png</PlayerSelector>
<PreviousIcon>PreviousIcon.png</PreviousIcon>
<NextIcon>NextIcon.png</NextIcon>
<PlayIcon>PlayIcon.png</PlayIcon>
<PauseIcon>PauseIcon.png</PauseIcon>
<RepeatIcon>RepeatIcon.png</RepeatIcon>
<SongMenuBG>SongMenuBG.png</SongMenuBG>
</Skins>
<Videos>
<BG_Video>[Yellow]BG_Video.mp4</BG_Video>
@@ -273,4 +322,4 @@
<IntroMid>[Yellow]IntroMid.mp4</IntroMid>
<IntroOut>[Yellow]IntroOut.mp4</IntroOut>
</Videos>
</root>
</root>
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

@@ -0,0 +1,22 @@
SceenNames
++++++++++
Version 2:
Add:
<NameSelection>
A new Theme-element for name-selecting.
<StaticPlayer[1...6]> (One Static for each player): Static wich is used as drop-area
<StaticPlayerAvatar[1...6]> (One Static for each player): Static wich shows the avatar of selected player
<TextPlayer[1...6]> (One Text for each player): Text wich shows name of selected player
<SelectSlidePlayerNumber>
<StaticWarningProfiles>
<TextWarningProfiles>
Rename:
<StaticWarning> to <StaticWarningMics>
<TextWarning> to <TextWarningMics>
Remove:
<Button1Player>, <Button2Player>, <Button3Player>, <SelectSlidePlayerMic1>, <SelectSlidePlayerMic2>, <SelectSlidePlayerMic3>
@@ -0,0 +1,17 @@
ScreenOptionsSound
++++++++++
Version 1:
Add:
<ButtonExit>
<SelectSlideLyricStyle>
<SelectSlideLyricsOnTop>
and some texts for description (Text1, Text2, Text3)
TR_SCREENOLYRICS_OPTIONS
TR_SCREENOLYRICS_STYLE
TR_SCREENOLYRICS_ONTOP
++++++++++
@@ -1,5 +1,12 @@
ScreenOptionsTheme
++++++++++
Version 3:
Add:
<SelectSlideFadeInfo>
and some texts and statics for description (Text9 and Static9)
"TR_SCREENOTHEME_FADEINFO"
++++++++++
Version 2:
@@ -0,0 +1,10 @@
ScreenOptionsTheme
++++++++++
Version 2:
Add:
<SelectSlideVideosToBackground>
and some texts and statics for description (Text5)
"TR_SCREENO_VIDEO_VIDEOSTOBACKGROUND"
++++++++++
@@ -0,0 +1,7 @@
ScreenScore
++++++++++
Version 2:
Add: Elements for up to 6 players! (Texts and statics!)
++++++++++
@@ -1,5 +1,14 @@
ScreenSing
++++++++++
Version 4:
Added Elements for 6-player-singing!
Add:
<StaticAvatarP$N$> (One for each player for each player-number>
<TextNameP$N$> (One for each player for each player-number>
++++++++++
Version 3:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+426 -25
View File
@@ -6,6 +6,9 @@ using System.IO;
using Vocaluxe.Base;
using System.Diagnostics;
using Vocaluxe.Lib.Song;
using Vocaluxe.Lib.Draw;
using System.Drawing;
using Vocaluxe.Menu;
namespace Vocaluxe.Base
{
@@ -13,31 +16,149 @@ namespace Vocaluxe.Base
{
private static CHelper Helper = new CHelper();
private static int _CurrentMusicStream = -1;
private static string _CurrentMusicFilePath = String.Empty;
private static List<string> _AllFileNames = new List<string>();
private static List<string> _NotPlayedFileNames = new List<string>();
private static List<string> _BGMusicFileNames = new List<string>();
private static int _PreviousMusicIndex = 0;
private static PlaylistElement _CurrentPlaylistElement = new PlaylistElement();
private static List<PlaylistElement> _AllFileNames = new List<PlaylistElement>();
private static List<PlaylistElement> _NotPlayedFileNames = new List<PlaylistElement>();
private static List<PlaylistElement> _BGMusicFileNames = new List<PlaylistElement>();
private static List<PlaylistElement> _PreviousFileNames = new List<PlaylistElement>();
private static int _Video = -1;
private static STexture _CurrentVideoTexture = new STexture(-1);
private static Stopwatch _FadeTimer = new Stopwatch();
private static bool _VideoEnabled;
private static bool _OwnMusicAdded;
private static bool _BackgroundMusicAdded;
private static bool _Playing;
private static bool _Disabled;
private static bool _CanSing;
public static bool VideoEnabled
{
get
{
return _VideoEnabled;
}
set
{
if (_VideoEnabled && value)
return;
if (!_VideoEnabled && !value)
return;
if(_VideoEnabled && !value)
ToggleVideo();
if (!_VideoEnabled && value)
ToggleVideo();
_VideoEnabled = value;
}
}
public static bool CanSing
{
get
{
return _CanSing;
}
set
{
_CanSing = value;
}
}
public static bool Disabled
{
get
{
return _Disabled;
}
set
{
_Disabled = value;
if (_Disabled)
Pause();
else
Play();
}
}
public static int SongID
{
get
{
return _CurrentPlaylistElement._SongID;
}
}
public static bool Duet
{
get
{
return _CurrentPlaylistElement.Duet;
}
}
public static bool SongHasVideo
{
get
{
return File.Exists(_CurrentPlaylistElement.VideoFilePath);
}
}
public static bool Playing
{
get
{
return _Playing;
}
}
public static string ArtistAndTitle
{
get
{
return _CurrentPlaylistElement.Artist + " - " + _CurrentPlaylistElement.Title;
}
}
public static STexture Cover
{
get
{
return _CurrentPlaylistElement.Cover;
}
}
public static void Init()
{
_BGMusicFileNames.AddRange(Helper.ListFiles(CSettings.sFolderBackgroundMusic, "*.mp3", true, true));
_BGMusicFileNames.AddRange(Helper.ListFiles(CSettings.sFolderBackgroundMusic, "*.wav", true, true));
_BGMusicFileNames.AddRange(Helper.ListFiles(CSettings.sFolderBackgroundMusic, "*.ogg", true, true));
_BGMusicFileNames.AddRange(Helper.ListFiles(CSettings.sFolderBackgroundMusic, "*.wma", true, true));
List<string> templist = new List<string>();
foreach(string ending in CSettings.MusicFileTypes)
{
templist.AddRange(Helper.ListFiles(CSettings.sFolderBackgroundMusic, ending, true, true));
}
foreach (string path in templist)
{
_BGMusicFileNames.Add(new PlaylistElement(path));
}
if(CConfig.BackgroundMusicSource != EBackgroundMusicSource.TR_CONFIG_ONLY_OWN_MUSIC)
AddBackgroundMusic();
if (CConfig.VideoBackgrounds == EOffOn.TR_CONFIG_ON)
_VideoEnabled = true;
_Playing = false;
}
public static void Play()
{
if (_Playing)
return;
if (CConfig.BackgroundMusic == EOffOn.TR_CONFIG_ON)
{
if (_AllFileNames.Count > 0)
@@ -46,24 +167,48 @@ namespace Vocaluxe.Base
{
CSound.Fade(_CurrentMusicStream, CConfig.BackgroundMusicVolume, CSettings.BackgroundMusicFadeTime);
CSound.Play(_CurrentMusicStream);
if (_VideoEnabled && _Video != -1)
CVideo.VdResume(_Video);
_Playing = true;
}
else
Next();
if (!IsBackgroundFile(_CurrentPlaylistElement))
_CanSing = true;
else
_CanSing = false;
}
}
}
public static void Stop()
{
if (!_Playing)
return;
if (_VideoEnabled && _Video != -1)
{
CVideo.VdClose(_Video);
CDraw.RemoveTexture(ref _CurrentVideoTexture);
_Video = -1;
}
CSound.FadeAndStop(_CurrentMusicStream, 0f, CSettings.BackgroundMusicFadeTime);
_CurrentMusicFilePath = String.Empty;
_CurrentPlaylistElement = new PlaylistElement();
_Playing = false;
}
public static void Pause()
{
if (!_Playing)
return;
if (_VideoEnabled && _Video != -1)
{
CVideo.VdPause(_Video);
CVideo.VdSkip(_Video, CSound.GetPosition(_CurrentMusicStream) + CSettings.BackgroundMusicFadeTime, _CurrentPlaylistElement.VideoGap);
}
CSound.FadeAndPause(_CurrentMusicStream, 0f, CSettings.BackgroundMusicFadeTime);
_Playing = false;
}
@@ -83,15 +228,28 @@ namespace Vocaluxe.Base
{
if (_AllFileNames.Count > 0)
{
Stop();
if (_PreviousMusicIndex == _PreviousFileNames.Count - 1 || _PreviousFileNames.Count == 0) //We are not currently in the previous list
{
Stop();
if (_NotPlayedFileNames.Count == 0)
_NotPlayedFileNames.AddRange(_AllFileNames);
if (_NotPlayedFileNames.Count == 0)
_NotPlayedFileNames.AddRange(_AllFileNames);
_CurrentPlaylistElement = _NotPlayedFileNames[CGame.Rand.Next(_NotPlayedFileNames.Count)];
_NotPlayedFileNames.Remove(_CurrentPlaylistElement);
_CurrentMusicFilePath = _NotPlayedFileNames[CGame.Rand.Next(_NotPlayedFileNames.Count)];
_NotPlayedFileNames.Remove(_CurrentMusicFilePath);
_PreviousFileNames.Add(_CurrentPlaylistElement);
_PreviousMusicIndex = _PreviousFileNames.Count - 1;
}
else if(_PreviousFileNames.Count > 0) //We are in the previous list
{
Stop();
_PreviousMusicIndex++;
_CurrentMusicStream = CSound.Load(_CurrentMusicFilePath);
_CurrentPlaylistElement = _PreviousFileNames[_PreviousMusicIndex];
}
_CurrentMusicStream = CSound.Load(_CurrentPlaylistElement.MusicFilePath);
if (_VideoEnabled)
LoadVideo();
CSound.SetStreamVolume(_CurrentMusicStream, 0f);
Play();
}
@@ -99,6 +257,36 @@ namespace Vocaluxe.Base
Stop();
}
public static void Previous()
{
if (_PreviousFileNames.Count > 0 || _PreviousMusicIndex >= 0)
{
Stop();
_PreviousMusicIndex--;
if (_PreviousMusicIndex < 0)
_PreviousMusicIndex = 0; //No previous songs left, so play the first
_CurrentPlaylistElement = _PreviousFileNames[_PreviousMusicIndex];
_CurrentMusicStream = CSound.Load(_CurrentPlaylistElement.MusicFilePath);
if (_VideoEnabled)
LoadVideo();
CSound.SetStreamVolume(_CurrentMusicStream, 0f);
Play();
}
}
public static void Repeat()
{
if (_AllFileNames.Count > 0 && _CurrentMusicStream != -1)
{
CSound.SetPosition(_CurrentMusicStream, 0);
if (_VideoEnabled && _Video != -1)
CVideo.VdSkip(_Video, 0f, _CurrentPlaylistElement.VideoGap);
}
}
public static void ApplyVolume()
{
CSound.SetStreamVolume(_CurrentMusicStream, CConfig.BackgroundMusicVolume);
@@ -110,8 +298,8 @@ namespace Vocaluxe.Base
{
foreach (CSong song in CSongs.AllSongs)
{
_AllFileNames.Add(song.GetMP3());
_NotPlayedFileNames.Add(song.GetMP3());
_AllFileNames.Add(new PlaylistElement(song));
_NotPlayedFileNames.Add(new PlaylistElement(song));
}
}
_OwnMusicAdded = true;
@@ -128,7 +316,7 @@ namespace Vocaluxe.Base
_NotPlayedFileNames.AddRange(_BGMusicFileNames);
}
if (IsPlaying() && !IsBackgroundFile(_CurrentMusicFilePath) || _AllFileNames.Count == 0)
if (Playing && !IsBackgroundFile(_CurrentPlaylistElement) || _AllFileNames.Count == 0)
Next();
_OwnMusicAdded = false;
@@ -153,7 +341,7 @@ namespace Vocaluxe.Base
AddOwnMusic();
_BackgroundMusicAdded = false;
if (IsPlaying() && IsBackgroundFile(_CurrentMusicFilePath) || _AllFileNames.Count == 0)
if (Playing && IsBackgroundFile(_CurrentPlaylistElement) || _AllFileNames.Count == 0)
Next();
}
}
@@ -207,19 +395,232 @@ namespace Vocaluxe.Base
CConfig.SaveConfig();
}
public static bool IsPlaying()
public static void ToggleVideo()
{
return CSound.IsPlaying(_CurrentMusicStream);
if (_Video != -1)
{
if (_VideoEnabled)
{
_VideoEnabled = false;
CVideo.VdClose(_Video);
_Video = -1;
CDraw.RemoveTexture(ref _CurrentVideoTexture);
return;
}
if (CVideo.VdFinished(_Video))
{
CVideo.VdClose(_Video);
CDraw.RemoveTexture(ref _CurrentVideoTexture);
_Video = -1;
return;
}
}
else
LoadVideo();
}
private static bool IsBackgroundFile(string FilePath)
public static STexture GetVideoTexture()
{
foreach (string file in _BGMusicFileNames)
if (_Video != -1)
{
if (file == FilePath)
float vtime = 0f;
CVideo.VdGetFrame(_Video, ref _CurrentVideoTexture, CSound.GetPosition(_CurrentMusicStream), ref vtime);
if (_FadeTimer.ElapsedMilliseconds <= 3000L)
{
_CurrentVideoTexture.color.A = (_FadeTimer.ElapsedMilliseconds / 3000f);
}
else
{
_CurrentVideoTexture.color.A = 1f;
_FadeTimer.Stop();
}
return _CurrentVideoTexture;
}
return new STexture(-1);
}
private static bool IsBackgroundFile(PlaylistElement element)
{
foreach (PlaylistElement elements in _BGMusicFileNames)
{
if (elements.MusicFilePath == element.MusicFilePath)
return true;
}
return false;
}
private static void LoadVideo()
{
if (_Video == -1)
{
_Video = CVideo.VdLoad(_CurrentPlaylistElement.VideoFilePath);
CVideo.VdSkip(_Video, 0f, _CurrentPlaylistElement.VideoGap);
_VideoEnabled = true;
_FadeTimer.Reset();
_FadeTimer.Start();
}
}
}
}
class PlaylistElement
{
public int _SongID;
private string _MusicFilePath;
public string MusicFilePath
{
get
{
if (_SongID >= 0)
{
CSong song = CSongs.GetSong(_SongID);
if (song != null)
return song.GetMP3();
else
{
_SongID = -1;
CLog.LogError("Song not found");
}
}
return _MusicFilePath;
}
set
{
_MusicFilePath = value;
}
}
public string VideoFilePath
{
get
{
if (_SongID >= 0)
{
CSong song = CSongs.GetSong(_SongID);
if (song != null)
return song.GetVideo();
else
{
_SongID = -1;
CLog.LogError("Song not found");
}
}
return string.Empty;
}
}
public string Title
{
get
{
if (_SongID >= 0)
{
CSong song = CSongs.GetSong(_SongID);
if (song != null)
return song.Title;
else
{
_SongID = -1;
CLog.LogError("Song not found");
}
}
return "Unknown";
}
}
public string Artist
{
get
{
if (_SongID >= 0)
{
CSong song = CSongs.GetSong(_SongID);
if (song != null)
return song.Artist;
else
{
_SongID = -1;
CLog.LogError("Song not found");
}
}
return "Unknown";
}
}
public STexture Cover
{
get
{
if (_SongID >= 0)
{
CSong song = CSongs.GetSong(_SongID);
if (song != null)
return song.CoverTextureSmall;
else
{
_SongID = -1;
CLog.LogError("Song not found");
}
}
return CCover.NoCover;
}
}
public float VideoGap
{
get
{
if (_SongID >= 0)
{
CSong song = CSongs.GetSong(_SongID);
if (song != null)
return song.VideoGap;
else
{
_SongID = -1;
CLog.LogError("Song not found");
}
}
return 0;
}
}
public bool Duet
{
get
{
if (_SongID >= 0)
{
CSong song = CSongs.GetSong(_SongID);
if (song != null)
return song.IsDuet;
else
{
_SongID = -1;
CLog.LogError("Song not found");
}
}
return false;
}
}
public PlaylistElement(CSong song)
{
MusicFilePath = string.Empty;
_SongID = song.ID;
}
public PlaylistElement(string FilePath)
{
MusicFilePath = FilePath;
_SongID = -1;
}
public PlaylistElement()
{
MusicFilePath = string.Empty;
_SongID = -1;
}
}
+93 -2
View File
@@ -87,7 +87,8 @@ namespace Vocaluxe.Base
public enum ERecordLib
{
PortAudio
PortAudio,
DirectSound
}
public enum EVideoDecoder
@@ -152,6 +153,29 @@ namespace Vocaluxe.Base
TR_CONFIG_ONLY_OWN_MUSIC
}
public enum EPlayerInfo
{
TR_CONFIG_PLAYERINFO_BOTH,
TR_CONFIG_PLAYERINFO_NAME,
TR_CONFIG_PLAYERINFO_AVATAR,
TR_CONFIG_PLAYERINFO_OFF
}
public enum EFadePlayerInfo
{
TR_CONFIG_FADEPLAYERINFO_ALL,
TR_CONFIG_FADEPLAYERINFO_INFO,
TR_CONFIG_FADEPLAYERINFO_OFF
}
public enum ELyricStyle
{
Fill,
Jump,
Slide,
Zoom
}
#endregion Enums
static class CConfig
@@ -185,7 +209,10 @@ namespace Vocaluxe.Base
public static EOffOn DrawNoteLines = EOffOn.TR_CONFIG_ON;
public static EOffOn DrawToneHelper = EOffOn.TR_CONFIG_ON;
public static ETimerLook TimerLook = ETimerLook.TR_CONFIG_TIMERLOOK_EXPANDED;
public static EPlayerInfo PlayerInfo = EPlayerInfo.TR_CONFIG_PLAYERINFO_BOTH;
public static EFadePlayerInfo FadePlayerInfo = EFadePlayerInfo.TR_CONFIG_FADEPLAYERINFO_OFF;
public static ECoverLoading CoverLoading = ECoverLoading.TR_CONFIG_COVERLOADING_ATSTART;
public static ELyricStyle LyricStyle = ELyricStyle.Slide;
// Sound
public static EPlaybackLib PlayBackLib = EPlaybackLib.PortAudio;
@@ -200,22 +227,25 @@ namespace Vocaluxe.Base
public static List<string> SongFolder = new List<string>();
public static ESongMenu SongMenu = ESongMenu.TR_CONFIG_TILE_BOARD;
public static ESongSorting SongSorting = ESongSorting.TR_CONFIG_ARTIST;
public static EOffOn IgnoreArticles = EOffOn.TR_CONFIG_ON;
public static float ScoreAnimationTime = 10;
public static ETimerMode TimerMode = ETimerMode.TR_CONFIG_TIMERMODE_REMAINING;
public static int NumPlayer = 2;
public static EOffOn Tabs = EOffOn.TR_CONFIG_OFF;
public static string Language = "English";
public static EOffOn LyricsOnTop = EOffOn.TR_CONFIG_OFF;
public static string[] Players = new string[CSettings.MaxNumPlayer];
// Video
public static EVideoDecoder VideoDecoder = EVideoDecoder.FFmpeg;
public static EOffOn VideoBackgrounds = EOffOn.TR_CONFIG_ON;
public static EOffOn VideoPreview = EOffOn.TR_CONFIG_ON;
public static EOffOn VideosInSongs = EOffOn.TR_CONFIG_ON;
public static EOffOn VideosToBackground = EOffOn.TR_CONFIG_OFF;
// Record
public static SMicConfig[] MicConfig;
public static int MicDelay = 200; //[ms]
public static int MicDelay = 300; //[ms]
//Lists to save parameters and values
private static List<string> _Params = new List<string>();
@@ -300,7 +330,10 @@ namespace Vocaluxe.Base
CHelper.TryGetEnumValueFromXML("//root/Theme/DrawNoteLines", navigator, ref DrawNoteLines);
CHelper.TryGetEnumValueFromXML("//root/Theme/DrawToneHelper", navigator, ref DrawToneHelper);
CHelper.TryGetEnumValueFromXML("//root/Theme/TimerLook", navigator, ref TimerLook);
CHelper.TryGetEnumValueFromXML("//root/Theme/PlayerInfo", navigator, ref PlayerInfo);
CHelper.TryGetEnumValueFromXML("//root/Theme/FadePlayerInfo", navigator, ref FadePlayerInfo);
CHelper.TryGetEnumValueFromXML("//root/Theme/CoverLoading", navigator, ref CoverLoading);
CHelper.TryGetEnumValueFromXML("//root/Theme/LyricStyle", navigator, ref LyricStyle);
#endregion Theme
#region Sound
@@ -335,6 +368,7 @@ namespace Vocaluxe.Base
CHelper.TryGetEnumValueFromXML<ESongMenu>("//root/Game/SongMenu", navigator, ref SongMenu);
CHelper.TryGetEnumValueFromXML<ESongSorting>("//root/Game/SongSorting", navigator, ref SongSorting);
CHelper.TryGetEnumValueFromXML<EOffOn>("//root/Game/IgnoreArticles", navigator, ref IgnoreArticles);
CHelper.TryGetFloatValueFromXML("//root/Game/ScoreAnimationTime", navigator, ref ScoreAnimationTime);
CHelper.TryGetEnumValueFromXML<ETimerMode>("//root/Game/TimerMode", navigator, ref TimerMode);
CHelper.TryGetIntValueFromXML("//root/Game/NumPlayer", navigator, ref NumPlayer);
@@ -370,6 +404,12 @@ namespace Vocaluxe.Base
}
CLanguage.SetLanguage(Language);
//Read players from config
for (i = 1; i <= CSettings.MaxNumPlayer; i++)
{
CHelper.GetValueFromXML("//root/Game/Players/Player" + i.ToString(), navigator, ref Players[i-1], string.Empty);
}
#endregion Game
#region Video
@@ -377,6 +417,7 @@ namespace Vocaluxe.Base
CHelper.TryGetEnumValueFromXML<EOffOn>("//root/Video/VideoBackgrounds", navigator, ref VideoBackgrounds);
CHelper.TryGetEnumValueFromXML<EOffOn>("//root/Video/VideoPreview", navigator, ref VideoPreview);
CHelper.TryGetEnumValueFromXML<EOffOn>("//root/Video/VideosInSongs", navigator, ref VideosInSongs);
CHelper.TryGetEnumValueFromXML<EOffOn>("//root/Video/VideosToBackground", navigator, ref VideosToBackground);
#endregion Video
#region Record
@@ -496,9 +537,18 @@ namespace Vocaluxe.Base
writer.WriteComment("Look of timer:" + ListStrings(Enum.GetNames(typeof(ETimerLook))));
writer.WriteElementString("TimerLook", Enum.GetName(typeof(ETimerLook), TimerLook));
writer.WriteComment("Information about players on SingScreen:" + ListStrings(Enum.GetNames(typeof(EPlayerInfo))));
writer.WriteElementString("PlayerInfo", Enum.GetName(typeof(EPlayerInfo), PlayerInfo));
writer.WriteComment("Fade player-information with lyrics and notebars:" + ListStrings(Enum.GetNames(typeof(EFadePlayerInfo))));
writer.WriteElementString("FadePlayerInfo", Enum.GetName(typeof(EFadePlayerInfo), FadePlayerInfo));
writer.WriteComment("Cover Loading:" + ListStrings(Enum.GetNames(typeof(ECoverLoading))));
writer.WriteElementString("CoverLoading", Enum.GetName(typeof(ECoverLoading), CoverLoading));
writer.WriteComment("Lyric Style:" + ListStrings(Enum.GetNames(typeof(ELyricStyle))));
writer.WriteElementString("LyricStyle", Enum.GetName(typeof(ELyricStyle), LyricStyle));
writer.WriteEndElement();
#endregion Theme
@@ -562,6 +612,9 @@ namespace Vocaluxe.Base
writer.WriteComment("SongSorting: " + ListStrings(Enum.GetNames(typeof(ESongSorting))));
writer.WriteElementString("SongSorting", Enum.GetName(typeof(ESongSorting), SongSorting));
writer.WriteComment("Ignore articles on song-sorting: " + ListStrings(Enum.GetNames(typeof(EOffOn))));
writer.WriteElementString("IgnoreArticles", Enum.GetName(typeof(EOffOn), IgnoreArticles));
writer.WriteComment("ScoreAnimationTime: Values >= 1 or 0 for no animation. Time is in seconds.");
writer.WriteElementString("ScoreAnimationTime", ScoreAnimationTime.ToString());
@@ -577,6 +630,14 @@ namespace Vocaluxe.Base
writer.WriteComment("Lyrics also on Top of screen: " + ListStrings(Enum.GetNames(typeof(EOffOn))));
writer.WriteElementString("LyricsOnTop", Enum.GetName(typeof(EOffOn), LyricsOnTop));
writer.WriteComment("Default profile for players 1..." + CSettings.MaxNumPlayer.ToString() + ":");
writer.WriteStartElement("Players");
for (int i = 1; i <= CSettings.MaxNumPlayer; i++)
{
writer.WriteElementString("Player" + i.ToString(), Path.GetFileName(Players[i - 1]));
}
writer.WriteEndElement();
writer.WriteEndElement();
#endregion Game
@@ -595,6 +656,9 @@ namespace Vocaluxe.Base
writer.WriteComment("Show Videos while singing: " + ListStrings(Enum.GetNames(typeof(EOffOn))));
writer.WriteElementString("VideosInSongs", Enum.GetName(typeof(EOffOn), VideosInSongs));
writer.WriteComment("Show backgroundmusic videos as background: " + ListStrings(Enum.GetNames(typeof(EOffOn))));
writer.WriteElementString("VideosToBackground", Enum.GetName(typeof(EOffOn), VideosToBackground));
writer.WriteEndElement();
#endregion Video
@@ -945,6 +1009,33 @@ namespace Vocaluxe.Base
return _Result;
}
/// <summary>
/// Use saved players from config now for games
/// </summary>
public static void UsePlayers()
{
for (int i = 0; i < CProfiles.Profiles.Length; i++)
{
for (int j = 0; j < CSettings.MaxNumPlayer; j++)
{
if (Players[j] != string.Empty)
{
if (Path.GetFileName(CProfiles.Profiles[i].ProfileFile) == Players[j] && CProfiles.Profiles[i].Active == EOffOn.TR_CONFIG_ON)
{
//Update Game-infos with player
CGame.Player[j].Name = CProfiles.Profiles[i].PlayerName;
CGame.Player[j].Difficulty = CProfiles.Profiles[i].Difficulty;
CGame.Player[j].ProfileID = i;
}
}
else
{
CGame.Player[j].ProfileID = -1;
}
}
}
}
}
+12 -3
View File
@@ -797,10 +797,16 @@ namespace Vocaluxe.Base
data.id = Sqlite3.sqlite3_column_int(Stmt, 0);
byte[] bytes = Sqlite3.sqlite3_column_rawbytes(Stmt, 1);
data.str1 = UTF8.GetString(Encoding.Convert(CP1252, UTF8, bytes));
if (bytes != null)
data.str1 = UTF8.GetString(Encoding.Convert(CP1252, UTF8, bytes));
else
data.str1 = "Someone";
bytes = Sqlite3.sqlite3_column_rawbytes(Stmt, 2);
data.str2 = UTF8.GetString(Encoding.Convert(CP1252, UTF8, bytes));
if (bytes != null)
data.str2 = UTF8.GetString(Encoding.Convert(CP1252, UTF8, bytes));
else
data.str2 = "Someone";
songs.Add(data);
}
@@ -832,7 +838,10 @@ namespace Vocaluxe.Base
data.id = Sqlite3.sqlite3_column_int(Stmt, 0);
byte[] bytes = Sqlite3.sqlite3_column_rawbytes(Stmt, 1);
data.str1 = UTF8.GetString(Encoding.Convert(CP1252, UTF8, bytes));
if (bytes != null)
data.str1 = UTF8.GetString(Encoding.Convert(CP1252, UTF8, bytes));
else
data.str1 = "Someone";
if (dateExists)
data.ticks = UnixTimeToTicks(Sqlite3.sqlite3_column_int(Stmt, 2));
+13
View File
@@ -239,6 +239,19 @@ namespace Vocaluxe.Base
_Draw.DrawTexture(Texture, rect, color, begin, end);
}
public static void DrawTexture(CStatic StaticBounds, STexture Texture, EAspect Aspect)
{
RectangleF bounds = new RectangleF(StaticBounds.Rect.X, StaticBounds.Rect.Y, StaticBounds.Rect.W, StaticBounds.Rect.H);
RectangleF rect = new RectangleF(0f, 0f, Texture.width, Texture.height);
if (rect.Height <= 0f)
return;
CHelper.SetRect(bounds, ref rect, rect.Width / rect.Height, Aspect);
DrawTexture(Texture, new SRectF(rect.X, rect.Y, rect.Width, rect.Height, StaticBounds.Rect.Z),
Texture.color, new SRectF(bounds.X, bounds.Y, bounds.Width, bounds.Height, 0f), false);
}
public static void DrawTextureReflection(STexture Texture, SRectF rect, SColorF color, SRectF bounds, float space, float height)
{
_Draw.DrawTextureReflection(Texture, rect, color, bounds, space, height);
+55 -33
View File
@@ -16,6 +16,8 @@ namespace Vocaluxe.Base
public string Name;
public EGameDifficulty Difficulty;
public double Points;
public double PointsLineBonus;
public double PointsGoldenNotes;
public int NoteDiff;
public int LineNr;
public List<CLine> SingLine;
@@ -25,6 +27,7 @@ namespace Vocaluxe.Base
public int SongID;
public bool Medley;
public bool Duet;
public bool ShortSong;
public long DateTicks;
public bool SongFinished;
}
@@ -102,40 +105,29 @@ namespace Vocaluxe.Base
_GameMode.Init();
_Player = new SPlayer[CSettings.MaxNumPlayer];
ResetPlayer();
CConfig.UsePlayers();
}
public static void SetGameMode(EGameMode Mode)
public static void EnterNomalGame()
{
switch (Mode)
{
case EGameMode.Normal:
_GameMode = new CGameModeNormal();
break;
case EGameMode.Medley:
_GameMode = new CGameModeMedley();
break;
case EGameMode.Duet:
_GameMode = new CGameModeDuet();
break;
default:
break;
}
_GameMode = new CGameModeNormal();
_GameMode.Init();
}
public static EGameMode GameMode
{
get { return _GameMode.GetGameMode(); }
get { return _GameMode.GetCurrentGameMode(); }
}
public static bool AddVisibleSong(int VisibleIndex)
public static bool AddVisibleSong(int VisibleIndex, EGameMode GameMode)
{
return _GameMode.AddVisibleSong(VisibleIndex);
return _GameMode.AddVisibleSong(VisibleIndex, GameMode);
}
public static bool AddSong(int AbsoluteIndex)
public static bool AddSong(int AbsoluteIndex, EGameMode GameMode)
{
return _GameMode.AddSong(AbsoluteIndex);
return _GameMode.AddSong(AbsoluteIndex, GameMode);
}
public static bool RemoveVisibleSong(int VisibleIndex)
@@ -175,7 +167,7 @@ namespace Vocaluxe.Base
public static int RoundNr
{
get { return _GameMode.GetActualRoundNr(); }
get { return _GameMode.GetCurrentRoundNr(); }
}
public static CSong GetSong()
@@ -213,6 +205,8 @@ namespace Vocaluxe.Base
for (int i = 0; i < _Player.Length; i++)
{
_Player[i].Points = 0f;
_Player[i].PointsLineBonus = 0f;
_Player[i].PointsGoldenNotes = 0f;
_Player[i].LineNr = 0;
_Player[i].NoteDiff = 0;
_Player[i].SingLine = new List<CLine>();
@@ -221,6 +215,7 @@ namespace Vocaluxe.Base
_Player[i].SongID = -1;
_Player[i].Medley = false;
_Player[i].Duet = false;
_Player[i].ShortSong = false;
_Player[i].DateTicks = DateTime.Now.Ticks;
_Player[i].SongFinished = false;
}
@@ -242,7 +237,12 @@ namespace Vocaluxe.Base
_MidBeatD = -0.5f + GetBeatFromTime(Time, song.BPM, song.Gap + CConfig.MicDelay/1000f);
_CurrentBeatD = (int)Math.Floor(_MidBeatD);
if (_OldBeatD == _CurrentBeatD)
for (int p = 0; p < _NumPlayer; p++)
{
CSound.AnalyzeBuffer(p);
}
if (_OldBeatD >= _CurrentBeatD)
return;
for (int p = 0; p < _NumPlayer; p++)
@@ -298,7 +298,6 @@ namespace Vocaluxe.Base
}
}
CSound.AnalyzeBuffer(p);
if (notes[Note].PointsForBeat > 0 && (CSound.RecordToneValid(p) || DEBUG_HIT))
{
int Tone = notes[Note].Tone;
@@ -317,8 +316,12 @@ namespace Vocaluxe.Base
if (_Player[p].NoteDiff <= (2 - (int)_Player[p].Difficulty))
{
// valid
CSound.RecordSetTone(p, Tone);
_Player[p].Points += (CSettings.MaxScore - CSettings.LinebonusScore) * (double)notes[Note].PointsForBeat / (double)song.Notes.GetLines(_Player[p].LineNr).Points;
//CSound.RecordSetTone(p, Tone);
double points = (CSettings.MaxScore - CSettings.LinebonusScore) * (double)notes[Note].PointsForBeat / (double)song.Notes.GetLines(_Player[p].LineNr).Points;
if (notes[Note].NoteType == ENoteType.Golden)
_Player[p].PointsGoldenNotes += points;
_Player[p].Points += points;
// update player notes (sung notes)
if (_Player[p].SingLine[Line].NoteCount > 0)
@@ -338,11 +341,6 @@ namespace Vocaluxe.Base
_Player[p].SingLine[Line].LastNote.IsPerfect(notes[Note]);
_Player[p].SingLine[Line].IsPerfect(lines[Line]);
if (_Player[p].SingLine[Line].PerfectLine)
{
_Player[p].Points += CSettings.LinebonusScore * (double)lines[Line].Points / (double)song.Notes.GetPoints(_Player[p].LineNr);
}
}
else
{
@@ -350,7 +348,7 @@ namespace Vocaluxe.Base
{
CNote nt = _Player[p].SingLine[Line].LastNote;
if (nt.EndBeat + 1 != beat || nt.Hit)
_Player[p].SingLine[Line].AddNote(new CNote(beat, 1, TonePlayer, String.Empty, false, notes[Note].NoteType));
_Player[p].SingLine[Line].AddNote(new CNote(beat, 1, TonePlayer, String.Empty, false, ENoteType.Freestyle));
else
{
if (nt.Tone == TonePlayer && nt.EndBeat + 1 == beat)
@@ -359,17 +357,41 @@ namespace Vocaluxe.Base
}
else
{
_Player[p].SingLine[Line].AddNote(new CNote(beat, 1, TonePlayer, String.Empty, false, notes[Note].NoteType));
_Player[p].SingLine[Line].AddNote(new CNote(beat, 1, TonePlayer, String.Empty, false, ENoteType.Freestyle));
}
}
}
else
{
_Player[p].SingLine[Line].AddNote(new CNote(beat, 1, TonePlayer, String.Empty, false, notes[Note].NoteType));
_Player[p].SingLine[Line].AddNote(new CNote(beat, 1, TonePlayer, String.Empty, false, ENoteType.Freestyle));
}
}
}
// Line Bonus
int NumLinesWithPoints = song.Notes.GetNumLinesWithPoints(_Player[p].LineNr);
if (Note == lines[Line].NoteCount - 1 && NumLinesWithPoints > 0)
{
if (notes[Note].EndBeat == beat && lines[Line].Points > 0f)
{
double factor = (double)_Player[p].SingLine[Line].Points / (double)lines[Line].Points;
if (factor < 0.4)
factor = 0.0;
else if (factor > 0.9)
factor = 1.0;
else
{
factor -= 0.4;
factor *= 2;
factor *= factor;
}
double points = CSettings.LinebonusScore * factor * 1f / NumLinesWithPoints;
_Player[p].Points += points;
_Player[p].PointsLineBonus += points;
}
}
}
}
+80
View File
@@ -0,0 +1,80 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Xml;
using System.Xml.XPath;
using Vocaluxe.Lib.Song;
using Vocaluxe.Lib.Playlist;
namespace Vocaluxe.Base
{
static class CPlaylists
{
private static List<CPlaylist> _Playlists;
private static CHelper Helper = new CHelper();
public static CPlaylist[] Playlists
{
get { return _Playlists.ToArray(); }
}
public static int NumPlaylists
{
get { return _Playlists.Count; }
}
public static void Init()
{
LoadPlaylists();
}
public static void LoadPlaylists()
{
_Playlists = new List<CPlaylist>();
List<string> files = new List<string>();
files.AddRange(Helper.ListFiles(CSettings.sFolderPlaylists, "*.xml", true, true));
foreach (string file in files)
{
CPlaylist playlist = new CPlaylist(file);
}
SortPlaylistsByName();
}
#region private methods
private static void SortPlaylistsByName()
{
_Playlists.Sort(CompareByPlaylistName);
}
private static int CompareByPlaylistName(CPlaylist a, CPlaylist b)
{
return String.Compare(a.PlaylistName, b.PlaylistName);
}
public static void DeletePlaylist(int PlaylistID)
{
if (PlaylistID < 0 || PlaylistID >= _Playlists.Count)
return;
if (_Playlists[PlaylistID].PlaylistFile != String.Empty)
{
try
{
File.Delete(_Playlists[PlaylistID].PlaylistFile);
_Playlists.RemoveAt(PlaylistID);
}
catch (Exception)
{
CLog.LogError("Can't delete Profile File " + _Playlists[PlaylistID].PlaylistFile + ".xml");
}
}
}
#endregion
}
}
+11 -5
View File
@@ -40,14 +40,14 @@ namespace Vocaluxe.Base
public static EGameState GameState = EGameState.Start;
public const string sProgramName = "Vocaluxe";
public const string sProgramCodeName = "Rising Star";
public const string sProgramCodeName = "Test";
public const int iVersionMajor = 0;
public const int iVersionMinor = 1; // milestones
public const int iVersionSub = 0; // steps
public const int iVersionMinor = 2; // milestones
public const int iVersionSub = 0; // patches
public const ERevision VersionRevision = ERevision.Alpha;
public const int iBuild = 60; // Increase on every published version! Never Reset!
public const int iBuild = 66; // Increase on every published version! Never Reset!
public const int iDatabaseHighscoreVersion = 1;
public const int iDatabaseCoverVersion = 1;
@@ -94,6 +94,7 @@ namespace Vocaluxe.Base
public const string sFolderLanguages = "Languages";
public const string sFolderScreenshots = "Screenshots";
public const string sFolderBackgroundMusic = "BackgroundMusic";
public const string sFolderPlaylists = "Playlists";
//public const String[] ToneStrings = new String[]{ "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B" };
public const int ToneMin = -36;
@@ -103,7 +104,7 @@ namespace Vocaluxe.Base
public static int MouseMoveDiffMin = 2;
public const float MouseMoveOffTime = 3f;
public const int MaxNumPlayer = 3;
public const int MaxNumPlayer = 6;
public const int MaxScore = 10000;
public const int LinebonusScore = 1000;
public const int MinScoreForDB = 100;
@@ -120,6 +121,11 @@ namespace Vocaluxe.Base
public static bool TabNavigation = false;
public const float BackgroundMusicFadeTime = 0.5f;
public static List<string> MusicFileTypes = new List<string>()
{
"*.mp3","*.wma","*.ogg","*.wav"
};
public static string GetVersionText()
{
+141 -36
View File
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
@@ -353,12 +354,24 @@ namespace Vocaluxe.Base
int res = s1.SortString.ToUpper().CompareTo(s2.SortString.ToUpper());
if (res == 0)
{
res = _Songs[s1.SongID].Artist.ToUpper().CompareTo(_Songs[s2.SongID].Artist.ToUpper());
if (res == 0)
if (CConfig.IgnoreArticles == EOffOn.TR_CONFIG_ON)
{
return _Songs[s1.SongID].Title.ToUpper().CompareTo(_Songs[s2.SongID].Title.ToUpper());
res = _Songs[s1.SongID].ArtistSorting.ToUpper().CompareTo(_Songs[s2.SongID].ArtistSorting.ToUpper());
if (res == 0)
{
return _Songs[s1.SongID].TitleSorting.ToUpper().CompareTo(_Songs[s2.SongID].TitleSorting.ToUpper());
}
return res;
}
else
{
res = _Songs[s1.SongID].Artist.ToUpper().CompareTo(_Songs[s2.SongID].Artist.ToUpper());
if (res == 0)
{
return _Songs[s1.SongID].Title.ToUpper().CompareTo(_Songs[s2.SongID].Title.ToUpper());
}
return res;
}
return res;
}
return res;
});
@@ -407,12 +420,24 @@ namespace Vocaluxe.Base
int res = s1.SortString.ToUpper().CompareTo(s2.SortString.ToUpper());
if (res == 0)
{
res = _Songs[s1.SongID].Artist.ToUpper().CompareTo(_Songs[s2.SongID].Artist.ToUpper());
if (res == 0)
if (CConfig.IgnoreArticles == EOffOn.TR_CONFIG_ON)
{
return _Songs[s1.SongID].Title.ToUpper().CompareTo(_Songs[s2.SongID].Title.ToUpper());
res = _Songs[s1.SongID].ArtistSorting.ToUpper().CompareTo(_Songs[s2.SongID].ArtistSorting.ToUpper());
if (res == 0)
{
return _Songs[s1.SongID].TitleSorting.ToUpper().CompareTo(_Songs[s2.SongID].TitleSorting.ToUpper());
}
return res;
}
else
{
res = _Songs[s1.SongID].Artist.ToUpper().CompareTo(_Songs[s2.SongID].Artist.ToUpper());
if (res == 0)
{
return _Songs[s1.SongID].Title.ToUpper().CompareTo(_Songs[s2.SongID].Title.ToUpper());
}
return res;
}
return res;
}
return res;
});
@@ -480,12 +505,24 @@ namespace Vocaluxe.Base
int res = s1.SortString.ToUpper().CompareTo(s2.SortString.ToUpper());
if (res == 0)
{
res = _Songs[s1.SongID].Artist.ToUpper().CompareTo(_Songs[s2.SongID].Artist.ToUpper());
if (res == 0)
if (CConfig.IgnoreArticles == EOffOn.TR_CONFIG_ON)
{
return _Songs[s1.SongID].Title.ToUpper().CompareTo(_Songs[s2.SongID].Title.ToUpper());
res = _Songs[s1.SongID].ArtistSorting.ToUpper().CompareTo(_Songs[s2.SongID].ArtistSorting.ToUpper());
if (res == 0)
{
return _Songs[s1.SongID].TitleSorting.ToUpper().CompareTo(_Songs[s2.SongID].TitleSorting.ToUpper());
}
return res;
}
else
{
res = _Songs[s1.SongID].Artist.ToUpper().CompareTo(_Songs[s2.SongID].Artist.ToUpper());
if (res == 0)
{
return _Songs[s1.SongID].Title.ToUpper().CompareTo(_Songs[s2.SongID].Title.ToUpper());
}
return res;
}
return res;
}
return res;
});
@@ -506,17 +543,29 @@ namespace Vocaluxe.Base
case ESongSorting.TR_CONFIG_ARTIST:
foreach (CSong song in _SongList)
{
_SortList.Add(new SongPointer(song.ID, song.Artist));
_SortList.Add(new SongPointer(song.ID, song.Artist));
}
_SortList.Sort(delegate(SongPointer s1, SongPointer s2)
{
int res = s1.SortString.ToUpper().CompareTo(s2.SortString.ToUpper());
if (res == 0)
{
if (CConfig.IgnoreArticles == EOffOn.TR_CONFIG_ON)
{
return _Songs[s1.SongID].Title.ToUpper().CompareTo(_Songs[s2.SongID].Title.ToUpper());
int res = _Songs[s1.SongID].ArtistSorting.ToUpper().CompareTo(_Songs[s2.SongID].ArtistSorting.ToUpper());
if (res == 0)
{
return _Songs[s1.SongID].TitleSorting.ToUpper().CompareTo(_Songs[s2.SongID].TitleSorting.ToUpper());
}
return res;
}
else
{
int res = s1.SortString.ToUpper().CompareTo(s2.SortString.ToUpper());
if (res == 0)
{
return _Songs[s1.SongID].Title.ToUpper().CompareTo(_Songs[s2.SongID].Title.ToUpper());
}
return res;
}
return res;
});
_SongsSortList = _SortList.ToArray();
@@ -535,7 +584,10 @@ namespace Vocaluxe.Base
case ESongSorting.TR_CONFIG_ARTIST_LETTER:
foreach (CSong song in _SongList)
{
_SortList.Add(new SongPointer(song.ID, song.Artist));
if (CConfig.IgnoreArticles == EOffOn.TR_CONFIG_ON)
_SortList.Add(new SongPointer(song.ID, song.ArtistSorting));
else
_SortList.Add(new SongPointer(song.ID, song.Artist));
}
_SortList.Sort(delegate(SongPointer s1, SongPointer s2)
@@ -543,7 +595,14 @@ namespace Vocaluxe.Base
int res = s1.SortString.ToUpper().CompareTo(s2.SortString.ToUpper());
if (res == 0)
{
return _Songs[s1.SongID].Title.ToUpper().CompareTo(_Songs[s2.SongID].Title.ToUpper());
if (CConfig.IgnoreArticles == EOffOn.TR_CONFIG_ON)
{
return _Songs[s1.SongID].TitleSorting.ToUpper().CompareTo(_Songs[s2.SongID].TitleSorting.ToUpper());
}
else
{
return _Songs[s1.SongID].Title.ToUpper().CompareTo(_Songs[s2.SongID].Title.ToUpper());
}
}
return res;
});
@@ -554,7 +613,7 @@ namespace Vocaluxe.Base
int NotLetterCat = -1;
for (int i=0; i < _SongsSortList.Length; i++)
{
Char firstLetter = Char.ToUpper(_SongsSortList[i].SortString[0]);
Char firstLetter = Char.ToUpper(_SongsSortList[i].SortString.Normalize(NormalizationForm.FormD)[0]);
if (!Char.IsLetter(firstLetter))
{
@@ -583,7 +642,10 @@ namespace Vocaluxe.Base
case ESongSorting.TR_CONFIG_TITLE_LETTER:
foreach (CSong song in _SongList)
{
_SortList.Add(new SongPointer(song.ID, song.Title));
if (CConfig.IgnoreArticles == EOffOn.TR_CONFIG_ON)
_SortList.Add(new SongPointer(song.ID, song.TitleSorting));
else
_SortList.Add(new SongPointer(song.ID, song.Title));
}
_SortList.Sort(delegate(SongPointer s1, SongPointer s2)
@@ -591,7 +653,14 @@ namespace Vocaluxe.Base
int res = s1.SortString.ToUpper().CompareTo(s2.SortString.ToUpper());
if (res == 0)
{
return _Songs[s1.SongID].Artist.ToUpper().CompareTo(_Songs[s2.SongID].Artist.ToUpper());
if (CConfig.IgnoreArticles == EOffOn.TR_CONFIG_ON)
{
return _Songs[s1.SongID].ArtistSorting.ToUpper().CompareTo(_Songs[s2.SongID].ArtistSorting.ToUpper());
}
else
{
return _Songs[s1.SongID].Artist.ToUpper().CompareTo(_Songs[s2.SongID].Artist.ToUpper());
}
}
return res;
});
@@ -602,7 +671,7 @@ namespace Vocaluxe.Base
NotLetterCat = -1;
for (int i=0; i < _SongsSortList.Length; i++)
{
Char firstLetter = Char.ToUpper(_SongsSortList[i].SortString[0]);
Char firstLetter = Char.ToUpper(_SongsSortList[i].SortString.Normalize(NormalizationForm.FormD)[0]);
if (!Char.IsLetter(firstLetter))
{
@@ -639,12 +708,24 @@ namespace Vocaluxe.Base
int res = s1.SortString.CompareTo(s2.SortString);
if (res == 0)
{
res = _Songs[s1.SongID].Artist.ToUpper().CompareTo(_Songs[s2.SongID].Artist.ToUpper());
if (res == 0)
if (CConfig.IgnoreArticles == EOffOn.TR_CONFIG_ON)
{
return _Songs[s1.SongID].Title.ToUpper().CompareTo(_Songs[s2.SongID].Title.ToUpper());
res = _Songs[s1.SongID].ArtistSorting.ToUpper().CompareTo(_Songs[s2.SongID].ArtistSorting.ToUpper());
if (res == 0)
{
return _Songs[s1.SongID].TitleSorting.ToUpper().CompareTo(_Songs[s2.SongID].TitleSorting.ToUpper());
}
return res;
}
else
{
res = _Songs[s1.SongID].Artist.ToUpper().CompareTo(_Songs[s2.SongID].Artist.ToUpper());
if (res == 0)
{
return _Songs[s1.SongID].Title.ToUpper().CompareTo(_Songs[s2.SongID].Title.ToUpper());
}
return res;
}
return res;
}
return res;
});
@@ -686,12 +767,24 @@ namespace Vocaluxe.Base
int res = s1.SortString.CompareTo(s2.SortString);
if (res == 0)
{
res = _Songs[s1.SongID].Artist.ToUpper().CompareTo(_Songs[s2.SongID].Artist.ToUpper());
if (res == 0)
if (CConfig.IgnoreArticles == EOffOn.TR_CONFIG_ON)
{
return _Songs[s1.SongID].Title.ToUpper().CompareTo(_Songs[s2.SongID].Title.ToUpper());
res = _Songs[s1.SongID].ArtistSorting.ToUpper().CompareTo(_Songs[s2.SongID].ArtistSorting.ToUpper());
if (res == 0)
{
return _Songs[s1.SongID].TitleSorting.ToUpper().CompareTo(_Songs[s2.SongID].TitleSorting.ToUpper());
}
return res;
}
else
{
res = _Songs[s1.SongID].Artist.ToUpper().CompareTo(_Songs[s2.SongID].Artist.ToUpper());
if (res == 0)
{
return _Songs[s1.SongID].Title.ToUpper().CompareTo(_Songs[s2.SongID].Title.ToUpper());
}
return res;
}
return res;
}
return res;
});
@@ -740,12 +833,24 @@ namespace Vocaluxe.Base
int res = s1.SortString.CompareTo(s2.SortString);
if (res == 0)
{
res = _Songs[s1.SongID].Artist.ToUpper().CompareTo(_Songs[s2.SongID].Artist.ToUpper());
if (res == 0)
if (CConfig.IgnoreArticles == EOffOn.TR_CONFIG_ON)
{
return _Songs[s1.SongID].Title.ToUpper().CompareTo(_Songs[s2.SongID].Title.ToUpper());
res = _Songs[s1.SongID].ArtistSorting.ToUpper().CompareTo(_Songs[s2.SongID].ArtistSorting.ToUpper());
if (res == 0)
{
return _Songs[s1.SongID].TitleSorting.ToUpper().CompareTo(_Songs[s2.SongID].TitleSorting.ToUpper());
}
return res;
}
else
{
res = _Songs[s1.SongID].Artist.ToUpper().CompareTo(_Songs[s2.SongID].Artist.ToUpper());
if (res == 0)
{
return _Songs[s1.SongID].Title.ToUpper().CompareTo(_Songs[s2.SongID].Title.ToUpper());
}
return res;
}
return res;
}
return res;
});
+132 -75
View File
@@ -181,6 +181,9 @@ namespace Vocaluxe.Base
case ERecordLib.PortAudio:
_Record = new CPortAudioRecord();
break;
case ERecordLib.DirectSound:
_Record = new CDirectSoundRecord();
break;
default:
_Record = new CPortAudioRecord();
@@ -237,6 +240,16 @@ namespace Vocaluxe.Base
return _Record.GetMaxVolume(Player);
}
public static int NumHalfTones(int Player)
{
return _Record.NumHalfTones(Player);
}
public static float[] ToneWeigth(int Player)
{
return _Record.ToneWeigth(Player);
}
public static SRecordDevice[] RecordGetDevices()
{
SRecordDevice[] devices = _Record.RecordDevices();
@@ -281,9 +294,10 @@ namespace Vocaluxe.Base
class CBuffer
{
private const double BaseToneFreq = 65.4064;
private const int NumHalfTones = 47;
private const double _BaseToneFreq = 65.4064;
private const int _NumHalfTones = 47;
private float[] _ToneWeigth;
private Int16[] _AnalysisBuffer = new Int16[4096];
private Object _AnalysisBufferLock = new Object();
@@ -291,37 +305,71 @@ namespace Vocaluxe.Base
private int _Tone = 0;
private int _ToneAbs = 0;
private double _MaxVolume = 0.0;
private bool _NewSamples = false;
private bool _NewSamples;
private MemoryStream _Stream; // full buffer
public CBuffer()
{
_ToneWeigth = new float[_NumHalfTones];
_Stream = new MemoryStream();
_NewSamples = false;
}
public int NumHalfTones
{
get { return _NumHalfTones; }
}
public int ToneAbs
{
get { return _ToneAbs; }
get
{
lock (_AnalysisBufferLock)
{
return _ToneAbs;
}
}
}
public int Tone
{
get { return _Tone; }
set { _Tone = value; }
get
{
lock (_AnalysisBufferLock)
{
return _Tone;
}
}
set
{
lock (_AnalysisBufferLock)
{
_Tone = value;
}
}
}
public float MaxVolume
{
get
{
return (float)_MaxVolume;
lock (_AnalysisBufferLock)
{
return (float)_MaxVolume;
}
}
}
public bool ToneValid
{
get { return _ToneValid; }
}
public CBuffer()
{
_Stream = new MemoryStream();
get
{
lock (_AnalysisBufferLock)
{
return _ToneValid;
}
}
}
public long Length
@@ -334,6 +382,17 @@ namespace Vocaluxe.Base
get { return _Stream.ToArray(); }
}
public float[] ToneWeigth
{
get
{
lock (_AnalysisBufferLock)
{
return _ToneWeigth;
}
}
}
public void Reset()
{
_Stream.SetLength(0L);
@@ -359,39 +418,8 @@ namespace Vocaluxe.Base
//if (assigned(fVoiceStream)) then
//fVoiceStream.WriteData(Buffer, BufferSize);
int BufferOffset = 0;
int SampleCount = (int)Math.Floor(buffer.Length / 2.0);
if (SampleCount > _AnalysisBuffer.Length)
{
BufferOffset = (SampleCount - _AnalysisBuffer.Length) * 2;
SampleCount = _AnalysisBuffer.Length;
}
lock (_AnalysisBufferLock)
{
try
{
// move old samples to the beginning of the array (if necessary)
for (int i = 0; i < _AnalysisBuffer.Length - SampleCount; i++)
{
_AnalysisBuffer[i] = _AnalysisBuffer[i + SampleCount];
}
byte[] b = new byte[2];
// copy new samples to analysis buffer
for (int i = 0; i < SampleCount; i++)
{
b[0] = buffer[BufferOffset + i * 2];
b[1] = buffer[BufferOffset + i * 2 + 1];
_AnalysisBuffer[_AnalysisBuffer.Length - SampleCount + i] = BitConverter.ToInt16(b, 0);
}
}
catch (Exception)
{
}
Add(buffer);
_NewSamples = true;
}
@@ -399,69 +427,98 @@ namespace Vocaluxe.Base
public void AnalyzeBuffer()
{
if (!_NewSamples)
return;
lock (_AnalysisBufferLock)
{
if (!_NewSamples)
return;
try
int len = _AnalysisBuffer.Length * 2;
if (_Stream.Length >= len)
{
// find maximum volume
_MaxVolume = 0;
for (int i = 0; i < _AnalysisBuffer.Length/4; i++)
{
float Volume = Math.Abs((float)_AnalysisBuffer[i]) / (float)Int16.MaxValue;
if (Volume > MaxVolume)
_MaxVolume = Volume;
}
byte[] buf = new byte[len];
_Stream.Position -= len;
_Stream.Read(buf, 0, len);
if (_MaxVolume >= 0.2f)
byte[] b = new byte[2];
for (int i = 0; i < _AnalysisBuffer.Length; i++)
{
// analyse the current voice pitch
AnalyzeByAutocorrelation();
_ToneValid = true;
}
else
_ToneValid = false;
b[0] = buf[i * 2];
b[1] = buf[i * 2 + 1];
_NewSamples = false;
_AnalysisBuffer[i] = BitConverter.ToInt16(b, 0);
}
}
catch (Exception)
_NewSamples = false;
}
try
{
// find maximum volume
_MaxVolume = 0;
for (int i = 0; i < _AnalysisBuffer.Length / 4; i++)
{
float Volume = Math.Abs((float)_AnalysisBuffer[i]) / (float)Int16.MaxValue;
if (Volume > MaxVolume)
_MaxVolume = Volume;
}
if (_MaxVolume >= 0.02f)
AnalyzeByAutocorrelation(true);
else
AnalyzeByAutocorrelation(false);
}
catch (Exception)
{
}
}
private void AnalyzeByAutocorrelation()
private void AnalyzeByAutocorrelation(bool valid)
{
const double HalftoneBase = 1.05946309436; // 2^(1/12) -> HalftoneBase^12 = 2 (one octave)
// prepare to analyze
double MaxWeight = -1.0;
int MaxTone = 0;
double MinWeight = 1.0;
int MaxTone = -1;
float[] Weigth = new float[_NumHalfTones];
// analyze halftones
// Note: at the lowest tone (~65Hz) and a buffer-size of 4096
// at 44.1 (or 48kHz) only 6 (or 5) samples are compared, this might be
// too few samples -> use a bigger buffer-size
for (int ToneIndex = 0; ToneIndex < NumHalfTones; ToneIndex++)
for (int ToneIndex = 0; ToneIndex < _NumHalfTones; ToneIndex++)
{
double CurFreq = BaseToneFreq * Math.Pow(HalftoneBase, ToneIndex);
double CurFreq = _BaseToneFreq * Math.Pow(HalftoneBase, ToneIndex);
double CurWeight = AnalyzeAutocorrelationFreq(CurFreq);
// TODO: prefer higher frequencies (use >= or use downto)
if (CurWeight > MaxWeight /* && (Math.Abs(ToneIndex - _ToneAbs) < 5 || _ToneAbs == 0)*/)
if (CurWeight > MaxWeight)
{
// this frequency has a higher weight
MaxWeight = CurWeight;
MaxTone = ToneIndex;
}
if (CurWeight < MinWeight)
MinWeight = CurWeight;
Weigth[ToneIndex] = (float)CurWeight;
}
_ToneAbs = MaxTone;
_Tone = MaxTone % 12;
if (valid && MaxWeight - MinWeight > 0.01)
{
for (int i = 0; i < Weigth.Length; i++)
{
_ToneWeigth[i] = Weigth[i];
}
_ToneAbs = MaxTone;
_Tone = MaxTone % 12;
_ToneValid = true;
}
else
_ToneValid = false;
}
private double AnalyzeAutocorrelationFreq(double Freq)
+98
View File
@@ -1,5 +1,7 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.Text;
using Vocaluxe.Lib.Draw;
@@ -95,4 +97,100 @@ namespace Vocaluxe.Base
#endregion VideoDecoder
}
class VideoPlayer
{
private STexture _VideoTexture;
private int _VideoStream;
private Stopwatch _VideoTimer;
private bool _Finished;
private bool _Loaded;
public bool IsFinished
{
get { return _Finished || !_Loaded; }
}
public bool Loop
{
set { CVideo.VdSetLoop(_VideoStream, value); }
}
public VideoPlayer()
{
_VideoTimer = new Stopwatch();
_VideoTexture = new STexture(-1);
_Finished = false;
_Loaded = false;
}
public void Load(string VideoName)
{
_VideoStream = CVideo.VdLoad(CTheme.GetVideoFilePath(VideoName));
_Loaded = true;
}
public void Start()
{
_VideoTimer.Reset();
_Finished = false;
//CVideo.VdSkip(_VideoStream, 0f, 0f);
_VideoTimer.Start();
}
public void Pause()
{
_VideoTimer.Stop();
}
public void Resume()
{
_VideoTimer.Start();
}
public void Draw()
{
if (!_Finished)
{
float VideoTime = _VideoTimer.ElapsedMilliseconds / 1000f;
_Finished = CVideo.VdFinished(_VideoStream);
STexture tex = new STexture(-1);
tex.height = 0f;
CVideo.VdGetFrame(_VideoStream, ref tex, VideoTime, ref VideoTime);
if (tex.height > 0)
{
CDraw.RemoveTexture(ref _VideoTexture);
_VideoTexture = tex;
}
}
RectangleF bounds = new RectangleF(0f, 0f, CSettings.iRenderW, CSettings.iRenderH);
RectangleF rect = new RectangleF(0f, 0f, _VideoTexture.width, _VideoTexture.height);
CHelper.SetRect(bounds, ref rect, rect.Width / rect.Height, EAspect.Crop);
CDraw.DrawTexture(_VideoTexture, new SRectF(rect.X, rect.Y, rect.Width, rect.Height, CSettings.zFar / 4));
}
public void PreLoad()
{
float VideoTime = 0f;
while (_VideoTexture.index == -1 && VideoTime < 1f)
{
float dummy = 0f;
CVideo.VdGetFrame(_VideoStream, ref _VideoTexture, 0, ref dummy);
VideoTime += 0.05f;
}
}
public void Close()
{
CVideo.VdClose(_VideoStream);
CDraw.RemoveTexture(ref _VideoTexture);
_Loaded = false;
_Finished = false;
_VideoTimer.Reset();
}
}
}
+104 -49
View File
@@ -7,6 +7,18 @@ using Vocaluxe.Lib.Song;
namespace Vocaluxe.GameModes
{
struct SongQueque
{
public int SongID;
public EGameMode GameMode;
public SongQueque(int songID, EGameMode gameMode)
{
SongID = songID;
GameMode = gameMode;
}
}
class CPoints
{
private SPlayer[,] _Rounds;
@@ -22,15 +34,18 @@ namespace Vocaluxe.GameModes
_Rounds[round, player].ProfileID = Player[player].ProfileID;
_Rounds[round, player].Name = Player[player].Name;
_Rounds[round, player].Difficulty = Player[player].Difficulty;
_Rounds[round, player].Points = 0;
_Rounds[round, player].Points = 0f;
_Rounds[round, player].PointsGoldenNotes = 0f;
_Rounds[round, player].PointsLineBonus = 0f;
_Rounds[round, player].Medley = false;
_Rounds[round, player].Duet = false;
_Rounds[round, player].ShortSong = false;
_Rounds[round, player].SongFinished = false;
}
}
}
public void SetPoints(int Round, int SongID, SPlayer[] Player, bool Medley, bool Duet)
public void SetPoints(int Round, int SongID, SPlayer[] Player, bool Medley, bool Duet, bool ShortSong)
{
long DateTicks = DateTime.Now.Ticks;
for (int player = 0; player < Player.Length; player++)
@@ -38,8 +53,11 @@ namespace Vocaluxe.GameModes
_Rounds[Round, player].SongID = SongID;
_Rounds[Round, player].LineNr = Player[player].LineNr;
_Rounds[Round, player].Points = Player[player].Points;
_Rounds[Round, player].PointsGoldenNotes = Player[player].PointsGoldenNotes;
_Rounds[Round, player].PointsLineBonus = Player[player].PointsLineBonus;
_Rounds[Round, player].Medley = Medley;
_Rounds[Round, player].Duet = Duet;
_Rounds[Round, player].ShortSong = ShortSong;
_Rounds[Round, player].DateTicks = DateTicks;
_Rounds[Round, player].SongFinished = Player[player].SongFinished;
}
@@ -68,11 +86,14 @@ namespace Vocaluxe.GameModes
{
player[p].Name = _Rounds[Round, p].Name;
player[p].Points = _Rounds[Round, p].Points;
player[p].PointsGoldenNotes = _Rounds[Round, p].PointsGoldenNotes;
player[p].PointsLineBonus = _Rounds[Round, p].PointsLineBonus;
player[p].SongID = _Rounds[Round, p].SongID;
player[p].LineNr = _Rounds[Round, p].LineNr;
player[p].Difficulty = _Rounds[Round, p].Difficulty;
player[p].Medley = _Rounds[Round, p].Medley;
player[p].Duet = _Rounds[Round, p].Duet;
player[p].ShortSong = _Rounds[Round, p].ShortSong;
player[p].DateTicks = _Rounds[Round, p].DateTicks;
player[p].SongFinished = _Rounds[Round, p].SongFinished;
player[p].ProfileID = _Rounds[Round, p].ProfileID;
@@ -84,40 +105,49 @@ namespace Vocaluxe.GameModes
abstract class CGameMode : IGameMode
{
protected bool _Initialized = false;
protected EGameMode _GameMode;
protected List<CSong> _Songs;
protected int _ActualSong;
protected List<SongQueque> _SongQueque;
protected int _CurrentSong;
protected CPoints _Points;
#region Implementation
public virtual void Init()
{
_Songs = new List<CSong>();
_SongQueque = new List<SongQueque>();
Reset();
}
public virtual EGameMode GetGameMode()
public virtual EGameMode GetCurrentGameMode()
{
return _GameMode;
if (_CurrentSong >= 0 && _CurrentSong < _SongQueque.Count)
{
return _SongQueque[_CurrentSong].GameMode;
}
return EGameMode.TR_GAMEMODE_NORMAL;
}
public virtual bool AddVisibleSong(int VisibleIndex)
public virtual bool AddVisibleSong(int VisibleIndex, EGameMode GameMode)
{
if (CSongs.VisibleSongs.Length > VisibleIndex)
{
_Songs.Add(new CSong(CSongs.VisibleSongs[VisibleIndex]));
SongManipulation(_Songs.Count - 1);
int SongID = CSongs.VisibleSongs[VisibleIndex].ID;
if (GameMode == EGameMode.TR_GAMEMODE_DUET && !CSongs.GetSong(SongID).IsDuet)
return false;
_SongQueque.Add(new SongQueque(SongID, GameMode));
return true;
}
return false;
}
public virtual bool AddSong(int AbsoluteIndex)
public virtual bool AddSong(int AbsoluteIndex, EGameMode GameMode)
{
if (CSongs.AllSongs.Length > AbsoluteIndex)
{
_Songs.Add(CSongs.AllSongs[AbsoluteIndex]);
SongManipulation(_Songs.Count - 1);
int SongID = CSongs.AllSongs[AbsoluteIndex].ID;
if (GameMode == EGameMode.TR_GAMEMODE_DUET && !CSongs.GetSong(SongID).IsDuet)
return false;
_SongQueque.Add(new SongQueque(SongID, GameMode));
return true;
}
return false;
@@ -127,24 +157,22 @@ namespace Vocaluxe.GameModes
{
if (CSongs.VisibleSongs.Length > VisibleIndex)
{
int ID = CSongs.VisibleSongs[VisibleIndex].ID;
int index = -1;
for (int i = 0; i < _Songs.Count; i++)
int SongID = CSongs.VisibleSongs[VisibleIndex].ID;
for (int i = 0; i < _SongQueque.Count; i++)
{
if (_Songs[i].ID == ID)
if (_SongQueque[i].SongID == SongID)
{
index = i;
break;
}
}
if (index > -1)
{
_Songs.RemoveAt(index);
return true;
}
return false;
if (index == -1)
return false;
_SongQueque.RemoveAt(index);
return true;
}
return false;
}
@@ -153,83 +181,110 @@ namespace Vocaluxe.GameModes
{
if (CSongs.AllSongs.Length > AbsoluteIndex)
{
int ID = CSongs.AllSongs[AbsoluteIndex].ID;
int index = -1;
for (int i = 0; i < _Songs.Count; i++)
int SongID = CSongs.AllSongs[AbsoluteIndex].ID;
for (int i = 0; i < _SongQueque.Count; i++)
{
if (_Songs[i].ID == ID)
if (_SongQueque[i].SongID == SongID)
{
index = i;
break;
}
}
if (index == -1)
return false;
if (index > -1)
{
_Songs.RemoveAt(index);
return true;
}
return false;
_SongQueque.RemoveAt(index);
return true;
}
return false;
}
public virtual void ClearSongs()
{
_Songs.Clear();
_SongQueque.Clear();
}
public virtual void Reset()
{
_ActualSong = -1;
_CurrentSong = -1;
}
public virtual void Start(SPlayer[] Player)
{
_Points = new CPoints(_Songs.Count, Player);
_Points = new CPoints(_SongQueque.Count, Player);
}
public virtual void NextRound(SPlayer[] Player)
{
if (_ActualSong < _Songs.Count && _Songs.Count > 0)
if (_CurrentSong < _SongQueque.Count && _SongQueque.Count > 0)
{
if (_ActualSong > -1)
if (_CurrentSong > -1)
{
_Points.SetPoints(_ActualSong, _Songs[_ActualSong].ID, Player, _GameMode == EGameMode.Medley, _GameMode == EGameMode.Duet);
_Points.SetPoints(
_CurrentSong,
_SongQueque[_CurrentSong].SongID,
Player,
_SongQueque[_CurrentSong].GameMode == EGameMode.TR_GAMEMODE_MEDLEY,
_SongQueque[_CurrentSong].GameMode == EGameMode.TR_GAMEMODE_DUET,
_SongQueque[_CurrentSong].GameMode == EGameMode.TR_GAMEMODE_SHORTSONG);
}
_ActualSong++;
_CurrentSong++;
}
}
public virtual bool IsFinished()
{
return (_ActualSong == _Songs.Count || _Songs.Count == 0);
return (_CurrentSong == _SongQueque.Count || _SongQueque.Count == 0);
}
public virtual int GetActualRoundNr()
public virtual int GetCurrentRoundNr()
{
return _ActualSong + 1;
return _CurrentSong + 1;
}
public virtual CSong GetSong()
{
if (_ActualSong >= 0 && _ActualSong < _Songs.Count)
if (_CurrentSong >= 0 && _CurrentSong < _SongQueque.Count)
{
return _Songs[_ActualSong];
CSong song = CSongs.GetSong(_SongQueque[_CurrentSong].SongID);
switch (GetCurrentGameMode())
{
case EGameMode.TR_GAMEMODE_MEDLEY:
// set medley mode timings
song.Start = CGame.GetTimeFromBeats(song.Medley.StartBeat, song.BPM) - song.Medley.FadeInTime + song.Gap;
if (song.Start < 0f)
song.Start = 0f;
song.Finish = CGame.GetTimeFromBeats(song.Medley.EndBeat, song.BPM) + song.Medley.FadeOutTime + song.Gap;
// set lines to medley mode
song.Notes.SetMedley(song.Medley.StartBeat, song.Medley.EndBeat);
break;
case EGameMode.TR_GAMEMODE_SHORTSONG:
song.Finish = CGame.GetTimeFromBeats(song.ShortEnd, song.BPM) + CSettings.DefaultMedleyFadeOutTime + song.Gap;
// set lines to medley mode
song.Notes.SetMedley(song.Notes.GetLines(0).Line[0].FirstNoteBeat, song.ShortEnd);
break;
}
return song;
}
return null;
}
public virtual int GetNumSongs()
{
return _Songs.Count;
return _SongQueque.Count;
}
public virtual CSong GetSong(int Num)
{
if (Num - 1 < _Songs.Count)
return _Songs[Num - 1];
if (Num - 1 < _SongQueque.Count)
return CSongs.GetSong(_SongQueque[Num - 1].SongID);
return null;
}
-17
View File
@@ -1,17 +0,0 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Vocaluxe.GameModes
{
class CGameModeDuet : CGameMode
{
public override void Init()
{
base.Init();
_GameMode = EGameMode.Duet;
_Initialized = true;
}
}
}
-35
View File
@@ -1,35 +0,0 @@
using System;
using System.Collections.Generic;
using System.Text;
using Vocaluxe.Base;
using Vocaluxe.Lib.Song;
namespace Vocaluxe.GameModes
{
class CGameModeMedley : CGameMode
{
public override void Init()
{
base.Init();
_GameMode = EGameMode.Medley;
_Initialized = true;
}
protected override void SongManipulation(int SongIndex)
{
CSong song = _Songs[SongIndex];
// set medley mode timings
song.Start = CGame.GetTimeFromBeats(song.Medley.StartBeat, song.BPM) - song.Medley.FadeInTime + song.Gap;
if (song.Start < 0f)
song.Start = 0f;
song.Finish = CGame.GetTimeFromBeats(song.Medley.EndBeat, song.BPM) + song.Medley.FadeOutTime + song.Gap;
// set lines to medley mode
song.Notes.SetMedley(song.Medley.StartBeat, song.Medley.EndBeat);
}
}
}
+1 -1
View File
@@ -4,13 +4,13 @@ using System.Text;
namespace Vocaluxe.GameModes
{
// Nomal singing
class CGameModeNormal : CGameMode
{
public override void Init()
{
base.Init();
_GameMode = EGameMode.Normal;
_Initialized = true;
}
}
+10 -8
View File
@@ -9,19 +9,20 @@ namespace Vocaluxe.GameModes
{
public enum EGameMode
{
Normal,
Medley,
Duet
TR_GAMEMODE_NORMAL,
TR_GAMEMODE_MEDLEY,
TR_GAMEMODE_DUET,
TR_GAMEMODE_SHORTSONG
}
interface IGameMode
{
void Init();
EGameMode GetGameMode();
EGameMode GetCurrentGameMode();
bool AddVisibleSong(int VisibleIndex);
bool AddSong(int AbsoluteIndex);
bool AddVisibleSong(int VisibleIndex, EGameMode GameMode);
bool AddSong(int AbsoluteIndex, EGameMode GameMode);
bool RemoveVisibleSong(int VisibleIndex);
bool RemoveSong(int AbsoluteIndex);
void ClearSongs();
@@ -30,11 +31,12 @@ namespace Vocaluxe.GameModes
void Start(SPlayer[] Player);
void NextRound(SPlayer[] Player);
bool IsFinished();
int GetActualRoundNr();
CSong GetSong();
int GetCurrentRoundNr();
CPoints GetPoints();
int GetNumSongs();
CSong GetSong();
CSong GetSong(int Num);
}
}
+204
View File
@@ -0,0 +1,204 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Xml;
using System.Xml.XPath;
using Vocaluxe.Lib.Song;
using Vocaluxe.Base;
namespace Vocaluxe.Lib.Playlist
{
public class CPlaylistSong
{
public int SongID;
public GameModes.EGameMode gm;
public CPlaylistSong(int SongID, GameModes.EGameMode gm)
{
this.SongID = SongID;
this.gm = gm;
}
public CPlaylistSong()
{
gm = GameModes.EGameMode.TR_GAMEMODE_NORMAL;
}
}
public class CPlaylist
{
private static XmlWriterSettings _settings = new XmlWriterSettings();
private static CHelper Helper = new CHelper();
public string PlaylistName;
public string PlaylistFile;
public List<CPlaylistSong> Songs;
public CPlaylist()
{
Init();
}
public CPlaylist(string file)
{
Init();
PlaylistName = file;
LoadPlaylist();
}
private void Init()
{
_settings.Indent = true;
_settings.Encoding = System.Text.Encoding.UTF8;
_settings.ConformanceLevel = ConformanceLevel.Document;
}
private void SavePlaylist()
{
string filename = string.Empty;
foreach (char chr in PlaylistName)
{
if (char.IsLetter(chr))
filename += chr.ToString();
}
if (filename == String.Empty)
filename = "1";
int i = 0;
while (File.Exists(Path.Combine(CSettings.sFolderPlaylists, filename + ".xml")))
{
i++;
if (!File.Exists(Path.Combine(CSettings.sFolderPlaylists, filename + i + ".xml")))
{
filename += i;
}
}
PlaylistFile = Path.Combine(CSettings.sFolderPlaylists, filename + ".xml");
XmlWriter writer;
try
{
writer = XmlWriter.Create(PlaylistFile, _settings);
}
catch (Exception e)
{
CLog.LogError("Error creating/opening Playlist File " + PlaylistFile + ": " + e.Message);
return;
}
if (writer == null)
{
CLog.LogError("Error creating/opening Playlist File " + PlaylistFile);
return;
}
writer.WriteStartDocument();
writer.WriteStartElement("root");
writer.WriteStartElement("Info");
writer.WriteElementString("PlaylistName", PlaylistName);
writer.WriteEndElement();
writer.WriteStartElement("Songs");
for (i = 0; i < Songs.Count; i++)
{
CSong[] songs = CSongs.AllSongs;
CSong song = new CSong();
for (int s = 0; i <= songs.Length; s++)
{
if (songs[s].ID == Songs[i].SongID)
{
song = songs[s];
break;
}
}
writer.WriteStartElement("Song" + (i + 1).ToString());
writer.WriteElementString("Artist", song.Artist);
writer.WriteElementString("Title", song.Title);
writer.WriteElementString("GameMode", Enum.GetName(typeof(GameModes.EGameMode), Songs[i].gm));
writer.WriteEndElement();
}
writer.WriteEndElement();
writer.WriteEndElement(); //end of root
writer.WriteEndDocument();
writer.Flush();
writer.Close();
}
private void LoadPlaylist()
{
bool loaded = false;
XPathDocument xPathDoc = null;
XPathNavigator navigator = null;
try
{
xPathDoc = new XPathDocument(PlaylistFile);
navigator = xPathDoc.CreateNavigator();
loaded = true;
}
catch (Exception e)
{
loaded = false;
if (navigator != null)
navigator = null;
if (xPathDoc != null)
xPathDoc = null;
CLog.LogError("Error opening Playlist File " + PlaylistFile + ": " + e.Message);
}
if (loaded)
{
string value = String.Empty;
if (CHelper.GetValueFromXML("//root/Info/PlaylistName", navigator, ref value, value))
{
PlaylistName = value;
Songs = new List<CPlaylistSong>();
List<string> songs = CHelper.GetValuesFromXML("Songs", navigator);
string artist = String.Empty;
string title = String.Empty;
GameModes.EGameMode gm = GameModes.EGameMode.TR_GAMEMODE_NORMAL;
for (int i = 0; i < songs.Count; i++)
{
CHelper.GetValueFromXML("//root/Songs/" + songs[i] + "/Artist", navigator, ref artist, String.Empty);
CHelper.GetValueFromXML("//root/Songs/" + songs[i] + "/Title", navigator, ref title, String.Empty);
CHelper.TryGetEnumValueFromXML<GameModes.EGameMode>("//root/Songs/" + songs[i] + "/GameMode", navigator, ref gm);
CPlaylistSong song = new CPlaylistSong();
CSong[] AllSongs = CSongs.AllSongs;
for (int s = 0; s < AllSongs.Length; s++)
{
if (AllSongs[s].Artist == artist && AllSongs[s].Title == title)
{
song.SongID = AllSongs[s].ID;
break;
}
}
song.gm = gm;
Songs.Add(song);
}
}
else
{
CLog.LogError("Can't find PlaylistName in Playlist File: " + PlaylistFile);
}
}
}
}
}
+22
View File
@@ -45,6 +45,14 @@ namespace Vocaluxe.Lib.Song
return _Lines[Index].Points;
}
public int GetNumLinesWithPoints(int Index)
{
if (Index >= _Lines.Count)
return 0;
return _Lines[Index].NumLinesWithPoints;
}
public void AddLines(CLines Lines)
{
_Lines.Add(Lines);
@@ -614,6 +622,20 @@ namespace Vocaluxe.Lib.Song
}
}
public int NumLinesWithPoints
{
get
{
int num = 0;
foreach (CLine line in _Lines)
{
if (line.Points > 0f)
num++;
}
return num;
}
}
#region Methods
public void AddLine(CLine Line)
{
+121 -2
View File
@@ -59,6 +59,8 @@ namespace Vocaluxe.Lib.Song
public bool CalculateMedley = true;
public float PreviewStart = 0f;
public int ShortEnd = 0;
public Encoding Encoding = Encoding.Default;
public string Folder = String.Empty;
public string FolderName = String.Empty;
@@ -115,6 +117,9 @@ namespace Vocaluxe.Lib.Song
public string Title = String.Empty;
public string Artist = String.Empty;
public string TitleSorting = String.Empty;
public string ArtistSorting = String.Empty;
public float Start = 0f;
public float Finish = 0f;
@@ -161,6 +166,8 @@ namespace Vocaluxe.Lib.Song
this.CalculateMedley = song.CalculateMedley;
this.PreviewStart = song.PreviewStart;
this.ShortEnd = song.ShortEnd;
this.Encoding = song.Encoding;
this.Folder = song.Folder;
this.FolderName = song.FolderName;
@@ -224,6 +231,11 @@ namespace Vocaluxe.Lib.Song
return Path.Combine(Folder, MP3FileName);
}
public string GetVideo()
{
return Path.Combine(Folder, VideoFileName);
}
public bool ReadTXTSong(string FilePath)
{
if (!File.Exists(FilePath))
@@ -337,6 +349,18 @@ namespace Vocaluxe.Lib.Song
HeaderFlags |= EHeaderFlags.Artist;
}
break;
case "TITLE-ON-SORTING":
if (Value != String.Empty)
{
this.TitleSorting = Value;
}
break;
case "ARTIST-ON-SORTING":
if (Value != String.Empty)
{
this.ArtistSorting = Value;
}
break;
case "MP3":
if (File.Exists(Path.Combine(this.Folder, Value)))
{
@@ -508,6 +532,17 @@ namespace Vocaluxe.Lib.Song
CheckFiles();
//Before saving this tags to .txt: Check, if ArtistSorting and Artist are equal, then don't save this tag.
if (this.ArtistSorting == "")
{
this.ArtistSorting = this.Artist;
}
if (this.TitleSorting == "")
{
this.TitleSorting = this.Title;
}
return true;
}
@@ -557,9 +592,9 @@ namespace Vocaluxe.Lib.Song
TempC = (char)sr.Read();
} while ((TempC.CompareTo(':') != 0) && (TempC.CompareTo('F') != 0) && (TempC.CompareTo('*') != 0) && (TempC.CompareTo('P') != 0));
FileLineNo++;
while (!sr.EndOfStream && (TempC.CompareTo('E') != 0))
{
FileLineNo++;
if (TempC.CompareTo('P') == 0)
{
char chr = (char)sr.Read();
@@ -634,7 +669,7 @@ namespace Vocaluxe.Lib.Song
{
c = sr.Read();
TempC = (char)c;
} while ((TempC.CompareTo('E') != 0) && !sr.EndOfStream && (c == 19 || c == 16 || c == 13));
} while ((TempC.CompareTo('E') != 0) && !sr.EndOfStream && (c == 19 || c == 16 || c == 13 || c==10));
}
foreach(CLines lines in this.Notes.Lines)
{
@@ -647,6 +682,7 @@ namespace Vocaluxe.Lib.Song
return false;
}
FindRefrain();
FindShortEnd();
_NotesLoaded = true;
return true;
@@ -831,5 +867,88 @@ namespace Vocaluxe.Lib.Song
this.PreviewStart = CGame.GetTimeFromBeats(this.Medley.StartBeat, this.BPM);
}
}
private void FindShortEnd(){
CLines lines = this.Notes.GetLines(0);
if (lines.LineCount == 0)
return;
// build sentences list
List<string> sentences = new List<string>();
foreach (CLine line in lines.Line)
{
if (line.Points != 0)
sentences.Add(line.Lyrics);
else
sentences.Add(String.Empty);
}
// find equal sentences series
List<Series> series = new List<Series>();
for (int i = 0; i < lines.LineCount - 1; i++)
{
for (int j = i + 1; j < lines.LineCount; j++)
{
if (sentences[i] == sentences[j] && sentences[i] != String.Empty)
{
Series tempSeries = new Series();
tempSeries.start = i;
tempSeries.end = i;
int max = 0;
if (j + j - i - 1 > lines.LineCount - 1)
max = lines.LineCount - 1 - j;
else
max = j - i - 1;
for (int k = 1; k <= max; k++)
{
if (sentences[i + k] == sentences[j + k] && sentences[i + k] != String.Empty)
tempSeries.end = i + k;
else
break;
}
tempSeries.length = tempSeries.end - tempSeries.start + 1;
series.Add(tempSeries);
}
}
}
//Calculate length of singing
int stop = (lines.Line[lines.Line.Length - 1].LastNoteBeat - lines.Line[0].FirstNoteBeat) / 2;
//Check if stop is in series
for (int i = 0; i < series.Count; i++)
{
if (lines.Line[series[i].start].FirstNoteBeat < stop && lines.Line[series[i].end].LastNoteBeat > stop)
{
if (stop < (lines.Line[series[i].start].FirstNoteBeat + ((lines.Line[series[i].end].LastNoteBeat - lines.Line[series[i].start].FirstNoteBeat) / 2)))
{
this.ShortEnd = lines.Line[series[i].start-1].LastNote.EndBeat;
return;
}
else
{
this.ShortEnd = lines.Line[series[i].end].LastNote.EndBeat;
return;
}
}
}
//Check if stop is in line
for (int i = 0; i < lines.Line.Length; i++)
{
if (lines.Line[i].FirstNoteBeat < stop && lines.Line[i].LastNoteBeat > stop)
{
this.ShortEnd = lines.Line[i].LastNoteBeat;
return;
}
}
ShortEnd = stop;
}
}
}
+437
View File
@@ -0,0 +1,437 @@
using System;
using System.Collections.Generic;
using System.Threading;
using SlimDX.DirectSound;
using SlimDX.Multimedia;
using Vocaluxe.Base;
namespace Vocaluxe.Lib.Sound
{
class CDirectSoundRecord : IRecord
{
private bool _initialized = false;
private List<SRecordDevice> _Devices = null;
private SRecordDevice[] _DeviceConfig = null;
private List<SoundCardSource> _Sources = null;
private CBuffer[] _Buffer;
public CDirectSoundRecord()
{
_Buffer = new CBuffer[CSettings.MaxNumPlayer];
for (int i = 0; i < _Buffer.Length; i++)
{
_Buffer[i] = new CBuffer();
}
Init();
}
public bool Init()
{
DeviceCollection devices = DirectSoundCapture.GetDevices();
_Devices = new List<SRecordDevice>();
_Sources = new List<SoundCardSource>();
int id = 0;
foreach (DeviceInformation dev in devices)
{
DirectSoundCapture ds = new DirectSoundCapture(dev.DriverGuid);
SRecordDevice device = new SRecordDevice();
device.Driver = dev.DriverGuid.ToString();
device.ID = id;
device.Name = dev.Description;
device.Inputs = new List<SInput>();
SInput inp = new SInput();
inp.Name = "Default";
inp.Channels = ds.Capabilities.Channels;
if (inp.Channels > 2)
inp.Channels = 2; //more are not supported in vocaluxe
device.Inputs.Add(inp);
_Devices.Add(device);
id++;
ds.Dispose();
}
_DeviceConfig = _Devices.ToArray();
_initialized = true;
return true;
}
public void CloseAll()
{
if (_initialized)
{
foreach (SoundCardSource source in _Sources)
{
source.Stop();
source.Dispose();
}
_initialized = false;
}
//System.IO.File.WriteAllBytes("test0.raw", _Buffer[0].Buffer);
}
public bool Start(SRecordDevice[] DeviceConfig)
{
if (!_initialized)
return false;
for (int i = 0; i < _Buffer.Length; i++)
{
_Buffer[i].Reset();
}
_DeviceConfig = DeviceConfig;
bool[] active = new bool[DeviceConfig.Length];
Guid[] guid = new Guid[DeviceConfig.Length];
short[] channels = new short[DeviceConfig.Length];
for (int dev = 0; dev < DeviceConfig.Length; dev++)
{
active[dev] = false;
for (int inp = 0; inp < DeviceConfig[dev].Inputs.Count; inp++)
{
if (DeviceConfig[dev].Inputs[inp].PlayerChannel1 > 0 ||
DeviceConfig[dev].Inputs[inp].PlayerChannel2 > 0)
active[dev] = true;
guid[dev] = new Guid(DeviceConfig[dev].Driver);
channels[dev] = (short)DeviceConfig[dev].Inputs[0].Channels;
}
}
for (int i = 0; i < _Devices.Count; i++)
{
if (active[i])
{
SoundCardSource source = new SoundCardSource(guid[i], channels[i]);
source.SampleRateKHz = 44.1;
source.SampleDataReady += this.OnDataReady;
source.Start();
_Sources.Add(source);
}
}
_DeviceConfig = DeviceConfig;
return true;
}
public bool Stop()
{
if (!_initialized)
return false;
foreach (SoundCardSource source in _Sources)
{
source.Stop();
}
return true;
}
public void AnalyzeBuffer(int Player)
{
if (!_initialized)
return;
_Buffer[Player].AnalyzeBuffer();
}
public int GetToneAbs(int Player)
{
if (!_initialized)
return 0;
return _Buffer[Player].ToneAbs;
}
public int GetTone(int Player)
{
if (!_initialized)
return 0;
return _Buffer[Player].Tone;
}
public void SetTone(int Player, int Tone)
{
if (!_initialized)
return;
_Buffer[Player].Tone = Tone;
}
public float GetMaxVolume(int Player)
{
if (!_initialized)
return 0f;
return _Buffer[Player].MaxVolume;
}
public bool ToneValid(int Player)
{
if (!_initialized)
return false;
return _Buffer[Player].ToneValid;
}
public SRecordDevice[] RecordDevices()
{
if (!_initialized)
return null;
if (_Devices.Count == 0)
return null;
return _Devices.ToArray();
}
public int NumHalfTones(int Player)
{
if (!_initialized)
return 0;
return _Buffer[Player].NumHalfTones;
}
public float[] ToneWeigth(int Player)
{
if (!_initialized)
return null;
return _Buffer[Player].ToneWeigth;
}
private void OnDataReady(object sender, SampleDataEventArgs e)
{
if (_initialized)
{
byte[] _leftBuffer = new byte[e.Data.Length / 2];
byte[] _rightBuffer = new byte[e.Data.Length / 2];
//[]: Sample, L: Left channel R: Right channel
//[LR][LR][LR][LR][LR][LR]
//The data is interleaved and needs to be demultiplexed
for (int i = 0; i < e.Data.Length / 2; i++)
{
_leftBuffer[i] = e.Data[i * 2 - (i % 2)];
_rightBuffer[i] = e.Data[i * 2 - (i % 2) + 2];
}
for (int i = 0; i < _DeviceConfig.Length; i++)
{
if (_DeviceConfig[i].Driver == e.Guid.ToString())
{
if (_DeviceConfig[i].Inputs[0].PlayerChannel1 > 0)
_Buffer[_DeviceConfig[i].Inputs[0].PlayerChannel1 - 1].ProcessNewBuffer(_leftBuffer);
if (_DeviceConfig[i].Inputs[0].PlayerChannel2 > 0)
_Buffer[_DeviceConfig[i].Inputs[0].PlayerChannel2 - 1].ProcessNewBuffer(_rightBuffer);
}
}
}
}
public class SampleDataEventArgs : EventArgs
{
public SampleDataEventArgs(byte[] data, Guid guid)
{
this.Data = data;
this.Guid = guid;
}
public byte[] Data { get; private set; }
public Guid Guid { get; private set; }
}
public class SoundCardSource : IDisposable
{
private volatile bool running;
private int bufferSize;
private CaptureBuffer buffer;
private CaptureBufferDescription bufferDescription;
private DirectSoundCapture captureDevice;
private WaveFormat waveFormat;
private Thread captureThread;
private List<NotificationPosition> notifications;
private int bufferPortionCount;
private int bufferPortionSize;
private WaitHandle[] waitHandles;
private double sampleRate;
private Guid guid;
private short channels;
public SoundCardSource(Guid guid, short channels)
{
this.guid = guid;
this.channels = channels;
this.waveFormat = new WaveFormat();
this.SampleRateKHz = 44.1;
this.bufferSize = 2048;
}
public event EventHandler<SampleDataEventArgs> SampleDataReady = delegate { };
public double SampleRateKHz
{
get
{
return this.sampleRate;
}
set
{
this.sampleRate = value;
if (this.running)
{
this.Restart();
}
}
}
public void Start()
{
if (this.running)
{
throw new InvalidOperationException();
}
if (this.captureDevice == null)
{
this.captureDevice = new DirectSoundCapture(guid);
}
this.waveFormat.FormatTag = WaveFormatTag.Pcm; // Change to WaveFormatTag.IeeeFloat for float
this.waveFormat.BitsPerSample = 16; // Set this to 32 for float
this.waveFormat.BlockAlignment = (short)(channels * (waveFormat.BitsPerSample / 8));
this.waveFormat.Channels = this.channels;
this.waveFormat.SamplesPerSecond = (int)(this.SampleRateKHz * 1000D);
this.waveFormat.AverageBytesPerSecond =
this.waveFormat.SamplesPerSecond *
this.waveFormat.BlockAlignment;
this.bufferPortionCount = 2;
this.bufferDescription.BufferBytes = this.bufferSize * sizeof(short) * bufferPortionCount * this.channels;
this.bufferDescription.Format = this.waveFormat;
this.bufferDescription.WaveMapped = false;
this.buffer = new CaptureBuffer(this.captureDevice, this.bufferDescription);
this.bufferPortionSize = this.buffer.SizeInBytes / this.bufferPortionCount;
this.notifications = new List<NotificationPosition>();
for (int i = 0; i < this.bufferPortionCount; i++)
{
NotificationPosition notification = new NotificationPosition();
notification.Offset = this.bufferPortionCount - 1 + (bufferPortionSize * i);
notification.Event = new AutoResetEvent(false);
this.notifications.Add(notification);
}
this.buffer.SetNotificationPositions(this.notifications.ToArray());
this.waitHandles = new WaitHandle[this.notifications.Count];
for (int i = 0; i < this.notifications.Count; i++)
{
this.waitHandles[i] = this.notifications[i].Event;
}
this.captureThread = new Thread(new ThreadStart(this.CaptureThread));
this.captureThread.IsBackground = true;
this.running = true;
this.captureThread.Start();
}
public void Stop()
{
this.running = false;
if (this.captureThread != null)
{
this.captureThread.Join();
this.captureThread = null;
}
if (this.buffer != null)
{
this.buffer.Dispose();
this.buffer = null;
}
if (this.notifications != null)
{
for (int i = 0; i < this.notifications.Count; i++)
{
this.notifications[i].Event.Close();
}
this.notifications.Clear();
this.notifications = null;
}
}
public void Restart()
{
this.Stop();
this.Start();
}
private void CaptureThread()
{
int bufferPortionSamples = this.bufferPortionSize / sizeof(byte);
// Buffer type must match this.waveFormat.FormatTag and this.waveFormat.BitsPerSample
byte[] bufferPortion = new byte[bufferPortionSamples];
int bufferPortionIndex;
this.buffer.Start(true);
while (this.running)
{
bufferPortionIndex = WaitHandle.WaitAny(this.waitHandles);
this.buffer.Read(
bufferPortion,
0,
bufferPortionSamples,
bufferPortionSize * Math.Abs((bufferPortionIndex - 1) % bufferPortionCount));
this.SampleDataReady(this, new SampleDataEventArgs(bufferPortion, guid));
}
this.buffer.Stop();
}
public void Dispose()
{
this.Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
this.Stop();
if (this.captureDevice != null)
{
this.captureDevice.Dispose();
this.captureDevice = null;
}
}
}
}
}
}
+16 -15
View File
@@ -422,10 +422,10 @@ namespace Vocaluxe.Lib.Sound
private Thread _DecoderThread;
AutoResetEvent EventDecode = new AutoResetEvent(false);
private AutoResetEvent EventDecode = new AutoResetEvent(false);
Object MutexData = new Object();
Object MutexSyncSignals = new Object();
private Object _LockData = new Object();
private Object _LockSyncSignals = new Object();
public PortAudioStream()
{
@@ -456,7 +456,7 @@ namespace Vocaluxe.Lib.Sound
{
get
{
lock (MutexData)
lock (_LockData)
{
return _NoMoreData && _data.BytesNotRead == 0L;
}
@@ -468,7 +468,7 @@ namespace Vocaluxe.Lib.Sound
get { return _Volume * 100f; }
set
{
lock (MutexData)
lock (_LockData)
{
_Volume = value / 100f;
if (_Volume < 0f)
@@ -484,7 +484,7 @@ namespace Vocaluxe.Lib.Sound
{
get
{
lock (MutexData)
lock (_LockData)
{
if (Finished)
_SyncTimer.Pause();
@@ -500,7 +500,7 @@ namespace Vocaluxe.Lib.Sound
set
{
_Paused = value;
lock (MutexSyncSignals)
lock (_LockData)
{
if (_Paused)
_SyncTimer.Pause();
@@ -615,12 +615,13 @@ namespace Vocaluxe.Lib.Sound
outputParams.sampleFormat = PortAudio.PaSampleFormat.paInt16;
outputParams.suggestedLatency = _outputDeviceInfo.defaultLowOutputLatency;
uint bufsize = (uint)CConfig.AudioBufferSize;
errorCheck("OpenDefaultStream", PortAudio.Pa_OpenStream(
out _Ptr,
IntPtr.Zero,
ref outputParams,
format.SamplesPerSecond,
(uint)CConfig.AudioBufferSize,
bufsize,
PortAudio.PaStreamFlags.paNoFlag,
_paStreamCallback,
data));
@@ -645,7 +646,7 @@ namespace Vocaluxe.Lib.Sound
public bool Skip(float Time)
{
lock (MutexSyncSignals)
lock (_LockSyncSignals)
{
_SetStart = Time;
_SetSkip = true;
@@ -658,7 +659,7 @@ namespace Vocaluxe.Lib.Sound
#region Threading
private void DoSkip()
{
lock (MutexData)
lock (_LockData)
{
_Decoder.SetPosition(_Start);
_CurrentTime = _Start;
@@ -677,7 +678,7 @@ namespace Vocaluxe.Lib.Sound
{
if (EventDecode.WaitOne(10))
{
lock (MutexSyncSignals)
lock (_LockSyncSignals)
{
if (_SetSkip)
{
@@ -724,7 +725,7 @@ namespace Vocaluxe.Lib.Sound
byte[] Buffer;
bool DoIt = false;
lock (MutexData)
lock (_LockData)
{
if (!_skip && BUFSIZE - 10000L > _data.BytesNotRead)
DoIt = true;
@@ -739,7 +740,7 @@ namespace Vocaluxe.Lib.Sound
{
if (_Loop)
{
lock (MutexSyncSignals)
lock (_LockSyncSignals)
{
_CurrentTime = 0f;
_Start = 0f;
@@ -754,7 +755,7 @@ namespace Vocaluxe.Lib.Sound
return;
}
lock (MutexData)
lock (_LockData)
{
_data.Write(Buffer);
_TimeCode = Timecode;
@@ -804,7 +805,7 @@ namespace Vocaluxe.Lib.Sound
return PortAudio.PaStreamCallbackResult.paContinue;
}
lock (MutexData)
lock (_LockData)
{
if (_NoMoreData || _data.BytesNotRead >= buf.Length)
{
+28 -2
View File
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;
@@ -90,6 +91,7 @@ namespace Vocaluxe.Lib.Sound
CLog.LogError("Error initializing PortAudio: " + e.Message);
return false;
}
return true;
}
@@ -103,6 +105,15 @@ namespace Vocaluxe.Lib.Sound
if (!_initialized)
return false;
if (DeviceConfig == null)
return false;
if (_recHandle == null)
return false;
if (_recHandle.Length == 0)
return false;
for (int i = 0; i < _Buffer.Length; i++)
{
_Buffer[i].Reset();
@@ -142,7 +153,7 @@ namespace Vocaluxe.Lib.Sound
ref inputParams,
IntPtr.Zero,
44100,
PortAudio.paFramesPerBufferUnspecified,
882,
PortAudio.PaStreamFlags.paNoFlag,
_myRecProc,
new IntPtr(i))))
@@ -152,7 +163,6 @@ namespace Vocaluxe.Lib.Sound
return false;
}
}
return result;
}
@@ -240,6 +250,22 @@ namespace Vocaluxe.Lib.Sound
return _Buffer[Player].ToneValid;
}
public int NumHalfTones(int Player)
{
if (!_initialized)
return 0;
return _Buffer[Player].NumHalfTones;
}
public float[] ToneWeigth(int Player)
{
if (!_initialized)
return null;
return _Buffer[Player].ToneWeigth;
}
public SRecordDevice[] RecordDevices()
{
if (!_initialized)
+2
View File
@@ -51,6 +51,8 @@ namespace Vocaluxe.Lib.Sound
void SetTone(int Player, int Tone);
float GetMaxVolume(int Player);
bool ToneValid(int Player);
int NumHalfTones(int Player);
float[] ToneWeigth(int Player);
SRecordDevice[] RecordDevices();
}
+61 -44
View File
@@ -167,21 +167,6 @@ static int64_t io_seek(void *opaque, int64_t pos, int whence)
return -1;
}
//uint64_t global_video_pkt_pts = AV_NOPTS_VALUE;
int ac_get_buffer(struct AVCodecContext *c, AVFrame *pic) {
int ret = avcodec_default_get_buffer(c, pic);
uint64_t *pts = av_malloc(sizeof(uint64_t));
*pts = AV_NOPTS_VALUE;
pic->opaque = pts;
return ret;
}
void ac_release_buffer(struct AVCodecContext *c, AVFrame *pic){
if (pic) av_freep(&pic->opaque);
avcodec_default_release_buffer(c, pic);
}
lp_ac_proberesult CALL_CONVT ac_probe_input_buffer(
void* buf,
int bufsize,
@@ -533,7 +518,10 @@ void* ac_create_video_decoder(lp_ac_instance pacInstance, lp_ac_stream_info info
if (!(pDecoder->pCodec = avcodec_find_decoder(pDecoder->pCodecCtx->codec_id))) {
return NULL; //Codec could not have been found
}
pDecoder->pCodecCtx->thread_count = 1; //this is for HT CPUs, it should be
// tested if there is a better solution
//Open codec
if (avcodec_open2(pDecoder->pCodecCtx, pDecoder->pCodec, NULL) < 0) {
return NULL; //Codec could not have been opened
@@ -635,36 +623,34 @@ double ac_sync_video(lp_ac_package pPackage, lp_ac_decoder pDec, AVFrame *src_fr
return pts;
}
int ac_decode_video_package(lp_ac_package pPackage, lp_ac_video_decoder pDecoder, lp_ac_decoder pDec) {
if (((lp_ac_package_data)pPackage)->ffpackage.size <= 0)
return 0;
int ac_decode_video_package(lp_ac_package pPackage, lp_ac_video_decoder pDecoder, lp_ac_decoder pDec)
{
int finished = 0;
double pts = 0;
int len = 0;
AVPacket pkt_tmp = ((lp_ac_package_data)pPackage)->ffpackage;
while (pkt_tmp.size > 0) {
len = avcodec_decode_video2(
pDecoder->pCodecCtx, pDecoder->pFrame,
&finished, &pkt_tmp);
if (len < 0) {
return 0;
}
pkt_tmp.size -= len;
pkt_tmp.data += len;
}
/*
avcodec_decode_video2(
pDecoder->pCodecCtx, pDecoder->pFrame, &finished,
&(((lp_ac_package_data)pPackage)->ffpackage));
*/
if (finished) {
if(((lp_ac_package_data)pPackage)->ffpackage.dts == AV_NOPTS_VALUE &&
*(uint64_t*)pDecoder->pFrame->opaque != AV_NOPTS_VALUE ){
pts = *(uint64_t*)pDecoder->pFrame->opaque;
} else if(((lp_ac_package_data)pPackage)->ffpackage.dts != AV_NOPTS_VALUE){
pts = ((lp_ac_package_data)pPackage)->ffpackage.dts;
} else {
pts = 0;
}
if(((lp_ac_data)pDec->pacInstance)->pFormatCtx->streams[pPackage->stream_index]->start_time != AV_NOPTS_VALUE){
pts -= ((lp_ac_data)pDec->pacInstance)->pFormatCtx->streams[pPackage->stream_index]->start_time;
}
pts *= av_q2d(((lp_ac_data)pDec->pacInstance)->pFormatCtx->streams[pPackage->stream_index]->time_base);
pts = ac_sync_video(pPackage, pDec, pDecoder->pFrame, pts);
pDec->timecode = pts;
if (finished != 0) {
pDecoder->pSwsCtx = sws_getCachedContext(pDecoder->pSwsCtx,
pDecoder->pCodecCtx->width, pDecoder->pCodecCtx->height, pDecoder->pCodecCtx->pix_fmt,
pDecoder->pCodecCtx->width, pDecoder->pCodecCtx->height, convert_pix_format(pDecoder->decoder.pacInstance->output_format),
@@ -678,6 +664,24 @@ int ac_decode_video_package(lp_ac_package pPackage, lp_ac_video_decoder pDecoder
pDecoder->pCodecCtx->height,
pDecoder->pFrameRGB->data,
pDecoder->pFrameRGB->linesize);
if(pkt_tmp.dts == AV_NOPTS_VALUE &&
*(uint64_t*)pDecoder->pFrame->opaque != AV_NOPTS_VALUE ){
pts = *(uint64_t*)pDecoder->pFrame->opaque;
} else if(pkt_tmp.dts != AV_NOPTS_VALUE){
pts = pkt_tmp.dts;
}
if(((lp_ac_data)pDec->pacInstance)->pFormatCtx->streams[pPackage->stream_index]->start_time != AV_NOPTS_VALUE){
pts -= ((lp_ac_data)pDec->pacInstance)->pFormatCtx->streams[pPackage->stream_index]->start_time;
}
pts *= av_q2d(((lp_ac_data)pDec->pacInstance)->pFormatCtx->streams[pPackage->stream_index]->time_base);
pts = ac_sync_video(pPackage, pDec, pDecoder->pFrame, pts);
pDec->timecode = pts;
return 1;
}
return 0;
@@ -795,11 +799,23 @@ int CALL_CONVT ac_drop_decode_package(lp_ac_package pPackage, lp_ac_decoder pDec
int ac_drop_decode_video_package(lp_ac_package pPackage, lp_ac_video_decoder pDecoder, lp_ac_decoder pDec) {
int finished;
double pts;
int len = 0;
avcodec_decode_video2(
pDecoder->pCodecCtx, pDecoder->pFrame, &finished,
&(((lp_ac_package_data)pPackage)->ffpackage));
AVPacket pkt_tmp = ((lp_ac_package_data)pPackage)->ffpackage;
while (pkt_tmp.size > 0) {
len = avcodec_decode_video2(
pDecoder->pCodecCtx, pDecoder->pFrame,
&finished, &pkt_tmp);
if (len < 0) {
return 0;
}
pkt_tmp.size -= len;
pkt_tmp.data += len;
}
if (finished) {
pts=0;
//global_video_pkt_pts = ((lp_ac_package_data)pPackage)->ffpackage.pts;
@@ -860,11 +876,12 @@ int CALL_CONVT ac_get_frame(lp_ac_instance pacInstance, lp_ac_decoder pDecoder)
lp_ac_package pPackage = ac_read_package(pacInstance);
int done = 0;
int pcount = 0;
while(done == 0 && pPackage != NULL){
if (((lp_ac_package_data)pPackage)->package.stream_index == pDecoder->stream_index){
done = ac_decode_package(pPackage, pDecoder);
ac_free_package(pPackage);
pcount++;
if (done == 0)
pPackage = ac_read_package(pacInstance);
} else {
@@ -876,7 +893,7 @@ int CALL_CONVT ac_get_frame(lp_ac_instance pacInstance, lp_ac_decoder pDecoder)
if (done == 0)
return 0;
else
return 1;
return pcount;
}
int CALL_CONVT ac_skip_frames(lp_ac_instance pacInstance, lp_ac_decoder pDecoder, int num) {
+31 -19
View File
@@ -258,8 +258,9 @@ namespace Vocaluxe.Lib.Video
private bool _terminated = false;
private Thread _thread;
AutoResetEvent EventDecode = new AutoResetEvent(false);
//AutoResetEvent EventDecode = new AutoResetEvent(false);
SFrameBuffer[] _FrameBuffer = new SFrameBuffer[5];
private bool _NewFrame = false;
Object MutexFramebuffer = new Object();
Object MutexSyncSignals = new Object();
@@ -359,7 +360,7 @@ namespace Vocaluxe.Lib.Video
UploadNewFrame(ref frame);
EventDecode.Set();
//EventDecode.Set();
return true;
}
@@ -367,11 +368,11 @@ namespace Vocaluxe.Lib.Video
{
lock (MutexSyncSignals)
{
_SetTime = Time;
VideoTime = _CurrentVideoTime;
_SetTime = Time;
}
UploadNewFrame(ref frame);
EventDecode.Set();
VideoTime = _CurrentVideoTime;
//EventDecode.Set();
return true;
}
return false;
@@ -387,7 +388,7 @@ namespace Vocaluxe.Lib.Video
_NoMoreFrames = false;
_Finished = false;
}
EventDecode.Set();
//EventDecode.Set();
return true;
}
@@ -441,17 +442,18 @@ namespace Vocaluxe.Lib.Video
_BufferFull = false;
_skip = false;
EventDecode.Set();
_NewFrame = false;
//EventDecode.Set();
}
private void Execute()
{
DoOpen();
EventDecode.Set();
//EventDecode.Set();
while (!_terminated)
{
if (EventDecode.WaitOne(10))
//if (EventDecode.WaitOne(10))
{
lock (MutexSyncSignals)
{
@@ -468,11 +470,12 @@ namespace Vocaluxe.Lib.Video
if (_skip)
DoSkip();
if (!_BufferFull)
if (!_NewFrame)
DoDecode();
if (_BufferFull)
Copy();
if (_NewFrame)
Copy();
Thread.Sleep(1);
}
}
@@ -555,7 +558,7 @@ namespace Vocaluxe.Lib.Video
{
const int FRAMEDROPCOUNT = 4;
if (!_FileOpened)
if (!_FileOpened || _NewFrame)
return;
if (_Paused || _NoMoreFrames || _BufferFull)
@@ -641,12 +644,18 @@ namespace Vocaluxe.Lib.Video
}
return;
}
Copy();
else
{
_NewFrame = true;
Copy();
}
}
private void Copy()
{
if (!_NewFrame)
return;
int num = -1;
lock (MutexFramebuffer)
@@ -687,11 +696,13 @@ namespace Vocaluxe.Lib.Video
if (numfull < _FrameBuffer.Length)
_BufferFull = false;
_NewFrame = false;
}
}
if (!_BufferFull)
EventDecode.Set();
//if (!_BufferFull)
// EventDecode.Set();
}
private void UploadNewFrame(ref STexture frame)
@@ -720,7 +731,7 @@ namespace Vocaluxe.Lib.Video
_CurrentVideoTime = _FrameBuffer[num].time;
}
_Finished = false;
EventDecode.Set();
//EventDecode.Set();
}
else
{
@@ -739,7 +750,7 @@ namespace Vocaluxe.Lib.Video
{
float td = _SetTime + _VideoSkipTime - _FrameBuffer[i].time;
if (td > _VideoTimeBase * 2)
if (td > _VideoTimeBase * 2f)
{
_FrameBuffer[i].displayed = true;
}
@@ -754,6 +765,7 @@ namespace Vocaluxe.Lib.Video
if (Result != -1)
{
_FrameBuffer[Result].displayed = true;
_BufferFull = false;
}
return Result;
+24 -1
View File
@@ -137,8 +137,16 @@ namespace Vocaluxe.Menu
public bool Draw()
{
bool ok = false;
if (_Theme.Type == EBackgroundTypes.Video && CConfig.VideoBackgrounds == EOffOn.TR_CONFIG_ON)
if (_Theme.Type == EBackgroundTypes.Video && CConfig.VideoBackgrounds == EOffOn.TR_CONFIG_ON && CConfig.VideosToBackground == EOffOn.TR_CONFIG_ON && CBackgroundMusic.Playing && CBackgroundMusic.SongHasVideo && CBackgroundMusic.VideoEnabled && !CBackgroundMusic.Disabled)
{
Pause();
ok = DrawBackgroundMusicVideo();
}
else if (_Theme.Type == EBackgroundTypes.Video && CConfig.VideoBackgrounds == EOffOn.TR_CONFIG_ON)
{
Resume();
ok = DrawVideo();
}
if (_Theme.TextureName != String.Empty &&
(_Theme.Type == EBackgroundTypes.Texture ||
@@ -206,6 +214,21 @@ namespace Vocaluxe.Menu
}
return false;
}
private bool DrawBackgroundMusicVideo()
{
STexture VideoTexture = CBackgroundMusic.GetVideoTexture();
if (VideoTexture.height > 0)
{
RectangleF bounds = new RectangleF(0f, 0f, CSettings.iRenderW, CSettings.iRenderH);
RectangleF rect = new RectangleF(0f, 0f, VideoTexture.width, VideoTexture.height);
CHelper.SetRect(bounds, ref rect, rect.Width / rect.Height, EAspect.Crop);
CDraw.DrawTexture(VideoTexture, new SRectF(rect.X, rect.Y, rect.Width, rect.Height, CSettings.zFar / 4));
return true;
}
return false;
}
#endregion internal
#region ThemeEdit
+3 -1
View File
@@ -41,6 +41,7 @@ namespace Vocaluxe.Menu
public float SReflectionHeight;
private bool _Selected;
public bool Pressed;
public bool Selected
{
get { return _Selected; }
@@ -234,7 +235,8 @@ namespace Vocaluxe.Menu
return;
STexture texture = new STexture(-1);
if (!Selected)
if (!Selected && !Pressed)
{
texture = CTheme.GetSkinTexture(_Theme.TextureName);
CDraw.DrawTexture(texture, Rect, Color);
+158 -62
View File
@@ -27,15 +27,23 @@ namespace Vocaluxe.Menu
ScreenOptionsSound = 10,
ScreenOptionsRecord = 11,
ScreenOptionsVideo = 12,
ScreenOptionsTheme = 13,
ScreenOptionsLyrics = 13,
ScreenOptionsTheme = 14,
ScreenNames = 14,
ScreenNames = 15,
ScreenCredits = 15,
ScreenCredits = 16,
ScreenNull = -1
}
enum EPopupScreens
{
PopupPlayerControl = 0,
NoPopup = -1
}
class CCursor
{
private Stopwatch _CursorFadingTimer;
@@ -185,11 +193,12 @@ namespace Vocaluxe.Menu
private static float _GlobalAlpha;
private static float _ZOffset;
private static EScreens ActualScreen;
private static EScreens NextScreen;
private static EScreens _CurrentScreen;
private static EScreens _NextScreen;
private static EPopupScreens _CurrentPopupScreen;
private static List<CMenu> ScreenList = new List<CMenu>();
private static CMenu[] Screens;
private static List<CMenu> _Screens = new List<CMenu>();
private static List<CMenu> _PopupScreens = new List<CMenu>();
public static float GlobalAlpha
{
@@ -206,28 +215,32 @@ namespace Vocaluxe.Menu
{
// Add Screens, must be the same order as in EScreens!
CLog.StartBenchmark(1, "Build Screen List");
ScreenList.Add(new CScreenTest());
ScreenList.Add(new CScreenLoad());
ScreenList.Add(new CScreenMain());
ScreenList.Add(new CScreenSong());
ScreenList.Add(new CScreenOptions());
ScreenList.Add(new CScreenSing());
ScreenList.Add(new CScreenProfiles());
ScreenList.Add(new CScreenScore());
ScreenList.Add(new CScreenHighscore());
ScreenList.Add(new CScreenOptionsGame());
ScreenList.Add(new CScreenOptionsSound());
ScreenList.Add(new CScreenOptionsRecord());
ScreenList.Add(new CScreenOptionsVideo());
ScreenList.Add(new CScreenOptionsTheme());
ScreenList.Add(new CScreenNames());
ScreenList.Add(new CScreenCredits());
CLog.StopBenchmark(1, "Build Screen List");
Screens = ScreenList.ToArray();
_Screens.Add(new CScreenTest());
_Screens.Add(new CScreenLoad());
_Screens.Add(new CScreenMain());
_Screens.Add(new CScreenSong());
_Screens.Add(new CScreenOptions());
_Screens.Add(new CScreenSing());
_Screens.Add(new CScreenProfiles());
_Screens.Add(new CScreenScore());
_Screens.Add(new CScreenHighscore());
_Screens.Add(new CScreenOptionsGame());
_Screens.Add(new CScreenOptionsSound());
_Screens.Add(new CScreenOptionsRecord());
_Screens.Add(new CScreenOptionsVideo());
_Screens.Add(new CScreenOptionsLyrics());
_Screens.Add(new CScreenOptionsTheme());
_Screens.Add(new CScreenNames());
_Screens.Add(new CScreenCredits());
_PopupScreens.Add(new CPopupScreenPlayerControl());
CLog.StopBenchmark(1, "Build Screen List");
ActualScreen = EScreens.ScreenLoad;
NextScreen = EScreens.ScreenNull;
_CurrentScreen = EScreens.ScreenLoad;
_NextScreen = EScreens.ScreenNull;
_CurrentPopupScreen = EPopupScreens.NoPopup;
_FadingTimer = new Stopwatch();
_GlobalAlpha = 1f;
@@ -247,50 +260,65 @@ namespace Vocaluxe.Menu
CTheme.Cursor.h,
CSettings.zNear);
for (int i = 0; i < Screens.Length; i++)
for (int i = 0; i < _Screens.Count; i++)
{
CLog.StartBenchmark(1, "Load Theme " + Enum.GetNames(typeof(EScreens))[i]);
Screens[i].LoadTheme();
_Screens[i].LoadTheme();
CLog.StopBenchmark(1, "Load Theme " + Enum.GetNames(typeof(EScreens))[i]);
}
for (int i = 0; i < _PopupScreens.Count; i++)
{
_PopupScreens[i].LoadTheme();
}
}
public static void ReloadTheme()
{
ReloadCursor();
for (int i = 0; i < Screens.Length; i++)
for (int i = 0; i < _Screens.Count; i++)
{
Screens[i].ReloadTheme();
_Screens[i].ReloadTheme();
}
for (int i = 0; i < _PopupScreens.Count; i++)
{
_PopupScreens[i].ReloadTheme();
}
}
public static void ReloadSkin()
{
ReloadCursor();
for (int i = 0; i < Screens.Length; i++)
for (int i = 0; i < _Screens.Count; i++)
{
Screens[i].ReloadTextures();
_Screens[i].ReloadTextures();
}
for (int i = 0; i < _PopupScreens.Count; i++)
{
_PopupScreens[i].ReloadTextures();
}
}
public static void SaveTheme()
{
CTheme.SaveTheme();
for (int i = 0; i < Screens.Length; i++)
for (int i = 0; i < _Screens.Count; i++)
{
Screens[i].SaveTheme();
_Screens[i].SaveTheme();
}
for (int i = 0; i < _PopupScreens.Count; i++)
{
_PopupScreens[i].SaveTheme();
}
}
public static void InitFirstScreen()
{
Screens[(int)ActualScreen].OnShow();
Screens[(int)ActualScreen].OnShowFinish();
}
public static CMenu GetScreen(int Index)
{
return Screens[Index];
_Screens[(int)_CurrentScreen].OnShow();
_Screens[(int)_CurrentScreen].OnShowFinish();
}
public static bool UpdateGameLogic(CKeys Keys, CMouse Mouse)
@@ -304,7 +332,7 @@ namespace Vocaluxe.Menu
CSound.Update();
CBackgroundMusic.Update();
if (CConfig.CoverLoading == ECoverLoading.TR_CONFIG_COVERLOADING_DYNAMIC && ActualScreen != EScreens.ScreenSing)
if (CConfig.CoverLoading == ECoverLoading.TR_CONFIG_COVERLOADING_DYNAMIC && _CurrentScreen != EScreens.ScreenSing)
CSongs.LoadCover(30L, 1);
if (CSettings.GameState != EGameState.EditTheme)
@@ -323,12 +351,13 @@ namespace Vocaluxe.Menu
public static bool Draw()
{
if ((NextScreen != EScreens.ScreenNull) && !_Fading)
if ((_NextScreen != EScreens.ScreenNull) && !_Fading)
{
_Fading = true;
_FadingTimer.Reset();
_FadingTimer.Start();
Screens[(int)NextScreen].OnShow();
_Screens[(int)_NextScreen].OnShow();
HidePopup(EPopupScreens.PopupPlayerControl);
}
if (_Fading)
@@ -345,30 +374,38 @@ namespace Vocaluxe.Menu
_GlobalAlpha = 1f;// -factor / 100f;
_ZOffset = CSettings.zFar/2;
Screens[(int)ActualScreen].Draw();
_Screens[(int)_CurrentScreen].Draw();
_GlobalAlpha = factor;
_ZOffset = 0f;
Screens[(int)NextScreen].Draw();
_Screens[(int)_NextScreen].Draw();
_GlobalAlpha = 1f;
}
else
{
Screens[(int)ActualScreen].OnClose();
ActualScreen = NextScreen;
NextScreen = EScreens.ScreenNull;
Screens[(int)ActualScreen].OnShowFinish();
Screens[(int)ActualScreen].ProcessMouseMove(_Cursor.X, _Cursor.Y);
Screens[(int)ActualScreen].Draw();
_Screens[(int)_CurrentScreen].OnClose();
_CurrentScreen = _NextScreen;
_NextScreen = EScreens.ScreenNull;
if(CBackgroundMusic.Playing)
CBackgroundMusic.Play();
_Screens[(int)_CurrentScreen].OnShowFinish();
_Screens[(int)_CurrentScreen].ProcessMouseMove(_Cursor.X, _Cursor.Y);
_Screens[(int)_CurrentScreen].Draw();
_Fading = false;
_FadingTimer.Stop();
}
}
else
{
Screens[(int)ActualScreen].Draw();
_Screens[(int)_CurrentScreen].Draw();
}
for (int i = 0; i < _PopupScreens.Count; i++)
{
_PopupScreens[i].Draw();
}
_Cursor.Draw();
DrawDebugInfos();
@@ -377,7 +414,23 @@ namespace Vocaluxe.Menu
public static void FadeTo(EScreens Screen)
{
NextScreen = Screen;
_NextScreen = Screen;
}
public static void ShowPopup(EPopupScreens PopupScreen)
{
_PopupScreens[(int)PopupScreen].OnShow();
_PopupScreens[(int)PopupScreen].OnShowFinish();
_CurrentPopupScreen = PopupScreen;
}
public static void HidePopup(EPopupScreens PopupScreen)
{
if (_CurrentPopupScreen != PopupScreen)
return;
_PopupScreens[(int)PopupScreen].OnClose();
_CurrentPopupScreen = EPopupScreens.NoPopup;
}
public static void HideCursor()
@@ -398,6 +451,8 @@ namespace Vocaluxe.Menu
KeyEvent KeyEvent = new KeyEvent();
MouseEvent MouseEvent = new MouseEvent();
bool PopupPlayerControlAllowed = _CurrentScreen != EScreens.ScreenOptionsRecord && _CurrentScreen != EScreens.ScreenSing && _CurrentScreen != EScreens.ScreenSong;
bool Resume = true;
while (keys.PollEvent(ref KeyEvent))
{
@@ -406,6 +461,14 @@ namespace Vocaluxe.Menu
CSettings.MouseInacive();
_Cursor.FadeOut();
}
if (PopupPlayerControlAllowed && KeyEvent.Key == Keys.Tab)
{
if (_CurrentPopupScreen == EPopupScreens.NoPopup)
ShowPopup(EPopupScreens.PopupPlayerControl);
else
HidePopup(EPopupScreens.PopupPlayerControl);
}
if (KeyEvent.ModSHIFT && (KeyEvent.Key == Keys.F1))
{
@@ -422,7 +485,14 @@ namespace Vocaluxe.Menu
else
{
if (!_Fading)
Resume &= Screens[(int)ActualScreen].HandleInput(KeyEvent);
{
bool handled = false;
if (_CurrentPopupScreen != EPopupScreens.NoPopup)
handled = _PopupScreens[(int)_CurrentPopupScreen].HandleInput(KeyEvent);
if (!handled)
Resume &= _Screens[(int)_CurrentScreen].HandleInput(KeyEvent);
}
}
}
@@ -436,8 +506,22 @@ namespace Vocaluxe.Menu
UpdateMousePosition(MouseEvent.X, MouseEvent.Y);
if (!_Fading && (_Cursor.IsActive || MouseEvent.LB || MouseEvent.RB))
Resume &= Screens[(int)ActualScreen].HandleMouse(MouseEvent);
bool isOverPopupPlayerControl = CHelper.IsInBounds(_PopupScreens[(int)EPopupScreens.PopupPlayerControl].ScreenArea, MouseEvent);
if (PopupPlayerControlAllowed && isOverPopupPlayerControl)
{
if (_CurrentPopupScreen == EPopupScreens.NoPopup)
ShowPopup(EPopupScreens.PopupPlayerControl);
}
if (!isOverPopupPlayerControl && _CurrentPopupScreen == EPopupScreens.PopupPlayerControl)
HidePopup(EPopupScreens.PopupPlayerControl);
bool handled = false;
if (_CurrentPopupScreen != EPopupScreens.NoPopup)
handled = _PopupScreens[(int)_CurrentPopupScreen].HandleMouse(MouseEvent);
if (!handled && !_Fading && (_Cursor.IsActive || MouseEvent.LB || MouseEvent.RB))
Resume &= _Screens[(int)_CurrentScreen].HandleMouse(MouseEvent);
}
return Resume;
}
@@ -452,7 +536,7 @@ namespace Vocaluxe.Menu
if (KeyEvent.ModSHIFT && (KeyEvent.Key == Keys.F1))
{
CSettings.GameState = EGameState.Normal;
Screens[(int)ActualScreen].NextInteraction();
_Screens[(int)_CurrentScreen].NextInteraction();
}
else if (KeyEvent.ModALT && (KeyEvent.Key == Keys.Enter))
{
@@ -465,14 +549,14 @@ namespace Vocaluxe.Menu
else
{
if (!_Fading)
Screens[(int)ActualScreen].HandleInputThemeEditor(KeyEvent);
_Screens[(int)_CurrentScreen].HandleInputThemeEditor(KeyEvent);
}
}
while (Mouse.PollEvent(ref MouseEvent))
{
if (!_Fading)
Screens[(int)ActualScreen].HandleMouseThemeEditor(MouseEvent);
_Screens[(int)_CurrentScreen].HandleMouseThemeEditor(MouseEvent);
UpdateMousePosition(MouseEvent.X, MouseEvent.Y);
}
@@ -486,7 +570,9 @@ namespace Vocaluxe.Menu
private static bool Update()
{
return Screens[(int)ActualScreen].UpdateGame();
if (_CurrentPopupScreen != EPopupScreens.NoPopup)
_PopupScreens[(int)_CurrentPopupScreen].UpdateGame();
return _Screens[(int)_CurrentScreen].UpdateGame();
}
private static void DrawDebugInfos()
@@ -606,6 +692,16 @@ namespace Vocaluxe.Menu
{
_Cursor.UnloadTextures();
if (CTheme.Cursor.color != string.Empty)
{
SColorF color;
color = CTheme.GetColor(CTheme.Cursor.color);
CTheme.Cursor.r = color.R;
CTheme.Cursor.g = color.G;
CTheme.Cursor.b = color.B;
CTheme.Cursor.a = color.A;
}
_Cursor = new CCursor(
CTheme.Cursor.SkinName,
new SColorF(CTheme.Cursor.r, CTheme.Cursor.g, CTheme.Cursor.b, CTheme.Cursor.a),
+2 -1
View File
@@ -13,7 +13,8 @@ namespace Vocaluxe.Menu
TStatic,
TSongMenu,
TLyric,
TSingNote
TSingNote,
TNameSelection
}
class CInteraction
+89 -39
View File
@@ -11,14 +11,6 @@ using Vocaluxe.Lib.Song;
namespace Vocaluxe.Menu
{
enum ELyricStyle
{
Fill,
Jump,
Slide,
Zoom
}
struct SNote
{
public string Text;
@@ -84,6 +76,12 @@ namespace Vocaluxe.Menu
}
}
public ELyricStyle LyricStyle
{
get { return _Style; }
set { _Style = value; }
}
public CLyric()
{
_Theme = new SThemeLyrics();
@@ -100,7 +98,7 @@ namespace Vocaluxe.Menu
_Notes = new List<SNote>();
_Text = new CText();
_Style = ELyricStyle.Slide;
_Style = ELyricStyle.Fill;
}
public bool LoadTheme(string XmlPath, string ElementName, XPathNavigator navigator, int SkinIndex)
@@ -319,32 +317,36 @@ namespace Vocaluxe.Menu
}
int zoom_note = -1;
int end_beat = -1;
float zoomx = 0f;
int current_note = -1;
foreach (SNote note in _Notes)
for (int note = 0; note < _Notes.Count; note++)
{
current_note++;
_Text.X = x;
_Text.Style = EStyle.Bold;
_Text.Text = note.Text;
_Text.Text = _Notes[note].Text;
RectangleF rect = CDraw.GetTextBounds(_Text);
if (note.Type == ENoteType.Freestyle)
if (_Notes[note].Type == ENoteType.Freestyle)
_Text.Style = EStyle.BoldItalic;
if (CurrentBeat >= note.StartBeat)
if (CurrentBeat >= _Notes[note].StartBeat)
{
if (CurrentBeat <= note.EndBeat)
bool last = note == _Notes.Count -1;
int endbeat = _Notes[note].EndBeat;
if (note < _Notes.Count -1)
endbeat = _Notes[note + 1].StartBeat - 1;
if (CurrentBeat <= endbeat)
{
zoom_note = current_note;
zoom_note = note;
end_beat = endbeat;
zoomx = _Text.X;
}
else
{
// already passed
if (current_note == last_note)
if (note == last_note)
_Text.Color = ColorProcessed;
else
_Text.Color = Color;
@@ -378,9 +380,11 @@ namespace Vocaluxe.Menu
RectangleF rect = CDraw.GetTextBounds(_Text);
float diff = _Notes[zoom_note].EndBeat - _Notes[zoom_note].StartBeat;
float diff = end_beat - _Notes[zoom_note].StartBeat;
if (diff <= 0f)
diff = 1f;
float p = (CurrentBeat - _Notes[zoom_note].StartBeat) / _Notes[zoom_note].Duration;
float p = (CurrentBeat - _Notes[zoom_note].StartBeat) / diff;
if (p > 1f)
p = 1f;
@@ -440,37 +444,49 @@ namespace Vocaluxe.Menu
{
float x = _X - _width / 2; // most left position
foreach (SNote note in _Notes)
//find last active note
int last_note = -1;
for (int i = 0; i < _Notes.Count; i++)
{
if (CurrentBeat >= _Notes[i].StartBeat)
last_note = i;
}
int jump_note = -1;
int end_beat = -1;
float jumpx = 0f;
for (int note = 0; note < _Notes.Count; note++)
{
_Text.X = x;
_Text.Style = EStyle.Bold;
_Text.Text = note.Text;
_Text.Text = _Notes[note].Text;
RectangleF rect = CDraw.GetTextBounds(_Text);
if (note.Type == ENoteType.Freestyle)
if (_Notes[note].Type == ENoteType.Freestyle)
_Text.Style = EStyle.BoldItalic;
if (CurrentBeat >= note.StartBeat)
if (CurrentBeat >= _Notes[note].StartBeat)
{
if (CurrentBeat <= note.EndBeat)
bool last = note == _Notes.Count - 1;
int endbeat = _Notes[note].EndBeat;
if (note < _Notes.Count - 1)
endbeat = _Notes[note + 1].StartBeat - 1;
if (CurrentBeat <= _Notes[note].EndBeat)
{
_Text.Color = ColorProcessed;
float diff = note.EndBeat - note.StartBeat;
if (diff == 0)
_Text.Draw();
else
{
float y = _Text.Y;
_Text.Y -= _Text.Height * 0.1f;
_Text.Draw();
_Text.Y = y;
}
jump_note = note;
end_beat = endbeat;
jumpx = _Text.X;
}
else
{
// already passed
_Text.Color = Color;
if (note == last_note)
_Text.Color = ColorProcessed;
else
_Text.Color = Color;
_Text.Draw();
}
@@ -484,6 +500,40 @@ namespace Vocaluxe.Menu
x += rect.Width;
}
if (jump_note > 0)
{
if (_Notes[jump_note].Duration == 0)
return;
_Text.X = jumpx;
_Text.Text = _Notes[jump_note].Text;
_Text.Color = ColorProcessed;
_Text.Style = EStyle.Bold;
if (_Notes[jump_note].Type == ENoteType.Freestyle)
_Text.Style = EStyle.BoldItalic;
float diff = _Notes[jump_note].EndBeat - _Notes[jump_note].StartBeat;
if (diff <= 0f)
diff = 1f;
float p = (CurrentBeat - _Notes[jump_note].StartBeat) / diff;
if (p > 1f)
p = 1f;
p = 1f - p;
if (diff == 1)
_Text.Draw();
else
{
float y = _Text.Y;
_Text.Y -= _Text.Height * 0.1f * p;
_Text.Draw();
_Text.Y = y;
}
}
}
#endregion draw
+221 -23
View File
@@ -16,6 +16,12 @@ using Vocaluxe.Menu.SongMenu;
namespace Vocaluxe.Menu
{
struct ZSort
{
public int ID;
public float z;
}
abstract class CMenu
{
private List<CInteraction> _Interactions;
@@ -29,6 +35,7 @@ namespace Vocaluxe.Menu
private List<CSongMenu> _SongMenus;
private List<CLyric> _Lyrics;
private List<CSingNotes> _SingNotes;
private List<CNameSelection> _NameSelections;
private Hashtable _htBackgrounds;
private Hashtable _htStatics;
@@ -38,6 +45,7 @@ namespace Vocaluxe.Menu
private Hashtable _htLyrics;
private Hashtable _htSelectSlides;
private Hashtable _htSingNotes;
private Hashtable _htNameSelections;
private int _PrevMouseX;
@@ -58,6 +66,14 @@ namespace Vocaluxe.Menu
protected string[] _ThemeLyrics;
protected string[] _ThemeSelectSlides;
protected string[] _ThemeSingNotes;
protected string[] _ThemeNameSelections;
protected SRectF _ScreenArea;
public SRectF ScreenArea
{
get { return _ScreenArea; }
}
public int ThemeScreenVersion
{
@@ -82,6 +98,7 @@ namespace Vocaluxe.Menu
_SongMenus = new List<CSongMenu>();
_Lyrics = new List<CLyric>();
_SingNotes = new List<CSingNotes>();
_NameSelections = new List<CNameSelection>();
_htBackgrounds = new Hashtable();
_htStatics = new Hashtable();
@@ -91,6 +108,7 @@ namespace Vocaluxe.Menu
_htLyrics = new Hashtable();
_htSelectSlides = new Hashtable();
_htSingNotes = new Hashtable();
_htNameSelections = new Hashtable();
_PrevMouseX = 0;
_PrevMouseY = 0;
@@ -99,6 +117,7 @@ namespace Vocaluxe.Menu
_MouseDY = 0;
_Active = false;
_ScreenArea = new SRectF(0f, 0f, CSettings.iRenderW, CSettings.iRenderH, 0f);
_ThemeName = String.Empty;
_ThemeBackgrounds = null;
@@ -109,6 +128,7 @@ namespace Vocaluxe.Menu
_ThemeLyrics = null;
_ThemeSelectSlides = null;
_ThemeSingNotes = null;
_ThemeNameSelections = null;
}
#region ThemeHandler
@@ -275,6 +295,22 @@ namespace Vocaluxe.Menu
}
}
}
if (_ThemeNameSelections != null)
{
for (int i = 0; i < _ThemeNameSelections.Length; i++)
{
CNameSelection nsel = new CNameSelection();
if (nsel.LoadTheme("//root/" + _ThemeName, _ThemeNameSelections[i], navigator, SkinIndex))
{
_htNameSelections.Add(_ThemeNameSelections[i], AddNameSelection(nsel));
}
else
{
CLog.LogError("Can't load NameSelection \"" + _ThemeNameSelections[i] + "\" in screen " + _ThemeName);
}
}
}
}
else
{
@@ -344,6 +380,12 @@ namespace Vocaluxe.Menu
_SingNotes[i].SaveTheme(writer);
}
// NameSelections
for (int i = 0; i < _NameSelections.Count; i++)
{
_NameSelections[i].SaveTheme(writer);
}
writer.WriteEndElement();
// End of File
@@ -395,6 +437,11 @@ namespace Vocaluxe.Menu
{
sn.ReloadTextures();
}
foreach (CNameSelection ns in _NameSelections)
{
ns.ReloadTextures();
}
}
public virtual void UnloadTextures()
@@ -438,6 +485,13 @@ namespace Vocaluxe.Menu
{
sn.UnloadTextures();
}
foreach (CNameSelection ns in _NameSelections)
{
ns.UnloadTextures();
}
}
public virtual void ReloadTheme()
@@ -488,6 +542,11 @@ namespace Vocaluxe.Menu
{
return _SingNotes;
}
public List<CNameSelection> GetNameSelections()
{
return _NameSelections;
}
#endregion GetLists
#region ElementHandler
@@ -555,6 +614,14 @@ namespace Vocaluxe.Menu
return _SingNotes.ToArray();
}
}
public CNameSelection[] NameSelections
{
get
{
return _NameSelections.ToArray();
}
}
#endregion Get Arrays
#region Hashtables
@@ -661,6 +728,19 @@ namespace Vocaluxe.Menu
throw;
}
}
public int htNameSelections(string key)
{
try
{
return (int)_htNameSelections[key];
}
catch (Exception)
{
CLog.LogError("Can't find NameSelection Element \"" + key + "\" in Screen " + _ThemeName);
throw;
}
}
#endregion Hashtables
#endregion ElementHandler
@@ -862,13 +942,12 @@ namespace Vocaluxe.Menu
{
ResumeBG();
_Active = true;
CBackgroundMusic.Play();
}
public virtual void OnClose()
{
PauseBG();
CBackgroundMusic.Pause();
_Active = false;
}
#endregion MenuHandler
@@ -906,22 +985,39 @@ namespace Vocaluxe.Menu
public void DrawFG()
{
foreach (CStatic stat in _Statics)
stat.Draw();
if (_Interactions.Count <= 0)
return;
List<ZSort> items = new List<ZSort>();
foreach (CSingNotes sn in _SingNotes)
for (int i = 0; i < _Interactions.Count; i++)
{
// TODO!!!!!
if (_IsVisible(i) && (
_Interactions[i].Type == EType.TButton ||
_Interactions[i].Type == EType.TSelectSlide ||
_Interactions[i].Type == EType.TStatic ||
_Interactions[i].Type == EType.TNameSelection ||
_Interactions[i].Type == EType.TText ||
_Interactions[i].Type == EType.TSongMenu))
{
ZSort zs = new ZSort();
zs.ID = i;
zs.z = _GetZValue(i);
items.Add(zs);
}
}
foreach (CButton button in _Buttons)
button.Draw();
if (items.Count <= 0)
return;
foreach (CSelectSlide slide in _SelectSlides)
slide.Draw();
items.Sort(delegate(ZSort s1, ZSort s2) { return (s2.z.CompareTo(s1.z)); });
for (int i = 0; i < items.Count; i++)
{
_DrawInteraction(items[i].ID);
}
foreach (CText text in _Texts)
text.Draw();
}
#endregion Drawing
@@ -929,58 +1025,65 @@ namespace Vocaluxe.Menu
public int AddBackground(CBackground bg)
{
_Backgrounds.Add(bg);
AddInteraction(_Backgrounds.Count - 1, EType.TBackground);
_AddInteraction(_Backgrounds.Count - 1, EType.TBackground);
return _Backgrounds.Count - 1;
}
public int AddButton(CButton button)
{
_Buttons.Add(button);
AddInteraction(_Buttons.Count - 1, EType.TButton);
_AddInteraction(_Buttons.Count - 1, EType.TButton);
return _Buttons.Count - 1;
}
public int AddSelectSlide(CSelectSlide slide)
{
_SelectSlides.Add(slide);
AddInteraction(_SelectSlides.Count - 1, EType.TSelectSlide);
_AddInteraction(_SelectSlides.Count - 1, EType.TSelectSlide);
return _SelectSlides.Count - 1;
}
public int AddStatic(CStatic stat)
{
_Statics.Add(stat);
AddInteraction(_Statics.Count - 1, EType.TStatic);
_AddInteraction(_Statics.Count - 1, EType.TStatic);
return _Statics.Count - 1;
}
public int AddText(CText text)
{
_Texts.Add(text);
AddInteraction(_Texts.Count - 1, EType.TText);
_AddInteraction(_Texts.Count - 1, EType.TText);
return _Texts.Count - 1;
}
public int AddSongMenu(CSongMenu songmenu)
{
_SongMenus.Add(songmenu);
AddInteraction(_SongMenus.Count - 1, EType.TSongMenu);
_AddInteraction(_SongMenus.Count - 1, EType.TSongMenu);
return _SongMenus.Count - 1;
}
public int AddLyric(CLyric lyric)
{
_Lyrics.Add(lyric);
AddInteraction(_Lyrics.Count - 1, EType.TLyric);
_AddInteraction(_Lyrics.Count - 1, EType.TLyric);
return _Lyrics.Count - 1;
}
public int AddSingNote(CSingNotes sn)
{
_SingNotes.Add(sn);
AddInteraction(_SingNotes.Count - 1, EType.TSingNote);
_AddInteraction(_SingNotes.Count - 1, EType.TSingNote);
return _SingNotes.Count - 1;
}
public int AddNameSelection(CNameSelection ns)
{
_NameSelections.Add(ns);
_AddInteraction(_NameSelections.Count - 1, EType.TNameSelection);
return _NameSelections.Count - 1;
}
#endregion Elements
#region InteractionHandling
@@ -1125,6 +1228,10 @@ namespace Vocaluxe.Menu
if (CHelper.IsInBounds(_Lyrics[interact.Num].Rect, x, y))
return true;
break;
case EType.TNameSelection:
if (CHelper.IsInBounds(_NameSelections[interact.Num].Rect, x, y))
return true;
break;
}
return false;
}
@@ -1145,10 +1252,41 @@ namespace Vocaluxe.Menu
return _Texts[interact.Num].Z;
case EType.TLyric:
return _Lyrics[interact.Num].Rect.Z;
case EType.TNameSelection:
return _NameSelections[interact.Num].Rect.Z;
}
return CSettings.zFar;
}
private float _GetZValue(int interaction)
{
switch (_Interactions[interaction].Type)
{
case EType.TButton:
return _Buttons[_Interactions[interaction].Num].Rect.Z;
case EType.TSelectSlide:
return _SelectSlides[_Interactions[interaction].Num].Rect.Z;
case EType.TStatic:
return _Statics[_Interactions[interaction].Num].Rect.Z;
case EType.TText:
return _Texts[_Interactions[interaction].Num].Z;
case EType.TSongMenu:
return _SongMenus[_Interactions[interaction].Num].Rect.Z;
case EType.TLyric:
return _Lyrics[_Interactions[interaction].Num].Rect.Z;
case EType.TNameSelection:
return _NameSelections[_Interactions[interaction].Num].Rect.Z;
}
return CSettings.zFar;
}
private void _NextInteraction()
{
_UnsetSelected();
@@ -1459,6 +1597,9 @@ namespace Vocaluxe.Menu
case EType.TLyric:
_Lyrics[_Interactions[_Selection].Num].Selected = true;
break;
case EType.TNameSelection:
_NameSelections[_Interactions[_Selection].Num].Selected = true;
break;
}
}
@@ -1484,6 +1625,9 @@ namespace Vocaluxe.Menu
case EType.TLyric:
_Lyrics[_Interactions[_Selection].Num].Selected = false;
break;
case EType.TNameSelection:
_NameSelections[_Interactions[_Selection].Num].Selected = false;
break;
}
}
@@ -1512,6 +1656,9 @@ namespace Vocaluxe.Menu
case EType.TLyric:
//_Lyrics[_Interactions[selection].Num].Selected = true;
break;
case EType.TNameSelection:
//_NameSelections[_Interactions[selection].Num].Selected = true;
break;
}
}
@@ -1540,6 +1687,9 @@ namespace Vocaluxe.Menu
case EType.TLyric:
//_Lyrics[_Interactions[selection].Num].Selected = false;
break;
case EType.TNameSelection:
//_NameSelections[_Interactions[selection].Num].Selected = false;
break;
}
}
@@ -1567,7 +1717,6 @@ namespace Vocaluxe.Menu
private bool _IsVisible(int interaction)
{
bool Result = false;
switch (_Interactions[interaction].Type)
{
case EType.TButton:
@@ -1587,9 +1736,12 @@ namespace Vocaluxe.Menu
case EType.TLyric:
return _Lyrics[_Interactions[interaction].Num].Visible;
case EType.TNameSelection:
return _NameSelections[_Interactions[interaction].Num].Visible;
}
return Result;
return false;
}
private SRectF _GetRect(int interaction)
@@ -1614,12 +1766,15 @@ namespace Vocaluxe.Menu
case EType.TLyric:
return _Lyrics[_Interactions[interaction].Num].Rect;
case EType.TNameSelection:
return _NameSelections[_Interactions[interaction].Num].Rect;
}
return Result;
}
private void AddInteraction(int num, EType type)
private void _AddInteraction(int num, EType type)
{
_Interactions.Add(new CInteraction(num, type));
if (!_Interactions[_Selection].ThemeEditorOnly)
@@ -1628,6 +1783,41 @@ namespace Vocaluxe.Menu
_NextInteraction();
}
private void _DrawInteraction(int interaction)
{
switch (_Interactions[interaction].Type)
{
case EType.TButton:
_Buttons[_Interactions[interaction].Num].Draw();
break;
case EType.TSelectSlide:
_SelectSlides[_Interactions[interaction].Num].Draw();
break;
case EType.TStatic:
_Statics[_Interactions[interaction].Num].Draw();
break;
case EType.TText:
_Texts[_Interactions[interaction].Num].Draw();
break;
case EType.TSongMenu:
_SongMenus[_Interactions[interaction].Num].Draw();
break;
case EType.TNameSelection:
_NameSelections[_Interactions[interaction].Num].Draw();
break;
//TODO:
//case EType.TLyric:
// _Lyrics[_Interactions[interaction].Num].Draw(0);
// break;
}
}
#endregion InteractionHandling
#region Theme Handling
@@ -1660,6 +1850,10 @@ namespace Vocaluxe.Menu
case EType.TLyric:
_Lyrics[_Interactions[_Selection].Num].MoveElement(stepX, stepY);
break;
case EType.TNameSelection:
_NameSelections[_Interactions[_Selection].Num].MoveElement(stepX, stepY);
break;
}
}
}
@@ -1693,6 +1887,10 @@ namespace Vocaluxe.Menu
case EType.TLyric:
_Lyrics[_Interactions[_Selection].Num].ResizeElement(stepW, stepH);
break;
case EType.TNameSelection:
_NameSelections[_Interactions[_Selection].Num].ResizeElement(stepW, stepH);
break;
}
}
}
+552
View File
@@ -0,0 +1,552 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Text;
using System.Xml;
using System.Xml.XPath;
using System.Windows.Forms;
using Vocaluxe.Base;
using Vocaluxe.Lib.Draw;
namespace Vocaluxe.Menu
{
struct SThemeNameSelection
{
public string Name;
public string TextureEmptyTileName;
public string ColorEmptyTileName;
public string TextureTileSelectedName;
public float NameSpace;
public float NameHeight;
public string NameFont;
public EStyle NameStyle;
public SColorF NameColor;
public string NameColorName;
}
class CNameSelection : IMenuElement
{
class CTile
{
public int PlayerNr;
public CStatic Avatar;
public CText Name;
public CTile()
{
}
public CTile(CStatic av, CText tex, int pl)
{
Avatar = av;
Name = tex;
PlayerNr = pl;
}
}
private SThemeNameSelection _Theme;
private bool _ThemeLoaded;
public bool Selected = false;
public bool Visible = true;
public SRectF Rect;
private List<CTile> _Tiles;
private STexture _TextureEmptyTile;
private STexture _TextureTileSelected;
public SColorF ColorEmptyTile;
private int _NumW;
private int _NumH;
private float _SpaceW;
private float _SpaceH;
private int _TileW;
private int _TileH;
public int _Offset = 0;
private int _actualSelection = -1;
public int Selection = -1;
int _player = -1;
private List<int> VisibleProfiles;
private CStatic PlayerSelector;
public CNameSelection()
{
_Theme = new SThemeNameSelection();
_Tiles = new List<CTile>();
VisibleProfiles = new List<int>();
}
public void Init()
{
PrepareTiles();
PlayerSelector = new CStatic();
PlayerSelector.Texture = _TextureTileSelected;
PlayerSelector.Rect = new SRectF(0, 0, (_TileW + 6), (_TileH + 6), (Rect.Z - 0.5f));
PlayerSelector.Visible = false;
UpdateVisibleProfiles();
UpdateList(0);
}
public bool LoadTheme(string XmlPath, string ElementName, XPathNavigator navigator, int SkinIndex)
{
string item = XmlPath + "/" + ElementName;
_ThemeLoaded = true;
_ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/X", navigator, ref Rect.X);
_ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/Y", navigator, ref Rect.Y);
_ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/Z", navigator, ref Rect.Z);
_ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/W", navigator, ref Rect.W);
_ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/H", navigator, ref Rect.H);
_ThemeLoaded &= CHelper.GetValueFromXML(item + "/SkinEmptyTile", navigator, ref _Theme.TextureEmptyTileName, String.Empty);
if (CHelper.GetValueFromXML(item + "/ColorEmptyTile", navigator, ref _Theme.ColorEmptyTileName, String.Empty))
{
_ThemeLoaded &= CTheme.GetColor(_Theme.ColorEmptyTileName, SkinIndex, ref ColorEmptyTile);
}
else
{
_ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/R", navigator, ref ColorEmptyTile.R);
_ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/G", navigator, ref ColorEmptyTile.G);
_ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/B", navigator, ref ColorEmptyTile.B);
_ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/A", navigator, ref ColorEmptyTile.A);
}
_ThemeLoaded &= CHelper.GetValueFromXML(item + "/SkinTileSelected", navigator, ref _Theme.TextureTileSelectedName, String.Empty);
_ThemeLoaded &= CHelper.TryGetIntValueFromXML(item + "/Tiles/W", navigator, ref _TileW);
_ThemeLoaded &= CHelper.TryGetIntValueFromXML(item + "/Tiles/H", navigator, ref _TileH);
_ThemeLoaded &= CHelper.TryGetIntValueFromXML(item + "/Tiles/NumW", navigator, ref _NumW);
_ThemeLoaded &= CHelper.TryGetIntValueFromXML(item + "/Tiles/NumH", navigator, ref _NumH);
_ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/Tiles/SpaceW", navigator, ref _SpaceW);
_ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/Tiles/SpaceH", navigator, ref _SpaceH);
_ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/Tiles/Name/Space", navigator, ref _Theme.NameSpace);
_ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/Tiles/Name/H", navigator, ref _Theme.NameHeight);
_ThemeLoaded &= CHelper.GetValueFromXML(item + "/Tiles/Name/Font", navigator, ref _Theme.NameFont, "Normal");
_ThemeLoaded &= CHelper.TryGetEnumValueFromXML<EStyle>(item + "/Tiles/Name/Style", navigator, ref _Theme.NameStyle);
if (CHelper.GetValueFromXML(item + "/Tiles/Name/Color", navigator, ref _Theme.NameColorName, String.Empty))
{
_ThemeLoaded &= CTheme.GetColor(_Theme.NameColorName, SkinIndex, ref _Theme.NameColor);
}
else
{
if (CHelper.TryGetFloatValueFromXML(item + "/Tiles/Name/R", navigator, ref _Theme.NameColor.R))
{
_ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/Tiles/Name/G", navigator, ref _Theme.NameColor.G);
_ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/Tiles/Name/B", navigator, ref _Theme.NameColor.B);
_ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/Tiles/Name/A", navigator, ref _Theme.NameColor.A);
}
}
if (_ThemeLoaded)
{
_Theme.Name = ElementName;
LoadTextures();
}
return _ThemeLoaded;
}
public bool SaveTheme(XmlWriter writer)
{
if (_ThemeLoaded)
{
writer.WriteStartElement(_Theme.Name);
writer.WriteComment("<X>, <Y>, <Z>, <W>, <H>: NameSelection position, width and height");
writer.WriteElementString("X", Rect.X.ToString("#0"));
writer.WriteElementString("Y", Rect.Y.ToString("#0"));
writer.WriteElementString("Z", Rect.Z.ToString("#0.00"));
writer.WriteElementString("W", Rect.W.ToString("#0"));
writer.WriteElementString("H", Rect.H.ToString("#0"));
writer.WriteComment("<SkinEmptyTile>: Texture name");
writer.WriteElementString("SkinEmptyTile", _Theme.TextureEmptyTileName);
writer.WriteComment("<ColorEmptyTile>: Static color from ColorScheme (high priority)");
writer.WriteComment("or <R>, <G>, <B>, <A> (lower priority)");
if (_Theme.ColorEmptyTileName != String.Empty)
{
writer.WriteElementString("ColorEmptyTile", _Theme.ColorEmptyTileName);
}
else
{
writer.WriteElementString("R", ColorEmptyTile.R.ToString("#0.00"));
writer.WriteElementString("G", ColorEmptyTile.G.ToString("#0.00"));
writer.WriteElementString("B", ColorEmptyTile.B.ToString("#0.00"));
writer.WriteElementString("A", ColorEmptyTile.A.ToString("#0.00"));
}
writer.WriteComment("<SkinTileSelected>: Texture name");
writer.WriteElementString("SkinTileSelected", _Theme.TextureTileSelectedName);
writer.WriteComment("<Tiles>: Options for tiles");
writer.WriteStartElement("Tiles");
writer.WriteComment("<W>, <H>: Width and height of tile");
writer.WriteElementString("W", _TileW.ToString());
writer.WriteElementString("H", _TileH.ToString());
writer.WriteComment("<NumW>, <NumH>: Number of tiles");
writer.WriteElementString("NumW", _NumW.ToString());
writer.WriteElementString("NumH", _NumH.ToString());
writer.WriteComment("<SpaceW>, <SpaceH>: Space between tiles");
writer.WriteElementString("SpaceW", _SpaceW.ToString("#0.00"));
writer.WriteElementString("SpaceH", _SpaceH.ToString("#0.00"));
writer.WriteComment("<Name>: Options for player-name");
writer.WriteStartElement("Name");
writer.WriteComment("<Space>: Space between name and tile");
writer.WriteElementString("Space", _Theme.NameSpace.ToString("#0.0"));
writer.WriteComment("<Font>: Text font name");
writer.WriteElementString("Font", _Theme.NameFont);
writer.WriteComment("<Color>: Text color from ColorScheme (high priority)");
if (_Theme.NameColorName != String.Empty)
{
writer.WriteElementString("Color", _Theme.NameColorName);
}
else
{
writer.WriteElementString("R", _Theme.NameColor.R.ToString("#0.00"));
writer.WriteElementString("G", _Theme.NameColor.G.ToString("#0.00"));
writer.WriteElementString("B", _Theme.NameColor.B.ToString("#0.00"));
writer.WriteElementString("A", _Theme.NameColor.A.ToString("#0.00"));
}
writer.WriteComment("<Style>: Text style: " + CConfig.ListStrings(Enum.GetNames(typeof(EStyle))));
writer.WriteElementString("Style", _Theme.NameStyle.ToString());
writer.WriteComment("<H>: Text height");
writer.WriteElementString("H", _Theme.NameHeight.ToString("#0"));
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndElement();
return true;
}
return false;
}
public void Draw()
{
Draw(false);
}
public void ForceDraw()
{
Draw(true);
}
public void Draw(bool ForceDraw)
{
int i = 0;
foreach (CTile tile in _Tiles)
{
tile.Avatar.Draw();
tile.Name.Draw();
if (PlayerSelector.Visible)
{
//Update PlayerSelector-Coords
if (_player > -1 && _actualSelection == i)
{
PlayerSelector.Rect.X = tile.Avatar.Rect.X - 3;
PlayerSelector.Rect.Y = tile.Avatar.Rect.Y - 3;
}
}
i++;
}
if (PlayerSelector.Visible)
{
//Draw PlayerSelector
PlayerSelector.Draw();
}
}
public void HandleInput(KeyEvent kevent)
{
switch (kevent.Key)
{
case Keys.Right:
if (_actualSelection + 1 < _Tiles.Count)
{
if (_Tiles[_actualSelection + 1].PlayerNr != -1)
{
_actualSelection++;
}
}
else
{
int offset = _Offset;
UpdateList(_Offset + 1);
if (offset != _Offset)
{
_actualSelection = 0;
}
}
break;
case Keys.Left:
if (_actualSelection - 1 > -1)
{
_actualSelection--;
}
else if (_Offset > 0)
{
UpdateList(_Offset - 1);
_actualSelection = _Tiles.Count-1;
}
break;
case Keys.Up:
if (_actualSelection - _NumW > -1)
{
_actualSelection -= _NumW;
}
else if (_Offset > 0)
{
UpdateList(_Offset - 1);
_actualSelection += _Tiles.Count- _NumW;
}
break;
case Keys.Down:
if (_actualSelection + _NumW < _Tiles.Count)
{
if (_Tiles[_actualSelection + _NumW].PlayerNr != -1)
{
_actualSelection += _NumW;
}
}
else
{
int offset = _Offset;
UpdateList(_Offset + 1);
if (offset != _Offset)
{
_actualSelection = _actualSelection - _Tiles.Count + _NumW;
if (_Tiles[_actualSelection].PlayerNr == -1)
{
for (int i = (_Tiles.Count - 1); i >= 0; i--)
{
if (_Tiles[i].PlayerNr != -1)
{
_actualSelection = i;
break;
}
}
}
}
}
break;
}
Selection = VisibleProfiles[_Offset * _Tiles.Count + _actualSelection];
}
public void KeyboardSelection(bool active, int player)
{
//Overwrite player-selection; Same profile, but other player
if (active && Selection != -1)
{
_player = player;
PlayerSelector.Color = CTheme.GetPlayerColor(player);
}
//Normal activation
else if (active)
{
Selection = 0;
_actualSelection = 0;
_player = player;
PlayerSelector.Color = CTheme.GetPlayerColor(player);
PlayerSelector.Visible = true;
}
//Deactivate
else
{
Selection = -1;
_actualSelection = -1;
_player = -1;
PlayerSelector.Visible = false;
}
}
public void UpdateList()
{
UpdateVisibleProfiles();
if (_Tiles.Count * (_Offset + 1) - VisibleProfiles.Count >= _Tiles.Count * _Offset)
{
UpdateList(_Offset - 1);
}
else
{
UpdateList(_Offset);
}
}
public void UpdateList(int offset)
{
if (offset < 0)
offset = 0;
if ( _Tiles.Count * (offset + 1) - VisibleProfiles.Count < _Tiles.Count)
{
for (int i = 0; i < _Tiles.Count; i++)
{
if ((i + offset * _Tiles.Count) < VisibleProfiles.Count)
{
_Tiles[i].Avatar.Texture = CProfiles.Profiles[VisibleProfiles[i + offset * _Tiles.Count]].Avatar.Texture;
_Tiles[i].Avatar.Color = new SColorF(1, 1, 1, 1);
_Tiles[i].Name.Text = CProfiles.Profiles[VisibleProfiles[i + offset * _Tiles.Count]].PlayerName;
_Tiles[i].PlayerNr = VisibleProfiles[i + offset * _Tiles.Count];
}
else
{
_Tiles[i].Avatar.Texture = _TextureEmptyTile;
_Tiles[i].Avatar.Color = ColorEmptyTile;
_Tiles[i].Name.Text = "";
_Tiles[i].PlayerNr = -1;
}
}
_Offset = offset;
}
}
public bool isOverTile(MouseEvent mevent)
{
bool isOver = false;
foreach (CTile tile in _Tiles)
{
if (CHelper.IsInBounds(tile.Avatar.Rect, mevent))
{
isOver = true;
}
}
return isOver;
}
public int TilePlayerNr(MouseEvent mevent)
{
foreach (CTile tile in _Tiles)
{
if (CHelper.IsInBounds(tile.Avatar.Rect, mevent))
{
return tile.PlayerNr;
}
}
return -1;
}
public CStatic TilePlayerAvatar(MouseEvent mevent)
{
foreach (CTile tile in _Tiles)
{
if (CHelper.IsInBounds(tile.Avatar.Rect, mevent))
{
return tile.Avatar;
}
}
return new CStatic();
}
public void UnloadTextures()
{
}
public void LoadTextures()
{
_TextureEmptyTile = CTheme.GetSkinTexture(_Theme.TextureEmptyTileName);
_TextureTileSelected = CTheme.GetSkinTexture(_Theme.TextureTileSelectedName);
if (_Theme.ColorEmptyTileName != String.Empty)
ColorEmptyTile = CTheme.GetColor(_Theme.ColorEmptyTileName);
if (_Theme.NameColorName != String.Empty)
_Theme.NameColor = CTheme.GetColor(_Theme.NameColorName);
}
public void ReloadTextures()
{
UnloadTextures();
LoadTextures();
PrepareTiles();
}
private void PrepareTiles()
{
_Tiles.Clear();
for (int i = 0; i < _NumH; i++)
{
for (int j = 0; j < _NumW; j++)
{
SRectF rect = new SRectF(Rect.X + j * (_TileW + _SpaceW), Rect.Y + i * (_TileH + _SpaceH), _TileW, _TileH, Rect.Z);
CStatic tileStatic = new CStatic(_TextureEmptyTile, ColorEmptyTile, rect);
CText tileText = new CText(rect.X + rect.W / 2, rect.Y + rect.H + _Theme.NameSpace, rect.Z, _Theme.NameHeight, rect.W, EAlignment.Center, _Theme.NameStyle, _Theme.NameFont, _Theme.NameColor, "");
_Tiles.Add(new CTile(tileStatic, tileText, -1));
}
}
}
private void UpdateVisibleProfiles()
{
VisibleProfiles.Clear();
for (int i = 0; i < CProfiles.Profiles.Length; i++)
{
bool visible = false;
//Show profile only if active
if (CProfiles.Profiles[i].Active == EOffOn.TR_CONFIG_ON)
{
visible = true;
}
for (int p = 0; p < CGame.NumPlayer; p++)
{
//Don't show profile if is selected, but if selected and guest
if (CGame.Player[p].ProfileID == i && CProfiles.Profiles[i].GuestProfile == EOffOn.TR_CONFIG_OFF)
{
visible = false;
}
}
if (visible)
{
VisibleProfiles.Add(i);
}
}
}
#region ThemeEdit
public void MoveElement(int stepX, int stepY)
{
Rect.X += stepX;
Rect.Y += stepY;
}
public void ResizeElement(int stepW, int stepH)
{
Rect.W += stepW;
if (Rect.W <= 0)
Rect.W = 1;
Rect.H += stepH;
if (Rect.H <= 0)
Rect.H = 1;
}
#endregion ThemeEdit
}
}
+1 -1
View File
@@ -86,7 +86,7 @@ namespace Vocaluxe.Menu
private List<SRectF> _ValueBounds = new List<SRectF>();
public bool WithTextures;
public bool WithTextures = false;
private int _Selection = -1;
public int Selection
+4 -2
View File
@@ -400,7 +400,9 @@ namespace Vocaluxe.Menu.SingNotes
if (note.EndBeat >= CGame.ActBeatD && note.Hit && note.NoteType == ENoteType.Golden)
{
AddFlare(rect, n);
SRectF re = new SRectF(rect);
re.W = (CGame.MidBeatD - note.StartBeat) / beats * w;
AddFlare(re, n);
}
if (note.Perfect && note.EndBeat < CGame.ActBeatD)
@@ -583,7 +585,7 @@ namespace Vocaluxe.Menu.SingNotes
for (int i = 0; i < CSettings.NumNoteLines - 1; i++)
{
float y = Rect.Y + Rect.H / CSettings.NumNoteLines * (i + 1);
CDraw.DrawColor(Color, new SRectF(Rect.X, y, Rect.W, 1, -0.5f));
CDraw.DrawColor(Color, new SRectF(Rect.X, y, Rect.W, 1, -1.0f));
}
}
+12 -2
View File
@@ -33,8 +33,8 @@ namespace Vocaluxe.Menu.SongMenu
public bool Visible
{
get { return _SongMenu.IsSelected(); }
set { _SongMenu.SetSelected(value); }
get { return _SongMenu.IsVisible(); }
set { _SongMenu.SetVisible(value); }
}
public SRectF Rect
@@ -118,6 +118,16 @@ namespace Vocaluxe.Menu.SongMenu
return _SongMenu.GetRect();
}
public bool IsSmallView()
{
return _SongMenu.IsSmallView();
}
public void SetSmallView(bool SmallView)
{
_SongMenu.SetSmallView(SmallView);
}
#endregion ISongMenu
#region IMenuElement
+45 -1
View File
@@ -55,6 +55,16 @@ namespace Vocaluxe.Menu.SongMenu
/// </summary>
public int numH;
/// <summary>
/// Number of tiles horizontal in small-modus
/// </summary>
public int numWsmall;
/// <summary>
/// Number of tiles vertical in small-modus
/// </summary>
public int numHsmall;
/// <summary>
/// Space between tiles horizontal
/// </summary>
@@ -66,6 +76,7 @@ namespace Vocaluxe.Menu.SongMenu
public float spaceH;
public SRectF TileRect;
public SRectF TileRectSmall;
public CText TextArtist;
public CText TextTitle;
@@ -182,7 +193,7 @@ namespace Vocaluxe.Menu.SongMenu
public SRectF GetRect()
{
return Rect;
return _Rect;
}
public SColorF Color
@@ -272,6 +283,9 @@ namespace Vocaluxe.Menu.SongMenu
_ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/SongMenuTileBoard/SpaceW", navigator, ref _Theme.songMenuTileBoard.spaceW);
_ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/SongMenuTileBoard/SpaceH", navigator, ref _Theme.songMenuTileBoard.spaceH);
_ThemeLoaded &= CHelper.TryGetIntValueFromXML(item + "/SongMenuTileBoard/NumWsmall", navigator, ref _Theme.songMenuTileBoard.numWsmall);
_ThemeLoaded &= CHelper.TryGetIntValueFromXML(item + "/SongMenuTileBoard/NumHsmall", navigator, ref _Theme.songMenuTileBoard.numHsmall);
_ThemeLoaded &= _Theme.songMenuTileBoard.TextArtist.LoadTheme(item + "/SongMenuTileBoard", "TextArtist", navigator, SkinIndex);
_ThemeLoaded &= _Theme.songMenuTileBoard.TextTitle.LoadTheme(item + "/SongMenuTileBoard", "TextTitle", navigator, SkinIndex);
_ThemeLoaded &= _Theme.songMenuTileBoard.TextSongLength.LoadTheme(item + "/SongMenuTileBoard", "TextSongLength", navigator, SkinIndex);
@@ -289,6 +303,12 @@ namespace Vocaluxe.Menu.SongMenu
_ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/SongMenuTileBoard/TileRectW", navigator, ref _Theme.songMenuTileBoard.TileRect.W);
_ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/SongMenuTileBoard/TileRectH", navigator, ref _Theme.songMenuTileBoard.TileRect.H);
_ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/SongMenuTileBoard/TileRectSmallX", navigator, ref _Theme.songMenuTileBoard.TileRectSmall.X);
_ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/SongMenuTileBoard/TileRectSmallY", navigator, ref _Theme.songMenuTileBoard.TileRectSmall.Y);
_ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/SongMenuTileBoard/TileRectSmallZ", navigator, ref _Theme.songMenuTileBoard.TileRectSmall.Z);
_ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/SongMenuTileBoard/TileRectSmallW", navigator, ref _Theme.songMenuTileBoard.TileRectSmall.W);
_ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/SongMenuTileBoard/TileRectSmallH", navigator, ref _Theme.songMenuTileBoard.TileRectSmall.H);
#endregion SongMenuTileBoard
if (_ThemeLoaded)
@@ -362,6 +382,12 @@ namespace Vocaluxe.Menu.SongMenu
writer.WriteComment("<SpaceH>: Space between tiles vertical");
writer.WriteElementString("SpaceH", _Theme.songMenuTileBoard.spaceH.ToString("#0.00"));
writer.WriteComment("<NumWsmall>: Number of tiles horizontal in small-mode");
writer.WriteElementString("NumW", _Theme.songMenuTileBoard.numW.ToString());
writer.WriteComment("<NumHsmall>: Number of tiles vertical in small-mode");
writer.WriteElementString("NumH", _Theme.songMenuTileBoard.numH.ToString());
writer.WriteComment("<TileRectX>, <TileRectY>, <TileRectZ>, <TileRectW>, <TileRectH>: SongMenu position, width and height");
writer.WriteElementString("TileRectX", _Theme.songMenuTileBoard.TileRect.X.ToString("#0"));
writer.WriteElementString("TileRectY", _Theme.songMenuTileBoard.TileRect.Y.ToString("#0"));
@@ -369,6 +395,13 @@ namespace Vocaluxe.Menu.SongMenu
writer.WriteElementString("TileRectW", _Theme.songMenuTileBoard.TileRect.W.ToString("#0"));
writer.WriteElementString("TileRectH", _Theme.songMenuTileBoard.TileRect.H.ToString("#0"));
writer.WriteComment("<TileRectSmallX>, <TileRectSmallY>, <TileRectSmallZ>, <TileRectSmallW>, <TileRectSmallH>: SongMenu position, width and height in small-mode");
writer.WriteElementString("TileRectSmallX", _Theme.songMenuTileBoard.TileRectSmall.X.ToString("#0"));
writer.WriteElementString("TileRectSmallY", _Theme.songMenuTileBoard.TileRectSmall.Y.ToString("#0"));
writer.WriteElementString("TileRectSmallZ", _Theme.songMenuTileBoard.TileRectSmall.Z.ToString("#0.00"));
writer.WriteElementString("TileRectSmallW", _Theme.songMenuTileBoard.TileRectSmall.W.ToString("#0"));
writer.WriteElementString("TileRectSmallH", _Theme.songMenuTileBoard.TileRectSmall.H.ToString("#0"));
_Theme.songMenuTileBoard.TextArtist.SaveTheme(writer);
_Theme.songMenuTileBoard.TextTitle.SaveTheme(writer);
_Theme.songMenuTileBoard.TextSongLength.SaveTheme(writer);
@@ -499,6 +532,17 @@ namespace Vocaluxe.Menu.SongMenu
return;
}
public virtual void SetSmallView(bool SmallView)
{
if (!_Initialized)
return;
}
public virtual bool IsSmallView()
{
return false;
}
public virtual void UnloadTextures()
{
}
@@ -40,6 +40,8 @@ namespace Vocaluxe.Menu.SongMenu
private int _Offset = 0;
private int _actualSelection = -1;
private bool _SmallView = false;
public override int GetActualSelection()
{
return _actualSelection;
@@ -650,6 +652,72 @@ namespace Vocaluxe.Menu.SongMenu
_Offset = offset;
}
public override void SetSmallView(bool SmallView)
{
base.SetSmallView(SmallView);
_SmallView = SmallView;
if (_SmallView)
{
_NumH = _Theme.songMenuTileBoard.numHsmall;
_NumW = _Theme.songMenuTileBoard.numWsmall;
_TileW = (int)((_Theme.songMenuTileBoard.TileRectSmall.W - _SpaceW * (_NumW - 1)) / _NumW);
_TileH = (int)((_Theme.songMenuTileBoard.TileRectSmall.H - _SpaceH * (_NumH - 1)) / _NumH);
_CoverTexture = CTheme.GetSkinTexture(_Theme.CoverBackgroundName);
_CoverBigTexture = CTheme.GetSkinTexture(_Theme.CoverBigBackgroundName);
_Tiles = new List<CStatic>();
for (int i = 0; i < _NumH; i++)
{
for (int j = 0; j < _NumW; j++)
{
SRectF rect = new SRectF(_Theme.songMenuTileBoard.TileRectSmall.X + j * (_TileW + _SpaceW),
_Theme.songMenuTileBoard.TileRectSmall.Y + i * (_TileH + _SpaceH), _TileW, _TileH, _Rect.Z);
CStatic tile = new CStatic(_CoverTexture, Color, rect);
_Tiles.Add(tile);
}
}
_ScrollRect = new SRectF(0, 0, CSettings.iRenderW, CSettings.iRenderH, _Theme.songMenuTileBoard.TileRectSmall.Z);
}
else
{
_NumH = _Theme.songMenuTileBoard.numH;
_NumW = _Theme.songMenuTileBoard.numW;
_TileW = (int)((_Theme.songMenuTileBoard.TileRect.W - _SpaceW * (_NumW - 1)) / _NumW);
_TileH = (int)((_Theme.songMenuTileBoard.TileRect.H - _SpaceH * (_NumH - 1)) / _NumH);
_CoverTexture = CTheme.GetSkinTexture(_Theme.CoverBackgroundName);
_CoverBigTexture = CTheme.GetSkinTexture(_Theme.CoverBigBackgroundName);
_Tiles = new List<CStatic>();
for (int i = 0; i < _NumH; i++)
{
for (int j = 0; j < _NumW; j++)
{
SRectF rect = new SRectF(_Theme.songMenuTileBoard.TileRect.X + j * (_TileW + _SpaceW),
_Theme.songMenuTileBoard.TileRect.Y + i * (_TileH + _SpaceH), _TileW, _TileH, _Rect.Z);
CStatic tile = new CStatic(_CoverTexture, Color, rect);
_Tiles.Add(tile);
}
}
_ScrollRect = new SRectF(0, 0, CSettings.iRenderW, CSettings.iRenderH, _Theme.songMenuTileBoard.TileRect.Z);
}
UpdateList(_Offset);
}
public override bool IsSmallView()
{
return _SmallView;
}
public override void LoadTextures()
{
base.LoadTextures();
@@ -663,6 +731,7 @@ namespace Vocaluxe.Menu.SongMenu
_Theme.songMenuTileBoard.TextArtist.ReloadTextures();
_Theme.songMenuTileBoard.TextTitle.ReloadTextures();
_Theme.songMenuTileBoard.TextSongLength.ReloadTextures();
}
}
}
+3
View File
@@ -29,6 +29,9 @@ namespace Vocaluxe.Menu.SongMenu
bool IsVisible();
void SetVisible(bool Visible);
bool IsSmallView();
void SetSmallView(bool SmallView);
SRectF GetRect();
}
}
@@ -0,0 +1,230 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Windows.Forms;
using Vocaluxe.Base;
using Vocaluxe.GameModes;
using Vocaluxe.Lib.Draw;
using Vocaluxe.Menu;
using Vocaluxe.Lib.Song;
namespace Vocaluxe.Screens
{
class CPopupScreenPlayerControl : CMenu
{
// Version number for theme files. Increment it, if you've changed something on the theme files!
const int ScreenVersion = 1;
private const string StaticBG = "StaticBG";
private const string StaticCover = "StaticCover";
private const string ButtonPrevious = "ButtonPrevious";
private const string ButtonPlay = "ButtonPlay";
private const string ButtonPause = "ButtonPause";
private const string ButtonNext = "ButtonNext";
private const string ButtonRepeat = "ButtonRepeat";
private const string ButtonShowVideo = "ButtonShowVideo";
private const string ButtonSing = "ButtonSing";
private const string ButtonToBackgroundVideo = "ButtonToBackgroundVideo";
private const string TextCurrentSong = "TextCurrentSong";
private bool _VideoPreview = false;
private bool VideoPreview
{
get
{
return _VideoPreview;
}
set
{
_VideoPreview = value;
if (!_VideoPreview && !VideoBackground)
CBackgroundMusic.VideoEnabled = false;
else
CBackgroundMusic.VideoEnabled = true;
}
}
private bool VideoBackground
{
get
{
return CConfig.VideosToBackground == EOffOn.TR_CONFIG_ON;
}
set
{
if (!value)
{
if (CConfig.VideosToBackground == EOffOn.TR_CONFIG_ON)
{
CConfig.VideosToBackground = EOffOn.TR_CONFIG_OFF;
if (!_VideoPreview)
CBackgroundMusic.VideoEnabled = false;
}
}
else
{
CConfig.VideosToBackground = EOffOn.TR_CONFIG_ON;
CBackgroundMusic.VideoEnabled = true;
}
CConfig.SaveConfig();
}
}
public CPopupScreenPlayerControl()
{
Init();
}
protected override void Init()
{
base.Init();
_ThemeName = "PopupScreenPlayerControl";
_ScreenVersion = ScreenVersion;
_ThemeStatics = new string[] { StaticBG, StaticCover };
_ThemeTexts = new string[] { TextCurrentSong };
List<string> buttons = new List<string>();
buttons.Add(ButtonPlay);
buttons.Add(ButtonPause);
buttons.Add(ButtonPrevious);
buttons.Add(ButtonNext);
buttons.Add(ButtonRepeat);
buttons.Add(ButtonShowVideo);
buttons.Add(ButtonSing);
buttons.Add(ButtonToBackgroundVideo);
_ThemeButtons = buttons.ToArray();
}
public override void LoadTheme()
{
base.LoadTheme();
_ScreenArea = Statics[htStatics(StaticBG)].Rect;
}
public override bool HandleInput(KeyEvent KeyEvent)
{
base.HandleInput(KeyEvent);
if (KeyEvent.KeyPressed && !Char.IsControl(KeyEvent.Unicode))
{
}
else
{
switch (KeyEvent.Key)
{
case Keys.Escape:
case Keys.Back:
CGraphics.HidePopup(EPopupScreens.PopupPlayerControl);
return false;
case Keys.Enter:
if (Buttons[htButtons(ButtonNext)].Selected)
CBackgroundMusic.Next();
if (Buttons[htButtons(ButtonPrevious)].Selected)
CBackgroundMusic.Previous();
if (Buttons[htButtons(ButtonPlay)].Selected)
CBackgroundMusic.Play();
if (Buttons[htButtons(ButtonPause)].Selected)
CBackgroundMusic.Pause();
if (Buttons[htButtons(ButtonRepeat)].Selected)
CBackgroundMusic.Repeat();
if (Buttons[htButtons(ButtonShowVideo)].Selected)
VideoPreview = !VideoPreview;
if (Buttons[htButtons(ButtonSing)].Selected)
StartSong(CBackgroundMusic.SongID, CBackgroundMusic.Duet);
if (Buttons[htButtons(ButtonToBackgroundVideo)].Selected)
VideoBackground = !VideoBackground;
break;
}
}
return true;
}
public override bool HandleMouse(MouseEvent MouseEvent)
{
base.HandleMouse(MouseEvent);
if (MouseEvent.LB && IsMouseOver(MouseEvent))
{
if (Buttons[htButtons(ButtonNext)].Selected)
CBackgroundMusic.Next();
if (Buttons[htButtons(ButtonPrevious)].Selected)
CBackgroundMusic.Previous();
if (Buttons[htButtons(ButtonPlay)].Selected)
CBackgroundMusic.Play();
if (Buttons[htButtons(ButtonPause)].Selected)
CBackgroundMusic.Pause();
if (Buttons[htButtons(ButtonRepeat)].Selected)
CBackgroundMusic.Repeat();
if (Buttons[htButtons(ButtonShowVideo)].Selected)
VideoPreview = !VideoPreview;
if (Buttons[htButtons(ButtonSing)].Selected)
StartSong(CBackgroundMusic.SongID, CBackgroundMusic.Duet);
if (Buttons[htButtons(ButtonToBackgroundVideo)].Selected)
VideoBackground = !VideoBackground;
} else if (MouseEvent.LB)
{
//CGraphics.HidePopup(EPopupScreens.PopupPlayerControl);
return false;
} else if (MouseEvent.RB)
{
//CGraphics.HidePopup(EPopupScreens.PopupPlayerControl);
return false;
}
return true;
}
public override bool UpdateGame()
{
Statics[htStatics(StaticCover)].Visible = !_VideoPreview || !CBackgroundMusic.SongHasVideo;
Buttons[htButtons(ButtonToBackgroundVideo)].Pressed = VideoBackground;
Buttons[htButtons(ButtonShowVideo)].Pressed = _VideoPreview;
Buttons[htButtons(ButtonSing)].Visible = CBackgroundMusic.CanSing;
return true;
}
public override void OnShow()
{
base.OnShow();
}
public override bool Draw()
{
if (!_Active)
return false;
Statics[htStatics(StaticCover)].Texture = CBackgroundMusic.Cover;
if (CBackgroundMusic.VideoEnabled && VideoPreview && CBackgroundMusic.SongHasVideo)
CDraw.DrawTexture(Statics[htStatics(StaticCover)], CBackgroundMusic.GetVideoTexture(), EAspect.Crop);
Buttons[htButtons(ButtonPause)].Visible = CBackgroundMusic.Playing;
Buttons[htButtons(ButtonPlay)].Visible = !CBackgroundMusic.Playing;
Texts[htTexts(TextCurrentSong)].Text = CBackgroundMusic.ArtistAndTitle;
return base.Draw();
}
private void StartSong(int SongNr, bool Duet)
{
if (SongNr >= 0 && CSongs.SongsLoaded)
{
CGame.Reset();
CGame.ClearSongs();
EGameMode gm = EGameMode.TR_GAMEMODE_NORMAL;
if (CSongs.VisibleSongs[SongNr].IsDuet)
gm = EGameMode.TR_GAMEMODE_DUET;
CGame.AddSong(SongNr, gm);
CGraphics.FadeTo(EScreens.ScreenNames);
}
}
}
}
+34
View File
@@ -172,6 +172,7 @@ namespace Vocaluxe.Screens
}
}
}
}
public override void ReloadTheme() {}
@@ -322,6 +323,39 @@ namespace Vocaluxe.Screens
CreditEntryPinky007.direction = EDirection.Right;
_CreditNames.Add(CreditEntryPinky007);
//Prepare Text
int lastY = 280;
for (int i = 0; i < paragraphs.Count; i++)
{
string line = "";
for (int e = 0; e < paragraphs[i].Length; e++ )
{
if (paragraphs[i][e] != null)
{
string newline = line + " " + paragraphs[i][e];
CText text = new CText(75, lastY, -2, 30, -1, EAlignment.Left, EStyle.Bold, "Outline", new SColorF(1, 1, 1, 1), line);
if (CDraw.GetTextBounds(text).Width < (CSettings.iRenderW - 160))
{
line = line + " " + paragraphs[i][e];
//Check if all words are used
if ((e + 1) == paragraphs[i].Length)
{
text.Text = line;
paragraphTexts.Add(text);
line = "";
lastY += 40;
}
}
else
{
paragraphTexts.Add(text);
line = " "+paragraphs[i][e];
lastY += 27;
}
}
}
}
TextTimer.Reset();
LogoTimer.Reset();
CreditsTimer.Reset();
+7 -3
View File
@@ -250,19 +250,23 @@ namespace Vocaluxe.Screens
switch (CGame.GameMode)
{
case EGameMode.Normal:
case EGameMode.TR_GAMEMODE_NORMAL:
Texts[htTexts(TextSongMode)].Text = "TR_GAMEMODE_NORMAL";
break;
case EGameMode.Medley:
case EGameMode.TR_GAMEMODE_MEDLEY:
Texts[htTexts(TextSongMode)].Text = "TR_GAMEMODE_MEDLEY";
break;
case EGameMode.Duet:
case EGameMode.TR_GAMEMODE_DUET:
Texts[htTexts(TextSongMode)].Text = "TR_GAMEMODE_DUET";
_IsDuet = true;
break;
case EGameMode.TR_GAMEMODE_SHORTSONG:
Texts[htTexts(TextSongMode)].Text = "TR_GAMEMODE_SHORTSONG";
break;
default:
Texts[htTexts(TextSongMode)].Text = "TR_GAMEMODE_NORMAL";
break;
+29 -107
View File
@@ -30,6 +30,8 @@ namespace Vocaluxe.Screens
private int _CurrentIntroVideoNr;
private bool _IntroOutPlayed;
private VideoPlayer[] _Intros;
private bool _BGMusicStartet;
public CScreenLoad()
@@ -120,6 +122,8 @@ namespace Vocaluxe.Screens
_Intros[i].Load(IntroVideo[i]);
}
}
_BGMusicStartet = false;
}
public override void OnShowFinish()
@@ -139,8 +143,18 @@ namespace Vocaluxe.Screens
_SongLoaderThread.Start();
_timer.Start();
if (!CBackgroundMusic.IsPlaying())
CBackgroundMusic.Next();
if (CConfig.BackgroundMusic == EOffOn.TR_CONFIG_ON &&
CConfig.BackgroundMusicSource == EBackgroundMusicSource.TR_CONFIG_NO_OWN_MUSIC && !_BGMusicStartet)
{
CBackgroundMusic.AddOwnMusic();
if (!CBackgroundMusic.Playing)
CBackgroundMusic.Next();
_BGMusicStartet = true;
}
CBackgroundMusic.CanSing = false;
}
public override bool UpdateGame()
@@ -150,12 +164,7 @@ namespace Vocaluxe.Screens
if (CSettings.GameState == EGameState.EditTheme)
_timer.Stop();
else
_timer.Start();
if (CSongs.SongsLoaded && CConfig.CoverLoading == ECoverLoading.TR_CONFIG_COVERLOADING_ATSTART && _timer.ElapsedMilliseconds > 1000L)
{
CSongs.LoadCover(0L, 1);
}
_timer.Start();
bool next = ((CConfig.CoverLoading == ECoverLoading.TR_CONFIG_COVERLOADING_ATSTART && CSongs.CoverLoaded) ||
CConfig.CoverLoading != ECoverLoading.TR_CONFIG_COVERLOADING_ATSTART);
@@ -174,14 +183,16 @@ namespace Vocaluxe.Screens
CLanguage.Translate("TR_SCREENLOAD_LOADED") + ")";
if (CSongs.SongsLoaded && CConfig.BackgroundMusic == EOffOn.TR_CONFIG_ON &&
CConfig.BackgroundMusicSource != EBackgroundMusicSource.TR_CONFIG_NO_OWN_MUSIC)
CConfig.BackgroundMusicSource != EBackgroundMusicSource.TR_CONFIG_NO_OWN_MUSIC && !_BGMusicStartet)
{
CBackgroundMusic.AddOwnMusic();
if (!CBackgroundMusic.IsPlaying())
if (!CBackgroundMusic.Playing)
CBackgroundMusic.Next();
}
_BGMusicStartet = true;
}
return true;
}
@@ -209,7 +220,14 @@ namespace Vocaluxe.Screens
_Intros[i].Close();
}
CBackgroundMusic.CanSing = true;
CLog.StopBenchmark(3, "Load Cover");
//Init Playlists
CLog.StartBenchmark(0, "Init Playlists");
CPlaylists.Init();
CLog.StopBenchmark(0, "Init Playlists");
}
private void CheckStartIntroVideos()
@@ -247,100 +265,4 @@ namespace Vocaluxe.Screens
_IntroOutPlayed = true;
}
}
class VideoPlayer
{
private STexture _VideoTexture;
private int _VideoStream;
private Stopwatch _VideoTimer;
private bool _Finished;
private bool _Loaded;
public bool IsFinished
{
get { return _Finished || !_Loaded; }
}
public bool Loop
{
set { CVideo.VdSetLoop(_VideoStream, value); }
}
public VideoPlayer()
{
_VideoTimer = new Stopwatch();
_VideoTexture = new STexture(-1);
_Finished = false;
_Loaded = false;
}
public void Load(string VideoName)
{
_VideoStream = CVideo.VdLoad(CTheme.GetVideoFilePath(VideoName));
_Loaded = true;
}
public void Start()
{
_VideoTimer.Reset();
_Finished = false;
//CVideo.VdSkip(_VideoStream, 0f, 0f);
_VideoTimer.Start();
}
public void Pause()
{
_VideoTimer.Stop();
}
public void Resume()
{
_VideoTimer.Start();
}
public void Draw()
{
if (!_Finished)
{
float VideoTime = _VideoTimer.ElapsedMilliseconds / 1000f;
_Finished = CVideo.VdFinished(_VideoStream);
STexture tex = new STexture(-1);
tex.height = 0f;
CVideo.VdGetFrame(_VideoStream, ref tex, VideoTime, ref VideoTime);
if (tex.height > 0)
{
CDraw.RemoveTexture(ref _VideoTexture);
_VideoTexture = tex;
}
}
RectangleF bounds = new RectangleF(0f, 0f, CSettings.iRenderW, CSettings.iRenderH);
RectangleF rect = new RectangleF(0f, 0f, _VideoTexture.width, _VideoTexture.height);
CHelper.SetRect(bounds, ref rect, rect.Width / rect.Height, EAspect.Crop);
CDraw.DrawTexture(_VideoTexture, new SRectF(rect.X, rect.Y, rect.Width, rect.Height, CSettings.zFar / 4));
}
public void PreLoad()
{
float VideoTime = 0f;
while (_VideoTexture.index == -1 && VideoTime < 1f)
{
float dummy = 0f;
CVideo.VdGetFrame(_VideoStream, ref _VideoTexture, 0, ref dummy);
VideoTime += 0.05f;
}
}
public void Close()
{
CVideo.VdClose(_VideoStream);
CDraw.RemoveTexture(ref _VideoTexture);
_Loaded = false;
_Finished = false;
_VideoTimer.Reset();
}
}
}
+4 -4
View File
@@ -65,14 +65,14 @@ namespace Vocaluxe.Screens
CGraphics.FadeTo(EScreens.ScreenSong);
break;
case Keys.T:
CGraphics.FadeTo(EScreens.ScreenTest);
break;
case Keys.C:
CGraphics.FadeTo(EScreens.ScreenCredits);
break;
case Keys.T:
CGraphics.FadeTo(EScreens.ScreenTest);
break;
case Keys.Enter:
if (Buttons[htButtons(ButtonSing)].Selected)
CGraphics.FadeTo(EScreens.ScreenSong);
+487 -116
View File
@@ -12,14 +12,29 @@ namespace Vocaluxe.Screens
class CScreenNames : CMenu
{
// Version number for theme files. Increment it, if you've changed something on the theme files!
const int ScreenVersion = 1;
const int ScreenVersion = 2;
private readonly string[] SelectSlidePlayerMic = new string[] { "SelectSlidePlayerMic1", "SelectSlidePlayerMic2", "SelectSlidePlayerMic3" };
private readonly string[] ButtonPlayer = new string[] { "Button1Player", "Button2Player", "Button3Player" };
private CStatic chooseAvatarStatic;
private int OldMouseX;
private int OldMouseY;
private const string SelectSlidePlayerNumber = "SelectSlidePlayerNumber";
private const string NameSelection = "NameSelection";
private const string ButtonBack = "ButtonBack";
private const string ButtonStart = "ButtonStart";
private const string TextWarning = "TextWarning";
private const string StaticWarning = "StaticWarning";
private const string TextWarningMics = "TextWarningMics";
private const string StaticWarningMics = "StaticWarningMics";
private const string TextWarningProfiles = "TextWarningProfiles";
private const string StaticWarningProfiles = "StaticWarningProfiles";
private readonly string[] StaticPlayer = new string[] { "StaticPlayer1", "StaticPlayer2", "StaticPlayer3", "StaticPlayer4", "StaticPlayer5", "StaticPlayer6" };
private readonly string[] StaticPlayerAvatar = new string[] { "StaticPlayerAvatar1", "StaticPlayerAvatar2", "StaticPlayerAvatar3", "StaticPlayerAvatar4", "StaticPlayerAvatar5", "StaticPlayerAvatar6" };
private readonly string[] TextPlayer = new string[] { "TextPlayer1", "TextPlayer2", "TextPlayer3", "TextPlayer4", "TextPlayer5", "TextPlayer6" };
private STexture[] OriginalPlayerAvatarTextures = new STexture[CSettings.MaxNumPlayer];
private bool selectingMouseActive = false;
private bool selectingKeyboardActive = false;
private int selectingKeyboardPlayerNr = 0;
private int SelectedPlayerNr;
private int[] _PlayerNr;
@@ -36,56 +51,241 @@ namespace Vocaluxe.Screens
_ScreenVersion = ScreenVersion;
List<string> statics = new List<string>();
statics.Add(StaticWarning);
foreach(string text in StaticPlayer){
statics.Add(text);
}
foreach (string text in StaticPlayerAvatar)
{
statics.Add(text);
}
statics.Add(StaticWarningMics);
statics.Add(StaticWarningProfiles);
_ThemeStatics = statics.ToArray();
List<string> texts = new List<string>();
foreach (string text in SelectSlidePlayerMic)
{
texts.Add(text);
}
_ThemeSelectSlides = texts.ToArray();
_ThemeSelectSlides = new string[] { SelectSlidePlayerNumber };
texts.Clear();
texts.Add(TextWarning);
texts.Add(TextWarningMics);
texts.Add(TextWarningProfiles);
foreach(string text in TextPlayer){
texts.Add(text);
}
_ThemeTexts = texts.ToArray();
texts.Clear();
texts.Add(ButtonBack);
texts.Add(ButtonStart);
foreach (string text in ButtonPlayer)
{
texts.Add(text);
}
_ThemeButtons = texts.ToArray();
texts.Clear();
texts.Add(NameSelection);
_ThemeNameSelections = texts.ToArray();
chooseAvatarStatic = new CStatic();
chooseAvatarStatic.Visible = false;
}
public override void LoadTheme()
{
base.LoadTheme();
for (int i = 0; i < SelectSlidePlayerMic.Length; i++)
{
SelectSlides[htSelectSlides(SelectSlidePlayerMic[i])].WithTextures = true;
}
_PlayerNr = new int[CSettings.MaxNumPlayer];
for (int i = 0; i < _PlayerNr.Length; i++)
{
_PlayerNr[i] = i;
}
for (int i = 0; i < CSettings.MaxNumPlayer; i++)
{
OriginalPlayerAvatarTextures[i] = Statics[htStatics(StaticPlayerAvatar[i])].Texture;
}
}
public override bool HandleInput(KeyEvent KeyEvent)
{
base.HandleInput(KeyEvent);
if (KeyEvent.KeyPressed && !Char.IsControl(KeyEvent.Unicode))
switch (KeyEvent.Key)
{
case Keys.Add:
if (CConfig.NumPlayer + 1 <= CSettings.MaxNumPlayer)
{
SelectSlides[htSelectSlides(SelectSlidePlayerNumber)].Selection = CConfig.NumPlayer;
UpdatePlayerNumber();
//Update Tiles-List
NameSelections[htNameSelections(NameSelection)].UpdateList();
}
break;
case Keys.Subtract:
if (CConfig.NumPlayer - 1 > 0)
{
SelectSlides[htSelectSlides(SelectSlidePlayerNumber)].Selection = CConfig.NumPlayer - 2;
UpdatePlayerNumber();
//Update Tiles-List
NameSelections[htNameSelections(NameSelection)].UpdateList();
}
break;
}
//Check if selecting with keyboard is active
if (selectingKeyboardActive)
{
//Handle left/right/up/down
NameSelections[htNameSelections(NameSelection)].HandleInput(KeyEvent);
switch (KeyEvent.Key)
{
case Keys.Enter:
//Check, if a player is selected
if (NameSelections[htNameSelections(NameSelection)].Selection > -1)
{
SelectedPlayerNr = NameSelections[htNameSelections(NameSelection)].Selection;
//Update Game-infos with new player
CGame.Player[selectingKeyboardPlayerNr-1].Name = CProfiles.Profiles[SelectedPlayerNr].PlayerName;
CGame.Player[selectingKeyboardPlayerNr-1].Difficulty = CProfiles.Profiles[SelectedPlayerNr].Difficulty;
CGame.Player[selectingKeyboardPlayerNr-1].ProfileID = SelectedPlayerNr;
//Update config for default players.
CConfig.Players[selectingKeyboardPlayerNr - 1] = CProfiles.Profiles[SelectedPlayerNr].ProfileFile;
CConfig.SaveConfig();
//Update texture and name
Statics[htStatics(StaticPlayerAvatar[selectingKeyboardPlayerNr-1])].Texture = CProfiles.Profiles[SelectedPlayerNr].Avatar.Texture;
Texts[htTexts(TextPlayer[selectingKeyboardPlayerNr-1])].Text = CProfiles.Profiles[SelectedPlayerNr].PlayerName;
//Update profile-warning
CheckPlayers();
//Update Tiles-List
NameSelections[htNameSelections(NameSelection)].UpdateList();
SetInteractionToButton(Buttons[htButtons(ButtonStart)]);
}
//Reset all values
selectingKeyboardPlayerNr = 0;
selectingKeyboardActive = false;
NameSelections[htNameSelections(NameSelection)].KeyboardSelection(false, -1);
break;
case Keys.D1:
case Keys.NumPad1:
if (selectingKeyboardPlayerNr == 1)
{
//Reset all values
selectingKeyboardPlayerNr = 0;
selectingKeyboardActive = false;
NameSelections[htNameSelections(NameSelection)].KeyboardSelection(false, -1);
}
else
{
selectingKeyboardPlayerNr = 1;
NameSelections[htNameSelections(NameSelection)].KeyboardSelection(true, 1);
}
break;
case Keys.D2:
case Keys.NumPad2:
if (selectingKeyboardPlayerNr == 2)
{
//Reset all values
selectingKeyboardPlayerNr = 0;
selectingKeyboardActive = false;
NameSelections[htNameSelections(NameSelection)].KeyboardSelection(false, -1);
}
else
{
selectingKeyboardPlayerNr = 2;
NameSelections[htNameSelections(NameSelection)].KeyboardSelection(true, 2);
}
break;
case Keys.D3:
case Keys.NumPad3:
if (selectingKeyboardPlayerNr == 3)
{
//Reset all values
selectingKeyboardPlayerNr = 0;
selectingKeyboardActive = false;
NameSelections[htNameSelections(NameSelection)].KeyboardSelection(false, -1);
}
else
{
selectingKeyboardPlayerNr = 3;
NameSelections[htNameSelections(NameSelection)].KeyboardSelection(true, 3);
}
break;
case Keys.D4:
case Keys.NumPad4:
if (selectingKeyboardPlayerNr == 4)
{
//Reset all values
selectingKeyboardPlayerNr = 0;
selectingKeyboardActive = false;
NameSelections[htNameSelections(NameSelection)].KeyboardSelection(false, -1);
}
else
{
selectingKeyboardPlayerNr = 4;
NameSelections[htNameSelections(NameSelection)].KeyboardSelection(true, 4);
}
break;
case Keys.D5:
case Keys.NumPad5:
if (selectingKeyboardPlayerNr == 5)
{
//Reset all values
selectingKeyboardPlayerNr = 0;
selectingKeyboardActive = false;
NameSelections[htNameSelections(NameSelection)].KeyboardSelection(false, -1);
}
else
{
selectingKeyboardPlayerNr = 5;
NameSelections[htNameSelections(NameSelection)].KeyboardSelection(true, 5);
}
break;
case Keys.D6:
case Keys.NumPad6:
if (selectingKeyboardPlayerNr == 6)
{
//Reset all values
selectingKeyboardPlayerNr = 0;
selectingKeyboardActive = false;
NameSelections[htNameSelections(NameSelection)].KeyboardSelection(false, -1);
}
else
{
selectingKeyboardPlayerNr = 6;
NameSelections[htNameSelections(NameSelection)].KeyboardSelection(true, 6);
}
break;
case Keys.Escape:
//Reset all values
selectingKeyboardPlayerNr = 0;
selectingKeyboardActive = false;
NameSelections[htNameSelections(NameSelection)].KeyboardSelection(false, -1);
break;
case Keys.Delete:
//Delete profile-selection
CGame.Player[selectingKeyboardPlayerNr-1].ProfileID = -1;
CGame.Player[selectingKeyboardPlayerNr-1].Name = String.Empty;
CGame.Player[selectingKeyboardPlayerNr-1].Difficulty = EGameDifficulty.TR_CONFIG_EASY;
//Update config for default players.
CConfig.Players[selectingKeyboardPlayerNr - 1] = String.Empty;
CConfig.SaveConfig();
//Update texture and name
Statics[htStatics(StaticPlayerAvatar[selectingKeyboardPlayerNr - 1])].Texture = OriginalPlayerAvatarTextures[selectingKeyboardPlayerNr - 1];
Texts[htTexts(TextPlayer[selectingKeyboardPlayerNr - 1])].Text = CLanguage.Translate("TR_SCREENNAMES_PLAYER") + " " + selectingKeyboardPlayerNr.ToString();
//Update profile-warning
CheckPlayers();
//Reset all values
selectingKeyboardPlayerNr = 0;
selectingKeyboardActive = false;
NameSelections[htNameSelections(NameSelection)].KeyboardSelection(false, -1);
//Update Tiles-List
NameSelections[htNameSelections(NameSelection)].UpdateList();
break;
}
}
//Normal Keyboard handling
else
{
base.HandleInput(KeyEvent);
bool processed = false;
switch (KeyEvent.Key)
{
@@ -95,25 +295,6 @@ namespace Vocaluxe.Screens
break;
case Keys.Enter:
for (int i = 0; i < ButtonPlayer.Length; i++)
{
if (Buttons[htButtons(ButtonPlayer[i])].Selected)
{
processed = true;
CGame.NumPlayer = i + 1;
UpdateSelection();
UpdateVisibility();
CConfig.NumPlayer = CGame.NumPlayer;
CConfig.SaveConfig();
CheckMics();
break;
}
}
if (!processed && Buttons[htButtons(ButtonBack)].Selected)
{
@@ -128,10 +309,46 @@ namespace Vocaluxe.Screens
}
break;
case Keys.D1:
case Keys.NumPad1:
selectingKeyboardPlayerNr = 1;
break;
case Keys.D2:
case Keys.NumPad2:
selectingKeyboardPlayerNr = 2;
break;
case Keys.D3:
case Keys.NumPad3:
selectingKeyboardPlayerNr = 3;
break;
case Keys.D4:
case Keys.NumPad4:
selectingKeyboardPlayerNr = 4;
break;
case Keys.D5:
case Keys.NumPad5:
selectingKeyboardPlayerNr = 5;
break;
case Keys.D6:
case Keys.NumPad6:
selectingKeyboardPlayerNr = 6;
break;
}
if (!processed)
UpdateSelection();
UpdatePlayerNumber();
if (selectingKeyboardPlayerNr > 0 && selectingKeyboardPlayerNr <= CConfig.NumPlayer)
{
selectingKeyboardActive = true;
NameSelections[htNameSelections(NameSelection)].KeyboardSelection(true, selectingKeyboardPlayerNr);
}
}
return true;
@@ -141,6 +358,81 @@ namespace Vocaluxe.Screens
{
base.HandleMouse(MouseEvent);
//Check if LeftButton is hold and Select-Mode inactive
if (MouseEvent.LBH && !selectingMouseActive)
{
//Save mouse-coords
OldMouseX = MouseEvent.X;
OldMouseY = MouseEvent.Y;
//Check if mouse if over tile
if (NameSelections[htNameSelections(NameSelection)].isOverTile(MouseEvent))
{
//Get player-number of tile
SelectedPlayerNr = NameSelections[htNameSelections(NameSelection)].TilePlayerNr(MouseEvent);
if (SelectedPlayerNr != -1)
{
//Activate mouse-selecting
selectingMouseActive = true;
//Update of Drag/Drop-Texture
CStatic SelectedPlayer = NameSelections[htNameSelections(NameSelection)].TilePlayerAvatar(MouseEvent);
chooseAvatarStatic.Visible = true;
chooseAvatarStatic.Rect = SelectedPlayer.Rect;
chooseAvatarStatic.Rect.Z = CSettings.zNear + 1;
chooseAvatarStatic.Color = new SColorF(1, 1, 1, 1);
chooseAvatarStatic.Texture = SelectedPlayer.Texture;
}
}
}
//Check if LeftButton is hold and Select-Mode active
if (MouseEvent.LBH && selectingMouseActive)
{
//Update coords for Drag/Drop-Texture
chooseAvatarStatic.Rect.X += (MouseEvent.X - OldMouseX);
chooseAvatarStatic.Rect.Y += (MouseEvent.Y - OldMouseY);
OldMouseX = MouseEvent.X;
OldMouseY = MouseEvent.Y;
}
// LeftButton isn't hold anymore, but Selec-Mode is still active -> "Drop" of Avatar
else if (selectingMouseActive)
{
//Check if really a player was selected
if (SelectedPlayerNr != -1)
{
//Foreach Drop-Area
for (int i = 0; i < StaticPlayer.Length; i++)
{
//Check first, if area is "active"
if (Statics[htStatics(StaticPlayer[i])].Visible == true)
{
//Check if Mouse is in area
if (CHelper.IsInBounds(Statics[htStatics(StaticPlayer[i])].Rect, MouseEvent))
{
//Update Game-infos with new player
CGame.Player[i].Name = CProfiles.Profiles[SelectedPlayerNr].PlayerName;
CGame.Player[i].Difficulty = CProfiles.Profiles[SelectedPlayerNr].Difficulty;
CGame.Player[i].ProfileID = SelectedPlayerNr;
//Update config for default players.
CConfig.Players[i] = CProfiles.Profiles[SelectedPlayerNr].ProfileFile;
CConfig.SaveConfig();
//Update texture and name
Statics[htStatics(StaticPlayerAvatar[i])].Texture = chooseAvatarStatic.Texture;
Texts[htTexts(TextPlayer[i])].Text = CProfiles.Profiles[SelectedPlayerNr].PlayerName;
//Update profile-warning
CheckPlayers();
//Update Tiles-List
NameSelections[htNameSelections(NameSelection)].UpdateList();
}
}
}
SelectedPlayerNr = -1;
}
//Reset variables
selectingMouseActive = false;
chooseAvatarStatic.Visible = false;
}
if (MouseEvent.LB && IsMouseOver(MouseEvent))
{
@@ -149,24 +441,6 @@ namespace Vocaluxe.Screens
if (MouseEvent.LB && IsMouseOver(MouseEvent))
{
bool processed = false;
for (int i = 0; i < ButtonPlayer.Length; i++)
{
if (Buttons[htButtons(ButtonPlayer[i])].Selected)
{
processed = true;
CGame.NumPlayer = i + 1;
UpdateSelection();
UpdateVisibility();
CConfig.NumPlayer = CGame.NumPlayer;
CConfig.SaveConfig();
CheckMics();
break;
}
}
if (!processed && Buttons[htButtons(ButtonBack)].Selected)
{
@@ -181,12 +455,48 @@ namespace Vocaluxe.Screens
}
if (!processed)
UpdateSelection();
UpdatePlayerNumber();
//Update Tiles-List
NameSelections[htNameSelections(NameSelection)].UpdateList();
}
if (MouseEvent.RB)
{
CGraphics.FadeTo(EScreens.ScreenSong);
bool exit = true;
//Remove profile-selection
for (int i = 0; i < CConfig.NumPlayer; i++)
{
if (CHelper.IsInBounds(Statics[htStatics(StaticPlayer[i])].Rect, MouseEvent))
{
CGame.Player[i].ProfileID = -1;
CGame.Player[i].Name = String.Empty;
CGame.Player[i].Difficulty = EGameDifficulty.TR_CONFIG_EASY;
//Update config for default players.
CConfig.Players[i] = String.Empty;
CConfig.SaveConfig();
//Update texture and name
Statics[htStatics(StaticPlayerAvatar[i])].Texture = OriginalPlayerAvatarTextures[i];
Texts[htTexts(TextPlayer[i])].Text = CLanguage.Translate("TR_SCREENNAMES_PLAYER") + " " + (i+1).ToString();
//Update profile-warning
CheckPlayers();
//Update Tiles-List
NameSelections[htNameSelections(NameSelection)].UpdateList();
exit = false;
}
}
if(exit)
CGraphics.FadeTo(EScreens.ScreenSong);
}
//Check mouse-wheel for scrolling
if (MouseEvent.Wheel != 0)
{
if (CHelper.IsInBounds(NameSelections[htNameSelections(NameSelection)].Rect, MouseEvent))
{
int offset = NameSelections[htNameSelections(NameSelection)]._Offset + MouseEvent.Wheel;
NameSelections[htNameSelections(NameSelection)].UpdateList(offset);
}
}
return true;
}
@@ -201,32 +511,55 @@ namespace Vocaluxe.Screens
{
base.OnShow();
NameSelections[htNameSelections(NameSelection)].Init();
UpdateSlides();
UpdateVisibility();
UpdatePlayerNumber();
CheckMics();
CheckPlayers();
for (int i = 0; i < CSettings.MaxNumPlayer; i++)
{
//Update texture and name
if (CConfig.Players[i] != String.Empty)
{
Statics[htStatics(StaticPlayerAvatar[i])].Texture = CProfiles.Profiles[CGame.Player[i].ProfileID].Avatar.Texture;
Texts[htTexts(TextPlayer[i])].Text = CProfiles.Profiles[CGame.Player[i].ProfileID].PlayerName;
}
}
SetInteractionToButton(Buttons[htButtons(ButtonStart)]);
}
public override bool Draw()
{
return base.Draw();
base.Draw();
if (chooseAvatarStatic.Visible)
{
chooseAvatarStatic.Draw();
}
return true;
}
private void StartSong()
{
for (int i = 0; i < CGame.NumPlayer; i++)
{
if (CProfiles.Profiles.Length > 0)
if (CGame.Player[i].ProfileID < 0)
{
int pIndex = SelectSlides[htSelectSlides(SelectSlidePlayerMic[i])].ValueIndex;
CGame.Player[i].Name = CProfiles.Profiles[pIndex].PlayerName;
CGame.Player[i].Difficulty = CProfiles.Profiles[pIndex].Difficulty;
CGame.Player[i].ProfileID = pIndex;
CGame.Player[i].Name = "Player " + (i+1).ToString();
CGame.Player[i].Difficulty = EGameDifficulty.TR_CONFIG_EASY;
CGame.Player[i].ProfileID = -1;
}
else
{
CGame.Player[i].Name = "Player " + i.ToString();
CGame.Player[i].Difficulty = EGameDifficulty.TR_CONFIG_EASY;
CGame.Player[i].ProfileID = -1;
//Just a work-around for not crashing the game
if (CGame.Player[i].Name == null)
{
CGame.Player[i].Name = "";
}
}
}
@@ -235,51 +568,40 @@ namespace Vocaluxe.Screens
private void UpdateSlides()
{
for (int i = 0; i < SelectSlidePlayerMic.Length; i++)
SelectSlides[htSelectSlides(SelectSlidePlayerNumber)].Clear();
for (int i = 1; i <= CSettings.MaxNumPlayer; i++)
{
SelectSlides[htSelectSlides(SelectSlidePlayerMic[i])].Clear();
}
for (int i = 0; i < CProfiles.NumProfiles; i++)
{
if (CProfiles.Profiles[i].Active == EOffOn.TR_CONFIG_ON)
{
for (int p = 0; p < SelectSlidePlayerMic.Length; p++)
{
SelectSlides[htSelectSlides(SelectSlidePlayerMic[p])].AddValue(CProfiles.Profiles[i].PlayerName, CProfiles.Profiles[i].Avatar.Texture, i);
}
}
}
for (int i = 0; i < _PlayerNr.Length; i++)
{
if (i < SelectSlidePlayerMic.Length)
{
if (_PlayerNr[i] < CProfiles.NumProfiles && _PlayerNr[i] >= 0)
{
SelectSlides[htSelectSlides(SelectSlidePlayerMic[i])].Selection = _PlayerNr[i];
}
}
SelectSlides[htSelectSlides(SelectSlidePlayerNumber)].AddValue(CLanguage.Translate("TR_SCREENNAMES_" + i + "PLAYER"));
}
SelectSlides[htSelectSlides(SelectSlidePlayerNumber)].Selection = CConfig.NumPlayer - 1;
}
private void UpdateSelection()
private void UpdatePlayerNumber()
{
for (int i = 0; i < _PlayerNr.Length; i++)
CConfig.NumPlayer = (int)SelectSlides[htSelectSlides(SelectSlidePlayerNumber)].Selection + 1;
CGame.NumPlayer = (int)SelectSlides[htSelectSlides(SelectSlidePlayerNumber)].Selection + 1;
for (int i = 1; i <= CSettings.MaxNumPlayer; i++)
{
if (i < SelectSlidePlayerMic.Length)
if (i <= CGame.NumPlayer)
{
_PlayerNr[i] = SelectSlides[htSelectSlides(SelectSlidePlayerMic[i])].Selection;
Statics[htStatics("StaticPlayer" + i)].Visible = true;
Statics[htStatics("StaticPlayerAvatar" + i)].Visible = true;
Texts[htTexts("TextPlayer" + i)].Visible = true;
if (Texts[htTexts("TextPlayer" + i)].Text == string.Empty)
{
Texts[htTexts("TextPlayer" + i)].Text = CLanguage.Translate("TR_SCREENNAMES_PLAYER") + " " + i.ToString();
}
}
else
{
Statics[htStatics("StaticPlayer" + i)].Visible = false;
Statics[htStatics("StaticPlayerAvatar" + i)].Visible = false;
Texts[htTexts("TextPlayer" + i)].Visible = false;
}
}
}
private void UpdateVisibility()
{
for (int i = 0; i < SelectSlidePlayerMic.Length; i++)
{
SelectSlides[htSelectSlides(SelectSlidePlayerMic[i])].Visible = i < CGame.NumPlayer;
}
CConfig.SaveConfig();
CheckMics();
CheckPlayers();
}
private void CheckMics()
@@ -294,8 +616,8 @@ namespace Vocaluxe.Screens
}
if (_PlayerWithoutMicro.Count > 0)
{
Statics[htStatics(StaticWarning)].Visible = true;
Texts[htTexts(TextWarning)].Visible = true;
Statics[htStatics(StaticWarningMics)].Visible = true;
Texts[htTexts(TextWarningMics)].Visible = true;
if (_PlayerWithoutMicro.Count > 1)
{
@@ -316,17 +638,66 @@ namespace Vocaluxe.Screens
}
}
Texts[htTexts(TextWarning)].Text = CLanguage.Translate("TR_SCREENNAMES_WARNING_PL").Replace("%v", PlayerNums);
Texts[htTexts(TextWarningMics)].Text = CLanguage.Translate("TR_SCREENNAMES_WARNING_MICS_PL").Replace("%v", PlayerNums);
}
else
{
Texts[htTexts(TextWarning)].Text = CLanguage.Translate("TR_SCREENNAMES_WARNING_SG").Replace("%v", _PlayerWithoutMicro[0].ToString());
Texts[htTexts(TextWarningMics)].Text = CLanguage.Translate("TR_SCREENNAMES_WARNING_MICS_SG").Replace("%v", _PlayerWithoutMicro[0].ToString());
}
}
else
{
Statics[htStatics(StaticWarning)].Visible = false;
Texts[htTexts(TextWarning)].Visible = false;
Statics[htStatics(StaticWarningMics)].Visible = false;
Texts[htTexts(TextWarningMics)].Visible = false;
}
}
private void CheckPlayers()
{
List<int> _PlayerWithoutProfile = new List<int>();
for (int player = 0; player < CConfig.NumPlayer; player++)
{
if (CGame.Player[player].ProfileID < 0)
{
_PlayerWithoutProfile.Add(player + 1);
}
}
if (_PlayerWithoutProfile.Count > 0)
{
Statics[htStatics(StaticWarningProfiles)].Visible = true;
Texts[htTexts(TextWarningProfiles)].Visible = true;
if (_PlayerWithoutProfile.Count > 1)
{
string PlayerNums = string.Empty;
for (int i = 0; i < _PlayerWithoutProfile.Count; i++)
{
if (_PlayerWithoutProfile.Count - 1 == i)
{
PlayerNums += _PlayerWithoutProfile[i].ToString();
}
else if (_PlayerWithoutProfile.Count - 2 == i)
{
PlayerNums += _PlayerWithoutProfile[i].ToString() + " " + CLanguage.Translate("TR_GENERAL_AND") + " ";
}
else
{
PlayerNums += _PlayerWithoutProfile[i].ToString() + ", ";
}
}
Texts[htTexts(TextWarningProfiles)].Text = CLanguage.Translate("TR_SCREENNAMES_WARNING_PROFILES_PL").Replace("%v", PlayerNums);
}
else
{
Texts[htTexts(TextWarningProfiles)].Text = CLanguage.Translate("TR_SCREENNAMES_WARNING_PROFILES_SG").Replace("%v", _PlayerWithoutProfile[0].ToString());
}
}
else
{
Statics[htStatics(StaticWarningProfiles)].Visible = false;
Texts[htTexts(TextWarningProfiles)].Visible = false;
}
}
}
+8 -1
View File
@@ -18,6 +18,7 @@ namespace Vocaluxe.Screens
private const string ButtonOptionsSound = "ButtonOptionsSound";
private const string ButtonOptionsRecord = "ButtonOptionsRecord";
private const string ButtonOptionsVideo = "ButtonOptionsVideo";
private const string ButtonOptionsLyrics = "ButtonOptionsLyrics";
private const string ButtonOptionsTheme = "ButtonOptionsTheme";
public CScreenOptions()
@@ -31,7 +32,7 @@ namespace Vocaluxe.Screens
_ThemeName = "ScreenOptions";
_ScreenVersion = ScreenVersion;
_ThemeButtons = new string[] { ButtonOptionsGame, ButtonOptionsSound, ButtonOptionsRecord, ButtonOptionsVideo, ButtonOptionsTheme };
_ThemeButtons = new string[] { ButtonOptionsGame, ButtonOptionsSound, ButtonOptionsRecord, ButtonOptionsVideo, ButtonOptionsLyrics, ButtonOptionsTheme };
}
public override bool HandleInput(KeyEvent KeyEvent)
@@ -68,6 +69,9 @@ namespace Vocaluxe.Screens
if (Buttons[htButtons(ButtonOptionsVideo)].Selected)
CGraphics.FadeTo(EScreens.ScreenOptionsVideo);
if (Buttons[htButtons(ButtonOptionsLyrics)].Selected)
CGraphics.FadeTo(EScreens.ScreenOptionsLyrics);
if (Buttons[htButtons(ButtonOptionsTheme)].Selected)
CGraphics.FadeTo(EScreens.ScreenOptionsTheme);
@@ -95,6 +99,9 @@ namespace Vocaluxe.Screens
if (Buttons[htButtons(ButtonOptionsVideo)].Selected)
CGraphics.FadeTo(EScreens.ScreenOptionsVideo);
if (Buttons[htButtons(ButtonOptionsLyrics)].Selected)
CGraphics.FadeTo(EScreens.ScreenOptionsLyrics);
if (Buttons[htButtons(ButtonOptionsTheme)].Selected)
CGraphics.FadeTo(EScreens.ScreenOptionsTheme);
}
+124
View File
@@ -0,0 +1,124 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using Vocaluxe.Base;
using Vocaluxe.Menu;
namespace Vocaluxe.Screens
{
class CScreenOptionsLyrics : CMenu
{
// Version number for theme files. Increment it, if you've changed something on the theme files!
const int ScreenVersion = 1;
private const string SelectSlideLyricStyle = "SelectSlideLyricStyle";
private const string SelectSlideLyricsOnTop = "SelectSlideLyricsOnTop";
private const string ButtonExit = "ButtonExit";
public CScreenOptionsLyrics()
{
Init();
}
protected override void Init()
{
base.Init();
_ThemeName = "ScreenOptionsLyrics";
_ScreenVersion = ScreenVersion;
_ThemeButtons = new string[] { ButtonExit };
_ThemeSelectSlides = new string[] { SelectSlideLyricStyle, SelectSlideLyricsOnTop };
}
public override void LoadTheme()
{
base.LoadTheme();
SelectSlides[htSelectSlides(SelectSlideLyricStyle)].SetValues<ELyricStyle>((int)CConfig.LyricStyle);
SelectSlides[htSelectSlides(SelectSlideLyricsOnTop)].SetValues<EOffOn>((int)CConfig.LyricsOnTop);
}
public override bool HandleInput(KeyEvent KeyEvent)
{
base.HandleInput(KeyEvent);
if (KeyEvent.KeyPressed)
{
}
else
{
switch (KeyEvent.Key)
{
case Keys.Escape:
case Keys.Back:
SaveConfig();
CGraphics.FadeTo(EScreens.ScreenOptions);
break;
case Keys.S:
CGraphics.FadeTo(EScreens.ScreenSong);
break;
case Keys.Enter:
if (Buttons[htButtons(ButtonExit)].Selected)
{
SaveConfig();
CGraphics.FadeTo(EScreens.ScreenOptions);
}
break;
case Keys.Left:
SaveConfig();
break;
case Keys.Right:
SaveConfig();
break;
}
}
return true;
}
public override bool HandleMouse(MouseEvent MouseEvent)
{
base.HandleMouse(MouseEvent);
if (MouseEvent.RB)
{
SaveConfig();
CGraphics.FadeTo(EScreens.ScreenOptions);
}
if (MouseEvent.LB && IsMouseOver(MouseEvent))
{
SaveConfig();
if (Buttons[htButtons(ButtonExit)].Selected)
{
CGraphics.FadeTo(EScreens.ScreenOptions);
}
}
return true;
}
public override bool UpdateGame()
{
return true;
}
public override bool Draw()
{
base.Draw();
return true;
}
private void SaveConfig()
{
CConfig.LyricsOnTop = (EOffOn)SelectSlides[htSelectSlides(SelectSlideLyricsOnTop)].Selection;
CConfig.LyricStyle = (ELyricStyle)SelectSlides[htSelectSlides(SelectSlideLyricStyle)].Selection;
CConfig.SaveConfig();
}
}
}
+109 -2
View File
@@ -51,6 +51,8 @@ namespace Vocaluxe.Screens
private bool _DelayTestRunning;
private int _DelaySound;
private Equalizer[] _Equalizer;
public CScreenOptionsRecord()
{
Init();
@@ -254,7 +256,8 @@ namespace Vocaluxe.Screens
_DelayTest[i].Timer.Stop();
_DelayTestRunning = false;
}
else if (CSound.RecordGetMaxVolume(player - 1) > 0.4f && CSound.RecordGetToneAbs(player - 1) == 9)
else if (CSound.RecordGetMaxVolume(player - 1) > 0.1f &&
(CSound.RecordGetToneAbs(player - 1) == 9 || CSound.RecordGetToneAbs(player - 1) == 21 || CSound.RecordGetToneAbs(player - 1) == 33))
{
_DelayTest[i].Delay = _DelayTest[i].Timer.ElapsedMilliseconds;
_DelayTest[i].Timer.Stop();
@@ -274,20 +277,27 @@ namespace Vocaluxe.Screens
if (player > 0)
{
ChannelEnergy[0] = CSound.RecordGetMaxVolume(player - 1);
_Equalizer[0].Update(CSound.ToneWeigth(player - 1));
}
else
_Equalizer[0].Reset();
ChannelEnergy[1] = 0f;
player = SelectSlides[htSelectSlides(SelectSlideRecordChannel2)].Selection;
if (player > 0)
{
ChannelEnergy[1] = CSound.RecordGetMaxVolume(player - 1);
_Equalizer[1].Update(CSound.ToneWeigth(player - 1));
}
else
_Equalizer[1].Reset();
}
else
{
for (int i = 0; i < ChannelEnergy.Length; i++)
{
ChannelEnergy[i] = 0f;
_Equalizer[i].Reset();
}
}
@@ -351,12 +361,19 @@ namespace Vocaluxe.Screens
_DelayTestRunning = false;
_DelaySound = -1;
_Equalizer = new Equalizer[2];
for (int i = 0; i < _Equalizer.Length; i++)
{
_Equalizer[i] = new Equalizer(new SRectF(50 + 350 * i, 400, 230, 150, -1), CSound.NumHalfTones(0), 2);
}
}
public override void OnShowFinish()
{
base.OnShowFinish();
CBackgroundMusic.Pause();
CBackgroundMusic.Disabled = true;
}
public override bool Draw()
@@ -389,6 +406,11 @@ namespace Vocaluxe.Screens
}
}
for (int i = 0; i < _Equalizer.Length; i++)
{
_Equalizer[i].Draw();
}
DrawFG();
return true;
@@ -400,6 +422,7 @@ namespace Vocaluxe.Screens
CSound.RecordStop();
_DelayTest = null;
CBackgroundMusic.Disabled = false;
}
private void OnDeviceEvent()
@@ -571,4 +594,88 @@ namespace Vocaluxe.Screens
}
}
}
class Equalizer
{
private SRectF _Bounds;
private float _Space;
private float[] _Bars;
public Equalizer(SRectF bounds, int numBars, float space)
{
_Bounds = bounds;
_Space = space;
if (numBars > 0)
_Bars = new float[numBars];
}
public void Update(float[] weights)
{
if (weights == null || weights.Length == 0 || _Bars == null)
return;
if (_Bars.Length < weights.Length)
{
}
else if (_Bars.Length > weights.Length)
{
}
else
{
for (int i = 0; i < _Bars.Length; i++)
{
//if (weights[i] > 0)
_Bars[i] = weights[i];
//else
// _Bars[i] = 0f;
}
}
}
public void Reset()
{
if (_Bars == null || _Bars.Length == 0)
return;
for (int i = 0; i < _Bars.Length; i++)
{
_Bars[i] = 0f;
}
}
public void Draw()
{
if (_Bars == null)
return;
float dx = _Bounds.W / _Bars.Length + _Space;
int max = _Bars.Length - 1;
float maxB = _Bars[max];
for (int i = 0; i < _Bars.Length - 1; i++)
{
if (_Bars[i] > maxB)
{
maxB = _Bars[i];
max = i;
}
}
for (int i = 0; i < _Bars.Length; i++)
{
SRectF bar = new SRectF(_Bounds.X + dx * i, _Bounds.Y + _Bounds.H - _Bars[i] * _Bounds.H, dx - _Space, _Bars[i] * _Bounds.H, _Bounds.Z);
SColorF color = new SColorF(1f, 1f, 1f, 1f);
if (i == max)
{
color.B = 0f;
color.G = 0f;
}
CDraw.DrawColor(color, bar);
}
}
}
}
+5 -1
View File
@@ -12,7 +12,7 @@ namespace Vocaluxe.Screens
class CScreenOptionsTheme : CMenu
{
// Version number for theme files. Increment it, if you've changed something on the theme files!
const int ScreenVersion = 2;
const int ScreenVersion = 3;
private const string SelectSlideTheme = "SelectSlideTheme";
private const string SelectSlideSkin = "SelectSlideSkin";
@@ -20,6 +20,7 @@ namespace Vocaluxe.Screens
private const string SelectSlideNoteLines = "SelectSlideNoteLines";
private const string SelectSlideToneHelper = "SelectSlideToneHelper";
private const string SelectSlideTimerLook = "SelectSlideTimerLook";
private const string SelectSlideFadeInfo = "SelectSlideFadeInfo";
private const string SelectSlideCoverLoading = "SelectSlideCoverLoading";
private const string ButtonExit = "ButtonExit";
@@ -49,6 +50,7 @@ namespace Vocaluxe.Screens
SelectSlideNoteLines,
SelectSlideToneHelper,
SelectSlideTimerLook,
SelectSlideFadeInfo,
SelectSlideCoverLoading
};
}
@@ -68,6 +70,7 @@ namespace Vocaluxe.Screens
SelectSlides[htSelectSlides(SelectSlideNoteLines)].SetValues<EOffOn>((int)CConfig.DrawNoteLines);
SelectSlides[htSelectSlides(SelectSlideToneHelper)].SetValues<EOffOn>((int)CConfig.DrawToneHelper);
SelectSlides[htSelectSlides(SelectSlideTimerLook)].SetValues<ETimerLook>((int)CConfig.TimerLook);
SelectSlides[htSelectSlides(SelectSlideFadeInfo)].SetValues<EFadePlayerInfo>((int)CConfig.FadePlayerInfo);
SelectSlides[htSelectSlides(SelectSlideCoverLoading)].SetValues<ECoverLoading>((int)CConfig.CoverLoading);
}
@@ -163,6 +166,7 @@ namespace Vocaluxe.Screens
CConfig.DrawNoteLines = (EOffOn)SelectSlides[htSelectSlides(SelectSlideNoteLines)].Selection;
CConfig.DrawToneHelper = (EOffOn)SelectSlides[htSelectSlides(SelectSlideToneHelper)].Selection;
CConfig.TimerLook = (ETimerLook)SelectSlides[htSelectSlides(SelectSlideTimerLook)].Selection;
CConfig.FadePlayerInfo = (EFadePlayerInfo)SelectSlides[htSelectSlides(SelectSlideFadeInfo)].Selection;
CConfig.CoverLoading = (ECoverLoading)SelectSlides[htSelectSlides(SelectSlideCoverLoading)].Selection;
CConfig.SaveConfig();
+7 -2
View File
@@ -12,11 +12,12 @@ namespace Vocaluxe.Screens
class CScreenOptionsVideo : CMenu
{
// Version number for theme files. Increment it, if you've changed something on the theme files!
const int ScreenVersion = 1;
const int ScreenVersion = 2;
private const string SelectSlideVideoBackgrounds = "SelectSlideVideoBackgrounds";
private const string SelectSlideVideoPreview = "SelectSlideVideoPreview";
private const string SelectSlideVideosInSongs = "SelectSlideVideosInSongs";
private const string SelectSlideVideosToBackground = "SelectSlideVideosToBackground";
private const string ButtonExit = "ButtonExit";
@@ -33,7 +34,7 @@ namespace Vocaluxe.Screens
_ScreenVersion = ScreenVersion;
_ThemeButtons = new string[] { ButtonExit };
_ThemeSelectSlides = new string[] { SelectSlideVideoBackgrounds, SelectSlideVideoPreview, SelectSlideVideosInSongs };
_ThemeSelectSlides = new string[] { SelectSlideVideoBackgrounds, SelectSlideVideoPreview, SelectSlideVideosInSongs, SelectSlideVideosToBackground };
}
public override void LoadTheme()
@@ -43,6 +44,7 @@ namespace Vocaluxe.Screens
SelectSlides[htSelectSlides(SelectSlideVideoBackgrounds)].SetValues<EOffOn>((int)CConfig.VideoBackgrounds);
SelectSlides[htSelectSlides(SelectSlideVideoPreview)].SetValues<EOffOn>((int)CConfig.VideoPreview);
SelectSlides[htSelectSlides(SelectSlideVideosInSongs)].SetValues<EOffOn>((int)CConfig.VideosInSongs);
SelectSlides[htSelectSlides(SelectSlideVideosToBackground)].SetValues<EOffOn>((int)CConfig.VideosToBackground);
}
public override bool HandleInput(KeyEvent KeyEvent)
@@ -110,6 +112,7 @@ namespace Vocaluxe.Screens
public override bool UpdateGame()
{
SelectSlides[htSelectSlides(SelectSlideVideosToBackground)].Selection = (int)CConfig.VideosToBackground;
return true;
}
@@ -124,6 +127,8 @@ namespace Vocaluxe.Screens
CConfig.VideoBackgrounds = (EOffOn)SelectSlides[htSelectSlides(SelectSlideVideoBackgrounds)].Selection;
CConfig.VideoPreview = (EOffOn)SelectSlides[htSelectSlides(SelectSlideVideoPreview)].Selection;
CConfig.VideosInSongs = (EOffOn)SelectSlides[htSelectSlides(SelectSlideVideosInSongs)].Selection;
CConfig.VideosToBackground = (EOffOn)SelectSlides[htSelectSlides(SelectSlideVideosToBackground)].Selection;
CBackgroundMusic.VideoEnabled = true;
CConfig.SaveConfig();
}
+11 -3
View File
@@ -15,7 +15,7 @@ namespace Vocaluxe.Screens
class CScreenScore : CMenu
{
// Version number for theme files. Increment it, if you've changed something on the theme files!
const int ScreenVersion = 1;
const int ScreenVersion = 2;
private const string TextSong = "TextSong";
@@ -260,8 +260,16 @@ namespace Vocaluxe.Screens
{
Texts[htTexts(TextNames[p, CGame.NumPlayer - 1])].Text = player[p].Name;
Texts[htTexts(TextScores[p, CGame.NumPlayer - 1])].Text = ((int)Math.Round(player[p].Points)).ToString("0000") + " " + CLanguage.Translate("TR_SCREENSCORE_POINTS");
Texts[htTexts(TextRatings[p, CGame.NumPlayer - 1])].Text = CLanguage.Translate("TR_SCREENSCORE_RATING") + ": " + CLanguage.Translate(GetRating((int)Math.Round(player[p].Points)));
Texts[htTexts(TextDifficulty[p, CGame.NumPlayer - 1])].Text = CLanguage.Translate("TR_SCREENSCORE_GAMEDIFFICULTY") + ": " + CLanguage.Translate(player[p].Difficulty.ToString());
if (CGame.NumPlayer <= 3)
{
Texts[htTexts(TextRatings[p, CGame.NumPlayer - 1])].Text = CLanguage.Translate("TR_SCREENSCORE_RATING") + ": " + CLanguage.Translate(GetRating((int)Math.Round(player[p].Points)));
Texts[htTexts(TextDifficulty[p, CGame.NumPlayer - 1])].Text = CLanguage.Translate("TR_SCREENSCORE_GAMEDIFFICULTY") + ": " + CLanguage.Translate(player[p].Difficulty.ToString());
}
else
{
Texts[htTexts(TextRatings[p, CGame.NumPlayer - 1])].Text = CLanguage.Translate(GetRating((int)Math.Round(player[p].Points)));
Texts[htTexts(TextDifficulty[p, CGame.NumPlayer - 1])].Text = CLanguage.Translate(player[p].Difficulty.ToString());
}
StaticPointsBarDrawnPoints[p] = 0.0;
Statics[htStatics(StaticPointsBar[p, CGame.NumPlayer - 1])].Rect.H = 0;
Statics[htStatics(StaticPointsBar[p, CGame.NumPlayer - 1])].Rect.Y = Statics[htStatics(StaticPointsBarBG[p, CGame.NumPlayer - 1])].Rect.H + Statics[htStatics(StaticPointsBarBG[p, CGame.NumPlayer - 1])].Rect.Y - Statics[htStatics(StaticPointsBar[p, CGame.NumPlayer - 1])].Rect.H;
+94 -7
View File
@@ -17,7 +17,7 @@ namespace Vocaluxe.Screens
class CScreenSing : CMenu
{
// Version number for theme files. Increment it, if you've changed something on the theme files!
const int ScreenVersion = 3;
const int ScreenVersion = 4;
struct TimeRect
{
@@ -30,6 +30,7 @@ namespace Vocaluxe.Screens
private const string TextTime = "TextTime";
private const string TextPause = "TextPause";
private string[,] TextScores;
private string[,] TextNames;
private const string StaticSongText = "StaticSongText";
private const string StaticLyrics = "StaticLyrics";
@@ -46,6 +47,7 @@ namespace Vocaluxe.Screens
private const string StaticPauseBG = "StaticPauseBG";
private string[,] StaticScores;
private string[,] StaticAvatars;
private const string ButtonCancel = "ButtonCancel";
private const string ButtonContinue = "ButtonContinue";
@@ -185,6 +187,19 @@ namespace Vocaluxe.Screens
CConfig.TimerMode = (ETimerMode)mode;
break;
case Keys.I:
mode = (int)CConfig.PlayerInfo;
mode++;
if (mode > Enum.GetNames(typeof(EPlayerInfo)).Length - 1)
{
mode = 0;
}
CConfig.PlayerInfo = (EPlayerInfo)mode;
CConfig.SaveConfig();
SetVisuability();
break;
case Keys.Enter:
if (Buttons[htButtons(ButtonContinue)].Selected && _Pause)
TogglePause();
@@ -269,6 +284,18 @@ namespace Vocaluxe.Screens
for (int p = 0; p < CGame.NumPlayer; p++)
{
SingNotes[htSingNotes(SingBars)].SetAlpha(NoteLines[p], Alpha[CGame.Player[p].LineNr * 2]);
if (CConfig.FadePlayerInfo == EFadePlayerInfo.TR_CONFIG_FADEPLAYERINFO_INFO || CConfig.FadePlayerInfo == EFadePlayerInfo.TR_CONFIG_FADEPLAYERINFO_ALL)
{
Statics[htStatics(StaticAvatars[p,CGame.NumPlayer-1])].Alpha = Alpha[0];
Texts[htTexts(TextNames[p,CGame.NumPlayer-1])].Alpha = Alpha[0];
}
if (CConfig.FadePlayerInfo == EFadePlayerInfo.TR_CONFIG_FADEPLAYERINFO_ALL)
{
Statics[htStatics(StaticScores[p, CGame.NumPlayer - 1])].Alpha = Alpha[0];
Statics[htStatics(StaticAvatars[p, CGame.NumPlayer - 1])].Alpha = Alpha[0];
Texts[htTexts(TextNames[p, CGame.NumPlayer - 1])].Alpha = Alpha[0];
Texts[htTexts(TextScores[p, CGame.NumPlayer - 1])].Alpha = Alpha[0];
}
}
if (Alpha.Length > 2)
@@ -290,7 +317,14 @@ namespace Vocaluxe.Screens
for (int p = 0; p < CGame.NumPlayer; p++)
{
Texts[htTexts(TextScores[p, CGame.NumPlayer - 1])].Text = CGame.Player[p].Points.ToString("00000");
if (CGame.Player[p].Points < 10000)
{
Texts[htTexts(TextScores[p, CGame.NumPlayer - 1])].Text = CGame.Player[p].Points.ToString("0000");
}
else
{
Texts[htTexts(TextScores[p, CGame.NumPlayer - 1])].Text = CGame.Player[p].Points.ToString("00000");
}
}
if (_CurrentVideo != -1 && !_FadeOut && CConfig.VideosInSongs == EOffOn.TR_CONFIG_ON)
@@ -325,8 +359,17 @@ namespace Vocaluxe.Screens
NoteLines[i] = -1;
}
for (int i = 0; i < Lyrics.Length; i++)
{
Lyrics[i].LyricStyle = CConfig.LyricStyle;
}
SetVisuability();
CBackgroundMusic.Pause();
UpdateAvatars();
UpdateNames();
CBackgroundMusic.Disabled = true;
}
public override void OnShowFinish()
@@ -335,7 +378,7 @@ namespace Vocaluxe.Screens
CGame.Start();
LoadNextSong();
CBackgroundMusic.Pause();
CBackgroundMusic.Disabled = true;
}
public override bool Draw()
@@ -418,6 +461,7 @@ namespace Vocaluxe.Screens
public override void OnClose()
{
base.OnClose();
CBackgroundMusic.Disabled = false;
CloseSong();
}
@@ -496,10 +540,13 @@ namespace Vocaluxe.Screens
SingNotes[htSingNotes(SingBars)].Reset();
bool LyricsOnTop = CGame.NumPlayer == 2 && CConfig.LyricsOnTop == EOffOn.TR_CONFIG_ON;
bool LyricsOnTop = (CGame.NumPlayer != 1) && CConfig.LyricsOnTop == EOffOn.TR_CONFIG_ON;
if (song.IsDuet)
{
CGame.Player[1].LineNr = 1;
{
for (int i = 1; i <= CGame.NumPlayer; i = i + 2)
{
CGame.Player[i].LineNr = 1;
}
Statics[htStatics(StaticLyricsDuet)].Visible = true;
Lyrics[htLyrics(LyricMainDuet)].Visible = true;
Lyrics[htLyrics(LyricSubDuet)].Visible = true;
@@ -673,6 +720,7 @@ namespace Vocaluxe.Screens
private void BuildTextStrings(ref List<string> texts)
{
TextScores = new string[CSettings.MaxNumPlayer, CSettings.MaxNumPlayer];
TextNames = new string[CSettings.MaxNumPlayer, CSettings.MaxNumPlayer];
for (int numplayer = 0; numplayer < CSettings.MaxNumPlayer; numplayer++)
{
@@ -682,8 +730,10 @@ namespace Vocaluxe.Screens
{
string target = "P" + (player + 1).ToString() + "N" + (numplayer + 1).ToString();
TextScores[player, numplayer] = "TextScore" + target;
TextNames[player, numplayer] = "TextName" + target;
texts.Add(TextScores[player, numplayer]);
texts.Add(TextNames[player, numplayer]);
}
}
}
@@ -692,6 +742,7 @@ namespace Vocaluxe.Screens
private void BuildStaticStrings(ref List<string> statics)
{
StaticScores = new string[CSettings.MaxNumPlayer, CSettings.MaxNumPlayer];
StaticAvatars = new string[CSettings.MaxNumPlayer, CSettings.MaxNumPlayer];
for (int numplayer = 0; numplayer < CSettings.MaxNumPlayer; numplayer++)
{
@@ -701,8 +752,10 @@ namespace Vocaluxe.Screens
{
string target = "P" + (player + 1).ToString() + "N" + (numplayer + 1).ToString();
StaticScores[player, numplayer] = "StaticScore" + target;
StaticAvatars[player, numplayer] = "StaticAvatar" + target;
statics.Add(StaticScores[player, numplayer]);
statics.Add(StaticAvatars[player, numplayer]);
}
}
}
@@ -727,7 +780,11 @@ namespace Vocaluxe.Screens
if (player <= numplayer)
{
Texts[htTexts(TextScores[player, numplayer])].Visible = (numplayer + 1 == CGame.NumPlayer);
Texts[htTexts(TextNames[player, numplayer])].Visible = ((numplayer + 1 == CGame.NumPlayer)
&& (CConfig.PlayerInfo == EPlayerInfo.TR_CONFIG_PLAYERINFO_BOTH || CConfig.PlayerInfo == EPlayerInfo.TR_CONFIG_PLAYERINFO_NAME));
Statics[htStatics(StaticScores[player, numplayer])].Visible = (numplayer + 1 == CGame.NumPlayer);
Statics[htStatics(StaticAvatars[player, numplayer])].Visible = ((numplayer + 1 == CGame.NumPlayer)
&& (CConfig.PlayerInfo == EPlayerInfo.TR_CONFIG_PLAYERINFO_BOTH || CConfig.PlayerInfo == EPlayerInfo.TR_CONFIG_PLAYERINFO_AVATAR));
}
}
}
@@ -1109,5 +1166,35 @@ namespace Vocaluxe.Screens
break;
}
}
private void UpdateAvatars()
{
for (int i = 0; i < CGame.NumPlayer; i++)
{
if (CGame.Player[i].ProfileID > -1)
{
Statics[htStatics(StaticAvatars[i, CGame.NumPlayer - 1])].Texture = CProfiles.Profiles[CGame.Player[i].ProfileID].Avatar.Texture;
}
else
{
Statics[htStatics(StaticAvatars[i, CGame.NumPlayer - 1])].Visible = false;
}
}
}
private void UpdateNames()
{
for (int i = 0; i < CGame.NumPlayer; i++)
{
if (CGame.Player[i].ProfileID > -1)
{
Texts[htTexts(TextNames[i, CGame.NumPlayer - 1])].Text = CProfiles.Profiles[CGame.Player[i].ProfileID].PlayerName;
}
else
{
Texts[htTexts(TextNames[i, CGame.NumPlayer - 1])].Visible = false;
}
}
}
}
}
Loaded 100 of 103 files, more files were not shown because too many files have changed in this diff. Show more