Merge remote-tracking branch 'remotes/flokuep/medley' into medley
No files matched your search
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 4.0 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 15 KiB |
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
|
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:
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -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()
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
});
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -13,7 +13,8 @@ namespace Vocaluxe.Menu
|
||||
TStatic,
|
||||
TSongMenu,
|
||||
TLyric,
|
||||
TSingNote
|
||||
TSingNote,
|
||||
TNameSelection
|
||||
}
|
||||
|
||||
class CInteraction
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||