Merge remote-tracking branch 'upstream/develop' into medley
This commit is contained in:
commit
07bad380a3
81 files changed
+9135
-970
No files matched your search
@@ -88,6 +88,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,11 +105,17 @@
|
||||
<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_SEARCH>Suche:</TR_SCREENSONG_SEARCH>
|
||||
@@ -174,11 +184,13 @@
|
||||
<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>
|
||||
<!--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>
|
||||
@@ -88,6 +88,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,11 +105,17 @@
|
||||
<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_SEARCH>Search:</TR_SCREENSONG_SEARCH>
|
||||
@@ -174,11 +184,13 @@
|
||||
<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>
|
||||
<!--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>
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 12 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 4.0 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 18 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.1 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 13 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 15 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,442 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<PopupScreenPlayerControl>
|
||||
<ScreenVersion>1</ScreenVersion>
|
||||
<StaticBG>
|
||||
<!--<Skin>: Texture name-->
|
||||
<Skin>Menu</Skin>
|
||||
<!--<X>, <Y>, <Z>, <W>, <H>: Static position, width and height-->
|
||||
<X>49</X>
|
||||
<Y>0</Y>
|
||||
<Z>0,00</Z>
|
||||
<W>1181</W>
|
||||
<H>50</H>
|
||||
<!--<Color>: Static color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>Visible</Color>
|
||||
<!--<Reflection> If exists:-->
|
||||
<!-- <Space>: Reflection Space-->
|
||||
<!-- <Height>: Reflection Height-->
|
||||
</StaticBG>
|
||||
<StaticCover>
|
||||
<!--<Skin>: Texture name-->
|
||||
<Skin>CoverBackground</Skin>
|
||||
<!--<X>, <Y>, <Z>, <W>, <H>: Static position, width and height-->
|
||||
<X>50</X>
|
||||
<Y>0</Y>
|
||||
<Z>0,00</Z>
|
||||
<W>50</W>
|
||||
<H>50</H>
|
||||
<!--<Color>: Static color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>Visible</Color>
|
||||
<!--<Reflection> If exists:-->
|
||||
<!-- <Space>: Reflection Space-->
|
||||
<!-- <Height>: Reflection Height-->
|
||||
</StaticCover>
|
||||
<ButtonPrevious>
|
||||
<!--<Skin>: Texture name-->
|
||||
<Skin>PreviousIcon</Skin>
|
||||
<!--<SkinSelected>: Texture name for selected button-->
|
||||
<SkinSelected>PreviousIcon</SkinSelected>
|
||||
<!--<X>, <Y>, <Z>, <W>, <H>: Button position, width and height-->
|
||||
<X>125</X>
|
||||
<Y>0</Y>
|
||||
<Z>0,00</Z>
|
||||
<W>50</W>
|
||||
<H>50</H>
|
||||
<!--<Color>: Button color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>ButtonColor</Color>
|
||||
<!--<SColor>: Selected button color from ColorScheme (high priority)-->
|
||||
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
|
||||
<SColor>ButtonSColor</SColor>
|
||||
<Text>
|
||||
<!--<X>, <Y>: Text position-->
|
||||
<X>75</X>
|
||||
<Y>2</Y>
|
||||
<!--<H>: Text height-->
|
||||
<H>32</H>
|
||||
<!--<MaxW>: Maximum text width (if exists)-->
|
||||
<MaxW>142</MaxW>
|
||||
<!--<Color>: Text color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>ButtonTextColor</Color>
|
||||
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
|
||||
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
|
||||
<SColor>ButtonTextSColor</SColor>
|
||||
<!--<Align>: Text align: Left, Center, Right-->
|
||||
<Align>Center</Align>
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text></Text>
|
||||
</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
<!-- <Space>: Reflection Space-->
|
||||
<!-- <Height>: Reflection Height-->
|
||||
<!--<SReflection> If exists:-->
|
||||
<!-- <Space>: Reflection Space of selected button-->
|
||||
<!-- <Height>: Reflection Height of selected button-->
|
||||
</ButtonPrevious>
|
||||
<ButtonPlay>
|
||||
<!--<Skin>: Texture name-->
|
||||
<Skin>PlayIcon</Skin>
|
||||
<!--<SkinSelected>: Texture name for selected button-->
|
||||
<SkinSelected>PlayIcon</SkinSelected>
|
||||
<!--<X>, <Y>, <Z>, <W>, <H>: Button position, width and height-->
|
||||
<X>200</X>
|
||||
<Y>5</Y>
|
||||
<Z>0,00</Z>
|
||||
<W>40</W>
|
||||
<H>40</H>
|
||||
<!--<Color>: Button color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>ButtonColor</Color>
|
||||
<!--<SColor>: Selected button color from ColorScheme (high priority)-->
|
||||
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
|
||||
<SColor>ButtonSColor</SColor>
|
||||
<Text>
|
||||
<!--<X>, <Y>: Text position-->
|
||||
<X>75</X>
|
||||
<Y>2</Y>
|
||||
<!--<H>: Text height-->
|
||||
<H>32</H>
|
||||
<!--<MaxW>: Maximum text width (if exists)-->
|
||||
<MaxW>142</MaxW>
|
||||
<!--<Color>: Text color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>ButtonTextColor</Color>
|
||||
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
|
||||
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
|
||||
<SColor>ButtonTextSColor</SColor>
|
||||
<!--<Align>: Text align: Left, Center, Right-->
|
||||
<Align>Center</Align>
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text></Text>
|
||||
</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
<!-- <Space>: Reflection Space-->
|
||||
<!-- <Height>: Reflection Height-->
|
||||
<!--<SReflection> If exists:-->
|
||||
<!-- <Space>: Reflection Space of selected button-->
|
||||
<!-- <Height>: Reflection Height of selected button-->
|
||||
</ButtonPlay>
|
||||
<ButtonPause>
|
||||
<!--<Skin>: Texture name-->
|
||||
<Skin>PauseIcon</Skin>
|
||||
<!--<SkinSelected>: Texture name for selected button-->
|
||||
<SkinSelected>PauseIcon</SkinSelected>
|
||||
<!--<X>, <Y>, <Z>, <W>, <H>: Button position, width and height-->
|
||||
<X>200</X>
|
||||
<Y>5</Y>
|
||||
<Z>0,00</Z>
|
||||
<W>40</W>
|
||||
<H>40</H>
|
||||
<!--<Color>: Button color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>ButtonColor</Color>
|
||||
<!--<SColor>: Selected button color from ColorScheme (high priority)-->
|
||||
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
|
||||
<SColor>ButtonSColor</SColor>
|
||||
<Text>
|
||||
<!--<X>, <Y>: Text position-->
|
||||
<X>75</X>
|
||||
<Y>2</Y>
|
||||
<!--<H>: Text height-->
|
||||
<H>32</H>
|
||||
<!--<MaxW>: Maximum text width (if exists)-->
|
||||
<MaxW>142</MaxW>
|
||||
<!--<Color>: Text color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>ButtonTextColor</Color>
|
||||
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
|
||||
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
|
||||
<SColor>ButtonTextSColor</SColor>
|
||||
<!--<Align>: Text align: Left, Center, Right-->
|
||||
<Align>Center</Align>
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text></Text>
|
||||
</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
<!-- <Space>: Reflection Space-->
|
||||
<!-- <Height>: Reflection Height-->
|
||||
<!--<SReflection> If exists:-->
|
||||
<!-- <Space>: Reflection Space of selected button-->
|
||||
<!-- <Height>: Reflection Height of selected button-->
|
||||
</ButtonPause>
|
||||
<ButtonNext>
|
||||
<!--<Skin>: Texture name-->
|
||||
<Skin>NextIcon</Skin>
|
||||
<!--<SkinSelected>: Texture name for selected button-->
|
||||
<SkinSelected>NextIcon</SkinSelected>
|
||||
<!--<X>, <Y>, <Z>, <W>, <H>: Button position, width and height-->
|
||||
<X>265</X>
|
||||
<Y>0</Y>
|
||||
<Z>0,00</Z>
|
||||
<W>50</W>
|
||||
<H>50</H>
|
||||
<!--<Color>: Button color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>ButtonColor</Color>
|
||||
<!--<SColor>: Selected button color from ColorScheme (high priority)-->
|
||||
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
|
||||
<SColor>ButtonSColor</SColor>
|
||||
<Text>
|
||||
<!--<X>, <Y>: Text position-->
|
||||
<X>190</X>
|
||||
<Y>25</Y>
|
||||
<!--<H>: Text height-->
|
||||
<H>32</H>
|
||||
<!--<MaxW>: Maximum text width (if exists)-->
|
||||
<MaxW>142</MaxW>
|
||||
<!--<Color>: Text color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>ButtonTextColor</Color>
|
||||
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
|
||||
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
|
||||
<SColor>ButtonTextSColor</SColor>
|
||||
<!--<Align>: Text align: Left, Center, Right-->
|
||||
<Align>Center</Align>
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text></Text>
|
||||
</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
<!-- <Space>: Reflection Space-->
|
||||
<!-- <Height>: Reflection Height-->
|
||||
<!--<SReflection> If exists:-->
|
||||
<!-- <Space>: Reflection Space of selected button-->
|
||||
<!-- <Height>: Reflection Height of selected button-->
|
||||
</ButtonNext>
|
||||
<ButtonRepeat>
|
||||
<!--<Skin>: Texture name-->
|
||||
<Skin>RepeatIcon</Skin>
|
||||
<!--<SkinSelected>: Texture name for selected button-->
|
||||
<SkinSelected>RepeatIcon</SkinSelected>
|
||||
<!--<X>, <Y>, <Z>, <W>, <H>: Button position, width and height-->
|
||||
<X>330</X>
|
||||
<Y>0</Y>
|
||||
<Z>0,00</Z>
|
||||
<W>50</W>
|
||||
<H>50</H>
|
||||
<!--<Color>: Button color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>ButtonColor</Color>
|
||||
<!--<SColor>: Selected button color from ColorScheme (high priority)-->
|
||||
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
|
||||
<SColor>ButtonSColor</SColor>
|
||||
<Text>
|
||||
<!--<X>, <Y>: Text position-->
|
||||
<X>405</X>
|
||||
<Y>25</Y>
|
||||
<!--<H>: Text height-->
|
||||
<H>32</H>
|
||||
<!--<MaxW>: Maximum text width (if exists)-->
|
||||
<MaxW>142</MaxW>
|
||||
<!--<Color>: Text color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>ButtonTextColor</Color>
|
||||
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
|
||||
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
|
||||
<SColor>ButtonTextSColor</SColor>
|
||||
<!--<Align>: Text align: Left, Center, Right-->
|
||||
<Align>Center</Align>
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text></Text>
|
||||
</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
<!-- <Space>: Reflection Space-->
|
||||
<!-- <Height>: Reflection Height-->
|
||||
<!--<SReflection> If exists:-->
|
||||
<!-- <Space>: Reflection Space of selected button-->
|
||||
<!-- <Height>: Reflection Height of selected button-->
|
||||
</ButtonRepeat>
|
||||
<ButtonShowVideo>
|
||||
<!--<Skin>: Texture name-->
|
||||
<Skin>VideoIcon</Skin>
|
||||
<!--<SkinSelected>: Texture name for selected button-->
|
||||
<SkinSelected>VideoIcon</SkinSelected>
|
||||
<!--<X>, <Y>, <Z>, <W>, <H>: Button position, width and height-->
|
||||
<X>405</X>
|
||||
<Y>0</Y>
|
||||
<Z>0,00</Z>
|
||||
<W>50</W>
|
||||
<H>50</H>
|
||||
<!--<Color>: Button color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>ButtonColor</Color>
|
||||
<!--<SColor>: Selected button color from ColorScheme (high priority)-->
|
||||
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
|
||||
<SColor>ButtonSColor</SColor>
|
||||
<Text>
|
||||
<!--<X>, <Y>: Text position-->
|
||||
<X>315</X>
|
||||
<Y>0</Y>
|
||||
<!--<H>: Text height-->
|
||||
<H>32</H>
|
||||
<!--<MaxW>: Maximum text width (if exists)-->
|
||||
<MaxW>142</MaxW>
|
||||
<!--<Color>: Text color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>ButtonTextColor</Color>
|
||||
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
|
||||
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
|
||||
<SColor>ButtonTextSColor</SColor>
|
||||
<!--<Align>: Text align: Left, Center, Right-->
|
||||
<Align>Center</Align>
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text></Text>
|
||||
</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
<!-- <Space>: Reflection Space-->
|
||||
<!-- <Height>: Reflection Height-->
|
||||
<!--<SReflection> If exists:-->
|
||||
<!-- <Space>: Reflection Space of selected button-->
|
||||
<!-- <Height>: Reflection Height of selected button-->
|
||||
</ButtonShowVideo>
|
||||
<ButtonToBackgroundVideo>
|
||||
<!--<Skin>: Texture name-->
|
||||
<Skin>VideoIcon</Skin>
|
||||
<!--<SkinSelected>: Texture name for selected button-->
|
||||
<SkinSelected>VideoIcon</SkinSelected>
|
||||
<!--<X>, <Y>, <Z>, <W>, <H>: Button position, width and height-->
|
||||
<X>480</X>
|
||||
<Y>0</Y>
|
||||
<Z>0,00</Z>
|
||||
<W>50</W>
|
||||
<H>50</H>
|
||||
<!--<Color>: Button color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>ButtonColor</Color>
|
||||
<!--<SColor>: Selected button color from ColorScheme (high priority)-->
|
||||
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
|
||||
<SColor>ButtonSColor</SColor>
|
||||
<Text>
|
||||
<!--<X>, <Y>: Text position-->
|
||||
<X>315</X>
|
||||
<Y>0</Y>
|
||||
<!--<H>: Text height-->
|
||||
<H>32</H>
|
||||
<!--<MaxW>: Maximum text width (if exists)-->
|
||||
<MaxW>142</MaxW>
|
||||
<!--<Color>: Text color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>ButtonTextColor</Color>
|
||||
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
|
||||
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
|
||||
<SColor>ButtonTextSColor</SColor>
|
||||
<!--<Align>: Text align: Left, Center, Right-->
|
||||
<Align>Center</Align>
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text></Text>
|
||||
</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
<!-- <Space>: Reflection Space-->
|
||||
<!-- <Height>: Reflection Height-->
|
||||
<!--<SReflection> If exists:-->
|
||||
<!-- <Space>: Reflection Space of selected button-->
|
||||
<!-- <Height>: Reflection Height of selected button-->
|
||||
</ButtonToBackgroundVideo>
|
||||
<ButtonSing>
|
||||
<!--<Skin>: Texture name-->
|
||||
<Skin>DuetIcon</Skin>
|
||||
<!--<SkinSelected>: Texture name for selected button-->
|
||||
<SkinSelected>DuetIcon</SkinSelected>
|
||||
<!--<X>, <Y>, <Z>, <W>, <H>: Button position, width and height-->
|
||||
<X>555</X>
|
||||
<Y>0</Y>
|
||||
<Z>0,00</Z>
|
||||
<W>50</W>
|
||||
<H>50</H>
|
||||
<!--<Color>: Button color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>ButtonColor</Color>
|
||||
<!--<SColor>: Selected button color from ColorScheme (high priority)-->
|
||||
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
|
||||
<SColor>ButtonSColor</SColor>
|
||||
<Text>
|
||||
<!--<X>, <Y>: Text position-->
|
||||
<X>380</X>
|
||||
<Y>0</Y>
|
||||
<!--<H>: Text height-->
|
||||
<H>32</H>
|
||||
<!--<MaxW>: Maximum text width (if exists)-->
|
||||
<MaxW>142</MaxW>
|
||||
<!--<Color>: Text color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>ButtonTextColor</Color>
|
||||
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
|
||||
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
|
||||
<SColor>ButtonTextSColor</SColor>
|
||||
<!--<Align>: Text align: Left, Center, Right-->
|
||||
<Align>Center</Align>
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text></Text>
|
||||
</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
<!-- <Space>: Reflection Space-->
|
||||
<!-- <Height>: Reflection Height-->
|
||||
<!--<SReflection> If exists:-->
|
||||
<!-- <Space>: Reflection Space of selected button-->
|
||||
<!-- <Height>: Reflection Height of selected button-->
|
||||
</ButtonSing>
|
||||
<TextCurrentSong>
|
||||
<!--<X>, <Y>: Text position-->
|
||||
<X>630</X>
|
||||
<Y>0</Y>
|
||||
<!--<Z>: Text position-->
|
||||
<Z>0,00</Z>
|
||||
<!--<H>: Text height-->
|
||||
<H>50</H>
|
||||
<!--<MaxW>: Maximum text width (if exists)-->
|
||||
<MaxW>650</MaxW>
|
||||
<!--<Color>: Text color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>StaticColor</Color>
|
||||
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
|
||||
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
|
||||
<SColor>TextSColor</SColor>
|
||||
<!--<Align>: Text align: Left, Center, Right-->
|
||||
<Align>Left</Align>
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
<!-- <Space>: Reflection Space-->
|
||||
<!-- <Height>: Reflection Height-->
|
||||
</TextCurrentSong>
|
||||
</PopupScreenPlayerControl>
|
||||
</root>
|
||||
@@ -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>
|
||||
@@ -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-->
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<ScreenOptionsTheme>
|
||||
<ScreenVersion>2</ScreenVersion>
|
||||
<ScreenVersion>3</ScreenVersion>
|
||||
<Background1>
|
||||
<!--<Type>: Background type: None, Color, Texture, Video-->
|
||||
<Type>Video</Type>
|
||||
@@ -141,6 +141,22 @@
|
||||
<!-- <Space>: Reflection Space-->
|
||||
<!-- <Height>: Reflection Height-->
|
||||
</Static8>
|
||||
<Static9>
|
||||
<!--<Skin>: Texture name-->
|
||||
<Skin>Invisible</Skin>
|
||||
<!--<X>, <Y>, <Z>, <W>, <H>: Static position, width and height-->
|
||||
<X>50</X>
|
||||
<Y>520</Y>
|
||||
<Z>0,00</Z>
|
||||
<W>460</W>
|
||||
<H>50</H>
|
||||
<!--<Color>: Static color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>StaticColor</Color>
|
||||
<!--<Reflection> If exists:-->
|
||||
<!-- <Space>: Reflection Space-->
|
||||
<!-- <Height>: Reflection Height-->
|
||||
</Static9>
|
||||
<Text1>
|
||||
<!--<X>, <Y>: Text position-->
|
||||
<X>640</X>
|
||||
@@ -352,11 +368,38 @@
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENOTHEME_COVERLOADING</Text>
|
||||
<Text>TR_SCREENOTHEME_FADEINFO</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
<!-- <Space>: Reflection Space-->
|
||||
<!-- <Height>: Reflection Height-->
|
||||
</Text8>
|
||||
<Text9>
|
||||
<!--<X>, <Y>: Text position-->
|
||||
<X>75</X>
|
||||
<Y>525</Y>
|
||||
<!--<Z>: Text position-->
|
||||
<Z>0,00</Z>
|
||||
<!--<H>: Text height-->
|
||||
<H>32</H>
|
||||
<!--<MaxW>: Maximum text width (if exists)-->
|
||||
<!--<Color>: Text color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>StaticColor</Color>
|
||||
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
|
||||
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
|
||||
<SColor>TextSColor</SColor>
|
||||
<!--<Align>: Text align: Left, Center, Right-->
|
||||
<Align>Left</Align>
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENOTHEME_COVERLOADING</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
<!-- <Space>: Reflection Space-->
|
||||
<!-- <Height>: Reflection Height-->
|
||||
</Text9>
|
||||
<ButtonExit>
|
||||
<!--<Skin>: Texture name-->
|
||||
<Skin>Button</Skin>
|
||||
@@ -802,7 +845,7 @@
|
||||
<!--<NumVisible>: Number of visible elements in the slide-->
|
||||
<NumVisible>2</NumVisible>
|
||||
</SelectSlideTimerLook>
|
||||
<SelectSlideCoverLoading>
|
||||
<SelectSlideFadeInfo>
|
||||
<!--<Skin>: Texture name-->
|
||||
<Skin>Invisible</Skin>
|
||||
<!--<SkinArrowLeft>: Texture name of left arrow-->
|
||||
@@ -865,7 +908,72 @@
|
||||
<!--<TextStyle>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<TextStyle>Bold</TextStyle>
|
||||
<!--<NumVisible>: Number of visible elements in the slide-->
|
||||
<NumVisible>2</NumVisible>
|
||||
</SelectSlideFadeInfo>
|
||||
<SelectSlideCoverLoading>
|
||||
<!--<Skin>: Texture name-->
|
||||
<Skin>Invisible</Skin>
|
||||
<!--<SkinArrowLeft>: Texture name of left arrow-->
|
||||
<SkinArrowLeft>SelectSlideArrowLeft</SkinArrowLeft>
|
||||
<!--<SkinArrowRight>: Texture name of right arrow-->
|
||||
<SkinArrowRight>SelectSlideArrowRight</SkinArrowRight>
|
||||
<!--<SkinSelected>: Texture name for selected SelectSlide-->
|
||||
<SkinSelected>SelectSlide</SkinSelected>
|
||||
<!--<SkinArrowLeftSelected>: Texture name of selected left arrow-->
|
||||
<SkinArrowLeftSelected>SelectSlideArrowLeft</SkinArrowLeftSelected>
|
||||
<!--<SkinArrowRightSelected>: Texture name of selected right arrow-->
|
||||
<SkinArrowRightSelected>SelectSlideArrowRight</SkinArrowRightSelected>
|
||||
<!--<SkinHighlighted>: Texture name for highlighted SelectSlide-->
|
||||
<SkinHighlighted>SelectSlide</SkinHighlighted>
|
||||
<!--<X>, <Y>, <Z>, <W>, <H>: SelectSlide position, width and height-->
|
||||
<X>500</X>
|
||||
<Y>520</Y>
|
||||
<Z>0,00</Z>
|
||||
<W>700</W>
|
||||
<H>50</H>
|
||||
<!--<ArrowLeftX>, <ArrowLeftY>, <ArrowLeftZ>, <ArrowLeftW>, <ArrowLeftH>: Left arrow position, width and height-->
|
||||
<ArrowLeftX>505</ArrowLeftX>
|
||||
<ArrowLeftY>525</ArrowLeftY>
|
||||
<ArrowLeftZ>0,00</ArrowLeftZ>
|
||||
<ArrowLeftW>40</ArrowLeftW>
|
||||
<ArrowLeftH>40</ArrowLeftH>
|
||||
<!--<ArrowRightX>, <ArrowRightY>, <ArrowRightZ>, <ArrowRightW>, <ArrowRightH>: Right arrow position, width and height-->
|
||||
<ArrowRightX>1170</ArrowRightX>
|
||||
<ArrowRightY>525</ArrowRightY>
|
||||
<ArrowRightZ>0,00</ArrowRightZ>
|
||||
<ArrowRightW>40</ArrowRightW>
|
||||
<ArrowRightH>40</ArrowRightH>
|
||||
<!--<Color>: SelectSlide color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>SelectSlideColor</Color>
|
||||
<!--<SColor>: Selected SelectSlide color from ColorScheme (high priority)-->
|
||||
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
|
||||
<SColor>SelectSlideSColor</SColor>
|
||||
<!--<HColor>: Highlighted SelectSlide color from ColorScheme (high priority)-->
|
||||
<!--or <HR>, <HG>, <HB>, <HA> (lower priority)-->
|
||||
<HColor>SelectSlideHColor</HColor>
|
||||
<!--<ArrowColor>: Arrow color from ColorScheme (high priority)-->
|
||||
<!--or <ArrowR>, <ArrowG>, <ArrowB>, <ArrowA> (lower priority)-->
|
||||
<ArrowColor>ArrowColor</ArrowColor>
|
||||
<!--<ArrowSColor>: Selected arrow color from ColorScheme (high priority)-->
|
||||
<!--or <ArrowSR>, <ArrowSG>, <ArrowSB>, <ArrowSA> (lower priority)-->
|
||||
<ArrowSColor>ArrowSColor</ArrowSColor>
|
||||
<!--<TextColor>: Text color from ColorScheme (high priority)-->
|
||||
<!--or <TextR>, <TextG>, <TextB>, <TextA> (lower priority)-->
|
||||
<TextColor>TextColor</TextColor>
|
||||
<!--<TextSColor>: Selected text color from ColorScheme (high priority)-->
|
||||
<!--or <TextSR>, <TextSG>, <TextSB>, <TextSA> (lower priority)-->
|
||||
<TextSColor>TextSColor</TextSColor>
|
||||
<!--<TextH>: Text height-->
|
||||
<TextH>32,00</TextH>
|
||||
<!--<TextMaxW>: Maximum text width (if exists)-->
|
||||
<TextMaxW>616,00</TextMaxW>
|
||||
<!--<TextFont>: Text font name-->
|
||||
<TextFont>Outline</TextFont>
|
||||
<!--<TextStyle>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<TextStyle>Bold</TextStyle>
|
||||
<!--<NumVisible>: Number of visible elements in the slide-->
|
||||
<NumVisible>1</NumVisible>
|
||||
</SelectSlideCoverLoading>
|
||||
</ScreenOptionsTheme>
|
||||
</root>
|
||||
</root>
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<ScreenOptionsVideo>
|
||||
<ScreenVersion>1</ScreenVersion>
|
||||
<ScreenVersion>2</ScreenVersion>
|
||||
<Background1>
|
||||
<!--<Type>: Background type: None, Color, Texture, Video-->
|
||||
<Type>Video</Type>
|
||||
@@ -185,6 +185,33 @@
|
||||
<!-- <Space>: Reflection Space-->
|
||||
<!-- <Height>: Reflection Height-->
|
||||
</Text4>
|
||||
<Text5>
|
||||
<!--<X>, <Y>: Text position-->
|
||||
<X>75</X>
|
||||
<Y>285</Y>
|
||||
<!--<Z>: Text position-->
|
||||
<Z>0,00</Z>
|
||||
<!--<H>: Text height-->
|
||||
<H>32</H>
|
||||
<!--<MaxW>: Maximum text width (if exists)-->
|
||||
<!--<Color>: Text color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>StaticColor</Color>
|
||||
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
|
||||
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
|
||||
<SColor>TextSColor</SColor>
|
||||
<!--<Align>: Text align: Left, Center, Right-->
|
||||
<Align>Left</Align>
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENO_VIDEO_VIDEOSTOBACKGROUND</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
<!-- <Space>: Reflection Space-->
|
||||
<!-- <Height>: Reflection Height-->
|
||||
</Text5>
|
||||
<ButtonExit>
|
||||
<!--<Skin>: Texture name-->
|
||||
<Skin>Button</Skin>
|
||||
@@ -435,5 +462,70 @@
|
||||
<!--<NumVisible>: Number of visible elements in the slide-->
|
||||
<NumVisible>3</NumVisible>
|
||||
</SelectSlideVideosInSongs>
|
||||
<SelectSlideVideosToBackground>
|
||||
<!--<Skin>: Texture name-->
|
||||
<Skin>Invisible</Skin>
|
||||
<!--<SkinArrowLeft>: Texture name of left arrow-->
|
||||
<SkinArrowLeft>SelectSlideArrowLeft</SkinArrowLeft>
|
||||
<!--<SkinArrowRight>: Texture name of right arrow-->
|
||||
<SkinArrowRight>SelectSlideArrowRight</SkinArrowRight>
|
||||
<!--<SkinSelected>: Texture name for selected SelectSlide-->
|
||||
<SkinSelected>SelectSlide</SkinSelected>
|
||||
<!--<SkinArrowLeftSelected>: Texture name of selected left arrow-->
|
||||
<SkinArrowLeftSelected>SelectSlideArrowLeft</SkinArrowLeftSelected>
|
||||
<!--<SkinArrowRightSelected>: Texture name of selected right arrow-->
|
||||
<SkinArrowRightSelected>SelectSlideArrowRight</SkinArrowRightSelected>
|
||||
<!--<SkinHighlighted>: Texture name for highlighted SelectSlide-->
|
||||
<SkinHighlighted>SelectSlide</SkinHighlighted>
|
||||
<!--<X>, <Y>, <Z>, <W>, <H>: SelectSlide position, width and height-->
|
||||
<X>500</X>
|
||||
<Y>280</Y>
|
||||
<Z>0,00</Z>
|
||||
<W>700</W>
|
||||
<H>50</H>
|
||||
<!--<ArrowLeftX>, <ArrowLeftY>, <ArrowLeftZ>, <ArrowLeftW>, <ArrowLeftH>: Left arrow position, width and height-->
|
||||
<ArrowLeftX>505</ArrowLeftX>
|
||||
<ArrowLeftY>225</ArrowLeftY>
|
||||
<ArrowLeftZ>0,00</ArrowLeftZ>
|
||||
<ArrowLeftW>40</ArrowLeftW>
|
||||
<ArrowLeftH>40</ArrowLeftH>
|
||||
<!--<ArrowRightX>, <ArrowRightY>, <ArrowRightZ>, <ArrowRightW>, <ArrowRightH>: Right arrow position, width and height-->
|
||||
<ArrowRightX>1170</ArrowRightX>
|
||||
<ArrowRightY>225</ArrowRightY>
|
||||
<ArrowRightZ>0,00</ArrowRightZ>
|
||||
<ArrowRightW>40</ArrowRightW>
|
||||
<ArrowRightH>40</ArrowRightH>
|
||||
<!--<Color>: SelectSlide color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>SelectSlideColor</Color>
|
||||
<!--<SColor>: Selected SelectSlide color from ColorScheme (high priority)-->
|
||||
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
|
||||
<SColor>SelectSlideSColor</SColor>
|
||||
<!--<HColor>: Highlighted SelectSlide color from ColorScheme (high priority)-->
|
||||
<!--or <HR>, <HG>, <HB>, <HA> (lower priority)-->
|
||||
<HColor>SelectSlideHColor</HColor>
|
||||
<!--<ArrowColor>: Arrow color from ColorScheme (high priority)-->
|
||||
<!--or <ArrowR>, <ArrowG>, <ArrowB>, <ArrowA> (lower priority)-->
|
||||
<ArrowColor>ArrowColor</ArrowColor>
|
||||
<!--<ArrowSColor>: Selected arrow color from ColorScheme (high priority)-->
|
||||
<!--or <ArrowSR>, <ArrowSG>, <ArrowSB>, <ArrowSA> (lower priority)-->
|
||||
<ArrowSColor>ArrowSColor</ArrowSColor>
|
||||
<!--<TextColor>: Text color from ColorScheme (high priority)-->
|
||||
<!--or <TextR>, <TextG>, <TextB>, <TextA> (lower priority)-->
|
||||
<TextColor>TextColor</TextColor>
|
||||
<!--<TextSColor>: Selected text color from ColorScheme (high priority)-->
|
||||
<!--or <TextSR>, <TextSG>, <TextSB>, <TextSA> (lower priority)-->
|
||||
<TextSColor>TextSColor</TextSColor>
|
||||
<!--<TextH>: Text height-->
|
||||
<TextH>32,00</TextH>
|
||||
<!--<TextMaxW>: Maximum text width (if exists)-->
|
||||
<TextMaxW>205,33</TextMaxW>
|
||||
<!--<TextFont>: Text font name-->
|
||||
<TextFont>Normal</TextFont>
|
||||
<!--<TextStyle>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<TextStyle>Bold</TextStyle>
|
||||
<!--<NumVisible>: Number of visible elements in the slide-->
|
||||
<NumVisible>3</NumVisible>
|
||||
</SelectSlideVideosToBackground>
|
||||
</ScreenOptionsVideo>
|
||||
</root>
|
||||
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
@@ -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>
|
||||
@@ -266,6 +302,12 @@
|
||||
<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>
|
||||
</Skins>
|
||||
<Videos>
|
||||
<BG_Video>[Blue]BG_Video.mp4</BG_Video>
|
||||
@@ -273,4 +315,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,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>
|
||||
@@ -266,6 +302,12 @@
|
||||
<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>
|
||||
</Skins>
|
||||
<Videos>
|
||||
<BG_Video>[Green]BG_Video.mp4</BG_Video>
|
||||
@@ -273,4 +315,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,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>
|
||||
@@ -266,6 +302,12 @@
|
||||
<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>
|
||||
</Skins>
|
||||
<Videos>
|
||||
<BG_Video>[Red]BG_Video.mp4</BG_Video>
|
||||
@@ -273,4 +315,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,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>
|
||||
@@ -266,6 +302,12 @@
|
||||
<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>
|
||||
</Skins>
|
||||
<Videos>
|
||||
<BG_Video>[Yellow]BG_Video.mp4</BG_Video>
|
||||
@@ -273,4 +315,4 @@
|
||||
<IntroMid>[Yellow]IntroMid.mp4</IntroMid>
|
||||
<IntroOut>[Yellow]IntroOut.mp4</IntroOut>
|
||||
</Videos>
|
||||
</root>
|
||||
</root>
|
||||
@@ -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>
|
||||
@@ -1,5 +1,12 @@
|
||||
ScreenOptionsTheme
|
||||
|
||||
++++++++++
|
||||
Version 3:
|
||||
|
||||
Add:
|
||||
<SelectSlideFadeInfo>
|
||||
and some texts and statics for description (Text9 and Static9)
|
||||
"TR_SCREENOTHEME_FADEINFO"
|
||||
++++++++++
|
||||
Version 2:
|
||||
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
ScreenOptionsTheme
|
||||
|
||||
++++++++++
|
||||
Version 2:
|
||||
|
||||
Add:
|
||||
<SelectSlideVideosToBackground>
|
||||
and some texts and statics for description (Text5)
|
||||
"TR_SCREENO_VIDEO_VIDEOSTOBACKGROUND"
|
||||
++++++++++
|
||||
@@ -0,0 +1,7 @@
|
||||
ScreenScore
|
||||
|
||||
++++++++++
|
||||
Version 2:
|
||||
|
||||
Add: Elements for up to 6 players! (Texts and statics!)
|
||||
++++++++++
|
||||
@@ -1,5 +1,14 @@
|
||||
ScreenSing
|
||||
|
||||
++++++++++
|
||||
Version 4:
|
||||
Added Elements for 6-player-singing!
|
||||
|
||||
Add:
|
||||
<StaticAvatarP$N$> (One for each player for each player-number>
|
||||
<TextNameP$N$> (One for each player for each player-number>
|
||||
|
||||
|
||||
++++++++++
|
||||
Version 3:
|
||||
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -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;
|
||||
@@ -206,16 +233,18 @@ namespace Vocaluxe.Base
|
||||
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 +329,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
|
||||
@@ -370,6 +402,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 +415,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 +535,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
|
||||
|
||||
@@ -577,6 +625,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 +651,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 +1004,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);
|
||||
|
||||
+45
-12
@@ -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;
|
||||
@@ -102,6 +104,8 @@ namespace Vocaluxe.Base
|
||||
_GameMode.Init();
|
||||
_Player = new SPlayer[CSettings.MaxNumPlayer];
|
||||
ResetPlayer();
|
||||
|
||||
CConfig.UsePlayers();
|
||||
}
|
||||
|
||||
public static void SetGameMode(EGameMode Mode)
|
||||
@@ -213,6 +217,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>();
|
||||
@@ -242,7 +248,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 +309,6 @@ namespace Vocaluxe.Base
|
||||
}
|
||||
}
|
||||
|
||||
CSound.AnalyzeBuffer(p);
|
||||
if (notes[Note].PointsForBeat > 0 && (CSound.RecordToneValid(p) || DEBUG_HIT))
|
||||
{
|
||||
int Tone = notes[Note].Tone;
|
||||
@@ -317,8 +327,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 +352,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 +359,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 +368,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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
@@ -103,7 +103,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 +120,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()
|
||||
{
|
||||
|
||||
+132
-75
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -22,7 +22,9 @@ 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].SongFinished = false;
|
||||
@@ -38,6 +40,8 @@ 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].DateTicks = DateTicks;
|
||||
@@ -68,6 +72,8 @@ 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;
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -224,6 +224,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))
|
||||
@@ -557,9 +562,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 +639,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)
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
|
||||
+143
-59
@@ -36,6 +36,13 @@ namespace Vocaluxe.Menu
|
||||
ScreenNull = -1
|
||||
}
|
||||
|
||||
enum EPopupScreens
|
||||
{
|
||||
PopupPlayerControl = 0,
|
||||
|
||||
NoPopup = -1
|
||||
}
|
||||
|
||||
class CCursor
|
||||
{
|
||||
private Stopwatch _CursorFadingTimer;
|
||||
@@ -185,11 +192,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 +214,31 @@ 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 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 +258,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 +330,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 +349,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 +372,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 +412,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 +449,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 +459,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 +483,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 +504,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 +534,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 +547,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 +568,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()
|
||||
|
||||
@@ -13,7 +13,8 @@ namespace Vocaluxe.Menu
|
||||
TStatic,
|
||||
TSongMenu,
|
||||
TLyric,
|
||||
TSingNote
|
||||
TSingNote,
|
||||
TNameSelection
|
||||
}
|
||||
|
||||
class CInteraction
|
||||
|
||||
+25
-21
@@ -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;
|
||||
|
||||
|
||||
+220
-23
@@ -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,38 @@ 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))
|
||||
{
|
||||
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 +1024,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 +1227,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 +1251,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 +1596,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 +1624,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 +1655,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 +1686,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 +1716,6 @@ namespace Vocaluxe.Menu
|
||||
|
||||
private bool _IsVisible(int interaction)
|
||||
{
|
||||
bool Result = false;
|
||||
switch (_Interactions[interaction].Type)
|
||||
{
|
||||
case EType.TButton:
|
||||
@@ -1587,9 +1735,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 +1765,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 +1782,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 +1849,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 +1886,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,539 @@
|
||||
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()
|
||||
{
|
||||
_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));
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
public void ReloadTextures()
|
||||
{
|
||||
UnloadTextures();
|
||||
LoadTextures();
|
||||
}
|
||||
|
||||
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));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,229 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
|
||||
using Vocaluxe.Base;
|
||||
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)
|
||||
{
|
||||
if (Duet)
|
||||
CGame.SetGameMode(GameModes.EGameMode.Duet);
|
||||
else
|
||||
CGame.SetGameMode(GameModes.EGameMode.Normal);
|
||||
|
||||
CGame.Reset();
|
||||
CGame.ClearSongs();
|
||||
CGame.AddSong(SongNr);
|
||||
|
||||
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();
|
||||
|
||||
+24
-107
@@ -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,6 +220,8 @@ namespace Vocaluxe.Screens
|
||||
_Intros[i].Close();
|
||||
}
|
||||
|
||||
CBackgroundMusic.CanSing = true;
|
||||
|
||||
CLog.StopBenchmark(3, "Load Cover");
|
||||
}
|
||||
|
||||
@@ -247,100 +260,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);
|
||||
|
||||
+487
-116
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,6 +361,13 @@ 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()
|
||||
@@ -389,6 +406,11 @@ namespace Vocaluxe.Screens
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < _Equalizer.Length; i++)
|
||||
{
|
||||
_Equalizer[i].Draw();
|
||||
}
|
||||
|
||||
DrawFG();
|
||||
|
||||
return true;
|
||||
@@ -571,4 +593,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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -189,16 +189,19 @@ namespace Vocaluxe.Screens
|
||||
SongMenus[htSongMenus(SongMenu)].Update();
|
||||
Texts[htTexts(TextCategory)].Text = CSongs.GetActualCategoryName();
|
||||
|
||||
if (CSongs.Category > -1 || CConfig.Tabs == EOffOn.TR_CONFIG_OFF)
|
||||
CBackgroundMusic.Disabled = true;
|
||||
else
|
||||
CBackgroundMusic.Disabled = false;
|
||||
|
||||
int song = SongMenus[htSongMenus(SongMenu)].GetActualSelection();
|
||||
if ((CSongs.Category >= 0 || CConfig.Tabs == EOffOn.TR_CONFIG_OFF) && song >= 0 && song < CSongs.VisibleSongs.Length)
|
||||
{
|
||||
Texts[htTexts(TextSelection)].Text = CSongs.VisibleSongs[song].Artist + " - " + CSongs.VisibleSongs[song].Title;
|
||||
CBackgroundMusic.Pause();
|
||||
Texts[htTexts(TextSelection)].Text = CSongs.VisibleSongs[song].Artist + " - " + CSongs.VisibleSongs[song].Title;
|
||||
}
|
||||
else if (CSongs.Category == -1 && song >= 0 && song < CSongs.Categories.Length)
|
||||
{
|
||||
Texts[htTexts(TextSelection)].Text = CSongs.Categories[song].Name;
|
||||
CBackgroundMusic.Play();
|
||||
Texts[htTexts(TextSelection)].Text = CSongs.Categories[song].Name;
|
||||
}
|
||||
else
|
||||
Texts[htTexts(TextSelection)].Text = String.Empty;
|
||||
@@ -233,6 +236,7 @@ namespace Vocaluxe.Screens
|
||||
public override void OnClose()
|
||||
{
|
||||
base.OnClose();
|
||||
CBackgroundMusic.Disabled = false;
|
||||
SongMenus[htSongMenus(SongMenu)].OnHide();
|
||||
}
|
||||
|
||||
|
||||
@@ -50,15 +50,15 @@ namespace Vocaluxe.Screens
|
||||
break;
|
||||
|
||||
case Keys.F:
|
||||
FadeAndPause();
|
||||
//FadeAndPause();
|
||||
break;
|
||||
|
||||
case Keys.S:
|
||||
PlayFile();
|
||||
//PlayFile();
|
||||
break;
|
||||
|
||||
case Keys.P:
|
||||
PauseFile();
|
||||
//PauseFile();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -148,6 +148,7 @@
|
||||
</Compile>
|
||||
<Compile Include="Lib\Song\CNotes.cs" />
|
||||
<Compile Include="Lib\Song\CSong.cs" />
|
||||
<Compile Include="Lib\Sound\CDirectSoundRecord.cs" />
|
||||
<Compile Include="Lib\Sound\COpenALPlay.cs" />
|
||||
<Compile Include="Lib\Sound\COpenALRecord.cs" />
|
||||
<Compile Include="Base\CSound.cs" />
|
||||
@@ -165,6 +166,7 @@
|
||||
<Compile Include="Menu\CBackground.cs" />
|
||||
<Compile Include="Menu\CButton.cs" />
|
||||
<Compile Include="Menu\CGraphics.cs" />
|
||||
<Compile Include="Menu\CNameSelection.cs" />
|
||||
<Compile Include="Menu\CLyric.cs" />
|
||||
<Compile Include="Menu\CMenu.cs" />
|
||||
<Compile Include="Menu\CInteraction.cs" />
|
||||
@@ -187,6 +189,7 @@
|
||||
<Compile Include="Program.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Screens\CPopupScreenPlayerControl.cs" />
|
||||
<Compile Include="Screens\CScreenCredits.cs" />
|
||||
<Compile Include="Screens\CScreenHighscore.cs" />
|
||||
<Compile Include="Screens\CScreenLoad.cs" />
|
||||
|
||||
Reference in new issue
Block a user