Merge remote-tracking branch 'remotes/vocaluxe/develop' into medley

Conflicts:
	Vocaluxe/Lib/Song/CSong.cs
	Vocaluxe/Menu/CInteraction.cs
	Vocaluxe/Menu/CMenu.cs
This commit is contained in:
Alexander Eckart committed 2012-08-12 14:37:08 +02:00
commit dcafc3dae5
29 files changed
+1881 -144

No files matched your search

+2 -1
View File
@@ -109,7 +109,8 @@ Vocaluxe.exe -ConfigFile MyConfig.xml -ScoreFile C:\Vocaluxe\Highscores\MyHighsc
Songscreen
[CTRL] + [R] to select a random song
[F3] to open/close the song search menu
[A] to sing all songs from a category
[A] to sing all songs
[SHIFT] + [A] to sing all songs from a category
=================================
+555 -3
View File
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<ScreenNames>
<ScreenVersion>2</ScreenVersion>
<ScreenVersion>3</ScreenVersion>
<Background1>
<!--<Type>: Background type: None, Color, Texture, Video-->
<Type>Video</Type>
@@ -28,7 +28,7 @@
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</Static1>
</Static1>
<StaticPlayer1>
<!--<Skin>: Texture name-->
<Skin>PlayerSelector</Skin>
@@ -695,6 +695,396 @@
<!--<NumVisible>: Number of visible elements in the slide-->
<NumVisible>6</NumVisible>
</SelectSlidePlayerNumber>
<SelectSlideDuetPlayer1>
<!--<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>Button</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>Button</SkinHighlighted>
<!--<X>, <Y>, <Z>, <W>, <H>: SelectSlide position, width and height-->
<X>41</X>
<Y>105</Y>
<Z>-4,00</Z>
<W>88</W>
<H>20</H>
<!--<ArrowLeftX>, <ArrowLeftY>, <ArrowLeftZ>, <ArrowLeftW>, <ArrowLeftH>: Left arrow position, width and height-->
<ArrowLeftX>20</ArrowLeftX>
<ArrowLeftY>105</ArrowLeftY>
<ArrowLeftZ>-4,01</ArrowLeftZ>
<ArrowLeftW>20</ArrowLeftW>
<ArrowLeftH>20</ArrowLeftH>
<!--<ArrowRightX>, <ArrowRightY>, <ArrowRightZ>, <ArrowRightW>, <ArrowRightH>: Right arrow position, width and height-->
<ArrowRightX>20</ArrowRightX>
<ArrowRightY>105</ArrowRightY>
<ArrowRightZ>-4,01</ArrowRightZ>
<ArrowRightW>20</ArrowRightW>
<ArrowRightH>20</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>20,00</TextH>
<!--<TextMaxW>: Maximum text width (if exists)-->
<TextMaxW>86,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>
</SelectSlideDuetPlayer1>
<SelectSlideDuetPlayer2>
<!--<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>Button</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>Button</SkinHighlighted>
<!--<X>, <Y>, <Z>, <W>, <H>: SelectSlide position, width and height-->
<X>41</X>
<Y>260</Y>
<Z>-4,00</Z>
<W>88</W>
<H>20</H>
<!--<ArrowLeftX>, <ArrowLeftY>, <ArrowLeftZ>, <ArrowLeftW>, <ArrowLeftH>: Left arrow position, width and height-->
<ArrowLeftX>20</ArrowLeftX>
<ArrowLeftY>260</ArrowLeftY>
<ArrowLeftZ>-4,01</ArrowLeftZ>
<ArrowLeftW>20</ArrowLeftW>
<ArrowLeftH>20</ArrowLeftH>
<!--<ArrowRightX>, <ArrowRightY>, <ArrowRightZ>, <ArrowRightW>, <ArrowRightH>: Right arrow position, width and height-->
<ArrowRightX>20</ArrowRightX>
<ArrowRightY>260</ArrowRightY>
<ArrowRightZ>-4,01</ArrowRightZ>
<ArrowRightW>20</ArrowRightW>
<ArrowRightH>20</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>20,00</TextH>
<!--<TextMaxW>: Maximum text width (if exists)-->
<TextMaxW>86,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>
</SelectSlideDuetPlayer2>
<SelectSlideDuetPlayer3>
<!--<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>Button</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>Button</SkinHighlighted>
<!--<X>, <Y>, <Z>, <W>, <H>: SelectSlide position, width and height-->
<X>41</X>
<Y>415</Y>
<Z>-4,00</Z>
<W>88</W>
<H>20</H>
<!--<ArrowLeftX>, <ArrowLeftY>, <ArrowLeftZ>, <ArrowLeftW>, <ArrowLeftH>: Left arrow position, width and height-->
<ArrowLeftX>20</ArrowLeftX>
<ArrowLeftY>415</ArrowLeftY>
<ArrowLeftZ>-4,01</ArrowLeftZ>
<ArrowLeftW>20</ArrowLeftW>
<ArrowLeftH>20</ArrowLeftH>
<!--<ArrowRightX>, <ArrowRightY>, <ArrowRightZ>, <ArrowRightW>, <ArrowRightH>: Right arrow position, width and height-->
<ArrowRightX>20</ArrowRightX>
<ArrowRightY>415</ArrowRightY>
<ArrowRightZ>-4,01</ArrowRightZ>
<ArrowRightW>20</ArrowRightW>
<ArrowRightH>20</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>20,00</TextH>
<!--<TextMaxW>: Maximum text width (if exists)-->
<TextMaxW>86,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>
</SelectSlideDuetPlayer3>
<SelectSlideDuetPlayer4>
<!--<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>Button</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>Button</SkinHighlighted>
<!--<X>, <Y>, <Z>, <W>, <H>: SelectSlide position, width and height-->
<X>1152</X>
<Y>105</Y>
<Z>-4,00</Z>
<W>88</W>
<H>20</H>
<!--<ArrowLeftX>, <ArrowLeftY>, <ArrowLeftZ>, <ArrowLeftW>, <ArrowLeftH>: Left arrow position, width and height-->
<ArrowLeftX>1240</ArrowLeftX>
<ArrowLeftY>105</ArrowLeftY>
<ArrowLeftZ>-4,01</ArrowLeftZ>
<ArrowLeftW>20</ArrowLeftW>
<ArrowLeftH>20</ArrowLeftH>
<!--<ArrowRightX>, <ArrowRightY>, <ArrowRightZ>, <ArrowRightW>, <ArrowRightH>: Right arrow position, width and height-->
<ArrowRightX>1240</ArrowRightX>
<ArrowRightY>105</ArrowRightY>
<ArrowRightZ>-4,01</ArrowRightZ>
<ArrowRightW>20</ArrowRightW>
<ArrowRightH>20</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>20,00</TextH>
<!--<TextMaxW>: Maximum text width (if exists)-->
<TextMaxW>86,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>
</SelectSlideDuetPlayer4>
<SelectSlideDuetPlayer5>
<!--<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>Button</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>Button</SkinHighlighted>
<!--<X>, <Y>, <Z>, <W>, <H>: SelectSlide position, width and height-->
<X>1152</X>
<Y>260</Y>
<Z>-4,00</Z>
<W>88</W>
<H>20</H>
<!--<ArrowLeftX>, <ArrowLeftY>, <ArrowLeftZ>, <ArrowLeftW>, <ArrowLeftH>: Left arrow position, width and height-->
<ArrowLeftX>1240</ArrowLeftX>
<ArrowLeftY>260</ArrowLeftY>
<ArrowLeftZ>-4,01</ArrowLeftZ>
<ArrowLeftW>20</ArrowLeftW>
<ArrowLeftH>20</ArrowLeftH>
<!--<ArrowRightX>, <ArrowRightY>, <ArrowRightZ>, <ArrowRightW>, <ArrowRightH>: Right arrow position, width and height-->
<ArrowRightX>1240</ArrowRightX>
<ArrowRightY>260</ArrowRightY>
<ArrowRightZ>-4,01</ArrowRightZ>
<ArrowRightW>20</ArrowRightW>
<ArrowRightH>20</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>20,00</TextH>
<!--<TextMaxW>: Maximum text width (if exists)-->
<TextMaxW>86,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>
</SelectSlideDuetPlayer5>
<SelectSlideDuetPlayer6>
<!--<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>Button</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>Button</SkinHighlighted>
<!--<X>, <Y>, <Z>, <W>, <H>: SelectSlide position, width and height-->
<X>1152</X>
<Y>415</Y>
<Z>-4,00</Z>
<W>88</W>
<H>20</H>
<!--<ArrowLeftX>, <ArrowLeftY>, <ArrowLeftZ>, <ArrowLeftW>, <ArrowLeftH>: Left arrow position, width and height-->
<ArrowLeftX>1240</ArrowLeftX>
<ArrowLeftY>415</ArrowLeftY>
<ArrowLeftZ>-4,01</ArrowLeftZ>
<ArrowLeftW>20</ArrowLeftW>
<ArrowLeftH>20</ArrowLeftH>
<!--<ArrowRightX>, <ArrowRightY>, <ArrowRightZ>, <ArrowRightW>, <ArrowRightH>: Right arrow position, width and height-->
<ArrowRightX>1240</ArrowRightX>
<ArrowRightY>415</ArrowRightY>
<ArrowRightZ>-4,01</ArrowRightZ>
<ArrowRightW>20</ArrowRightW>
<ArrowRightH>20</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>20,00</TextH>
<!--<TextMaxW>: Maximum text width (if exists)-->
<TextMaxW>86,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>
</SelectSlideDuetPlayer6>
<NameSelection>
<!--<X>, <Y>, <Z>, <W>, <H>: NameSelection position, width and height-->
<X>172</X>
@@ -738,5 +1128,167 @@
</Name>
</Tiles>
</NameSelection>
<EqualizerPlayer1>
<!--<Skin>: Texture name-->
<Skin>Invisible</Skin>
<!--<X>, <Y>, <Z>, <W>, <H>: Equalizer position, width and height-->
<X>21</X>
<Y>152</Y>
<Z>-4,00</Z>
<W>108</W>
<H>60</H>
<!--<NumBars>: Number of equalizer-elements.-->
<NumBars>8</NumBars>
<!--<Space>: Space between equalizer-elements.-->
<Space>2,00</Space>
<!--<Style>: Style of equalizer-elements: Collumns-->
<Style>Collumns</Style>
<!--<Color>: Equalizer color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>Player1Dim2</Color>
<!--<MaxColor>: Equalizer color for maximal volume from ColorScheme (high priority)-->
<!--or <MaxR>, <MaxG>, <MaxB>, <MaxA> (lower priority)-->
<MaxColor>Player1Dim</MaxColor>
<!--<DrawNegative>: Draw negative values: TR_CONFIG_OFF, TR_CONFIG_ON -->
<DrawNegative>TR_CONFIG_OFF</DrawNegative>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</EqualizerPlayer1>
<EqualizerPlayer2>
<!--<Skin>: Texture name-->
<Skin>Invisible</Skin>
<!--<X>, <Y>, <Z>, <W>, <H>: Equalizer position, width and height-->
<X>21</X>
<Y>307</Y>
<Z>-4,00</Z>
<W>108</W>
<H>60</H>
<!--<NumBars>: Number of equalizer-elements.-->
<NumBars>8</NumBars>
<!--<Space>: Space between equalizer-elements.-->
<Space>2,00</Space>
<!--<Style>: Style of equalizer-elements: Collumns-->
<Style>Collumns</Style>
<!--<Color>: Equalizer color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>Player2Dim2</Color>
<!--<MaxColor>: Equalizer color for maximal volume from ColorScheme (high priority)-->
<!--or <MaxR>, <MaxG>, <MaxB>, <MaxA> (lower priority)-->
<MaxColor>Player2Dim</MaxColor>
<!--<DrawNegative>: Draw negative values: TR_CONFIG_OFF, TR_CONFIG_ON -->
<DrawNegative>TR_CONFIG_OFF</DrawNegative>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</EqualizerPlayer2>
<EqualizerPlayer3>
<!--<Skin>: Texture name-->
<Skin>Invisible</Skin>
<!--<X>, <Y>, <Z>, <W>, <H>: Equalizer position, width and height-->
<X>21</X>
<Y>467</Y>
<Z>-4,00</Z>
<W>108</W>
<H>60</H>
<!--<NumBars>: Number of equalizer-elements.-->
<NumBars>8</NumBars>
<!--<Space>: Space between equalizer-elements.-->
<Space>2,00</Space>
<!--<Style>: Style of equalizer-elements: Collumns-->
<Style>Collumns</Style>
<!--<Color>: Equalizer color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>Player3Dim2</Color>
<!--<MaxColor>: Equalizer color for maximal volume from ColorScheme (high priority)-->
<!--or <MaxR>, <MaxG>, <MaxB>, <MaxA> (lower priority)-->
<MaxColor>Player3Dim</MaxColor>
<!--<DrawNegative>: Draw negative values: TR_CONFIG_OFF, TR_CONFIG_ON -->
<DrawNegative>TR_CONFIG_OFF</DrawNegative>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</EqualizerPlayer3>
<EqualizerPlayer4>
<!--<Skin>: Texture name-->
<Skin>Invisible</Skin>
<!--<X>, <Y>, <Z>, <W>, <H>: Equalizer position, width and height-->
<X>1153</X>
<Y>152</Y>
<Z>-4,00</Z>
<W>108</W>
<H>60</H>
<!--<NumBars>: Number of equalizer-elements.-->
<NumBars>8</NumBars>
<!--<Space>: Space between equalizer-elements.-->
<Space>2,00</Space>
<!--<Style>: Style of equalizer-elements: Collumns-->
<Style>Collumns</Style>
<!--<Color>: Equalizer color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>Player4Dim2</Color>
<!--<MaxColor>: Equalizer color for maximal volume from ColorScheme (high priority)-->
<!--or <MaxR>, <MaxG>, <MaxB>, <MaxA> (lower priority)-->
<MaxColor>Player4Dim</MaxColor>
<!--<DrawNegative>: Draw negative values: TR_CONFIG_OFF, TR_CONFIG_ON -->
<DrawNegative>TR_CONFIG_OFF</DrawNegative>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</EqualizerPlayer4>
<EqualizerPlayer5>
<!--<Skin>: Texture name-->
<Skin>Invisible</Skin>
<!--<X>, <Y>, <Z>, <W>, <H>: Equalizer position, width and height-->
<X>1153</X>
<Y>307</Y>
<Z>-4,00</Z>
<W>108</W>
<H>60</H>
<!--<NumBars>: Number of equalizer-elements.-->
<NumBars>8</NumBars>
<!--<Space>: Space between equalizer-elements.-->
<Space>2,00</Space>
<!--<Style>: Style of equalizer-elements: Collumns-->
<Style>Collumns</Style>
<!--<Color>: Equalizer color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>Player5Dim2</Color>
<!--<MaxColor>: Equalizer color for maximal volume from ColorScheme (high priority)-->
<!--or <MaxR>, <MaxG>, <MaxB>, <MaxA> (lower priority)-->
<MaxColor>Player5Dim</MaxColor>
<!--<DrawNegative>: Draw negative values: TR_CONFIG_OFF, TR_CONFIG_ON -->
<DrawNegative>TR_CONFIG_OFF</DrawNegative>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</EqualizerPlayer5>
<EqualizerPlayer6>
<!--<Skin>: Texture name-->
<Skin>Invisible</Skin>
<!--<X>, <Y>, <Z>, <W>, <H>: Equalizer position, width and height-->
<X>1153</X>
<Y>467</Y>
<Z>-4,00</Z>
<W>108</W>
<H>60</H>
<!--<NumBars>: Number of equalizer-elements.-->
<NumBars>8</NumBars>
<!--<Style>: Style of equalizer-elements: Collumns-->
<Space>2,00</Space>
<!--<Style>: Style of equalizer-elements-->
<Style>Collumns</Style>
<!--<Color>: Equalizer color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>Player6Dim2</Color>
<!--<MaxColor>: Equalizer color for maximal volume from ColorScheme (high priority)-->
<!--or <MaxR>, <MaxG>, <MaxB>, <MaxA> (lower priority)-->
<MaxColor>Player6Dim</MaxColor>
<!--<DrawNegative>: Draw negative values: TR_CONFIG_OFF, TR_CONFIG_ON -->
<DrawNegative>TR_CONFIG_OFF</DrawNegative>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</EqualizerPlayer6>
</ScreenNames>
</root>
</root>
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<ScreenOptionsRecord>
<ScreenVersion>1</ScreenVersion>
<ScreenVersion>2</ScreenVersion>
<Background1>
<!--<Type>: Background type: None, Color, Texture, Video-->
<Type>Video</Type>
@@ -858,5 +858,66 @@
<!--<NumVisible>: Number of visible elements in the slide-->
<NumVisible>5</NumVisible>
</SelectSlideDelay>
<EqualizerChannel1>
<!--<Skin>: Texture name-->
<Skin>Invisible</Skin>
<!--<X>, <Y>, <Z>, <W>, <H>: Equalizer position, width and height-->
<X>50</X>
<Y>400</Y>
<W>230</W>
<H>150</H>
<Z>-1,00</Z>
<!--<NumBars>: Number of equalizer-elements.-->
<NumBars>10</NumBars>
<Space>2,00</Space>
<!--<Style>: Style of equalizer-elements: Collumns-->
<Style>Collumns</Style>
<!--<Color>: Equalizer color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonColor</Color>
<!--<MaxColor>: Equalizer color for maximal volume from ColorScheme (high priority)-->
<!--or <MaxR>, <MaxG>, <MaxB>, <MaxA> (lower priority)-->
<MaxColor>ButtonSColor</MaxColor>
<!--<DrawNegative>: Draw negative values: TR_CONFIG_OFF, TR_CONFIG_ON -->
<DrawNegative>TR_CONFIG_OFF</DrawNegative>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
<Reflection>
<Space>10</Space>
<Height>26</Height>
</Reflection>
</EqualizerChannel1>
<EqualizerChannel2>
<!--<Skin>: Texture name-->
<Skin>Invisible</Skin>
<!--<X>, <Y>, <Z>, <W>, <H>: Equalizer position, width and height-->
<X>400</X>
<Y>400</Y>
<W>230</W>
<H>150</H>
<Z>-1,00</Z>
<!--<NumBars>: Number of equalizer-elements.-->
<NumBars>10</NumBars>
<!--<Space>: Space between equalizer-elements.-->
<Space>2,00</Space>
<!--<Style>: Style of equalizer-elements: Collumns-->
<Style>Collumns</Style>
<!--<Color>: Equalizer color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>ButtonColor</Color>
<!--<MaxColor>: Equalizer color for maximal volume from ColorScheme (high priority)-->
<!--or <MaxR>, <MaxG>, <MaxB>, <MaxA> (lower priority)-->
<MaxColor>ButtonSColor</MaxColor>
<!--<DrawNegative>: Draw negative values: TR_CONFIG_OFF, TR_CONFIG_ON -->
<DrawNegative>TR_CONFIG_OFF</DrawNegative>
<!--<Reflection> If exists:-->
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
<Reflection>
<Space>10</Space>
<Height>26</Height>
</Reflection>
</EqualizerChannel2>
</ScreenOptionsRecord>
</root>
</root>
@@ -958,6 +958,64 @@
<!-- <Space>: Reflection Space-->
<!-- <Height>: Reflection Height-->
</StaticAvatarP6N6>
<TextDuetName1>
<!--<X>, <Y>: Text position-->
<X>40</X>
<Y>80</Y>
<!--<Z>: Text position-->
<Z>-1,00</Z>
<!--<H>: Text height-->
<H>35</H>
<!--<MaxW>: Maximum text width (if exists)-->
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>TextSColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>TextSColor</SColor>
<!--<Align>: Text align horizontal: Left, Center, Right-->
<Align>Left</Align>
<!--<HAlign>: Text align vertical (on downsizing): Top, Center, Bottom-->
<HAlign>Center</HAlign>
<!--<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-->
</TextDuetName1>
<TextDuetName2>
<!--<X>, <Y>: Text position-->
<X>40</X>
<Y>585</Y>
<!--<Z>: Text position-->
<Z>-1,00</Z>
<!--<H>: Text height-->
<H>35</H>
<!--<MaxW>: Maximum text width (if exists)-->
<!--<Color>: Text color from ColorScheme (high priority)-->
<!--or <R>, <G>, <B>, <A> (lower priority)-->
<Color>TextSColor</Color>
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
<SColor>TextSColor</SColor>
<!--<Align>: Text align horizontal: Left, Center, Right-->
<Align>Left</Align>
<!--<HAlign>: Text align vertical (on downsizing): Top, Center, Bottom-->
<HAlign>Center</HAlign>
<!--<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-->
</TextDuetName2>
<TextSongName>
<!--<X>, <Y>: Text position-->
<X>640</X>
@@ -1,5 +1,11 @@
SceenNames
++++++++++
Version 3:
<EqualizerPlayer[1...6]> (One Equalizer for each player): Equalizer shows input from assigned mic for this player.
<SelectSlideDuetPlayer[1...6]> (One SelectSlide for each player)
++++++++++
Version 2:
@@ -0,0 +1,9 @@
ScreenOptionsRecord
++++++++++
Version 2:
Add:
<EqualizerChannel1> and <EqualizerChannel2>.
This is a new theme-element. Check ScreenOptionsRecord.xml for style-possibilities.
++++++++++
@@ -1,5 +1,11 @@
ScreenSing
+++++++++
Version 5
Add:
<TextDuetName1> and <TextDuetName2> (only showed when sining duet)
++++++++++
Version 5:
+5
View File
@@ -117,6 +117,11 @@ namespace Vocaluxe.Base
_Draw.DrawColor(color, rect);
}
public static void DrawColorReflection(SColorF color, SRectF rect, float space, float height)
{
_Draw.DrawColorReflection(color, rect, space, height);
}
public static void ClearScreen()
{
_Draw.ClearScreen();
+4
View File
@@ -315,6 +315,10 @@ namespace Vocaluxe.Base
public CBuffer()
{
_ToneWeigth = new float[_NumHalfTones];
for (int i = 0; i < _ToneWeigth.Length; i++)
{
_ToneWeigth[i] = 0.99f;
}
_Stream = new MemoryStream();
_NewSamples = false;
}
+1 -1
View File
@@ -284,7 +284,7 @@ namespace Vocaluxe.GameModes
public virtual CSong GetSong(int Num)
{
if (Num - 1 < _SongQueque.Count)
if (Num - 1 < _SongQueque.Count && Num - 1 > -1)
return CSongs.GetSong(_SongQueque[Num - 1].SongID);
return null;
+13
View File
@@ -836,6 +836,19 @@ namespace Vocaluxe.Lib.Draw
{
DrawTexture(_BlankTexture, rect, color);
}
/// <summary>
/// Draws reflection of a colored rectangle
/// </summary>
/// <param name="color">The color in which the rectangle will be drawn in</param>
/// <param name="rect">The coordinates in a SRectF struct</param>
/// <param name="space">The space between the texture and the reflection</param>
/// <param name="height">The height of the reflection</param>
public void DrawColorReflection(SColorF color, SRectF rect, float space, float height)
{
DrawTextureReflection(_BlankTexture, rect, color, rect, space, height);
}
#endregion Basic Draw Methods
#region Textures
#region adding
+5
View File
@@ -352,6 +352,11 @@ namespace Vocaluxe.Lib.Draw
}
public void DrawColorReflection(SColorF color, SRectF rect, float space, float height)
{
}
public STexture AddTexture(Bitmap bmp)
{
Bitmap bmp2 = new Bitmap(bmp);
+53
View File
@@ -661,6 +661,59 @@ namespace Vocaluxe.Lib.Draw
GL.Disable(EnableCap.Blend);
}
public void DrawColorReflection(SColorF color, SRectF rect, float space, float height)
{
if (rect.H < height)
height = rect.H;
float rx1 = rect.X;
float rx2 = rect.X + rect.W;
float ry1 = rect.Y + rect.H + space;
float ry2 = rect.Y + rect.H + space + height;
if (rx1 < rect.X)
rx1 = rect.X;
if (rx2 > rect.X + rect.W)
rx2 = rect.X + rect.W;
if (ry1 < rect.Y + space)
ry1 = rect.Y + space;
if (ry2 > rect.Y + rect.H + space + height)
ry2 = rect.Y + rect.H + space + height;
GL.Enable(EnableCap.Blend);
if (rect.Rotation != 0f)
{
GL.Translate(0.5f, 0.5f, 0);
GL.Rotate(-rect.Rotation, 0f, 0f, 1f);
GL.Translate(-0.5f, -0.5f, 0);
}
GL.Begin(BeginMode.Quads);
GL.Color4(color.R, color.G, color.B, color.A * CGraphics.GlobalAlpha);
GL.Vertex3(rx2, ry1, rect.Z + CGraphics.ZOffset);
GL.Color4(color.R, color.G, color.B, 0f);
GL.Vertex3(rx2, ry2, rect.Z + CGraphics.ZOffset);
GL.Color4(color.R, color.G, color.B, 0f);
GL.Vertex3(rx1, ry2, rect.Z + CGraphics.ZOffset);
GL.Color4(color.R, color.G, color.B, color.A * CGraphics.GlobalAlpha);
GL.Vertex3(rx1, ry1, rect.Z + CGraphics.ZOffset);
GL.End();
GL.Disable(EnableCap.Blend);
}
#endregion Basic Draw Methods
#region Textures
+1
View File
@@ -125,6 +125,7 @@ namespace Vocaluxe.Lib.Draw
// Basic Draw Methods
void DrawLine(int a, int r, int g, int b, int w, int x1, int y1, int x2, int y2);
void DrawColor(SColorF color, SRectF rect);
void DrawColorReflection(SColorF color, SRectF rect, float space, float height);
void ClearScreen();
STexture CopyScreen();
+36 -5
View File
@@ -129,6 +129,9 @@ namespace Vocaluxe.Lib.Song
public float Gap = 0f;
public float VideoGap = 0f;
public string DuetPart1 = String.Empty;
public string DuetPart2 = String.Empty;
public List<string> Comment = new List<string>();
// Sorting
@@ -381,6 +384,18 @@ namespace Vocaluxe.Lib.Song
this.ArtistSorting = Value;
}
break;
case "P1":
if (Value != String.Empty)
{
this.DuetPart1 = Value;
}
break;
case "P2":
if (Value != String.Empty)
{
this.DuetPart2 = Value;
}
break;
case "MP3":
if (File.Exists(Path.Combine(this.Folder, Value)))
{
@@ -563,12 +578,12 @@ namespace Vocaluxe.Lib.Song
CheckFiles();
//Before saving this tags to .txt: Check, if ArtistSorting and Artist are equal, then don't save this tag.
if (this.ArtistSorting == "")
if (this.ArtistSorting == String.Empty)
{
this.ArtistSorting = this.Artist;
}
if (this.TitleSorting == "")
if (this.TitleSorting == String.Empty)
{
this.TitleSorting = this.Title;
}
@@ -627,9 +642,10 @@ namespace Vocaluxe.Lib.Song
FileLineNo++;
if (TempC.CompareTo('P') == 0)
{
char chr = (char)sr.Read();
int.TryParse(chr.ToString(), out Param1);
char chr;
while ((chr = (char)sr.Read()) == ' '){ }
int.TryParse(chr.ToString(), out Param1);
if (Param1 == 1)
Player = 0;
else if (Param1 == 2)
@@ -714,7 +730,8 @@ namespace Vocaluxe.Lib.Song
FindRefrain();
FindShortEnd();
_NotesLoaded = true;
if(IsDuet)
CheckDuet();
return true;
}
@@ -781,6 +798,20 @@ namespace Vocaluxe.Lib.Song
}
}
private void CheckDuet()
{
if (DuetPart1 == String.Empty)
{
DuetPart1 = "Part 1";
CLog.LogError("Warning: Can't find #P1-tag for duets in \"" + this.Artist + " - " + this.Title + "\".");
}
if (DuetPart2 == String.Empty)
{
DuetPart2 = "Part 2";
CLog.LogError("Warning: Can't find #P2-tag for duets in \"" + this.Artist + " - " + this.Title + "\".");
}
}
private struct Series
{
public int start;
+92
View File
@@ -0,0 +1,92 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
using System.Xml;
using System.Xml.XPath;
using Vocaluxe.Base;
using Vocaluxe.Lib.Draw;
namespace Vocaluxe.Menu.Animations
{
public class CAnimation:IAnimation
{
private IAnimation _Animation;
public CAnimation(EAnimationType Type)
{
setAnimation(Type);
}
public void Init()
{
_Animation.Init();
}
public bool LoadAnimation(string item, XPathNavigator navigator)
{
return _Animation.LoadAnimation(item, navigator);
}
public bool SaveAnimation(XmlWriter writer)
{
return _Animation.SaveAnimation(writer);
}
public void StartAnimation()
{
_Animation.StartAnimation();
}
public void StopAnimation()
{
_Animation.StopAnimation();
}
public void ResetAnimation()
{
_Animation.ResetAnimation();
}
public bool AnimationActive()
{
return _Animation.AnimationActive();
}
public void Update()
{
_Animation.Update();
}
public void setRect(SRectF rect)
{
_Animation.setRect(rect);
}
public SRectF getRect()
{
return _Animation.getRect();
}
public void setColor(SColorF color)
{
_Animation.setColor(color);
}
public SColorF getColor()
{
return _Animation.getColor();
}
public void setAnimation(EAnimationType Type)
{
switch (Type)
{
case EAnimationType.Resize:
_Animation = new CAnimationResize();
break;
}
}
}
}
@@ -0,0 +1,95 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
using System.Xml;
using System.Xml.XPath;
using Vocaluxe.Base;
using Vocaluxe.Lib.Draw;
namespace Vocaluxe.Menu.Animations
{
public enum EAnimationType
{
Resize
}
public enum EAnimationRepeat
{
None,
Reset,
Repeat,
RepeatWithReset
}
public abstract class CAnimationFramework:IAnimation
{
public bool _AnimationLoaded;
public EAnimationType Type;
public EAnimationRepeat Repeat;
public float Speed;
public Stopwatch Timer = new Stopwatch();
public bool ResetMode = false;
public abstract void Init();
public virtual bool LoadAnimation(string item, XPathNavigator navigator)
{
_AnimationLoaded = true;
_AnimationLoaded &= CHelper.TryGetFloatValueFromXML(item + "/Speed", navigator, ref Speed);
_AnimationLoaded &= CHelper.TryGetEnumValueFromXML<EAnimationRepeat>(item + "/Repeat", navigator, ref Repeat);
return _AnimationLoaded;
}
public virtual bool SaveAnimation(XmlWriter writer)
{
return false;
}
public virtual void StartAnimation()
{
Timer.Start();
}
public virtual void StopAnimation()
{
Timer.Stop();
Timer.Reset();
}
public virtual void ResetAnimation()
{
ResetMode = !ResetMode;
}
public virtual bool AnimationActive()
{
return Timer.IsRunning;
}
public virtual void setRect(SRectF rect)
{
}
public virtual SRectF getRect()
{
return new SRectF();
}
public virtual void setColor(SColorF color)
{
}
public virtual SColorF getColor()
{
return new SColorF();
}
public abstract void Update();
}
}
@@ -0,0 +1,106 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
using System.Xml;
using System.Xml.XPath;
using Vocaluxe.Base;
using Vocaluxe.Lib.Draw;
namespace Vocaluxe.Menu.Animations
{
public class CAnimationResize : CAnimationFramework
{
public SRectF FinalRect;
public SRectF CurrentRect;
public SRectF OriginalRect;
public CAnimationResize()
{
}
public override void Init()
{
Type = EAnimationType.Resize;
}
public override bool LoadAnimation(string item, XPathNavigator navigator)
{
//Load normal animation-options
_AnimationLoaded &= base.LoadAnimation(item, navigator);
//Load specific animation-options
_AnimationLoaded &= CHelper.TryGetFloatValueFromXML(item + "/X", navigator, ref FinalRect.X);
_AnimationLoaded &= CHelper.TryGetFloatValueFromXML(item + "/Y", navigator, ref FinalRect.Y);
_AnimationLoaded &= CHelper.TryGetFloatValueFromXML(item + "/W", navigator, ref FinalRect.W);
_AnimationLoaded &= CHelper.TryGetFloatValueFromXML(item + "/H", navigator, ref FinalRect.H);
return _AnimationLoaded;
}
public override void setRect(SRectF rect)
{
OriginalRect = rect;
}
public override SRectF getRect()
{
return CurrentRect;
}
public override void StartAnimation()
{
base.StartAnimation();
CurrentRect = OriginalRect;
}
public override void Update()
{
//Update CurrentRect
if (!ResetMode)
{
CLog.LogError((CurrentRect.X + ((FinalRect.X - CurrentRect.X) / Speed * Timer.ElapsedMilliseconds)).ToString("#.#####"));
CurrentRect.X = CurrentRect.X + ((FinalRect.X - CurrentRect.X) / Speed * Timer.ElapsedMilliseconds);
CurrentRect.Y = CurrentRect.Y + ((FinalRect.Y - CurrentRect.Y) / Speed * Timer.ElapsedMilliseconds);
CurrentRect.H = CurrentRect.H + ((FinalRect.H - CurrentRect.H) / Speed * Timer.ElapsedMilliseconds);
CurrentRect.W = CurrentRect.W + ((FinalRect.W - CurrentRect.W) / Speed * Timer.ElapsedMilliseconds);
}
else
{
CurrentRect.X = CurrentRect.X + ((OriginalRect.X - CurrentRect.X) / Speed * Timer.ElapsedMilliseconds);
CurrentRect.Y = CurrentRect.Y + ((OriginalRect.Y - CurrentRect.Y) / Speed * Timer.ElapsedMilliseconds);
CurrentRect.H = CurrentRect.H + ((OriginalRect.H - CurrentRect.H) / Speed * Timer.ElapsedMilliseconds);
CurrentRect.W = CurrentRect.W + ((OriginalRect.W - CurrentRect.W) / Speed * Timer.ElapsedMilliseconds);
}
if (CurrentRect.X == FinalRect.X && CurrentRect.Y == FinalRect.Y && CurrentRect.H == FinalRect.H && CurrentRect.W == FinalRect.W)
{
switch (Repeat)
{
case EAnimationRepeat.Repeat:
StopAnimation();
CurrentRect = OriginalRect;
StartAnimation();
break;
case EAnimationRepeat.RepeatWithReset:
ResetAnimation();
break;
case EAnimationRepeat.Reset:
if (!ResetMode)
ResetAnimation();
else
StopAnimation();
break;
case EAnimationRepeat.None:
StopAnimation();
break;
}
}
}
}
}
+30
View File
@@ -0,0 +1,30 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
using System.Xml;
using System.Xml.XPath;
using Vocaluxe.Base;
using Vocaluxe.Lib.Draw;
namespace Vocaluxe.Menu.Animations
{
interface IAnimation
{
void Init();
bool LoadAnimation(string item, XPathNavigator navigator);
bool SaveAnimation(XmlWriter writer);
void setRect(SRectF rect);
SRectF getRect();
void setColor(SColorF color);
SColorF getColor();
void StartAnimation();
void StopAnimation();
void ResetAnimation();
bool AnimationActive();
void Update();
}
}
+27 -5
View File
@@ -30,7 +30,9 @@ namespace Vocaluxe.Menu
public SColorF Color;
public SColorF SColor;
public bool SelText;
public CText Text;
public CText SText;
public bool Reflection;
public float ReflectionSpace;
@@ -60,7 +62,9 @@ namespace Vocaluxe.Menu
Color = new SColorF();
SColor = new SColorF();
SelText = false;
Text = new CText();
SText = new CText();
Selected = false;
Visible = true;
@@ -113,6 +117,13 @@ namespace Vocaluxe.Menu
_ThemeLoaded &= Text.LoadTheme(item, "Text", navigator, SkinIndex, true);
Text.Z = Rect.Z;
if (CHelper.ItemExistsInXML(item + "/SText", navigator))
{
SelText = true;
_ThemeLoaded &= SText.LoadTheme(item, "SText", navigator, SkinIndex, true);
SText.Z = Rect.Z;
}
//Reflections
if (CHelper.ItemExistsInXML(item + "/Reflection", navigator))
@@ -189,6 +200,8 @@ namespace Vocaluxe.Menu
}
Text.SaveTheme(writer);
if (SelText)
SText.SaveTheme(writer);
writer.WriteComment("<Reflection> If exists:");
writer.WriteComment(" <Space>: Reflection Space");
@@ -240,25 +253,34 @@ namespace Vocaluxe.Menu
{
texture = CTheme.GetSkinTexture(_Theme.TextureName);
CDraw.DrawTexture(texture, Rect, Color);
Text.DrawRelative(Rect.X, Rect.Y);
if (Reflection)
{
CDraw.DrawTextureReflection(texture, Rect, Color, Rect, ReflectionSpace, ReflectionHeight);
Text.DrawRelative(Rect.X, Rect.Y, ReflectionSpace, ReflectionHeight, Rect.H);
}
}
else
else if(!SelText)
{
texture = CTheme.GetSkinTexture(_Theme.STextureName);
CDraw.DrawTexture(texture, Rect, SColor);
Text.DrawRelative(Rect.X, Rect.Y);
if (Reflection)
{
CDraw.DrawTextureReflection(texture, Rect, SColor, Rect, ReflectionSpace, ReflectionHeight);
Text.DrawRelative(Rect.X, Rect.Y, ReflectionSpace, ReflectionHeight, Rect.H);
}
}
Text.DrawRelative(Rect.X, Rect.Y);
if (Reflection)
else if(SelText)
{
Text.DrawRelative(Rect.X, Rect.Y, ReflectionSpace, ReflectionHeight, Rect.H);
texture = CTheme.GetSkinTexture(_Theme.STextureName);
CDraw.DrawTexture(texture, Rect, SColor);
SText.DrawRelative(Rect.X, Rect.Y);
if (Reflection)
{
CDraw.DrawTextureReflection(texture, Rect, SColor, Rect, ReflectionSpace, ReflectionHeight);
SText.DrawRelative(Rect.X, Rect.Y, ReflectionSpace, ReflectionHeight, Rect.H);
}
}
}
+305
View File
@@ -0,0 +1,305 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Text;
using System.Xml;
using System.Xml.XPath;
using Vocaluxe.Base;
using Vocaluxe.Lib.Draw;
namespace Vocaluxe.Menu
{
enum EEqualizerStyle
{
Collums
}
struct SThemeEqualizer
{
public string Name;
public string ColorName;
public string MaxColorName;
public string TextureName;
public int NumBars;
public EEqualizerStyle Style;
public EOffOn DrawNegative;
}
class CEqualizer : IMenuElement
{
private SThemeEqualizer _Theme;
private bool _ThemeLoaded;
public SRectF Rect;
public SColorF Color;
public SColorF MaxColor;
public float Space;
public bool Reflection;
public float ReflectionSpace;
public float ReflectionHeight;
public bool Selected;
public bool Visible;
public bool ScreenHandles;
private float[] _Bars;
public CEqualizer()
{
_Theme = new SThemeEqualizer();
_ThemeLoaded = false;
Rect = new SRectF();
Color = new SColorF();
MaxColor = new SColorF();
Selected = false;
Visible = true;
ScreenHandles = false;
Reflection = false;
ReflectionSpace = 0f;
ReflectionHeight = 0f;
}
public bool LoadTheme(string XmlPath, string ElementName, XPathNavigator navigator, int SkinIndex)
{
string item = XmlPath + "/" + ElementName;
_ThemeLoaded = true;
_ThemeLoaded &= CHelper.GetValueFromXML(item + "/Skin", navigator, ref _Theme.TextureName, String.Empty);
_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.TryGetIntValueFromXML(item + "/NumBars", navigator, ref _Theme.NumBars);
_ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/Space", navigator, ref Space);
_ThemeLoaded &= CHelper.TryGetEnumValueFromXML<EEqualizerStyle>(item + "/Style", navigator, ref _Theme.Style);
_ThemeLoaded &= CHelper.TryGetEnumValueFromXML<EOffOn>(item + "/DrawNegative", navigator, ref _Theme.DrawNegative);
if (CHelper.GetValueFromXML(item + "/Color", navigator, ref _Theme.ColorName, String.Empty))
{
_ThemeLoaded &= CTheme.GetColor(_Theme.ColorName, SkinIndex, ref Color);
}
else
{
_ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/R", navigator, ref Color.R);
_ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/G", navigator, ref Color.G);
_ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/B", navigator, ref Color.B);
_ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/A", navigator, ref Color.A);
}
if (CHelper.GetValueFromXML(item + "/MaxColor", navigator, ref _Theme.MaxColorName, String.Empty))
{
_ThemeLoaded &= CTheme.GetColor(_Theme.ColorName, SkinIndex, ref Color);
}
else
{
_ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/MaxR", navigator, ref MaxColor.R);
_ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/MaxG", navigator, ref MaxColor.G);
_ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/MaxB", navigator, ref MaxColor.B);
_ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/MaxA", navigator, ref MaxColor.A);
}
//Reflection
if (CHelper.ItemExistsInXML(item + "/Reflection", navigator))
{
Reflection = true;
_ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/Reflection/Space", navigator, ref ReflectionSpace);
_ThemeLoaded &= CHelper.TryGetFloatValueFromXML(item + "/Reflection/Height", navigator, ref ReflectionHeight);
}
else
Reflection = false;
if (_ThemeLoaded)
{
_Theme.Name = ElementName;
_Bars = new float[_Theme.NumBars];
for (int i = 0; i < _Bars.Length; i++)
{
_Bars[i] = 0f;
}
LoadTextures();
}
return _ThemeLoaded;
}
public bool SaveTheme(XmlWriter writer)
{
if (_ThemeLoaded)
{
writer.WriteStartElement(_Theme.Name);
writer.WriteComment("<Skin>: Texture name");
writer.WriteElementString("Skin", _Theme.TextureName);
writer.WriteComment("<X>, <Y>, <Z>, <W>, <H>: Equalizer 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("<NumBars>: Number of equalizer-elements.");
writer.WriteElementString("NumBars", _Theme.NumBars.ToString("#0"));
writer.WriteComment("<Space>: Space between equalizer-elements.");
writer.WriteElementString("Space", Space.ToString("#0.00"));
writer.WriteComment("<Style>: Style of equalizer-elements: " + CConfig.ListStrings(Enum.GetNames(typeof(EEqualizerStyle))));
writer.WriteElementString("Style", Enum.GetName(typeof(EEqualizerStyle), _Theme.Style));
writer.WriteComment("<DrawNegative>: Draw negative values: " + CConfig.ListStrings(Enum.GetNames(typeof(EOffOn))));
writer.WriteElementString("Style", Enum.GetName(typeof(EOffOn), _Theme.DrawNegative));
writer.WriteComment("<Color>: Equalizer color from ColorScheme (high priority)");
writer.WriteComment("or <R>, <G>, <B>, <A> (lower priority)");
if (_Theme.ColorName != String.Empty)
{
writer.WriteElementString("Color", _Theme.ColorName);
}
else
{
writer.WriteElementString("R", Color.R.ToString("#0.00"));
writer.WriteElementString("G", Color.G.ToString("#0.00"));
writer.WriteElementString("B", Color.B.ToString("#0.00"));
writer.WriteElementString("A", Color.A.ToString("#0.00"));
}
writer.WriteComment("<MaxColor>: Equalizer color for maximal volume from ColorScheme (high priority)");
writer.WriteComment("or <MaxR>, <MaxG>, <MaxB>, <MaxA> (lower priority)");
if (_Theme.ColorName != String.Empty)
{
writer.WriteElementString("MaxColor", _Theme.ColorName);
}
else
{
writer.WriteElementString("MaxR", Color.R.ToString("#0.00"));
writer.WriteElementString("MaxG", Color.G.ToString("#0.00"));
writer.WriteElementString("MaxB", Color.B.ToString("#0.00"));
writer.WriteElementString("MaxA", Color.A.ToString("#0.00"));
}
writer.WriteComment("<Reflection> If exists:");
writer.WriteComment(" <Space>: Reflection Space");
writer.WriteComment(" <Height>: Reflection Height");
if (Reflection)
{
writer.WriteStartElement("Reflection");
writer.WriteElementString("Space", ReflectionSpace.ToString("#0"));
writer.WriteElementString("Height", ReflectionHeight.ToString("#0"));
writer.WriteEndElement();
}
writer.WriteEndElement();
return true;
}
return false;
}
public void Update(float[] weights)
{
if (weights == null || weights.Length == 0 || _Bars == null)
return;
for (int i = 0; i < _Bars.Length; i++)
{
if (weights.Length > i){
_Bars[i] = 1f - weights[i];
if (_Theme.DrawNegative == EOffOn.TR_CONFIG_OFF && weights[i] < 0)
_Bars[i] = (1f + 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 = (Rect.W ) / _Bars.Length;
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(Rect.X + dx * i, Rect.Y + Rect.H - _Bars[i] * Rect.H, dx - Space, _Bars[i] * Rect.H, Rect.Z);
SColorF color = Color;
if (i == max)
{
color = MaxColor;
}
CDraw.DrawColor(color, bar);
if (Reflection)
CDraw.DrawColorReflection(color, bar, ReflectionSpace, ReflectionHeight);
}
}
public void UnloadTextures()
{
}
public void LoadTextures()
{
if (_Theme.ColorName != String.Empty)
Color = CTheme.GetColor(_Theme.ColorName);
if (_Theme.MaxColorName != String.Empty)
MaxColor = CTheme.GetColor(_Theme.MaxColorName);
}
public void ReloadTextures()
{
UnloadTextures();
LoadTextures();
}
#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
}
}
+3 -1
View File
@@ -15,6 +15,7 @@ namespace Vocaluxe.Menu
TLyric,
TSingNote,
TNameSelection,
TEqualizer
TPlaylist
}
@@ -43,7 +44,8 @@ namespace Vocaluxe.Menu
_Type == EType.TStatic ||
_Type == EType.TSongMenu ||
_Type == EType.TLyric ||
_Type == EType.TSingNote );
_Type == EType.TSingNote ||
_Type == EType.TEqualizer);
}
}
+102
View File
@@ -36,6 +36,7 @@ namespace Vocaluxe.Menu
private List<CLyric> _Lyrics;
private List<CSingNotes> _SingNotes;
private List<CNameSelection> _NameSelections;
private List<CEqualizer> _Equalizers;
private List<CPlaylist> _Playlists;
private Hashtable _htBackgrounds;
@@ -47,6 +48,7 @@ namespace Vocaluxe.Menu
private Hashtable _htSelectSlides;
private Hashtable _htSingNotes;
private Hashtable _htNameSelections;
private Hashtable _htEqualizers;
private Hashtable _htPlaylists;
@@ -69,6 +71,7 @@ namespace Vocaluxe.Menu
protected string[] _ThemeSelectSlides;
protected string[] _ThemeSingNotes;
protected string[] _ThemeNameSelections;
protected string[] _ThemeEqualizers;
protected string[] _ThemePlaylists;
protected SRectF _ScreenArea;
@@ -102,6 +105,7 @@ namespace Vocaluxe.Menu
_Lyrics = new List<CLyric>();
_SingNotes = new List<CSingNotes>();
_NameSelections = new List<CNameSelection>();
_Equalizers = new List<CEqualizer>();
_Playlists = new List<CPlaylist>();
_htBackgrounds = new Hashtable();
@@ -113,6 +117,7 @@ namespace Vocaluxe.Menu
_htSelectSlides = new Hashtable();
_htSingNotes = new Hashtable();
_htNameSelections = new Hashtable();
_htEqualizers = new Hashtable();
_htPlaylists = new Hashtable();
_PrevMouseX = 0;
@@ -134,6 +139,7 @@ namespace Vocaluxe.Menu
_ThemeSelectSlides = null;
_ThemeSingNotes = null;
_ThemeNameSelections = null;
_ThemeEqualizers = null;
_ThemePlaylists = null;
}
@@ -318,6 +324,22 @@ namespace Vocaluxe.Menu
}
}
if (_ThemeEqualizers != null)
{
for (int i = 0; i < _ThemeEqualizers.Length; i++)
{
CEqualizer eq = new CEqualizer();
if (eq.LoadTheme("//root/" + _ThemeName, _ThemeEqualizers[i], navigator, SkinIndex))
{
_htEqualizers.Add(_ThemeEqualizers[i], AddEqualizer(eq));
}
else
{
CLog.LogError("Can't load equalizer \"" + _ThemeEqualizers[i] + "\" in screen " + _ThemeName);
}
}
}
if (_ThemePlaylists != null)
{
for (int i = 0; i < _ThemePlaylists.Length; i++)
@@ -408,6 +430,12 @@ namespace Vocaluxe.Menu
_NameSelections[i].SaveTheme(writer);
}
//Equalizers
for (int i = 0; i < _Equalizers.Count; i++)
{
_Equalizers[i].SaveTheme(writer);
}
//Playlists
for (int i = 0; i < _Playlists.Count; i++)
{
@@ -471,6 +499,11 @@ namespace Vocaluxe.Menu
ns.ReloadTextures();
}
foreach (CEqualizer eq in _Equalizers)
{
eq.ReloadTextures();
}
foreach (CPlaylist pls in _Playlists)
{
pls.ReloadTextures();
@@ -528,6 +561,11 @@ namespace Vocaluxe.Menu
pls.UnloadTextures();
}
foreach (CEqualizer eq in _Equalizers)
{
eq.UnloadTextures();
}
}
public virtual void ReloadTheme()
@@ -584,6 +622,11 @@ namespace Vocaluxe.Menu
return _NameSelections;
}
public List<CEqualizer> GetEqualizers()
{
return _Equalizers;
}
public List<CPlaylist> GetPlaylists()
{
return _Playlists;
@@ -664,6 +707,14 @@ namespace Vocaluxe.Menu
}
}
public CEqualizer[] Equalizers
{
get
{
return _Equalizers.ToArray();
}
}
public CPlaylist[] Playlists
{
get
@@ -791,6 +842,19 @@ namespace Vocaluxe.Menu
}
}
public int htEqualizer(string key)
{
try
{
return (int)_htEqualizers[key];
}
catch (Exception)
{
CLog.LogError("Can't find Equalizer Element \"" + key + "\" in Screen " + _ThemeName);
throw;
}
}
public int htPlaylists(string key)
{
try
@@ -1062,6 +1126,7 @@ namespace Vocaluxe.Menu
_Interactions[i].Type == EType.TNameSelection ||
_Interactions[i].Type == EType.TText ||
_Interactions[i].Type == EType.TSongMenu ||
_Interactions[i].Type == EType.TEqualizer ||
_Interactions[i].Type == EType.TPlaylist))
{
ZSort zs = new ZSort();
@@ -1149,6 +1214,13 @@ namespace Vocaluxe.Menu
return _NameSelections.Count - 1;
}
public int AddEqualizer(CEqualizer eq)
{
_Equalizers.Add(eq);
_AddInteraction(_Equalizers.Count - 1, EType.TEqualizer);
return _Equalizers.Count - 1;
}
public int AddPlaylist(CPlaylist pls)
{
_Playlists.Add(pls);
@@ -1303,6 +1375,10 @@ namespace Vocaluxe.Menu
if (CHelper.IsInBounds(_NameSelections[interact.Num].Rect, x, y))
return true;
break;
case EType.TEqualizer:
if (CHelper.IsInBounds(_Equalizers[interact.Num].Rect, x, y))
return true;
break;
case EType.TPlaylist:
if (CHelper.IsInBounds(_Playlists[interact.Num].Rect, x, y))
return true;
@@ -1329,6 +1405,8 @@ namespace Vocaluxe.Menu
return _Lyrics[interact.Num].Rect.Z;
case EType.TNameSelection:
return _NameSelections[interact.Num].Rect.Z;
case EType.TEqualizer:
return _Equalizers[interact.Num].Rect.Z;
case EType.TPlaylist:
return _Playlists[interact.Num].Rect.Z;
}
@@ -1360,6 +1438,9 @@ namespace Vocaluxe.Menu
case EType.TNameSelection:
return _NameSelections[_Interactions[interaction].Num].Rect.Z;
case EType.TEqualizer:
return _Equalizers[_Interactions[interaction].Num].Rect.Z;
case EType.TPlaylist:
return _Playlists[_Interactions[interaction].Num].Rect.Z;
}
@@ -1684,6 +1765,9 @@ namespace Vocaluxe.Menu
case EType.TNameSelection:
_NameSelections[_Interactions[_Selection].Num].Selected = true;
break;
case EType.TEqualizer:
_Equalizers[_Interactions[_Selection].Num].Selected = true;
break;
case EType.TPlaylist:
_Playlists[_Interactions[_Selection].Num].Selected = true;
break;
@@ -1715,6 +1799,9 @@ namespace Vocaluxe.Menu
case EType.TNameSelection:
_NameSelections[_Interactions[_Selection].Num].Selected = false;
break;
case EType.TEqualizer:
_Equalizers[_Interactions[_Selection].Num].Selected = false;
break;
case EType.TPlaylist:
_Playlists[_Interactions[_Selection].Num].Selected = false;
break;
@@ -1836,6 +1923,9 @@ namespace Vocaluxe.Menu
case EType.TNameSelection:
return _NameSelections[_Interactions[interaction].Num].Visible;
case EType.TEqualizer:
return _Equalizers[_Interactions[interaction].Num].Visible;
case EType.TPlaylist:
return _Playlists[_Interactions[interaction].Num].Visible;
}
@@ -1869,6 +1959,9 @@ namespace Vocaluxe.Menu
case EType.TNameSelection:
return _NameSelections[_Interactions[interaction].Num].Rect;
case EType.TEqualizer:
return _Equalizers[_Interactions[interaction].Num].Rect;
case EType.TPlaylist:
return _Playlists[_Interactions[interaction].Num].Rect;
}
@@ -1913,6 +2006,15 @@ namespace Vocaluxe.Menu
_NameSelections[_Interactions[interaction].Num].Draw();
break;
case EType.TEqualizer:
if (!_Equalizers[_Interactions[interaction].Num].ScreenHandles)
{
//TODO:
//Call Update-Method of Equalizer and give infos about bg-sound.
//_Equalizers[_Interactions[interaction].Num].Draw();
}
break;
case EType.TPlaylist:
_Playlists[_Interactions[interaction].Num].Draw();
break;
+4 -4
View File
@@ -589,14 +589,14 @@ namespace Vocaluxe.Menu
public void ProcessMouseMove(int x, int y)
{
_ArrowLeftSelected = CHelper.IsInBounds(RectArrowLeft, x, y);
_ArrowRightSelected = CHelper.IsInBounds(RectArrowRight, x, y);
_ArrowLeftSelected = CHelper.IsInBounds(RectArrowLeft, x, y) && _Selection > 0;
_ArrowRightSelected = CHelper.IsInBounds(RectArrowRight, x, y) && _Selection < _ValueNames.Count - 1;
}
public void ProcessMouseLBClick(int x, int y)
{
_ArrowLeftSelected = CHelper.IsInBounds(RectArrowLeft, x, y);
_ArrowRightSelected = CHelper.IsInBounds(RectArrowRight, x, y);
_ArrowLeftSelected = CHelper.IsInBounds(RectArrowLeft, x, y) && _Selection > 0;
_ArrowRightSelected = CHelper.IsInBounds(RectArrowRight, x, y) && _Selection < _ValueNames.Count - 1;
if (_ArrowLeftSelected)
PrevValue();
@@ -1,10 +1,48 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Vocaluxe.Base;
using Vocaluxe.Lib.Draw;
using Vocaluxe.Lib.Song;
namespace Vocaluxe.Menu.SongMenu
{
class CSongMenuDreidel : CSongMenuFramework
{
private SRectF _ScrollRect;
private CStatic _CoverBig;
private CStatic _TextBG;
private CStatic _DuetIcon;
private CStatic _VideoIcon;
private CText _Artist;
private CText _Title;
private CText _SongLength;
private int _actualSelection = -1;
public override int GetActualSelection()
{
return _actualSelection;
}
public override void Init()
{
base.Init();
/**
_CoverBig = _Theme.songMenuDreidel.StaticCoverBig;
_TextBG = _Theme.songMenuDreidel.StaticTextBG;
_DuetIcon = _Theme.songMenuDreidel.StaticDuetIcon;
_VideoIcon = _Theme.songMenuDreidel.StaticVideoIcon;
_Artist = _Theme.songMenuDreidel.TextArtist;
_Title = _Theme.songMenuDreidel.TextTitle;
_SongLength = _Theme.songMenuDreidel.TextSongLength;
**/
}
}
}
+120 -9
View File
@@ -12,7 +12,7 @@ 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 = 2;
const int ScreenVersion = 3;
private CStatic chooseAvatarStatic;
private int OldMouseX;
@@ -29,10 +29,13 @@ namespace Vocaluxe.Screens
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 readonly string[] EqualizerPlayer = new string[] { "EqualizerPlayer1", "EqualizerPlayer2", "EqualizerPlayer3", "EqualizerPlayer4", "EqualizerPlayer5", "EqualizerPlayer6" };
private readonly string[] SelectSlideDuetPlayer = new string[] { "SelectSlideDuetPlayer1", "SelectSlideDuetPlayer2", "SelectSlideDuetPlayer3", "SelectSlideDuetPlayer4", "SelectSlideDuetPlayer5", "SelectSlideDuetPlayer6" };
private STexture[] OriginalPlayerAvatarTextures = new STexture[CSettings.MaxNumPlayer];
private bool selectingMouseActive = false;
private bool selectingKeyboardActive = false;
private bool selectingKeyboardUnendless = false;
private int selectingKeyboardPlayerNr = 0;
private int SelectedPlayerNr;
@@ -63,8 +66,9 @@ namespace Vocaluxe.Screens
_ThemeStatics = statics.ToArray();
List<string> texts = new List<string>();
_ThemeSelectSlides = new string[] { SelectSlidePlayerNumber };
texts.Add(SelectSlidePlayerNumber);
texts.AddRange(SelectSlideDuetPlayer);
_ThemeSelectSlides = texts.ToArray();
texts.Clear();
texts.Add(TextWarningMics);
@@ -84,6 +88,10 @@ namespace Vocaluxe.Screens
texts.Add(NameSelection);
_ThemeNameSelections = texts.ToArray();
texts.Clear();
texts.AddRange(EqualizerPlayer);
_ThemeEqualizers = texts.ToArray();
chooseAvatarStatic = new CStatic();
chooseAvatarStatic.Visible = false;
}
@@ -102,6 +110,11 @@ namespace Vocaluxe.Screens
{
OriginalPlayerAvatarTextures[i] = Statics[htStatics(StaticPlayerAvatar[i])].Texture;
}
for (int i = 1; i <= CSettings.MaxNumPlayer; i++)
{
Equalizers[htEqualizer("EqualizerPlayer" + i)].ScreenHandles = true;
}
}
public override bool HandleInput(KeyEvent KeyEvent)
@@ -127,6 +140,22 @@ namespace Vocaluxe.Screens
NameSelections[htNameSelections(NameSelection)].UpdateList();
}
break;
case Keys.P:
if (!selectingKeyboardActive)
{
selectingKeyboardPlayerNr = 1;
selectingKeyboardUnendless = true;
}
else
{
if (selectingKeyboardPlayerNr + 1 <= CGame.NumPlayer)
selectingKeyboardPlayerNr++;
else
selectingKeyboardPlayerNr = 1;
NameSelections[htNameSelections(NameSelection)].KeyboardSelection(true, selectingKeyboardPlayerNr);
}
break;
}
//Check if selecting with keyboard is active
if (selectingKeyboardActive)
@@ -156,10 +185,29 @@ namespace Vocaluxe.Screens
NameSelections[htNameSelections(NameSelection)].UpdateList();
SetInteractionToButton(Buttons[htButtons(ButtonStart)]);
}
//Reset all values
selectingKeyboardPlayerNr = 0;
selectingKeyboardActive = false;
NameSelections[htNameSelections(NameSelection)].KeyboardSelection(false, -1);
//Started selecting with 'P'
if (selectingKeyboardUnendless)
{
if (selectingKeyboardPlayerNr == CGame.NumPlayer)
{
//Reset all values
selectingKeyboardPlayerNr = 0;
selectingKeyboardActive = false;
NameSelections[htNameSelections(NameSelection)].KeyboardSelection(false, -1);
}
else
{
selectingKeyboardPlayerNr++;
NameSelections[htNameSelections(NameSelection)].KeyboardSelection(true, selectingKeyboardPlayerNr);
}
}
else
{
//Reset all values
selectingKeyboardPlayerNr = 0;
selectingKeyboardActive = false;
NameSelections[htNameSelections(NameSelection)].KeyboardSelection(false, -1);
}
break;
case Keys.D1:
@@ -176,6 +224,7 @@ namespace Vocaluxe.Screens
selectingKeyboardPlayerNr = 1;
NameSelections[htNameSelections(NameSelection)].KeyboardSelection(true, 1);
}
selectingKeyboardUnendless = false;
break;
case Keys.D2:
case Keys.NumPad2:
@@ -191,6 +240,7 @@ namespace Vocaluxe.Screens
selectingKeyboardPlayerNr = 2;
NameSelections[htNameSelections(NameSelection)].KeyboardSelection(true, 2);
}
selectingKeyboardUnendless = false;
break;
case Keys.D3:
case Keys.NumPad3:
@@ -206,6 +256,7 @@ namespace Vocaluxe.Screens
selectingKeyboardPlayerNr = 3;
NameSelections[htNameSelections(NameSelection)].KeyboardSelection(true, 3);
}
selectingKeyboardUnendless = false;
break;
case Keys.D4:
case Keys.NumPad4:
@@ -221,6 +272,7 @@ namespace Vocaluxe.Screens
selectingKeyboardPlayerNr = 4;
NameSelections[htNameSelections(NameSelection)].KeyboardSelection(true, 4);
}
selectingKeyboardUnendless = false;
break;
case Keys.D5:
case Keys.NumPad5:
@@ -236,6 +288,7 @@ namespace Vocaluxe.Screens
selectingKeyboardPlayerNr = 5;
NameSelections[htNameSelections(NameSelection)].KeyboardSelection(true, 5);
}
selectingKeyboardUnendless = false;
break;
case Keys.D6:
case Keys.NumPad6:
@@ -251,11 +304,14 @@ namespace Vocaluxe.Screens
selectingKeyboardPlayerNr = 6;
NameSelections[htNameSelections(NameSelection)].KeyboardSelection(true, 6);
}
selectingKeyboardUnendless = false;
break;
case Keys.Escape:
//Reset all values
selectingKeyboardPlayerNr = 0;
selectingKeyboardActive = false;
selectingKeyboardUnendless = false;
NameSelections[htNameSelections(NameSelection)].KeyboardSelection(false, -1);
break;
@@ -279,6 +335,22 @@ namespace Vocaluxe.Screens
//Update Tiles-List
NameSelections[htNameSelections(NameSelection)].UpdateList();
break;
case Keys.F10:
if (CGame.GetNumSongs() == 1 && CGame.GetSong(1).IsDuet)
{
if (SelectSlides[htSelectSlides(SelectSlideDuetPlayer[selectingKeyboardPlayerNr - 1])].Selection == 0)
SelectSlides[htSelectSlides(SelectSlideDuetPlayer[selectingKeyboardPlayerNr - 1])].SetSelectionByValueIndex(1);
else
SelectSlides[htSelectSlides(SelectSlideDuetPlayer[selectingKeyboardPlayerNr - 1])].SetSelectionByValueIndex(0);
//Reset all values
selectingKeyboardPlayerNr = 0;
selectingKeyboardActive = false;
selectingKeyboardUnendless = false;
NameSelections[htNameSelections(NameSelection)].KeyboardSelection(false, -1);
SetInteractionToButton(Buttons[htButtons(ButtonStart)]);
}
break;
}
}
@@ -503,13 +575,18 @@ namespace Vocaluxe.Screens
public override bool UpdateGame()
{
for (int i = 1; i <= CGame.NumPlayer; i++)
{
CSound.AnalyzeBuffer((i-1));
Equalizers[htEqualizer("EqualizerPlayer" + i)].Update(CSound.ToneWeigth((i-1)));
}
return true;
}
public override void OnShow()
{
base.OnShow();
CSound.RecordStart();
NameSelections[htNameSelections(NameSelection)].Init();
@@ -526,11 +603,33 @@ namespace Vocaluxe.Screens
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;
}
if (CGame.GetNumSongs() == 1 && CGame.GetSong(1).IsDuet)
{
SelectSlides[htSelectSlides(SelectSlideDuetPlayer[i])].Clear();
if (i + 1 <= CGame.NumPlayer)
SelectSlides[htSelectSlides(SelectSlideDuetPlayer[i])].Visible = true;
else
SelectSlides[htSelectSlides(SelectSlideDuetPlayer[i])].Visible = false;
SelectSlides[htSelectSlides(SelectSlideDuetPlayer[i])].AddValue(CGame.GetSong(1).DuetPart1);
SelectSlides[htSelectSlides(SelectSlideDuetPlayer[i])].AddValue(CGame.GetSong(1).DuetPart2);
if ((i + 1) % 2 == 0)
SelectSlides[htSelectSlides(SelectSlideDuetPlayer[i])].SetSelectionByValueIndex(1);
else
SelectSlides[htSelectSlides(SelectSlideDuetPlayer[i])].SetSelectionByValueIndex(0);
}
else
SelectSlides[htSelectSlides(SelectSlideDuetPlayer[i])].Visible = false;
}
SetInteractionToButton(Buttons[htButtons(ButtonStart)]);
}
public override void OnClose()
{
base.OnClose();
CSound.RecordStop();
}
public override bool Draw()
{
base.Draw();
@@ -539,7 +638,10 @@ namespace Vocaluxe.Screens
{
chooseAvatarStatic.Draw();
}
for (int i = 1; i <= CGame.NumPlayer; i++)
{
Equalizers[htEqualizer("EqualizerPlayer" + i)].Draw();
}
return true;
}
@@ -561,6 +663,10 @@ namespace Vocaluxe.Screens
CGame.Player[i].Name = "";
}
}
if (CGame.GetNumSongs() == 1 && CGame.GetSong(1).IsDuet)
{
CGame.Player[i].LineNr = SelectSlides[htSelectSlides(SelectSlideDuetPlayer[i])].Selection;
}
}
CGraphics.FadeTo(EScreens.ScreenSing);
@@ -591,12 +697,17 @@ namespace Vocaluxe.Screens
{
Texts[htTexts("TextPlayer" + i)].Text = CLanguage.Translate("TR_SCREENNAMES_PLAYER") + " " + i.ToString();
}
Equalizers[htEqualizer("EqualizerPlayer" + i)].Visible = true;
if (CGame.GetNumSongs() == 1 && CGame.GetSong(1).IsDuet)
SelectSlides[htSelectSlides("SelectSlideDuetPlayer" + i)].Visible = true;
}
else
{
Statics[htStatics("StaticPlayer" + i)].Visible = false;
Statics[htStatics("StaticPlayerAvatar" + i)].Visible = false;
Texts[htTexts("TextPlayer" + i)].Visible = false;
Equalizers[htEqualizer("EqualizerPlayer" + i)].Visible = false;
SelectSlides[htSelectSlides("SelectSlideDuetPlayer" + i)].Visible = false;
}
}
CConfig.SaveConfig();
+16 -103
View File
@@ -21,7 +21,7 @@ namespace Vocaluxe.Screens
class CScreenOptionsRecord : 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 float MaxDelayTime = 1f;
private const string SelectSlideRecordDevices = "SelectSlideRecordDevices";
@@ -40,6 +40,9 @@ namespace Vocaluxe.Screens
private const string TextDelayChannel1 = "TextDelayChannel1";
private const string TextDelayChannel2 = "TextDelayChannel2";
private const string EqualizerChannel1 = "EqualizerChannel1";
private const string EqualizerChannel2 = "EqualizerChannel2";
private readonly string[] StaticEnergyChannel = new string[] { "StaticEnergyChannel1", "StaticEnergyChannel2" };
private float[] ChannelEnergy;
@@ -51,8 +54,6 @@ namespace Vocaluxe.Screens
private bool _DelayTestRunning;
private int _DelaySound;
private Equalizer[] _Equalizer;
public CScreenOptionsRecord()
{
Init();
@@ -73,6 +74,7 @@ namespace Vocaluxe.Screens
_ThemeTexts = new string[] { TextWarning, TextDelayChannel1, TextDelayChannel2 };
_ThemeButtons = new string[] { ButtonExit, ButtonDelayTest };
_ThemeSelectSlides = new string[] { SelectSlideRecordDevices, SelectSlideRecordInputs, SelectSlideRecordChannel1, SelectSlideRecordChannel2, SelectSlideDelay };
_ThemeEqualizers = new string[] { EqualizerChannel1, EqualizerChannel2 };
}
public override void LoadTheme()
@@ -107,6 +109,9 @@ namespace Vocaluxe.Screens
Statics[htStatics(StaticEnergyChannel[i])].Visible = false;
ChannelEnergy[i] = 0f;
}
Equalizers[htEqualizer(EqualizerChannel1)].ScreenHandles = true;
Equalizers[htEqualizer(EqualizerChannel2)].ScreenHandles = true;
}
public override bool HandleInput(KeyEvent KeyEvent)
@@ -277,28 +282,29 @@ namespace Vocaluxe.Screens
if (player > 0)
{
ChannelEnergy[0] = CSound.RecordGetMaxVolume(player - 1);
_Equalizer[0].Update(CSound.ToneWeigth(player - 1));
Equalizers[htEqualizer(EqualizerChannel1)].Update(CSound.ToneWeigth(player - 1));
}
else
_Equalizer[0].Reset();
Equalizers[htEqualizer(EqualizerChannel1)].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));
Equalizers[htEqualizer(EqualizerChannel2)].Update(CSound.ToneWeigth(player - 1));
}
else
_Equalizer[1].Reset();
Equalizers[htEqualizer(EqualizerChannel2)].Reset();
}
else
{
for (int i = 0; i < ChannelEnergy.Length; i++)
{
ChannelEnergy[i] = 0f;
_Equalizer[i].Reset();
}
Equalizers[htEqualizer(EqualizerChannel1)].Reset();
Equalizers[htEqualizer(EqualizerChannel2)].Reset();
}
return true;
@@ -361,13 +367,6 @@ 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()
@@ -406,10 +405,8 @@ namespace Vocaluxe.Screens
}
}
for (int i = 0; i < _Equalizer.Length; i++)
{
_Equalizer[i].Draw();
}
Equalizers[htEqualizer(EqualizerChannel1)].Draw();
Equalizers[htEqualizer(EqualizerChannel2)].Draw();
DrawFG();
@@ -594,88 +591,4 @@ 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);
}
}
}
}
+125 -10
View File
@@ -25,10 +25,12 @@ namespace Vocaluxe.Screens
public float startBeat;
public float endBeat;
}
private const string TextSongName = "TextSongName";
private const string TextTime = "TextTime";
private const string TextPause = "TextPause";
private const string TextDuetName1 = "TextDuetName1";
private const string TextDuetName2 = "TextDuetName2";
private string[,] TextScores;
private string[,] TextNames;
@@ -86,6 +88,8 @@ namespace Vocaluxe.Screens
private int[] NoteLines = new int[CSettings.MaxNumPlayer];
private Stopwatch _TimerSongText;
private Stopwatch _TimerDuetText1;
private Stopwatch _TimerDuetText2;
private bool _Pause;
@@ -105,6 +109,8 @@ namespace Vocaluxe.Screens
texts.Add(TextSongName);
texts.Add(TextTime);
texts.Add(TextPause);
texts.Add(TextDuetName1);
texts.Add(TextDuetName2);
BuildTextStrings(ref texts);
_ThemeTexts = texts.ToArray();
@@ -136,6 +142,8 @@ namespace Vocaluxe.Screens
_TimeRects = new List<TimeRect>();
_TimerSongText = new Stopwatch();
_TimerDuetText1 = new Stopwatch();
_TimerDuetText2 = new Stopwatch();
}
public override void LoadTheme()
@@ -273,6 +281,7 @@ namespace Vocaluxe.Screens
}
UpdateSongText();
UpdateDuetText();
if (_FadeOut)
return true;
@@ -302,15 +311,15 @@ namespace Vocaluxe.Screens
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];
Statics[htStatics(StaticAvatars[p, CGame.NumPlayer - 1])].Alpha = Alpha[CGame.Player[p].LineNr * 2];
Texts[htTexts(TextNames[p, CGame.NumPlayer - 1])].Alpha = Alpha[CGame.Player[p].LineNr * 2];
}
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];
Statics[htStatics(StaticScores[p, CGame.NumPlayer - 1])].Alpha = Alpha[CGame.Player[p].LineNr * 2];
Statics[htStatics(StaticAvatars[p, CGame.NumPlayer - 1])].Alpha = Alpha[CGame.Player[p].LineNr * 2];
Texts[htTexts(TextNames[p, CGame.NumPlayer - 1])].Alpha = Alpha[CGame.Player[p].LineNr * 2];
Texts[htTexts(TextScores[p, CGame.NumPlayer - 1])].Alpha = Alpha[CGame.Player[p].LineNr * 2];
}
}
@@ -500,6 +509,8 @@ namespace Vocaluxe.Screens
Lyrics[htLyrics(LyricMainTop)].Clear();
Lyrics[htLyrics(LyricSubTop)].Clear();
Texts[htTexts(TextSongName)].Text = String.Empty;
Texts[htTexts(TextDuetName1)].Text = String.Empty;
Texts[htTexts(TextDuetName2)].Text = String.Empty;
}
private void LoadNextSong()
@@ -539,6 +550,15 @@ namespace Vocaluxe.Screens
_FinishTime = song.Finish;
_TimeToFirstNote = 0f;
_TimeToFirstNoteDuet = 0f;
int[] duet_player = new int[CGame.NumPlayer];
if (song.IsDuet)
{
//Save duet-assignment before resetting
for (int i = 0; i < duet_player.Length; i++)
{
duet_player[i] = CGame.Player[i].LineNr;
}
}
CGame.ResetPlayer();
CDraw.RemoveTexture(ref _CurrentVideoTexture);
@@ -558,10 +578,24 @@ namespace Vocaluxe.Screens
bool LyricsOnTop = (CGame.NumPlayer != 1) && CConfig.LyricsOnTop == EOffOn.TR_CONFIG_ON;
if (song.IsDuet)
{
for (int i = 1; i <= CGame.NumPlayer; i = i + 2)
{
Texts[htTexts(TextDuetName1)].Text = song.DuetPart1;
Texts[htTexts(TextDuetName2)].Text = song.DuetPart2;
//More than one song: Player is not assigned to line by user
//Otherwise, this is done by CScreenNames
if (CGame.GetNumSongs() > 1)
{
CGame.Player[i].LineNr = 1;
for (int i = 1; i <= CGame.NumPlayer; i = i + 2)
{
CGame.Player[i].LineNr = 1;
}
}
else
{
for (int i = 0; i < CGame.NumPlayer; i++)
{
CGame.Player[i].LineNr = duet_player[i];
}
}
Statics[htStatics(StaticLyricsDuet)].Visible = true;
Lyrics[htLyrics(LyricMainDuet)].Visible = true;
@@ -602,9 +636,15 @@ namespace Vocaluxe.Screens
_TimerSongText.Stop();
_TimerSongText.Reset();
_TimerDuetText1.Stop();
_TimerDuetText1.Reset();
_TimerDuetText2.Stop();
_TimerDuetText2.Reset();
if (song.Notes.Lines.Length != 2)
{
_TimerSongText.Start();
}
StartSong();
}
@@ -791,6 +831,8 @@ namespace Vocaluxe.Screens
Statics[htStatics(StaticSongText)].Visible = false;
Texts[htTexts(TextSongName)].Visible = false;
Texts[htTexts(TextDuetName1)].Visible = false;
Texts[htTexts(TextDuetName2)].Visible = false;
for (int numplayer = 0; numplayer < CSettings.MaxNumPlayer; numplayer++)
{
@@ -1061,6 +1103,79 @@ namespace Vocaluxe.Screens
}
}
private void UpdateDuetText()
{
if (CGame.GetSong() != null)
{
//Timer for first duet-part
if (_TimerDuetText1.IsRunning)
{
float t = _TimerDuetText1.ElapsedMilliseconds / 1000f;
if (t < 10f)
{
Texts[htTexts(TextDuetName1)].Visible = true;
if (t < 3f)
{
Texts[htTexts(TextDuetName1)].Color.A = (3f - (3f - t)) / 3f;
}
else if (t < 7f)
{
Texts[htTexts(TextDuetName1)].Color.A = 1f;
}
else
{
Texts[htTexts(TextDuetName1)].Color.A = (3f - (t - 7f)) / 3f;
}
}
else
{
Texts[htTexts(TextDuetName1)].Visible = false;
_TimerDuetText1.Stop();
}
}
else if (!_TimerDuetText1.IsRunning && _TimerDuetText1.ElapsedMilliseconds == 0 && Lyrics[htLyrics(LyricMainDuet)].Alpha > 0 && CGame.GetSong().IsDuet)
_TimerDuetText1.Start();
else
{
Texts[htTexts(TextDuetName1)].Visible = false;
}
//Timer for second duet-part
if (_TimerDuetText2.IsRunning)
{
float t = _TimerDuetText2.ElapsedMilliseconds / 1000f;
if (t < 10f)
{
Texts[htTexts(TextDuetName2)].Visible = true;
if (t < 3f)
{
Texts[htTexts(TextDuetName2)].Color.A = (3f - (3f - t)) / 3f;
}
else if (t < 7f)
{
Texts[htTexts(TextDuetName2)].Color.A = 1f;
}
else
{
Texts[htTexts(TextDuetName2)].Color.A = (3f - (t - 7f)) / 3f;
}
}
else
{
Texts[htTexts(TextDuetName2)].Visible = false;
_TimerDuetText2.Stop();
}
}
else if (!_TimerDuetText2.IsRunning && _TimerDuetText2.ElapsedMilliseconds == 0 && Lyrics[htLyrics(LyricMain)].Alpha > 0 && CGame.GetSong().IsDuet)
_TimerDuetText2.Start();
else
{
Texts[htTexts(TextDuetName2)].Visible = false;
}
}
}
private void UpdateTimeLine()
{
CSong song = CGame.GetSong();
+1
View File
@@ -209,6 +209,7 @@
<Compile Include="Lib\Video\IVideoDecoder.cs" />
<Compile Include="Menu\CBackground.cs" />
<Compile Include="Menu\CButton.cs" />
<Compile Include="Menu\CEqualizer.cs" />
<Compile Include="Menu\CGraphics.cs" />
<Compile Include="Menu\CNameSelection.cs" />
<Compile Include="Menu\CLyric.cs" />