diff --git a/Output/Languages/English.xml b/Output/Languages/English.xml
index 80fdf299..3455a91f 100644
--- a/Output/Languages/English.xml
+++ b/Output/Languages/English.xml
@@ -15,6 +15,7 @@
Loaded songs
Mouse
Memory usage
+ Game mode
Normal
Duet
Medley
@@ -31,6 +32,10 @@
Normal user
Administrator
Keyboard user
+ Song source
+ Playlist
+ Category
+ All songs
Software
OpenGL
Direct3D
diff --git a/Output/PartyModes/Challenge.xml b/Output/PartyModes/Challenge.xml
index 964a589e..49873a96 100644
--- a/Output/PartyModes/Challenge.xml
+++ b/Output/PartyModes/Challenge.xml
@@ -15,5 +15,6 @@
CPartyScreenChallengeMain
CPartyScreenChallengeConfig
CPartyScreenChallengeNames
+ CPartyScreenChallengeSongs
diff --git a/Output/PartyModes/Challenge/Languages/English.xml b/Output/PartyModes/Challenge/Languages/English.xml
index 3907bf70..06b3badc 100644
--- a/Output/PartyModes/Challenge/Languages/English.xml
+++ b/Output/PartyModes/Challenge/Languages/English.xml
@@ -11,6 +11,7 @@
Yes
No
Next Round
+ Songs
Challenge Mode: Configuration
Number of players
Number of mics
diff --git a/Output/PartyModes/Challenge/Themes/Default/Default.xml b/Output/PartyModes/Challenge/Themes/Default/Default.xml
index f4299579..52a8859e 100644
--- a/Output/PartyModes/Challenge/Themes/Default/Default.xml
+++ b/Output/PartyModes/Challenge/Themes/Default/Default.xml
@@ -3,14 +3,11 @@
4
Default
- brunzel
+ Jiiniasu
0
1
-
-
-
-
-
-
+
+
+
diff --git a/Output/PartyModes/Challenge/Themes/Default/Screens/PartyScreenChallengeConfig.xml b/Output/PartyModes/Challenge/Themes/Default/Screens/PartyScreenChallengeConfig.xml
index 64e3adad..97b70135 100644
--- a/Output/PartyModes/Challenge/Themes/Default/Screens/PartyScreenChallengeConfig.xml
+++ b/Output/PartyModes/Challenge/Themes/Default/Screens/PartyScreenChallengeConfig.xml
@@ -14,26 +14,26 @@
-
- Menu
-
+
+
+
- 40
+ 0
40
- 1200
- 50
- 0
+ 1280
+ 45
+ 1
-
+
640
- 48
+ 50
0
27
0
-
+
Center
Center
@@ -41,13 +41,13 @@
Outline
TR_SCREENCONFIG_TITLE
-
+
75
105
0
27
0
-
+
Left
Center
@@ -55,13 +55,13 @@
Outline
TR_SCREENCONFIG_NUMPLAYERS
-
+
75
165
0
27
0
-
+
Left
Center
@@ -69,13 +69,13 @@
Outline
TR_SCREENCONFIG_NUMMICS
-
+
75
225
0
27
0
-
+
Left
Center
@@ -83,13 +83,13 @@
Outline
TR_SCREENCONFIG_NUMROUNDS
-
+
75
285
0
27
0
-
+
Left
Center
@@ -97,13 +97,13 @@
Outline
TR_SCREENCONFIG_NUMJOKERS
-
+
75
345
0
27
0
-
+
Left
Center
@@ -127,7 +127,7 @@
75
- 10
+ 12
0
27
142
@@ -162,7 +162,7 @@
75
- 10
+ 12
0
27
142
@@ -209,7 +209,7 @@
0
- 1170
+ 1155
105
40
40
@@ -219,12 +219,12 @@
-
+
27
50
0
- 205.33
+ 200
Outline
Bold
9
@@ -251,7 +251,7 @@
0
- 1170
+ 1155
165
40
40
@@ -261,12 +261,12 @@
-
+
27
50
0
- 205.33
+ 200
Outline
Bold
2
@@ -293,7 +293,7 @@
0
- 1170
+ 1155
225
40
40
@@ -303,12 +303,12 @@
-
+
27
50
0
- 205.33
+ 200
Outline
Bold
10
@@ -335,7 +335,7 @@
0
- 1170
+ 1155
285
40
40
@@ -345,12 +345,12 @@
-
+
27
50
0
- 205.33
+ 200
Outline
Bold
10
@@ -377,7 +377,7 @@
0
- 1170
+ 1155
345
40
40
@@ -387,12 +387,12 @@
-
+
27
50
0
- 205.33
+ 200
Outline
Bold
2
diff --git a/Output/PartyModes/Challenge/Themes/Default/Screens/PartyScreenChallengeMain.xml b/Output/PartyModes/Challenge/Themes/Default/Screens/PartyScreenChallengeMain.xml
index 1c67c701..c8752d0f 100644
--- a/Output/PartyModes/Challenge/Themes/Default/Screens/PartyScreenChallengeMain.xml
+++ b/Output/PartyModes/Challenge/Themes/Default/Screens/PartyScreenChallengeMain.xml
@@ -14,15 +14,15 @@
-
- Menu
-
+
+
+
- 40
+ 0
40
- 1200
- 50
- 0
+ 1280
+ 45
+ 1
@@ -49,13 +49,13 @@
-
+
640
- 48
+ 50
0
27
0
-
+
Center
Center
@@ -65,11 +65,11 @@
40
- 102
+ 135
0
27
0
-
+
Right
Center
@@ -79,11 +79,11 @@
50
- 102
+ 135
0
27
130
-
+
Left
Center
@@ -93,11 +93,11 @@
260
- 102
+ 135
0
27
0
-
+
Right
Center
@@ -107,11 +107,11 @@
340
- 102
+ 135
0
27
0
-
+
Right
Center
@@ -121,11 +121,11 @@
490
- 102
+ 135
0
27
0
-
+
Right
Center
@@ -135,11 +135,11 @@
590
- 102
+ 135
0
27
0
-
+
Right
Center
@@ -153,7 +153,7 @@
0
27
100
-
+
Center
Center
@@ -163,11 +163,11 @@
640
- 265
+ 270
-1.01
27
380
-
+
Center
Center
@@ -177,11 +177,11 @@
660
- 102
+ 135
0
27
0
-
+
Right
Center
@@ -195,7 +195,7 @@
0
27
0
-
+
Center
Center
@@ -209,7 +209,7 @@
0
27
0
-
+
Center
Center
@@ -223,7 +223,7 @@
0
44
0
-
+
Center
Center
@@ -237,7 +237,7 @@
0
31
770
-
+
Center
Center
@@ -251,7 +251,7 @@
0
27
0
-
+
Center
Center
@@ -310,7 +310,7 @@
75
- 10
+ 12
0
27
142
@@ -345,7 +345,7 @@
75
- 10
+ 12
0
27
142
@@ -380,7 +380,7 @@
75
- 10
+ 12
0
27
142
@@ -415,7 +415,7 @@
75
- 10
+ 12
0
27
142
@@ -441,7 +441,7 @@
ScrollDown
281
- 515
+ 495
28
15
-0.01
@@ -468,7 +468,7 @@
ScrollUp
281
- 94
+ 110
28
15
-0.01
@@ -495,7 +495,7 @@
ScrollDown
954
- 515
+ 470
28
15
-0.01
@@ -522,7 +522,7 @@
ScrollUp
954
- 94
+ 110
28
15
-0.01
@@ -554,4 +554,4 @@
-
\ No newline at end of file
+
diff --git a/Output/PartyModes/Challenge/Themes/Default/Screens/PartyScreenChallengeNames.xml b/Output/PartyModes/Challenge/Themes/Default/Screens/PartyScreenChallengeNames.xml
index 5980e6d3..2ce1d175 100644
--- a/Output/PartyModes/Challenge/Themes/Default/Screens/PartyScreenChallengeNames.xml
+++ b/Output/PartyModes/Challenge/Themes/Default/Screens/PartyScreenChallengeNames.xml
@@ -14,26 +14,26 @@
-
- Menu
-
+
+
+
- 40
+ 0
40
- 1200
- 50
- 0
+ 1280
+ 45
+ 1
-
+
640
- 48
+ 50
0
27
0
-
+
Center
Center
@@ -48,7 +48,7 @@
Button
145
- 625
+ 600
150
50
0
@@ -57,7 +57,7 @@
75
- 10
+ 12
0
27
142
@@ -83,7 +83,7 @@
Button
985
- 625
+ 600
150
50
0
@@ -92,7 +92,7 @@
75
- 10
+ 12
0
27
142
@@ -118,7 +118,7 @@
Button
565
- 625
+ 600
150
50
0
@@ -127,7 +127,7 @@
75
- 10
+ 12
0
27
142
@@ -282,7 +282,7 @@
0
- 1170
+ 1195
105
40
40
@@ -292,12 +292,12 @@
-
+
27
50
0
- 205.33
+ 200
Outline
Bold
2
@@ -324,7 +324,7 @@
0
- 1170
+ 1195
210
40
40
@@ -334,12 +334,12 @@
-
+
27
50
5
- 205.33
+ 200
Outline
Bold
8
@@ -349,29 +349,24 @@
- 42
- 327
+ 95
+ 350
1200
393
0
CoverTile
-
- 1
- 1
- 1
- 0.2
-
+
PlayerSelector
100
100
10
2
- 20.71
- 30
+ 10
+ 10
- 2
+ -20
17
Outline
diff --git a/Output/PartyModes/TicTacToe/Themes/Genius/Screens/PartyScreenTicTacToeConfig.xml b/Output/PartyModes/Challenge/Themes/Default/Screens/PartyScreenChallengeSongs.xml
similarity index 83%
rename from Output/PartyModes/TicTacToe/Themes/Genius/Screens/PartyScreenTicTacToeConfig.xml
rename to Output/PartyModes/Challenge/Themes/Default/Screens/PartyScreenChallengeSongs.xml
index a38e7694..923ffc68 100644
--- a/Output/PartyModes/TicTacToe/Themes/Genius/Screens/PartyScreenTicTacToeConfig.xml
+++ b/Output/PartyModes/Challenge/Themes/Default/Screens/PartyScreenChallengeSongs.xml
@@ -1,7 +1,7 @@
- PartyScreenTicTacToeConfig
+ PartyScreenChallengeSongs
1
@@ -41,7 +41,7 @@
Outline
TR_SCREENCONFIG_TITLE
-
+
75
105
0
@@ -53,11 +53,11 @@
Center
Outline
- TR_SCREENCONFIG_NUMFIELDS
+ TR_SONGSOURCE
-
+
75
- 165
+ 290
0
27
0
@@ -67,21 +67,7 @@
Center
Outline
- TR_SCREENCONFIG_SONGSOURCE
-
-
- 75
- 285
- 0
- 27
- 0
-
-
- Left
- Center
-
- Outline
- TR_SCREENCONFIG_GAMEMODE
+ TR_GAMEMODE
@@ -159,7 +145,7 @@
-
+
SelectSlideArrowLeft
SelectSlideArrowRight
@@ -201,7 +187,7 @@
Bold
3
-
+
SelectSlideArrowLeft
SelectSlideArrowRight
@@ -238,12 +224,12 @@
27
50
0
- 205.33
+ 600
Outline
Bold
3
-
+
SelectSlideArrowLeft
SelectSlideArrowRight
@@ -252,21 +238,21 @@
SelectSlideArrowRight
500
- 220
+ 160
700
50
0
505
- 225
+ 165
40
40
0
1155
- 225
+ 165
40
40
0
@@ -280,10 +266,10 @@
27
50
0
- 205.33
+ 600
Outline
Bold
- 1
+ 3
@@ -322,12 +308,12 @@
27
50
0
- 205.33
+ 600
Outline
Bold
1
-
+
SelectSlideArrowLeft
SelectSlideArrowRight
@@ -336,21 +322,21 @@
SelectSlideArrowRight
500
- 280
+ 290
700
50
0
505
- 285
+ 295
40
40
0
1155
- 285
+ 295
40
40
0
@@ -367,7 +353,49 @@
205.33
Outline
Bold
- 1
+ 2
+
+
+
+ SelectSlideArrowLeft
+ SelectSlideArrowRight
+ SelectSlide
+ SelectSlideArrowLeft
+ SelectSlideArrowRight
+
+ 500
+ 360
+ 700
+ 50
+ 0
+
+
+ 505
+ 365
+ 40
+ 40
+ 0
+
+
+ 1155
+ 365
+ 40
+ 40
+ 0
+
+
+
+
+
+
+
+ 27
+ 50
+ 0
+ 205.33
+ Outline
+ Bold
+ 5
@@ -376,4 +404,4 @@
-
\ No newline at end of file
+
diff --git a/Output/PartyModes/Challenge/Themes/Genius.xml b/Output/PartyModes/Challenge/Themes/Genius.xml
deleted file mode 100644
index 7a551898..00000000
--- a/Output/PartyModes/Challenge/Themes/Genius.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
- 6
-
- Genius
- Jiiniasu
- 0
- 1
-
-
\ No newline at end of file
diff --git a/Output/PartyModes/Challenge/Themes/Genius/Genius.xml b/Output/PartyModes/Challenge/Themes/Genius/Genius.xml
deleted file mode 100644
index 2db98024..00000000
--- a/Output/PartyModes/Challenge/Themes/Genius/Genius.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
- 4
-
- Genius
- Jiiniasu
- 0
- 1
-
-
-
-
-
\ No newline at end of file
diff --git a/Output/PartyModes/Challenge/Themes/Genius/Screens/PartyScreenChallengeMain.xml b/Output/PartyModes/Challenge/Themes/Genius/Screens/PartyScreenChallengeMain.xml
deleted file mode 100644
index c8752d0f..00000000
--- a/Output/PartyModes/Challenge/Themes/Genius/Screens/PartyScreenChallengeMain.xml
+++ /dev/null
@@ -1,557 +0,0 @@
-
-
-
- PartyScreenChallengeMain
- 1
-
-
-
- Video
-
-
- BG_Default
-
-
-
-
-
-
-
-
- 0
- 40
- 1280
- 45
- 1
-
-
-
- PopupBG
-
-
- 0
- 0
- 1280
- 720
- -1
-
-
-
-
-
-
- 0
- 0
- 100
- 100
- 0
-
-
-
-
-
- 640
- 50
- 0
- 27
- 0
-
-
- Center
- Center
-
- Outline
- TR_SCREENMAIN_TITLE
-
-
- 40
- 135
- 0
- 27
- 0
-
-
- Right
- Center
-
- Outline
- TR_SCREENMAIN_TABLE_POS
-
-
- 50
- 135
- 0
- 27
- 130
-
-
- Left
- Center
-
- Outline
- TR_SCREENMAIN_TABLE_PLAYERNAME
-
-
- 260
- 135
- 0
- 27
- 0
-
-
- Right
- Center
-
- Outline
- TR_SCREENMAIN_TABLE_NUMPLAYED
-
-
- 340
- 135
- 0
- 27
- 0
-
-
- Right
- Center
-
- Outline
- TR_SCREENMAIN_TABLE_WON
-
-
- 490
- 135
- 0
- 27
- 0
-
-
- Right
- Center
-
- Outline
- TR_SCREENMAIN_TABLE_SINGPOINTS
-
-
- 590
- 135
- 0
- 27
- 0
-
-
- Right
- Center
-
- Outline
- TR_SCREENMAIN_TABLE_GAMEPOINTS
-
-
- 0
- 0
- 0
- 27
- 100
-
-
- Center
- Center
-
- Outline
-
-
-
- 640
- 270
- -1.01
- 27
- 380
-
-
- Center
- Center
-
- Outline
- TR_SCREENMAIN_POPUP_REALLYEXIT
-
-
- 660
- 135
- 0
- 27
- 0
-
-
- Right
- Center
-
- Outline
-
-
-
- 0
- 0
- 0
- 27
- 0
-
-
- Center
- Center
-
- Outline
-
-
-
- 0
- 0
- 0
- 27
- 0
-
-
- Center
- Center
-
- Outline
-
-
-
- 640
- 520
- 0
- 44
- 0
-
-
- Center
- Center
-
- Outline
- TR_SCREENMAIN_FINISH
-
-
- 640
- 575
- 0
- 31
- 770
-
-
- Center
- Center
-
- Outline
-
-
-
- 640
- 515
- 0
- 27
- 0
-
-
- Center
- Center
-
- Outline
- TR_SCREENMAIN_NEXT_PLAYER
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Output/PartyModes/Challenge/Themes/Genius/Screens/PartyScreenChallengeNames.xml b/Output/PartyModes/Challenge/Themes/Genius/Screens/PartyScreenChallengeNames.xml
deleted file mode 100644
index 2ce1d175..00000000
--- a/Output/PartyModes/Challenge/Themes/Genius/Screens/PartyScreenChallengeNames.xml
+++ /dev/null
@@ -1,382 +0,0 @@
-
-
-
- PartyScreenChallengeNames
- 1
-
-
-
- Video
-
-
- BG_Default
-
-
-
-
-
-
-
-
- 0
- 40
- 1280
- 45
- 1
-
-
-
-
-
- 640
- 50
- 0
- 27
- 0
-
-
- Center
- Center
-
- Outline
- TR_SCREENNAMES_TITLE
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- SelectSlideArrowLeft
- SelectSlideArrowRight
- SelectSlide
- SelectSlideArrowLeft
- SelectSlideArrowRight
-
- 40
- 100
- 1200
- 50
- 0
-
-
- 45
- 105
- 40
- 40
- 0
-
-
- 1195
- 105
- 40
- 40
- 0
-
-
-
-
-
-
-
- 27
- 50
- 0
- 200
- Outline
- Bold
- 2
-
-
-
- SelectSlideArrowLeft
- SelectSlideArrowRight
- SelectSlidePlayer
- SelectSlideArrowLeft
- SelectSlideArrowRight
-
- 40
- 160
- 1200
- 150
- 0
-
-
- 45
- 210
- 40
- 40
- 0
-
-
- 1195
- 210
- 40
- 40
- 0
-
-
-
-
-
-
-
- 27
- 50
- 5
- 200
- Outline
- Bold
- 8
-
-
-
-
-
-
- 95
- 350
- 1200
- 393
- 0
-
- CoverTile
-
- PlayerSelector
-
- 100
- 100
- 10
- 2
- 10
- 10
-
- -20
- 17
- Outline
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Output/PartyModes/ChallengeMedley.xml b/Output/PartyModes/ChallengeMedley.xml
deleted file mode 100644
index 8accbb0d..00000000
--- a/Output/PartyModes/ChallengeMedley.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
- 2
-
- TR_PARTYMODE_NAME
- brunzel
- TR_PARTYMODE_DESCRIPTION
- ChallengeMedley
- CPartyModeChallengeMedley
- 0
- 2
- TR_PARTYMODE_AUDIENCE
-
-
- CPartyScreenChallengeMedleyMain
- CPartyScreenChallengeMedleyConfig
- CPartyScreenChallengeMedleyNames
-
-
diff --git a/Output/PartyModes/ChallengeMedley/Languages/Asturian.xml b/Output/PartyModes/ChallengeMedley/Languages/Asturian.xml
deleted file mode 100644
index 9be65cc9..00000000
--- a/Output/PartyModes/ChallengeMedley/Languages/Asturian.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
- Inglés
- Mou desafíu Medley
- Pa daquién tea interesáu nos duelos y Medleys.
- Siguiente
- Tornar
- Entamar
- Colar
- Sí
- Non
- Ronda siguiente
- Llista de reproducción
- Estaya
- Toles sones
- Sones
- Mou retu Medley: Configuración
- Númberu de xugadores
- Númberu de microfonos
- Númberu de rondes
- Mou retu Medley: Esbillar xugador
- Mou retu Medley: Vista previa
- Pos
- Nome
- Rondes
- Victories
- Puntos
- Puntuación
- ¿De xuru quies colar?
- Xugador de la ronda siguiente:
- ¡Toles rondes tan cantaes! Ya'l ganador ye...
-
diff --git a/Output/PartyModes/ChallengeMedley/Languages/Czech.xml b/Output/PartyModes/ChallengeMedley/Languages/Czech.xml
deleted file mode 100644
index a6c0376b..00000000
--- a/Output/PartyModes/ChallengeMedley/Languages/Czech.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
- Anglický
- Soutěžní směskový režim
- Hrajte soutěžní režim jen se směskami.
- Pro všechny ty, kdož se zajímají o pěvecké souboje a mnoho kol složených ze směsek.
- Další
- Zpět
- Spustit
- Ukončit
- Ano
- Ne
- Další kolo
- Seznam skladeb
- Skupina
- Všechny písně
- Písně
- Soutěžní směskový režim: Nastavení
- Počet hráčů
- Počet mikrofonů
- Počet kol
- Počet písní na kolo
- Zdroj písně
- Soutěžní směskový režim: Výběr hráče
- Vybrat náhodně
- Soutěžní směskový režim: Přehled
- Místo
- Jméno
- Kola
- Vítězové
- Body za zpívání
- Výsledky
- Opravdu chcete odejít?
- Hráč dalšího kola:
- Všechna kola byla odzpívána! A vítězem se stal...
-
diff --git a/Output/PartyModes/ChallengeMedley/Languages/Dutch.xml b/Output/PartyModes/ChallengeMedley/Languages/Dutch.xml
deleted file mode 100644
index fac1ab63..00000000
--- a/Output/PartyModes/ChallengeMedley/Languages/Dutch.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
- Engels
- Uitdaging Medley
- Speel een paar uitdagingsronden met alleen Medleys.
- Voor iedereen geïnteresseerd in duelleren en Medleys.
- Volgende
- Vorige
- Start
- Afsluiten
- Ja
- Nee
- Volgende Ronde
- Afspeellijst
- Categorie
- Alle liedjes
- Liedjes
- Uitdaging Medley: Configuratie
- Aantal spelers
- Aantal microfoons
- Aantal rondes
- Aantal liedjes per ronde
- Liedjesbron
- Uitdaging Medley: Kies speler
- Selecteer willekeurig
- Uitdaging Medley: Overzicht
- #
- Naam
- Rondes
- Overwinningen
- Zingpunten
- Score
- Wil je echt afsluiten?
- Speler van volgende ronde:
- Alle rondes zijn gezonden! De winnaar is...
-
diff --git a/Output/PartyModes/ChallengeMedley/Languages/English.xml b/Output/PartyModes/ChallengeMedley/Languages/English.xml
deleted file mode 100644
index 51c783a4..00000000
--- a/Output/PartyModes/ChallengeMedley/Languages/English.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
- English
- Challenge Medley Mode
- Play some challenge rounds by using Medleys only.
- For all who are interested in duel fights and Medleys.
- Next
- Back
- Start
- Exit
- Yes
- No
- Next Round
- Playlist
- Category
- All songs
- Songs
- Challenge Medley Mode: Configuration
- Number of players
- Number of mics
- Number of rounds
- Number of songs per round
- Song source
- Challenge Medley Mode: Choose Player
- Select random
- Challenge Medley Mode: Overview
- Pos
- Name
- Rounds
- Wins
- Sing Points
- Score
- Do you really want to exit?
- Player of next round:
- All rounds were sung! And the winner is...
-
diff --git a/Output/PartyModes/ChallengeMedley/Languages/French.xml b/Output/PartyModes/ChallengeMedley/Languages/French.xml
deleted file mode 100644
index 1337996e..00000000
--- a/Output/PartyModes/ChallengeMedley/Languages/French.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
- Français
- Mode Challenge Medley
- Jouer des tours en mode Challenge seulement en utilisant des Medleys.
- Pour tous ceux qui sont intéressé par des combats de micro et les medleys.
- Suivant
- Retour
- Démarrer
- Quitter
- Oui
- Non
- Tour suivant
- Playlist
- Catégorie
- Toutes les chansons
- Chansons
- Mode Challenge Medley: Configuration
- Nombre de joueurs
- Nombre de micros
- Nombre de tours
- Nombre de chansons par tour
- Source des chansons
- Mode Challenge Medley: Choix des joueurs
- Sélectionner au hasard
- Mode Challenge Medley: Résumé
- Pos
- Nom
- Tours
- Victoires
- Points de chant
- Score
- Voulez-vous vraiment quitter?
- Joueurs du prochain tour:
- Tous les tours on été chantés! Et le vainqueur est...
-
diff --git a/Output/PartyModes/ChallengeMedley/Languages/German.xml b/Output/PartyModes/ChallengeMedley/Languages/German.xml
deleted file mode 100644
index 7c81ebee..00000000
--- a/Output/PartyModes/ChallengeMedley/Languages/German.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
- Deutsch
- Challenge Medley Modus
- Spiele einen Wettkampfmodus nur mit Medleys
- Für alle, die Spaß am Wettkampf und vielen Medleyrunden haben.
- Weiter
- Zurück
- Start
- Exit
- Ja
- Nein
- Nächste Runde
- Playlist
- Kategorie
- Alle Songs
- Songs
- Challenge Medley Modus: Einstellungen
- Anzahl der Spieler
- Anzahl der Mikrofone
- Anzahl der Runden
- Anzahl der Songs pro Runde
- Song-Quelle
- Challenge Medley Modus: Spielerwahl
- Zufällig auswählen
- Challenge Medley Modus: Übersicht
- Pos
- Name
- Runden
- Siege
- Sing-Punkte
- Punkte
- Challenge Medley Modus wirklich beenden?
- Spieler der nächsten Runde:
- Alle Runden wurden gesungen! Und der Gewinner ist...
-
diff --git a/Output/PartyModes/ChallengeMedley/Languages/Hungarian.xml b/Output/PartyModes/ChallengeMedley/Languages/Hungarian.xml
deleted file mode 100644
index 953b8790..00000000
--- a/Output/PartyModes/ChallengeMedley/Languages/Hungarian.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
- Magyar
- Bajnokság Egyveleg Mód
- Azoknak akik egymás ellen szeretnének játszani és csak dalrészleteket énekelni.
- Következő
- Vissza
- Kezdés
- Kilépés
- Igen
- Nem
- Következő Kör
- Dal Lista
- Kategória
- Összes Dal
- Dalok
- Bajnokság Egyveleg Mód: Beállítások
- Játékosok Száma
- Mikrofonok Száma
- Körök Száma
- Dal-forrás
- Bajnokság Egyveleg Mód: Válassz Játékost
- Bajnokság Egyveleg Mód: Áttekintés
- Poz
- Név
- Körök
- Győzelmek
- Énekpontok
- Pontszám
- Biztos hogy ki akarsz lépni?
- Következik:
- Véget ért a verseny, a győztes...
-
diff --git a/Output/PartyModes/ChallengeMedley/Languages/Italian.xml b/Output/PartyModes/ChallengeMedley/Languages/Italian.xml
deleted file mode 100644
index 1c3aad44..00000000
--- a/Output/PartyModes/ChallengeMedley/Languages/Italian.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
- Italiano
- Sfida in Modalità Medley
- Per tutti quelli interessati a scontrarsi con duelli di Medley.
- Prossimo
- Indietro
- Inizia
- Esci
- Si
- No
- Prossimo Turno
- Playlist
- Categoria
- Tutte le canzoni
- Canzoni
- Sfida in Modalità Medley: Configurazione
- Numero di giocatori
- Numero di microfoni
- Numero di Turni
- Sorgente della Canzone
- Sfida in Modalità Medley: Scegli il Giocatore
- Selezione casuale
- Sfida in Modalità Medley: Panoramica
- Pos
- Nome
- Turni
- Vittorie
- Punti Canto
- Punteggio
- Vuoi davvero uscire?
- Giocatore del prossimo turno:
- Tutti i turni di canto completati! E il vincitore è...
-
diff --git a/Output/PartyModes/ChallengeMedley/Languages/Portuguese.xml b/Output/PartyModes/ChallengeMedley/Languages/Portuguese.xml
deleted file mode 100644
index 31a17564..00000000
--- a/Output/PartyModes/ChallengeMedley/Languages/Portuguese.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
- Inglês
- Modo Desafio Miscelânea
- Jogar algumas rondas desafio utilizando apenas Miscelâneas
- Para os interessados em duelos e miscelâneas
- Seguinte
- Voltar
- Iniciar
- Sair
- Sim
- Não
- Ronda Seguinte
- Lista de Reprodução
- Categoria
- Todas as Músicas
- Músicas
- Modo Desafio de Miscelâneas: Configuração
- Número de Jogadores
- Número de microfones
- Número de rondas
- Número de músicas por ronda
- Origem da Música
- Modo Desafio de Miscelâneas: Escolher Jogador
- Escolha Aleatória
- Modo Desafio de Miscelâneas: Resumo
- Posição
- Nome
- Rondas
- Vitórias
- Pontos de Canto
- Pontuação
- Deseja mesmo sair?
- Jogador da próxima ronda:
- Todas as rondas cantadas! E o vencedor é...
-
diff --git a/Output/PartyModes/ChallengeMedley/Languages/Spanish.xml b/Output/PartyModes/ChallengeMedley/Languages/Spanish.xml
deleted file mode 100644
index aa15b634..00000000
--- a/Output/PartyModes/ChallengeMedley/Languages/Spanish.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
- Español
- Modo Reto Popurrí
- Jugar unas cuantas rondas de sólo Popurrí.
- Para quienes estén interesados en dos cosas: duelos y Popurrí
- Siguiente
- Volver
- Comenzar
- Salir
- Sí
- No
- Siguiente Ronda
- Lista de reproducción
- Categoría
- Todas las canciones
- Canciones
- Modo Reto Popurrí: Configuración
- Número de jugadores
- Número de micrófonos
- Número de rondas
- Número de canciones por ronda
- Origen de las Canciones
- Modo Reto Popurrí: Elegir Jugador
- Seleccionar aleatoriamente
- Modo Reto Popurrí: Resumen
- Posición
- Nombre
- Rondas
- Victorias
- Puntos de Canto
- Puntuación
- ¿De verdad quiere salir?
- Jugador de la siguiente ronda:
- ¡Todas las rondas fueron cantadas! Y el ganador es...
-
diff --git a/Output/PartyModes/ChallengeMedley/Languages/Swedish.xml b/Output/PartyModes/ChallengeMedley/Languages/Swedish.xml
deleted file mode 100644
index c447ee66..00000000
--- a/Output/PartyModes/ChallengeMedley/Languages/Swedish.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
- Svenska
- Medleyutmanarläge
- Spela några utmanaromgångar med endast medleys.
- För alla som är intresserade av dueller och medleys.
- Nästa
- Tillbaka
- Starta
- Avsluta
- Ja
- Nej
- Nästa omgång
- Spellista
- Kategori
- Alla låtar
- Låtar
- Medleyutmanarläge: Konfiguration
- Antal spelare
- Antal mikrofoner
- Antal omgångar
- Antal låtar per omgång
- Låtkälla
- Medleyutmanarläge: Välj Spelare
- Välj slumpmässiga
- Medleyutmanarläge: Översikt
- Pos
- Namn
- Omgångar
- Vunna
- Sångpoäng
- Poäng
- Vill du verkligen avsluta?
- Spelare i nästa omgång:
- Alla omgångar sjungna! Och vinnaren är...
-
diff --git a/Output/PartyModes/ChallengeMedley/Languages/Turkish.xml b/Output/PartyModes/ChallengeMedley/Languages/Turkish.xml
deleted file mode 100644
index f28907f3..00000000
--- a/Output/PartyModes/ChallengeMedley/Languages/Turkish.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
- Türkçe
- Potpuri Yarış Modu
- Düel yarışmaları ve Potpuri ile ilgilenen herkes için.
- Sonraki
- Önceki
- Başla
- Çık
- Evet
- Hayır
- Sonraki Tur
- Çalma Listesi
- Kategori
- Tüm Şarkılar
- Şarkılar
- Potpuri Yarış Modu: Yapılandırma
- Oyuncu sayısı
- Mikrofon sayısı
- Tur sayısı
- Şarkı Kaynağı
- Potpuri Yarışma Modu: Oyuncu Seçimi
- Potpuri Yarışma Modu: Genel Bakış
- Pos
- İsim
- Tur
- Kazanma
- Şarkı Söyleme Puanı
- Skor
- Gerçekten çıkmak istiyor musunuz?
- Sonraki tur oyuncusu:
- Tüm turlar tamamlandı! Kazanan...
-
diff --git a/Output/PartyModes/ChallengeMedley/Themes/Default.xml b/Output/PartyModes/ChallengeMedley/Themes/Default.xml
deleted file mode 100644
index 10e1c461..00000000
--- a/Output/PartyModes/ChallengeMedley/Themes/Default.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
- 6
-
- Default
- brunzel
- 0
- 1
-
-
\ No newline at end of file
diff --git a/Output/PartyModes/ChallengeMedley/Themes/Default/Default.xml b/Output/PartyModes/ChallengeMedley/Themes/Default/Default.xml
deleted file mode 100644
index f4299579..00000000
--- a/Output/PartyModes/ChallengeMedley/Themes/Default/Default.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
- 4
-
- Default
- brunzel
- 0
- 1
-
-
-
-
-
-
-
-
diff --git a/Output/PartyModes/ChallengeMedley/Themes/Default/Screens/PartyScreenChallengeMedleyConfig.xml b/Output/PartyModes/ChallengeMedley/Themes/Default/Screens/PartyScreenChallengeMedleyConfig.xml
deleted file mode 100644
index 021cff22..00000000
--- a/Output/PartyModes/ChallengeMedley/Themes/Default/Screens/PartyScreenChallengeMedleyConfig.xml
+++ /dev/null
@@ -1,491 +0,0 @@
-
-
-
- PartyScreenChallengeMedleyConfig
- 2
-
-
-
- Video
-
-
- BG_Default
-
-
-
-
-
- Menu
-
-
- 40
- 40
- 1200
- 50
- 0
-
-
-
-
-
- 640
- 48
- 0
- 27
- 0
-
-
- Center
- Center
-
- Outline
- TR_SCREENCONFIG_TITLE
-
-
- 75
- 105
- 0
- 27
- 0
-
-
- Left
- Center
-
- Outline
- TR_SCREENCONFIG_NUMPLAYERS
-
-
- 75
- 165
- 0
- 27
- 0
-
-
- Left
- Center
-
- Outline
- TR_SCREENCONFIG_NUMMICS
-
-
- 75
- 225
- 0
- 27
- 0
-
-
- Left
- Center
-
- Outline
- TR_SCREENCONFIG_NUMROUNDS
-
-
- 75
- 285
- 0
- 27
- 0
-
-
- Left
- Center
-
- Outline
- TR_SCREENCONFIG_NUMSONGS
-
-
- 75
- 345
- 0
- 27
- 0
-
-
- Left
- Center
-
- Outline
- TR_SCREENCONFIG_SONGSOURCE
-
-
-
-
-
-
-
-
-
-
-
- SelectSlideArrowLeft
- SelectSlideArrowRight
- SelectSlide
- SelectSlideArrowLeft
- SelectSlideArrowRight
-
- 500
- 100
- 700
- 50
- 0
-
-
- 505
- 105
- 40
- 40
- 0
-
-
- 1170
- 105
- 40
- 40
- 0
-
-
-
-
-
-
-
- 27
- 50
- 0
- 205.33
- Outline
- Bold
- 9
-
-
-
- SelectSlideArrowLeft
- SelectSlideArrowRight
- SelectSlide
- SelectSlideArrowLeft
- SelectSlideArrowRight
-
- 500
- 160
- 700
- 50
- 0
-
-
- 505
- 165
- 40
- 40
- 0
-
-
- 1170
- 165
- 40
- 40
- 0
-
-
-
-
-
-
-
- 27
- 50
- 0
- 205.33
- Outline
- Bold
- 2
-
-
-
- SelectSlideArrowLeft
- SelectSlideArrowRight
- SelectSlide
- SelectSlideArrowLeft
- SelectSlideArrowRight
-
- 500
- 220
- 700
- 50
- 0
-
-
- 505
- 225
- 40
- 40
- 0
-
-
- 1170
- 225
- 40
- 40
- 0
-
-
-
-
-
-
-
- 27
- 50
- 0
- 205.33
- Outline
- Bold
- 10
-
-
-
- SelectSlideArrowLeft
- SelectSlideArrowRight
- SelectSlide
- SelectSlideArrowLeft
- SelectSlideArrowRight
-
- 500
- 280
- 700
- 50
- 0
-
-
- 505
- 285
- 40
- 40
- 0
-
-
- 1170
- 285
- 40
- 40
- 0
-
-
-
-
-
-
-
- 27
- 50
- 0
- 205.33
- Outline
- Bold
- 10
-
-
-
- SelectSlideArrowLeft
- SelectSlideArrowRight
- SelectSlide
- SelectSlideArrowLeft
- SelectSlideArrowRight
-
- 500
- 340
- 700
- 50
- 0
-
-
- 505
- 345
- 40
- 40
- 0
-
-
- 1170
- 345
- 40
- 40
- 0
-
-
-
-
-
-
-
- 27
- 50
- 0
- 205.33
- Outline
- Bold
- 3
-
-
-
- SelectSlideArrowLeft
- SelectSlideArrowRight
- SelectSlide
- SelectSlideArrowLeft
- SelectSlideArrowRight
-
- 500
- 400
- 700
- 50
- 0
-
-
- 505
- 405
- 40
- 40
- 0
-
-
- 1170
- 405
- 40
- 40
- 0
-
-
-
-
-
-
-
- 27
- 50
- 0
- 700
- Outline
- Bold
- 1
-
-
-
- SelectSlideArrowLeft
- SelectSlideArrowRight
- SelectSlide
- SelectSlideArrowLeft
- SelectSlideArrowRight
-
- 500
- 400
- 700
- 50
- 0
-
-
- 505
- 405
- 40
- 40
- 0
-
-
- 1170
- 405
- 40
- 40
- 0
-
-
-
-
-
-
-
- 27
- 50
- 0
- 700
- Outline
- Bold
- 1
-
-
-
-
-
-
-
-
-
diff --git a/Output/PartyModes/ChallengeMedley/Themes/Default/Screens/PartyScreenChallengeMedleyMain.xml b/Output/PartyModes/ChallengeMedley/Themes/Default/Screens/PartyScreenChallengeMedleyMain.xml
deleted file mode 100644
index c1279d0d..00000000
--- a/Output/PartyModes/ChallengeMedley/Themes/Default/Screens/PartyScreenChallengeMedleyMain.xml
+++ /dev/null
@@ -1,557 +0,0 @@
-
-
-
- PartyScreenChallengeMedleyMain
- 1
-
-
-
- Video
-
-
- BG_Default
-
-
-
-
-
- Menu
-
-
- 40
- 40
- 1200
- 50
- 0
-
-
-
- PopupBG
-
-
- 0
- 0
- 1280
- 720
- -1
-
-
-
-
-
-
- 0
- 0
- 100
- 100
- 0
-
-
-
-
-
- 640
- 48
- 0
- 27
- 0
-
-
- Center
- Center
-
- Outline
- TR_SCREENMAIN_TITLE
-
-
- 40
- 102
- 0
- 27
- 0
-
-
- Right
- Center
-
- Outline
- TR_SCREENMAIN_TABLE_POS
-
-
- 50
- 102
- 0
- 27
- 130
-
-
- Left
- Center
-
- Outline
- TR_SCREENMAIN_TABLE_PLAYERNAME
-
-
- 260
- 102
- 0
- 27
- 0
-
-
- Right
- Center
-
- Outline
- TR_SCREENMAIN_TABLE_NUMPLAYED
-
-
- 340
- 102
- 0
- 27
- 0
-
-
- Right
- Center
-
- Outline
- TR_SCREENMAIN_TABLE_WON
-
-
- 490
- 102
- 0
- 27
- 0
-
-
- Right
- Center
-
- Outline
- TR_SCREENMAIN_TABLE_SINGPOINTS
-
-
- 590
- 102
- 0
- 27
- 0
-
-
- Right
- Center
-
- Outline
- TR_SCREENMAIN_TABLE_GAMEPOINTS
-
-
- 0
- 0
- 0
- 27
- 100
-
-
- Center
- Center
-
- Outline
-
-
-
- 640
- 265
- -1.01
- 27
- 380
-
-
- Center
- Center
-
- Outline
- TR_SCREENMAIN_POPUP_REALLYEXIT
-
-
- 660
- 102
- 0
- 27
- 0
-
-
- Right
- Center
-
- Outline
-
-
-
- 0
- 0
- 0
- 27
- 0
-
-
- Center
- Center
-
- Outline
-
-
-
- 0
- 0
- 0
- 27
- 0
-
-
- Center
- Center
-
- Outline
-
-
-
- 640
- 520
- 0
- 44
- 0
-
-
- Center
- Center
-
- Outline
- TR_SCREENMAIN_FINISH
-
-
- 640
- 575
- 0
- 31
- 770
-
-
- Center
- Center
-
- Outline
-
-
-
- 640
- 515
- 0
- 27
- 0
-
-
- Center
- Center
-
- Outline
- TR_SCREENMAIN_NEXT_PLAYER
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Output/PartyModes/ChallengeMedley/Themes/Default/Screens/PartyScreenChallengeMedleyNames.xml b/Output/PartyModes/ChallengeMedley/Themes/Default/Screens/PartyScreenChallengeMedleyNames.xml
deleted file mode 100644
index 2292a076..00000000
--- a/Output/PartyModes/ChallengeMedley/Themes/Default/Screens/PartyScreenChallengeMedleyNames.xml
+++ /dev/null
@@ -1,387 +0,0 @@
-
-
-
- PartyScreenChallengeMedleyNames
- 1
-
-
-
- Video
-
-
- BG_Default
-
-
-
-
-
- Menu
-
-
- 40
- 40
- 1200
- 50
- 0
-
-
-
-
-
- 640
- 48
- 0
- 27
- 0
-
-
- Center
- Center
-
- Outline
- TR_SCREENNAMES_TITLE
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- SelectSlideArrowLeft
- SelectSlideArrowRight
- SelectSlide
- SelectSlideArrowLeft
- SelectSlideArrowRight
-
- 40
- 100
- 1200
- 50
- 0
-
-
- 45
- 105
- 40
- 40
- 0
-
-
- 1170
- 105
- 40
- 40
- 0
-
-
-
-
-
-
-
- 27
- 50
- 0
- 205.33
- Outline
- Bold
- 2
-
-
-
- SelectSlideArrowLeft
- SelectSlideArrowRight
- SelectSlidePlayer
- SelectSlideArrowLeft
- SelectSlideArrowRight
-
- 40
- 160
- 1200
- 150
- 0
-
-
- 45
- 210
- 40
- 40
- 0
-
-
- 1170
- 210
- 40
- 40
- 0
-
-
-
-
-
-
-
- 27
- 50
- 5
- 205.33
- Outline
- Bold
- 8
-
-
-
-
-
-
- 42
- 327
- 1200
- 393
- 0
-
- CoverTile
-
- 1
- 1
- 1
- 0.2
-
- PlayerSelector
-
- 100
- 100
- 10
- 2
- 20.71
- 30
-
- 2
- 17
- Outline
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Output/PartyModes/ChallengeMedley/Themes/Genius.xml b/Output/PartyModes/ChallengeMedley/Themes/Genius.xml
deleted file mode 100644
index 7a551898..00000000
--- a/Output/PartyModes/ChallengeMedley/Themes/Genius.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
- 6
-
- Genius
- Jiiniasu
- 0
- 1
-
-
\ No newline at end of file
diff --git a/Output/PartyModes/ChallengeMedley/Themes/Genius/Genius.xml b/Output/PartyModes/ChallengeMedley/Themes/Genius/Genius.xml
deleted file mode 100644
index 2db98024..00000000
--- a/Output/PartyModes/ChallengeMedley/Themes/Genius/Genius.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
- 4
-
- Genius
- Jiiniasu
- 0
- 1
-
-
-
-
-
\ No newline at end of file
diff --git a/Output/PartyModes/ChallengeMedley/Themes/Genius/Screens/PartyScreenChallengeMedleyConfig.xml b/Output/PartyModes/ChallengeMedley/Themes/Genius/Screens/PartyScreenChallengeMedleyConfig.xml
deleted file mode 100644
index 1ddc136c..00000000
--- a/Output/PartyModes/ChallengeMedley/Themes/Genius/Screens/PartyScreenChallengeMedleyConfig.xml
+++ /dev/null
@@ -1,491 +0,0 @@
-
-
-
- PartyScreenChallengeMedleyConfig
- 2
-
-
-
- Video
-
-
- BG_Default
-
-
-
-
-
-
-
-
- 0
- 40
- 1280
- 45
- 1
-
-
-
-
-
- 640
- 50
- 0
- 27
- 0
-
-
- Center
- Center
-
- Outline
- TR_SCREENCONFIG_TITLE
-
-
- 75
- 105
- 0
- 27
- 0
-
-
- Left
- Center
-
- Outline
- TR_SCREENCONFIG_NUMPLAYERS
-
-
- 75
- 165
- 0
- 27
- 0
-
-
- Left
- Center
-
- Outline
- TR_SCREENCONFIG_NUMMICS
-
-
- 75
- 225
- 0
- 27
- 0
-
-
- Left
- Center
-
- Outline
- TR_SCREENCONFIG_NUMROUNDS
-
-
- 75
- 285
- 0
- 27
- 0
-
-
- Left
- Center
-
- Outline
- TR_SCREENCONFIG_NUMSONGS
-
-
- 75
- 345
- 0
- 27
- 0
-
-
- Left
- Center
-
- Outline
- TR_SCREENCONFIG_SONGSOURCE
-
-
-
-
-
-
-
-
-
-
-
- SelectSlideArrowLeft
- SelectSlideArrowRight
- SelectSlide
- SelectSlideArrowLeft
- SelectSlideArrowRight
-
- 500
- 100
- 700
- 50
- 0
-
-
- 505
- 105
- 40
- 40
- 0
-
-
- 1155
- 105
- 40
- 40
- 0
-
-
-
-
-
-
-
- 27
- 50
- 0
- 200
- Outline
- Bold
- 9
-
-
-
- SelectSlideArrowLeft
- SelectSlideArrowRight
- SelectSlide
- SelectSlideArrowLeft
- SelectSlideArrowRight
-
- 500
- 160
- 700
- 50
- 0
-
-
- 505
- 165
- 40
- 40
- 0
-
-
- 1155
- 165
- 40
- 40
- 0
-
-
-
-
-
-
-
- 27
- 50
- 0
- 200
- Outline
- Bold
- 2
-
-
-
- SelectSlideArrowLeft
- SelectSlideArrowRight
- SelectSlide
- SelectSlideArrowLeft
- SelectSlideArrowRight
-
- 500
- 220
- 700
- 50
- 0
-
-
- 505
- 225
- 40
- 40
- 0
-
-
- 1155
- 225
- 40
- 40
- 0
-
-
-
-
-
-
-
- 27
- 50
- 0
- 200
- Outline
- Bold
- 10
-
-
-
- SelectSlideArrowLeft
- SelectSlideArrowRight
- SelectSlide
- SelectSlideArrowLeft
- SelectSlideArrowRight
-
- 500
- 280
- 700
- 50
- 0
-
-
- 505
- 285
- 40
- 40
- 0
-
-
- 1155
- 285
- 40
- 40
- 0
-
-
-
-
-
-
-
- 27
- 50
- 0
- 200
- Outline
- Bold
- 10
-
-
-
- SelectSlideArrowLeft
- SelectSlideArrowRight
- SelectSlide
- SelectSlideArrowLeft
- SelectSlideArrowRight
-
- 500
- 340
- 700
- 50
- 0
-
-
- 505
- 345
- 40
- 40
- 0
-
-
- 1155
- 345
- 40
- 40
- 0
-
-
-
-
-
-
-
- 27
- 50
- 0
- 200
- Outline
- Bold
- 3
-
-
-
- SelectSlideArrowLeft
- SelectSlideArrowRight
- SelectSlide
- SelectSlideArrowLeft
- SelectSlideArrowRight
-
- 500
- 400
- 700
- 50
- 0
-
-
- 505
- 405
- 40
- 40
- 0
-
-
- 1155
- 405
- 40
- 40
- 0
-
-
-
-
-
-
-
- 27
- 50
- 0
- 700
- Outline
- Bold
- 1
-
-
-
- SelectSlideArrowLeft
- SelectSlideArrowRight
- SelectSlide
- SelectSlideArrowLeft
- SelectSlideArrowRight
-
- 500
- 400
- 700
- 50
- 0
-
-
- 505
- 405
- 40
- 40
- 0
-
-
- 1155
- 405
- 40
- 40
- 0
-
-
-
-
-
-
-
- 27
- 50
- 0
- 700
- Outline
- Bold
- 1
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Output/PartyModes/ChallengeMedley/Themes/Genius/Screens/PartyScreenChallengeMedleyMain.xml b/Output/PartyModes/ChallengeMedley/Themes/Genius/Screens/PartyScreenChallengeMedleyMain.xml
deleted file mode 100644
index 56371aea..00000000
--- a/Output/PartyModes/ChallengeMedley/Themes/Genius/Screens/PartyScreenChallengeMedleyMain.xml
+++ /dev/null
@@ -1,557 +0,0 @@
-
-
-
- PartyScreenChallengeMedleyMain
- 1
-
-
-
- Video
-
-
- BG_Default
-
-
-
-
-
-
-
-
- 0
- 40
- 1280
- 45
- 1
-
-
-
- PopupBG
-
-
- 0
- 0
- 1280
- 720
- -1
-
-
-
-
-
-
- 0
- 0
- 100
- 100
- 0
-
-
-
-
-
- 640
- 50
- 0
- 27
- 0
-
-
- Center
- Center
-
- Outline
- TR_SCREENMAIN_TITLE
-
-
- 40
- 135
- 0
- 27
- 0
-
-
- Right
- Center
-
- Outline
- TR_SCREENMAIN_TABLE_POS
-
-
- 50
- 135
- 0
- 27
- 130
-
-
- Left
- Center
-
- Outline
- TR_SCREENMAIN_TABLE_PLAYERNAME
-
-
- 260
- 135
- 0
- 27
- 0
-
-
- Right
- Center
-
- Outline
- TR_SCREENMAIN_TABLE_NUMPLAYED
-
-
- 340
- 135
- 0
- 27
- 0
-
-
- Right
- Center
-
- Outline
- TR_SCREENMAIN_TABLE_WON
-
-
- 490
- 135
- 0
- 27
- 0
-
-
- Right
- Center
-
- Outline
- TR_SCREENMAIN_TABLE_SINGPOINTS
-
-
- 590
- 135
- 0
- 27
- 0
-
-
- Right
- Center
-
- Outline
- TR_SCREENMAIN_TABLE_GAMEPOINTS
-
-
- 0
- 0
- 0
- 27
- 100
-
-
- Center
- Center
-
- Outline
-
-
-
- 640
- 270
- -1.01
- 27
- 380
-
-
- Center
- Center
-
- Outline
- TR_SCREENMAIN_POPUP_REALLYEXIT
-
-
- 660
- 135
- 0
- 27
- 0
-
-
- Right
- Center
-
- Outline
-
-
-
- 0
- 0
- 0
- 27
- 0
-
-
- Center
- Center
-
- Outline
-
-
-
- 0
- 0
- 0
- 27
- 0
-
-
- Center
- Center
-
- Outline
-
-
-
- 640
- 520
- 0
- 44
- 0
-
-
- Center
- Center
-
- Outline
- TR_SCREENMAIN_FINISH
-
-
- 640
- 575
- 0
- 31
- 770
-
-
- Center
- Center
-
- Outline
-
-
-
- 640
- 515
- 0
- 27
- 0
-
-
- Center
- Center
-
- Outline
- TR_SCREENMAIN_NEXT_PLAYER
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Output/PartyModes/ChallengeMedley/Themes/Genius/Screens/PartyScreenChallengeMedleyNames.xml b/Output/PartyModes/ChallengeMedley/Themes/Genius/Screens/PartyScreenChallengeMedleyNames.xml
deleted file mode 100644
index 0b00f1de..00000000
--- a/Output/PartyModes/ChallengeMedley/Themes/Genius/Screens/PartyScreenChallengeMedleyNames.xml
+++ /dev/null
@@ -1,382 +0,0 @@
-
-
-
- PartyScreenChallengMedleyNames
- 1
-
-
-
- Video
-
-
- BG_Default
-
-
-
-
-
-
-
-
- 0
- 40
- 1280
- 45
- 1
-
-
-
-
-
- 640
- 50
- 0
- 27
- 0
-
-
- Center
- Center
-
- Outline
- TR_SCREENNAMES_TITLE
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- SelectSlideArrowLeft
- SelectSlideArrowRight
- SelectSlide
- SelectSlideArrowLeft
- SelectSlideArrowRight
-
- 40
- 100
- 1200
- 50
- 0
-
-
- 45
- 105
- 40
- 40
- 0
-
-
- 1195
- 105
- 40
- 40
- 0
-
-
-
-
-
-
-
- 27
- 50
- 0
- 200
- Outline
- Bold
- 2
-
-
-
- SelectSlideArrowLeft
- SelectSlideArrowRight
- SelectSlidePlayer
- SelectSlideArrowLeft
- SelectSlideArrowRight
-
- 40
- 160
- 1200
- 150
- 0
-
-
- 45
- 210
- 40
- 40
- 0
-
-
- 1195
- 210
- 40
- 40
- 0
-
-
-
-
-
-
-
- 27
- 50
- 5
- 200
- Outline
- Bold
- 8
-
-
-
-
-
-
- 95
- 350
- 1200
- 393
- 0
-
- CoverTile
-
- PlayerSelector
-
- 100
- 100
- 10
- 2
- 10
- 10
-
- -20
- 17
- Outline
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Output/PartyModes/TicTacToe.xml b/Output/PartyModes/TicTacToe.xml
index 2f25da4e..000e7386 100644
--- a/Output/PartyModes/TicTacToe.xml
+++ b/Output/PartyModes/TicTacToe.xml
@@ -15,5 +15,6 @@
CPartyScreenTicTacToeMain
CPartyScreenTicTacToeConfig
CPartyScreenTicTacToeNames
+ CPartyScreenTicTacToeSongs
diff --git a/Output/PartyModes/TicTacToe/Languages/English.xml b/Output/PartyModes/TicTacToe/Languages/English.xml
index 9dda8f3c..24397b29 100644
--- a/Output/PartyModes/TicTacToe/Languages/English.xml
+++ b/Output/PartyModes/TicTacToe/Languages/English.xml
@@ -13,15 +13,11 @@
Start
Songs
Team
- Playlist
- Category
- All songs
Tic-Tac-Toe: Configuration
Number of players in team 1
Number of players in team 2
Number of fields
- Song-Source
- Game-Mode
+ Refill jokers every round
Tic-Tac-Toe: Choose Player
Team 1
Team 2
diff --git a/Output/PartyModes/TicTacToe/Themes/Default/Default.xml b/Output/PartyModes/TicTacToe/Themes/Default/Default.xml
index f4299579..52a8859e 100644
--- a/Output/PartyModes/TicTacToe/Themes/Default/Default.xml
+++ b/Output/PartyModes/TicTacToe/Themes/Default/Default.xml
@@ -3,14 +3,11 @@
4
Default
- brunzel
+ Jiiniasu
0
1
-
-
-
-
-
-
+
+
+
diff --git a/Output/PartyModes/TicTacToe/Themes/Default/Screens/PartyScreenTicTacToeConfig.xml b/Output/PartyModes/TicTacToe/Themes/Default/Screens/PartyScreenTicTacToeConfig.xml
index bf570d8d..a5ad9fa9 100644
--- a/Output/PartyModes/TicTacToe/Themes/Default/Screens/PartyScreenTicTacToeConfig.xml
+++ b/Output/PartyModes/TicTacToe/Themes/Default/Screens/PartyScreenTicTacToeConfig.xml
@@ -2,7 +2,7 @@
PartyScreenTicTacToeConfig
- 1
+ 2
@@ -14,26 +14,26 @@
-
- Menu
-
+
+
+
- 40
+ 0
40
- 1200
- 50
- 0
+ 1280
+ 45
+ 1
-
+
640
- 48
+ 50
0
27
0
-
+
Center
Center
@@ -41,13 +41,13 @@
Outline
TR_SCREENCONFIG_TITLE
-
+
75
105
0
27
0
-
+
Left
Center
@@ -55,33 +55,19 @@
Outline
TR_SCREENCONFIG_NUMFIELDS
-
+
75
165
0
27
0
-
+
Left
Center
Outline
- TR_SCREENCONFIG_SONGSOURCE
-
-
- 75
- 285
- 0
- 27
- 0
-
-
- Left
- Center
-
- Outline
- TR_SCREENCONFIG_GAMEMODE
+ TR_SCREENCONFIG_REFILLJOKERS
@@ -99,7 +85,7 @@
75
- 10
+ 12
0
27
142
@@ -134,7 +120,7 @@
75
- 10
+ 12
0
27
142
@@ -181,7 +167,7 @@
0
- 1170
+ 1155
105
40
40
@@ -191,7 +177,7 @@
-
+
27
50
@@ -201,7 +187,7 @@
Bold
3
-
+
SelectSlideArrowLeft
SelectSlideArrowRight
@@ -223,7 +209,7 @@
0
- 1170
+ 1155
165
40
40
@@ -233,7 +219,7 @@
-
+
27
50
@@ -241,133 +227,7 @@
205.33
Outline
Bold
- 3
-
-
-
- SelectSlideArrowLeft
- SelectSlideArrowRight
- SelectSlide
- SelectSlideArrowLeft
- SelectSlideArrowRight
-
- 500
- 220
- 700
- 50
- 0
-
-
- 505
- 225
- 40
- 40
- 0
-
-
- 1170
- 225
- 40
- 40
- 0
-
-
-
-
-
-
-
- 27
- 50
- 0
- 205.33
- Outline
- Bold
- 1
-
-
-
- SelectSlideArrowLeft
- SelectSlideArrowRight
- SelectSlide
- SelectSlideArrowLeft
- SelectSlideArrowRight
-
- 500
- 220
- 700
- 50
- 0
-
-
- 505
- 225
- 40
- 40
- 0
-
-
- 1170
- 225
- 40
- 40
- 0
-
-
-
-
-
-
-
- 27
- 50
- 0
- 205.33
- Outline
- Bold
- 1
-
-
-
- SelectSlideArrowLeft
- SelectSlideArrowRight
- SelectSlide
- SelectSlideArrowLeft
- SelectSlideArrowRight
-
- 500
- 280
- 700
- 50
- 0
-
-
- 505
- 285
- 40
- 40
- 0
-
-
- 1170
- 285
- 40
- 40
- 0
-
-
-
-
-
-
-
- 27
- 50
- 0
- 205.33
- Outline
- Bold
- 1
+ 2
@@ -376,4 +236,4 @@
-
\ No newline at end of file
+
diff --git a/Output/PartyModes/TicTacToe/Themes/Default/Screens/PartyScreenTicTacToeMain.xml b/Output/PartyModes/TicTacToe/Themes/Default/Screens/PartyScreenTicTacToeMain.xml
index f4dd7cad..471a2294 100644
--- a/Output/PartyModes/TicTacToe/Themes/Default/Screens/PartyScreenTicTacToeMain.xml
+++ b/Output/PartyModes/TicTacToe/Themes/Default/Screens/PartyScreenTicTacToeMain.xml
@@ -14,15 +14,15 @@
-
- Menu
-
+
+
+
- 40
+ 0
40
- 1200
- 50
- 0
+ 1280
+ 45
+ 1
@@ -60,13 +60,13 @@
-
+
640
- 48
+ 50
0
27
0
-
+
Center
Center
@@ -76,11 +76,11 @@
640
- 265
+ 270
-2.01
27
380
-
+
Center
Center
@@ -94,7 +94,7 @@
0
35
0
-
+
Center
Center
@@ -108,7 +108,7 @@
0
35
0
-
+
Center
Center
@@ -188,7 +188,7 @@
75
- 10
+ 12
0
27
142
@@ -223,7 +223,7 @@
75
- 10
+ 12
0
27
142
@@ -258,7 +258,7 @@
75
- 10
+ 12
0
27
142
@@ -293,7 +293,7 @@
75
- 10
+ 12
0
27
142
@@ -328,7 +328,7 @@
75
- 10
+ 12
0
27
142
@@ -363,7 +363,7 @@
75
- 10
+ 12
0
27
142
@@ -494,4 +494,4 @@
-
\ No newline at end of file
+
diff --git a/Output/PartyModes/TicTacToe/Themes/Default/Screens/PartyScreenTicTacToeNames.xml b/Output/PartyModes/TicTacToe/Themes/Default/Screens/PartyScreenTicTacToeNames.xml
index 583ea0bc..1e27c09c 100644
--- a/Output/PartyModes/TicTacToe/Themes/Default/Screens/PartyScreenTicTacToeNames.xml
+++ b/Output/PartyModes/TicTacToe/Themes/Default/Screens/PartyScreenTicTacToeNames.xml
@@ -14,26 +14,26 @@
-
- Menu
-
+
+
+
- 40
+ 0
40
- 1200
- 50
- 0
+ 1280
+ 45
+ 1
-
+
640
- 48
+ 50
0
27
0
-
+
Center
Center
@@ -57,7 +57,7 @@
75
- 10
+ 12
0
27
142
@@ -92,7 +92,7 @@
75
- 10
+ 12
0
27
142
@@ -127,7 +127,7 @@
75
- 10
+ 12
0
27
142
@@ -206,7 +206,7 @@
Plus
Plus
- 1210
+ 1180
210
40
40
@@ -233,7 +233,7 @@
Minus
Minus
- 1160
+ 1130
210
40
40
@@ -270,7 +270,7 @@
40
100
- 1100
+ 1055
50
0
@@ -292,12 +292,12 @@
-
+
27
50
0
- 205.33
+ 200
Outline
Bold
2
@@ -312,7 +312,7 @@
40
160
- 1100
+ 1055
150
0
@@ -334,12 +334,12 @@
-
+
27
50
5
- 205.33
+ 200
Outline
Bold
8
@@ -349,29 +349,24 @@
- 42
- 327
+ 95
+ 350
1200
393
0
CoverTile
-
- 1
- 1
- 1
- 0.2
-
+
PlayerSelector
100
100
10
2
- 20.71
- 30
+ 10
+ 10
- 2
+ -20
17
Outline
diff --git a/Output/PartyModes/Challenge/Themes/Genius/Screens/PartyScreenChallengeConfig.xml b/Output/PartyModes/TicTacToe/Themes/Default/Screens/PartyScreenTicTacToeSongs.xml
similarity index 81%
rename from Output/PartyModes/Challenge/Themes/Genius/Screens/PartyScreenChallengeConfig.xml
rename to Output/PartyModes/TicTacToe/Themes/Default/Screens/PartyScreenTicTacToeSongs.xml
index 97b70135..e79a08d7 100644
--- a/Output/PartyModes/Challenge/Themes/Genius/Screens/PartyScreenChallengeConfig.xml
+++ b/Output/PartyModes/TicTacToe/Themes/Default/Screens/PartyScreenTicTacToeSongs.xml
@@ -1,8 +1,8 @@
- PartyScreenChallengeConfig
- 3
+ PartyScreenTicTacToeSongs
+ 1
@@ -41,7 +41,7 @@
Outline
TR_SCREENCONFIG_TITLE
-
+
75
105
0
@@ -53,11 +53,11 @@
Center
Outline
- TR_SCREENCONFIG_NUMPLAYERS
+ TR_SONGSOURCE
-
+
75
- 165
+ 290
0
27
0
@@ -67,49 +67,7 @@
Center
Outline
- TR_SCREENCONFIG_NUMMICS
-
-
- 75
- 225
- 0
- 27
- 0
-
-
- Left
- Center
-
- Outline
- TR_SCREENCONFIG_NUMROUNDS
-
-
- 75
- 285
- 0
- 27
- 0
-
-
- Left
- Center
-
- Outline
- TR_SCREENCONFIG_NUMJOKERS
-
-
- 75
- 345
- 0
- 27
- 0
-
-
- Left
- Center
-
- Outline
- TR_SCREENCONFIG_REFILLJOKERS
+ TR_GAMEMODE
@@ -187,7 +145,7 @@
-
+
SelectSlideArrowLeft
SelectSlideArrowRight
@@ -224,12 +182,12 @@
27
50
0
- 200
+ 205.33
Outline
Bold
- 9
+ 3
-
+
SelectSlideArrowLeft
SelectSlideArrowRight
@@ -266,12 +224,54 @@
27
50
0
- 200
+ 600
Outline
Bold
- 2
+ 3
-
+
+
+ SelectSlideArrowLeft
+ SelectSlideArrowRight
+ SelectSlide
+ SelectSlideArrowLeft
+ SelectSlideArrowRight
+
+ 500
+ 160
+ 700
+ 50
+ 0
+
+
+ 505
+ 165
+ 40
+ 40
+ 0
+
+
+ 1155
+ 165
+ 40
+ 40
+ 0
+
+
+
+
+
+
+
+ 27
+ 50
+ 0
+ 600
+ Outline
+ Bold
+ 3
+
+
SelectSlideArrowLeft
SelectSlideArrowRight
@@ -308,12 +308,12 @@
27
50
0
- 200
+ 600
Outline
Bold
- 10
+ 1
-
+
SelectSlideArrowLeft
SelectSlideArrowRight
@@ -322,21 +322,21 @@
SelectSlideArrowRight
500
- 280
+ 290
700
50
0
505
- 285
+ 295
40
40
0
1155
- 285
+ 295
40
40
0
@@ -350,53 +350,53 @@
27
50
0
- 200
- Outline
- Bold
- 10
-
-
-
- SelectSlideArrowLeft
- SelectSlideArrowRight
- SelectSlide
- SelectSlideArrowLeft
- SelectSlideArrowRight
-
- 500
- 340
- 700
- 50
- 0
-
-
- 505
- 345
- 40
- 40
- 0
-
-
- 1155
- 345
- 40
- 40
- 0
-
-
-
-
-
-
-
- 27
- 50
- 0
- 200
+ 205.33
Outline
Bold
2
+
+
+ SelectSlideArrowLeft
+ SelectSlideArrowRight
+ SelectSlide
+ SelectSlideArrowLeft
+ SelectSlideArrowRight
+
+ 500
+ 360
+ 700
+ 50
+ 0
+
+
+ 505
+ 365
+ 40
+ 40
+ 0
+
+
+ 1155
+ 365
+ 40
+ 40
+ 0
+
+
+
+
+
+
+
+ 27
+ 50
+ 0
+ 205.33
+ Outline
+ Bold
+ 5
+
@@ -404,4 +404,4 @@
-
\ No newline at end of file
+
diff --git a/Output/PartyModes/TicTacToe/Themes/Genius.xml b/Output/PartyModes/TicTacToe/Themes/Genius.xml
deleted file mode 100644
index 7a551898..00000000
--- a/Output/PartyModes/TicTacToe/Themes/Genius.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
- 6
-
- Genius
- Jiiniasu
- 0
- 1
-
-
\ No newline at end of file
diff --git a/Output/PartyModes/TicTacToe/Themes/Genius/Genius.xml b/Output/PartyModes/TicTacToe/Themes/Genius/Genius.xml
deleted file mode 100644
index e556735e..00000000
--- a/Output/PartyModes/TicTacToe/Themes/Genius/Genius.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
- 4
-
- Genius
- Jiiniasu
- 0
- 1
-
-
-
-
-
diff --git a/Output/PartyModes/TicTacToe/Themes/Genius/Screens/PartyScreenTicTacToeMain.xml b/Output/PartyModes/TicTacToe/Themes/Genius/Screens/PartyScreenTicTacToeMain.xml
deleted file mode 100644
index 471a2294..00000000
--- a/Output/PartyModes/TicTacToe/Themes/Genius/Screens/PartyScreenTicTacToeMain.xml
+++ /dev/null
@@ -1,497 +0,0 @@
-
-
-
- PartyScreenTicTacToeMain
- 1
-
-
-
- Video
-
-
- BG_Default
-
-
-
-
-
-
-
-
- 0
- 40
- 1280
- 45
- 1
-
-
-
- PopupBG
-
-
- 0
- 0
- 1280
- 720
- -2
-
-
-
- PopupBG
-
-
- 10
- 200
- 100
- 100
- -1
-
-
-
- PopupBG
-
-
- 1170
- 200
- 100
- 100
- -1
-
-
-
-
-
- 640
- 50
- 0
- 27
- 0
-
-
- Center
- Center
-
- Outline
- TR_SCREENMAIN_TITLE
-
-
- 640
- 270
- -2.01
- 27
- 380
-
-
- Center
- Center
-
- Outline
- TR_SCREENMAIN_POPUP_REALLYEXIT
-
-
- 640
- 90
- 0
- 35
- 0
-
-
- Center
- Center
-
- Outline
-
-
-
- 640
- 90
- 0
- 35
- 0
-
-
- Center
- Center
-
- Outline
-
-
-
- 160
- 150
- 0
- 35
- 0
-
-
- Center
- Center
-
- Outline
- TR_SCREENMAIN_NEXT_PLAYER
-
-
- 1120
- 150
- 0
- 35
- 0
-
-
- Center
- Center
-
- Outline
- TR_SCREENMAIN_NEXT_PLAYER
-
-
- 120
- 230
- 0
- 35
- 0
-
-
- Left
- Center
-
- Outline
-
-
-
- 1160
- 230
- 0
- 40
- 0
-
-
- Right
- Center
-
- Outline
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Output/PartyModes/TicTacToe/Themes/Genius/Screens/PartyScreenTicTacToeNames.xml b/Output/PartyModes/TicTacToe/Themes/Genius/Screens/PartyScreenTicTacToeNames.xml
deleted file mode 100644
index 1e27c09c..00000000
--- a/Output/PartyModes/TicTacToe/Themes/Genius/Screens/PartyScreenTicTacToeNames.xml
+++ /dev/null
@@ -1,382 +0,0 @@
-
-
-
- PartyScreenTicTacToeNames
- 1
-
-
-
- Video
-
-
- BG_Default
-
-
-
-
-
-
-
-
- 0
- 40
- 1280
- 45
- 1
-
-
-
-
-
- 640
- 50
- 0
- 27
- 0
-
-
- Center
- Center
-
- Outline
- TR_SCREENNAMES_TITLE
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- SelectSlideArrowLeft
- SelectSlideArrowRight
- SelectSlide
- SelectSlideArrowLeft
- SelectSlideArrowRight
-
- 40
- 100
- 1055
- 50
- 0
-
-
- 45
- 105
- 40
- 40
- 0
-
-
- 1050
- 105
- 40
- 40
- 0
-
-
-
-
-
-
-
- 27
- 50
- 0
- 200
- Outline
- Bold
- 2
-
-
-
- SelectSlideArrowLeft
- SelectSlideArrowRight
- SelectSlidePlayer
- SelectSlideArrowLeft
- SelectSlideArrowRight
-
- 40
- 160
- 1055
- 150
- 0
-
-
- 45
- 210
- 40
- 40
- 0
-
-
- 1050
- 210
- 40
- 40
- 0
-
-
-
-
-
-
-
- 27
- 50
- 5
- 200
- Outline
- Bold
- 8
-
-
-
-
-
-
- 95
- 350
- 1200
- 393
- 0
-
- CoverTile
-
- PlayerSelector
-
- 100
- 100
- 10
- 2
- 10
- 10
-
- -20
- 17
- Outline
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Output/Readme.txt b/Output/Readme.txt
index 2cdffb4b..13d36037 100644
--- a/Output/Readme.txt
+++ b/Output/Readme.txt
@@ -105,9 +105,6 @@ or from the console:
load playlist from this path.
Example:
Vocaluxe.exe -PlaylistFolder D:\MyPlaylists
-
--OldTheme yes : Try to load theme that is created for vocaluxe 0.2 or older (or some pre-release version of 0.3). Enter theme editor and save your theme to convert every file to new syntax. This will be removed in a future version.
-
Complete example:
Vocaluxe.exe -ConfigFile MyConfig.xml -ScoreFile C:\Vocaluxe\Highscores\MyHighscoreDB.sqlite -SongFolder D:\MySongCollection -PlaylistFolder D:\MyPlaylists
diff --git a/PartyModes/PartyModeChallenge/CPartyModeChallenge.cs b/PartyModes/PartyModeChallenge/CPartyModeChallenge.cs
index e336d4de..b37636e3 100644
--- a/PartyModes/PartyModeChallenge/CPartyModeChallenge.cs
+++ b/PartyModes/PartyModeChallenge/CPartyModeChallenge.cs
@@ -17,8 +17,11 @@
using System;
using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Linq;
using System.Runtime.InteropServices;
using VocaluxeLib.Menu;
+using VocaluxeLib.Songs;
[assembly: ComVisible(false)]
@@ -103,9 +106,11 @@ namespace VocaluxeLib.PartyModes.Challenge
private enum EStage
{
Config,
+ Songs,
Names,
Main,
- Singing
+ Singing,
+ MedleySinging
}
public struct SData
@@ -118,6 +123,14 @@ namespace VocaluxeLib.PartyModes.Challenge
public int[] Jokers;
public List ProfileIDs;
+ public ESongSource SongSource;
+ public ESongSorting Sorting;
+ public int CategoryIndex;
+ public int PlaylistID;
+
+ public EGameMode GameMode;
+ public int NumMedleySongs;
+
public CChallengeRounds Rounds;
public List ResultTable;
public int[,] Results;
@@ -125,6 +138,7 @@ namespace VocaluxeLib.PartyModes.Challenge
public int CurrentRoundNr;
public int[] CatSongIndices;
+ public List Songs;
}
private struct SStats
@@ -149,8 +163,27 @@ namespace VocaluxeLib.PartyModes.Challenge
_ScreenSongOptions.Sorting.SearchString = String.Empty;
_ScreenSongOptions.Sorting.SearchActive = false;
_ScreenSongOptions.Sorting.DuetOptions = EDuetOptions.NoDuets;
+ _ScreenSongOptions.Sorting.FilterPlaylistID = -1;
- GameData = new SData {NumPlayer = 4, NumPlayerAtOnce = 2, NumRounds = 12, NumJokers = 5, RefillJokers = true, CurrentRoundNr = 1, ProfileIDs = new List(), CatSongIndices = null, Results = null};
+ GameData = new SData
+ {
+ NumPlayer = 4,
+ NumPlayerAtOnce = 2,
+ NumRounds = 12,
+ NumJokers = 5,
+ RefillJokers = true,
+ CurrentRoundNr = 1,
+ ProfileIDs = new List(),
+ Sorting = CBase.Config.GetSongSorting(),
+ SongSource = ESongSource.TR_SONGSOURCE_ALLSONGS,
+ PlaylistID = 0,
+ CategoryIndex = 0,
+ GameMode = EGameMode.TR_GAMEMODE_NORMAL,
+ NumMedleySongs = 5,
+ CatSongIndices = null,
+ Results = null,
+ Songs = new List()
+ };
}
public override void SetDefaults()
@@ -193,12 +226,16 @@ namespace VocaluxeLib.PartyModes.Challenge
{
case EStage.Config:
return _Screens["CPartyScreenChallengeConfig"];
+ case EStage.Songs:
+ return _Screens["CPartyScreenChallengeSongs"];
case EStage.Names:
return _Screens["CPartyScreenChallengeNames"];
case EStage.Main:
return _Screens["CPartyScreenChallengeMain"];
case EStage.Singing:
return CBase.Graphics.GetScreen(EScreen.Song);
+ case EStage.MedleySinging:
+ return CBase.Graphics.GetScreen(EScreen.Sing);
default:
throw new ArgumentException("Invalid stage: " + _Stage);
}
@@ -214,6 +251,9 @@ namespace VocaluxeLib.PartyModes.Challenge
switch (_Stage)
{
case EStage.Config:
+ _Stage = EStage.Songs;
+ break;
+ case EStage.Songs:
_Stage = EStage.Names;
break;
case EStage.Names:
@@ -225,9 +265,13 @@ namespace VocaluxeLib.PartyModes.Challenge
GameData.Jokers = null;
break;
case EStage.Main:
- _Stage = EStage.Singing;
+ if (GameData.GameMode == EGameMode.TR_GAMEMODE_MEDLEY)
+ _Stage = EStage.MedleySinging;
+ else
+ _Stage = EStage.Singing;
_StartNextRound();
break;
+ case EStage.MedleySinging:
case EStage.Singing:
_Stage = EStage.Main;
_UpdateScores();
@@ -245,9 +289,12 @@ namespace VocaluxeLib.PartyModes.Challenge
case EStage.Config:
CBase.Graphics.FadeTo(EScreen.Party);
return;
- case EStage.Names:
+ case EStage.Songs:
_Stage = EStage.Config;
break;
+ case EStage.Names:
+ _Stage = EStage.Songs;
+ break;
case EStage.Main:
_Stage = EStage.Names;
break;
@@ -264,8 +311,38 @@ namespace VocaluxeLib.PartyModes.Challenge
public override SScreenSongOptions GetScreenSongOptions()
{
- _ScreenSongOptions.Sorting.SongSorting = CBase.Config.GetSongSorting();
- _ScreenSongOptions.Sorting.Tabs = CBase.Config.GetTabs();
+ switch(GameData.SongSource)
+ {
+ case ESongSource.TR_SONGSOURCE_ALLSONGS:
+ _ScreenSongOptions.Sorting.SongSorting = CBase.Config.GetSongSorting();
+ _ScreenSongOptions.Sorting.Tabs = CBase.Config.GetTabs();
+ _ScreenSongOptions.Sorting.FilterPlaylistID = -1;
+
+ _ScreenSongOptions.Selection.CategoryChangeAllowed = true;
+ break;
+
+ case ESongSource.TR_SONGSOURCE_CATEGORY:
+ _ScreenSongOptions.Sorting.SongSorting = GameData.Sorting;
+ _ScreenSongOptions.Sorting.Tabs = EOffOn.TR_CONFIG_ON;
+ _ScreenSongOptions.Sorting.FilterPlaylistID = -1;
+
+ if (GameData.CatSongIndices == null)
+ _CreateCatSongIndices();
+
+ _ScreenSongOptions.Selection.SongIndex = GameData.CatSongIndices[GameData.CategoryIndex];
+
+ _ScreenSongOptions.Selection.CategoryChangeAllowed = false;
+ break;
+
+ case ESongSource.TR_SONGSOURCE_PLAYLIST:
+ _ScreenSongOptions.Sorting.SongSorting = CBase.Config.GetSongSorting();
+ _ScreenSongOptions.Sorting.Tabs = EOffOn.TR_CONFIG_OFF;
+ _ScreenSongOptions.Sorting.FilterPlaylistID = GameData.PlaylistID;
+
+ _ScreenSongOptions.Selection.CategoryChangeAllowed = false;
+ break;
+ }
+
_ScreenSongOptions.Sorting.IgnoreArticles = CBase.Config.GetIgnoreArticles();
return _ScreenSongOptions;
@@ -342,30 +419,7 @@ namespace VocaluxeLib.PartyModes.Challenge
public override void SongSelected(int songID)
{
- const EGameMode gm = EGameMode.TR_GAMEMODE_NORMAL;
-
- CBase.Game.Reset();
- CBase.Game.ClearSongs();
- CBase.Game.AddSong(songID, gm);
- CBase.Game.SetNumPlayer(GameData.NumPlayerAtOnce);
-
- SPlayer[] players = CBase.Game.GetPlayers();
- if (players == null)
- return;
-
- if (players.Length < GameData.NumPlayerAtOnce)
- return;
-
- CRound c = GameData.Rounds[GameData.CurrentRoundNr - 1];
-
- for (int i = 0; i < GameData.NumPlayerAtOnce; i++)
- {
- //try to fill with the right data
- if (c != null)
- players[i].ProfileID = GameData.ProfileIDs[c.Players[i]];
- else
- players[i].ProfileID = -1;
- }
+ _PrepareGame(new int[] { songID });
CBase.Graphics.FadeTo(EScreen.Sing);
}
@@ -379,11 +433,63 @@ namespace VocaluxeLib.PartyModes.Challenge
private void _StartNextRound()
{
- _ScreenSongOptions.Selection.RandomOnly = _ScreenSongOptions.Sorting.Tabs != EOffOn.TR_CONFIG_ON;
- _ScreenSongOptions.Selection.CategoryChangeAllowed = _ScreenSongOptions.Sorting.Tabs == EOffOn.TR_CONFIG_ON;
- _SetNumJokers();
- _SetTeamNames();
- GameData.CatSongIndices = null;
+ if (GameData.GameMode == EGameMode.TR_GAMEMODE_MEDLEY)
+ {
+ int[] songIDs = new int[GameData.NumMedleySongs];
+ for (int i = 0; i < GameData.NumMedleySongs; i++)
+ {
+ if (GameData.Songs.Count == 0)
+ _UpdateSongList();
+
+ songIDs[i] = GameData.Songs[0];
+ GameData.Songs.RemoveAt(0);
+ }
+
+ _PrepareGame(songIDs);
+ }
+ else
+ {
+ _ScreenSongOptions.Selection.RandomOnly = _ScreenSongOptions.Sorting.Tabs != EOffOn.TR_CONFIG_ON;
+ _ScreenSongOptions.Selection.CategoryChangeAllowed = false;
+ _SetNumJokers();
+ _SetTeamNames();
+ GameData.CatSongIndices = null;
+ }
+ }
+
+ private bool _PrepareGame(int[] songIDs)
+ {
+ CBase.Game.Reset();
+ CBase.Game.ClearSongs();
+
+ #region PlayerNames
+ CBase.Game.SetNumPlayer(GameData.NumPlayerAtOnce);
+ SPlayer[] players = CBase.Game.GetPlayers();
+ if (players == null)
+ return false;
+
+ if (players.Length < GameData.NumPlayerAtOnce)
+ return false;
+
+ CRound c = GameData.Rounds[GameData.CurrentRoundNr - 1];
+
+ for (int i = 0; i < GameData.NumPlayerAtOnce; i++)
+ {
+ //try to fill with the right data
+ if (c != null)
+ players[i].ProfileID = GameData.ProfileIDs[c.Players[i]];
+ else
+ players[i].ProfileID = -1;
+ }
+ #endregion PlayerNames
+
+ #region SongQueue
+ for (int i = 0; i < songIDs.Length; i++)
+ CBase.Game.AddSong(songIDs[i], GameData.GameMode);
+ #endregion SongQueue
+
+ return true;
+
}
private void _SetNumJokers()
@@ -428,6 +534,38 @@ namespace VocaluxeLib.PartyModes.Challenge
_ScreenSongOptions.Selection.TeamNames[i] = CBase.Profiles.GetPlayerName(GameData.ProfileIDs[c.Players[i]]);
}
+ private void _UpdateSongList()
+ {
+ if (GameData.Songs.Count > 0)
+ return;
+
+ switch (GameData.SongSource)
+ {
+ case ESongSource.TR_SONGSOURCE_PLAYLIST:
+ for (int i = 0; i < CBase.Playlist.GetSongCount(GameData.PlaylistID); i++)
+ {
+ int id = CBase.Playlist.GetSong(GameData.PlaylistID, i).SongID;
+ if (CBase.Songs.GetSongByID(id).AvailableGameModes.Contains(EGameMode.TR_GAMEMODE_MEDLEY))
+ GameData.Songs.Add(id);
+ }
+ break;
+
+ case ESongSource.TR_SONGSOURCE_ALLSONGS:
+ ReadOnlyCollection avSongs = CBase.Songs.GetSongs();
+ GameData.Songs.AddRange(avSongs.Where(song => song.AvailableGameModes.Contains(EGameMode.TR_GAMEMODE_MEDLEY)).Select(song => song.ID));
+ break;
+
+ case ESongSource.TR_SONGSOURCE_CATEGORY:
+ CBase.Songs.SetCategory(GameData.CategoryIndex);
+ avSongs = CBase.Songs.GetVisibleSongs();
+ GameData.Songs.AddRange(avSongs.Where(song => song.AvailableGameModes.Contains(EGameMode.TR_GAMEMODE_MEDLEY)).Select(song => song.ID));
+
+ CBase.Songs.SetCategory(-1);
+ break;
+ }
+ GameData.Songs.Shuffle();
+ }
+
private void _UpdateScores()
{
if (GameData.ResultTable.Count == 0)
diff --git a/PartyModes/PartyModeChallenge/CPartyScreenChallengeSongs.cs b/PartyModes/PartyModeChallenge/CPartyScreenChallengeSongs.cs
new file mode 100644
index 00000000..f7261c4e
--- /dev/null
+++ b/PartyModes/PartyModeChallenge/CPartyScreenChallengeSongs.cs
@@ -0,0 +1,70 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using VocaluxeLib.Menu;
+
+namespace VocaluxeLib.PartyModes.Challenge
+{
+ class CPartyScreenChallengeSongs : CMenuPartySongSelection
+ {
+ protected override int _ScreenVersion
+ {
+ get { return 1; }
+ }
+
+ private new CPartyModeChallenge _PartyMode;
+
+ public override void Init()
+ {
+ base.Init();
+ _PartyMode = (CPartyModeChallenge)base._PartyMode;
+ }
+
+ public override void OnShow()
+ {
+ Source = _PartyMode.GameData.SongSource;
+ Sorting = _PartyMode.GameData.Sorting;
+ Category = _PartyMode.GameData.CategoryIndex;
+ Playlist = _PartyMode.GameData.PlaylistID;
+ SongMode = _PartyMode.GameData.GameMode;
+ NumMedleySongs = _PartyMode.GameData.NumMedleySongs;
+
+ base.OnShow();
+ }
+
+ public override void Back()
+ {
+ _SaveConfig();
+ _PartyMode.Back();
+ }
+
+ public override void Next()
+ {
+ _SaveConfig();
+ _PartyMode.Next();
+ }
+
+ public override bool UpdateGame()
+ {
+ return true;
+ }
+
+ protected override void _SetAllowedOptions()
+ {
+ base._SetAllowedOptions();
+
+ AllowedSongModes = new EGameMode[] { EGameMode.TR_GAMEMODE_NORMAL, EGameMode.TR_GAMEMODE_SHORTSONG, EGameMode.TR_GAMEMODE_MEDLEY };
+ }
+
+ private void _SaveConfig()
+ {
+ _PartyMode.GameData.SongSource = Source;
+ _PartyMode.GameData.Sorting = Sorting;
+ _PartyMode.GameData.CategoryIndex = Category;
+ _PartyMode.GameData.PlaylistID = Playlist;
+ _PartyMode.GameData.GameMode = SongMode;
+ _PartyMode.GameData.NumMedleySongs = NumMedleySongs;
+ }
+ }
+}
diff --git a/PartyModes/PartyModeChallenge/PartyModeChallenge.csproj b/PartyModes/PartyModeChallenge/PartyModeChallenge.csproj
index 1d0a49a9..c2ecf5b3 100644
--- a/PartyModes/PartyModeChallenge/PartyModeChallenge.csproj
+++ b/PartyModes/PartyModeChallenge/PartyModeChallenge.csproj
@@ -71,6 +71,7 @@
+
@@ -109,4 +110,4 @@ rm -f "$(SolutionDir)Output\PartyModes\$(TargetName)\Code\GlobalSuppressions.cs"
-->
-
+
\ No newline at end of file
diff --git a/PartyModes/PartyModeChallengeMedley/CChallengeRounds.cs b/PartyModes/PartyModeChallengeMedley/CChallengeRounds.cs
deleted file mode 100644
index 92e5438f..00000000
--- a/PartyModes/PartyModeChallengeMedley/CChallengeRounds.cs
+++ /dev/null
@@ -1,152 +0,0 @@
-#region license
-// This file is part of Vocaluxe.
-//
-// Vocaluxe is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// Vocaluxe is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with Vocaluxe. If not, see .
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Linq;
-using VocaluxeLib.Utils.Combinatorics;
-
-namespace VocaluxeLib.PartyModes.ChallengeMedley
-{
- public class CChallengeRounds
- {
- private readonly List _Rounds = new List();
-
- public int Count
- {
- get { return _Rounds.Count; }
- }
-
- public CRound this[int index]
- {
- get { return _Rounds[index]; }
- }
-
- public CChallengeRounds(int numRounds, int numPlayer, int playersPerRound)
- {
- if (numRounds < 1 || numPlayer < 1 || playersPerRound < 1)
- throw new ArgumentException("Invalid paramters for the rounds");
-
- if (playersPerRound > numPlayer)
- playersPerRound = numPlayer;
-
- _BuildRounds(numRounds, numPlayer, playersPerRound);
- if (Count > numRounds)
- {
- //Try again and take the better one
- List old = new List(_Rounds);
- _Rounds.Clear();
- _BuildRounds(numRounds, numPlayer, playersPerRound);
- if (Count > old.Count)
- {
- _Rounds.Clear();
- _Rounds.AddRange(old);
- }
- }
- }
-
- ///
- /// Divides players in 2 categories: Those how sung the most and the others
- ///
- /// List matching the playerIndex to the number of songs sung
- private static List _GetPlayersForRound(IList numSung)
- {
- List mustSing = new List();
- int max = numSung.Max();
- for (int i = 0; i < numSung.Count; i++)
- {
- if (numSung[i] < max)
- mustSing.Add(i);
- }
- return mustSing;
- }
-
- private static void _AddCombinations(int numPlayer, int playersPerRound, List combinations)
- {
- List input = new List(numPlayer);
- for (int i = 0; i < numPlayer; i++)
- input.Add(i);
- CCombinations combs = new CCombinations(input, playersPerRound);
- combinations.AddRange(combs.Select(combination => new CRound(combination)));
- combinations.Shuffle();
- }
-
- private static CRound _GetMatchingCombination(List playersInRound, List numSung, List combinations)
- {
- foreach (CRound round in combinations)
- {
- int matching = round.Players.Count(playersInRound.Contains);
- // A valid round contains only players from playersInRound or all players from playersInRound (and some others)
- if (matching == round.Players.Count || matching == playersInRound.Count)
- return round;
- }
- // It may happen, that there are only players that already sung against each other. So create a 2nd best option with the most number of players that should sing in it
- int maxMatching = combinations.Max(c => c.Players.Count(playersInRound.Contains));
- List nextOptions = combinations.Where(c => c.Players.Count(playersInRound.Contains) == maxMatching).ToList();
- // And select the combination that minimizes the sum of the number of songs sung (--> favor rounds with players that sung less than others)
- CRound result = null;
- int minSung = int.MaxValue;
- foreach (CRound round in nextOptions)
- {
- int curNumSung = round.Players.Sum(pl => numSung[pl]);
- if (curNumSung < minSung)
- {
- minSung = curNumSung;
- result = round;
- }
- }
- Debug.Assert(result != null);
- return result;
- }
-
- private void _BuildRounds(int numRounds, int numPlayer, int playersPerRound)
- {
- // What we want is that every player sung the same amount of songs
- // So we keep track how many songs each palyer sung
- List numSung = new List(numPlayer);
- for (int i = 0; i < numPlayer; i++)
- numSung.Add(0);
- List combinations = new List();
- // Posibly add more rounds than requested if the song count per player is unequal
- for (int i = 0; i < numRounds * 10; i++)
- {
- if (combinations.Count == 0)
- _AddCombinations(numPlayer, playersPerRound, combinations);
- List playersInRound = _GetPlayersForRound(numSung);
- CRound curRound = _GetMatchingCombination(playersInRound, numSung, combinations);
- foreach (int player in curRound.Players)
- numSung[player]++;
- _Rounds.Add(curRound);
- combinations.Remove(curRound);
- //Stop if we have enough rounds and all players sung the same amount of songs
- if (_Rounds.Count >= numRounds && numSung.All(ct => ct == numSung[0]))
- break;
- }
- }
- }
-
- public class CRound
- {
- public readonly List Players;
-
- public CRound(List players)
- {
- Players = players.Shuffle();
- }
- }
-}
\ No newline at end of file
diff --git a/PartyModes/PartyModeChallengeMedley/CPartyModeChallengeMedley.cs b/PartyModes/PartyModeChallengeMedley/CPartyModeChallengeMedley.cs
deleted file mode 100644
index 78da5f05..00000000
--- a/PartyModes/PartyModeChallengeMedley/CPartyModeChallengeMedley.cs
+++ /dev/null
@@ -1,562 +0,0 @@
-#region license
-// This file is part of Vocaluxe.
-//
-// Vocaluxe is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// Vocaluxe is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with Vocaluxe. If not, see .
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.Linq;
-using System.Runtime.InteropServices;
-using VocaluxeLib.Game;
-using VocaluxeLib.Menu;
-using VocaluxeLib.Profile;
-using VocaluxeLib.Songs;
-
-[assembly: ComVisible(false)]
-
-namespace VocaluxeLib.PartyModes.ChallengeMedley
-{
- public enum ESongSource
- {
- TR_ALLSONGS,
- TR_CATEGORY,
- TR_PLAYLIST
- }
-
- public class CResultTableRow : IComparable
- {
- public int Position;
- public int PlayerID;
- public int NumPlayed;
- public int NumWon;
- public int NumSingPoints;
- public int NumGamePoints;
-
- public int CompareTo(object obj)
- {
- var row = obj as CResultTableRow;
- if (row != null)
- {
- int res = row.NumGamePoints.CompareTo(NumGamePoints);
- if (res == 0)
- {
- res = row.NumSingPoints.CompareTo(NumSingPoints);
- if (res == 0)
- res = row.NumWon.CompareTo(NumWon);
- }
- return res;
- }
-
- throw new ArgumentException("object is not a ResultTableRow");
- }
- }
-
- public abstract class CPartyScreenChallengeMedley : CMenuParty
- {
- protected new CPartyModeChallengeMedley _PartyMode;
-
- public override void Init()
- {
- base.Init();
- _PartyMode = (CPartyModeChallengeMedley)base._PartyMode;
- }
- }
-
- // ReSharper disable ClassNeverInstantiated.Global
- public sealed class CPartyModeChallengeMedley : CPartyMode
- // ReSharper restore ClassNeverInstantiated.Global
- {
- public override int MinMics
- {
- get { return 1; }
- }
- public override int MaxMics
- {
- get { return CBase.Config.GetMaxNumMics(); }
- }
- public override int MinPlayers
- {
- get { return 1; }
- }
- public override int MaxPlayers
- {
- get { return 12; }
- }
- public override int MinTeams
- {
- get { return 1; }
- }
- public override int MaxTeams
- {
- get { return 1; }
- }
- public override int MinPlayersPerTeam
- {
- get { return MinPlayers; }
- }
- public override int MaxPlayersPerTeam
- {
- get { return MaxPlayers; }
- }
-
- public int MinSongs
- {
- get { return 1; }
- }
-
- public int MaxSongs
- {
- get { return 10; }
- }
-
- private enum EStage
- {
- Config,
- Names,
- Main,
- Singing
- }
-
- public struct SData
- {
- public int NumPlayer;
- public int NumPlayerAtOnce;
- public int NumRounds;
- public List ProfileIDs;
- public int NumSongs;
- public List Songs;
-
- public CChallengeRounds Rounds;
- public List ResultTable;
- public int[,] Results;
-
- public int CurrentRoundNr;
-
- public int[] CatSongIndices;
-
- public ESongSource SongSource;
- public int CategoryIndex;
- public int PlaylistID;
- }
-
- private struct SStats
- {
- public int ProfileID;
- public int SingPoints;
- public int GamePoints;
- public int Won;
- }
-
- public SData GameData;
- private EStage _Stage;
-
- public CPartyModeChallengeMedley(int id) : base(id)
- {
- GameData = new SData {NumPlayer = 4, NumPlayerAtOnce = 2, NumRounds = 12, CurrentRoundNr = 1, ProfileIDs = new List(), NumSongs = 5, Songs = new List(), SongSource = ESongSource.TR_ALLSONGS, CatSongIndices = null, Results = null};
- }
-
- public override void SetDefaults()
- {
- _Stage = EStage.Config;
- GameData.CurrentRoundNr = 1;
- GameData.ResultTable = new List();
- }
-
- public override bool Init()
- {
- if (!base.Init())
- return false;
-
- SetDefaults();
- return true;
- }
-
- public override void UpdateGame()
- {
- /*
- if (CBase.Songs.IsInCategory() || _ScreenSongOptions.Sorting.Tabs == EOffOn.TR_CONFIG_OFF)
- _ScreenSongOptions.Selection.RandomOnly = true;
- else
- _ScreenSongOptions.Selection.RandomOnly = false;*/
- }
-
- private IMenu _GetNextScreen()
- {
- switch (_Stage)
- {
- case EStage.Config:
- return _Screens["CPartyScreenChallengeMedleyConfig"];
- case EStage.Names:
- return _Screens["CPartyScreenChallengeMedleyNames"];
- case EStage.Main:
- return _Screens["CPartyScreenChallengeMedleyMain"];
- case EStage.Singing:
- return CBase.Graphics.GetScreen(EScreen.Sing);
- default:
- throw new ArgumentException("Invalid stage: " + _Stage);
- }
- }
-
- private void _FadeToScreen()
- {
- CBase.Graphics.FadeTo(_GetNextScreen());
- }
-
- public void Next()
- {
- switch (_Stage)
- {
- case EStage.Config:
- _Stage = EStage.Names;
- break;
- case EStage.Names:
- _Stage = EStage.Main;
- CBase.Songs.ResetSongSung();
- GameData.ResultTable = new List();
- GameData.Rounds = new CChallengeRounds(GameData.NumRounds, GameData.NumPlayer, GameData.NumPlayerAtOnce);
- GameData.CurrentRoundNr = 1;
- break;
- case EStage.Main:
- _Stage = EStage.Singing;
- if (!_StartNextRound())
- CBase.Graphics.FadeTo(EScreen.Party);
- break;
- case EStage.Singing:
- _Stage = EStage.Main;
- _UpdateScores();
- break;
- default:
- throw new ArgumentException("Invalid stage: " + _Stage);
- }
- _FadeToScreen();
- }
-
- public void Back()
- {
- switch (_Stage)
- {
- case EStage.Config:
- CBase.Graphics.FadeTo(EScreen.Party);
- return;
- case EStage.Names:
- _Stage = EStage.Config;
- break;
- case EStage.Main:
- _Stage = EStage.Names;
- break;
- default: // Rest is not allowed
- throw new ArgumentException("Invalid stage: " + _Stage);
- }
- _FadeToScreen();
- }
-
- public override IMenu GetStartScreen()
- {
- return _Screens["CPartyScreenChallengeMedleyConfig"];
- }
- public override SScreenSongOptions GetScreenSongOptions()
- {
- throw new ArgumentException("Not required!");
- }
-
- public override void OnSongChange(int songIndex, ref SScreenSongOptions screenSongOptions)
- {
- throw new ArgumentException("Not required!");
- }
-
- public override void OnCategoryChange(int categoryIndex, ref SScreenSongOptions screenSongOptions)
- {
- throw new ArgumentException("Not required!");
- }
-
- public override void SetSearchString(string searchString, bool visible)
- {
- throw new ArgumentException("Not required!");
- }
-
- public override void JokerUsed(int teamNr) { }
-
- public override void SongSelected(int songID) {}
-
- public override void LeavingHighscore()
- {
- GameData.CurrentRoundNr++;
- Next();
- }
-
- private bool _StartNextRound()
- {
- _SetTeamNames();
- GameData.CatSongIndices = null;
-
- return _PrepareGame();
- }
-
- private bool _PrepareGame()
- {
- CBase.Game.Reset();
- CBase.Game.ClearSongs();
-
- #region PlayerNames
- CBase.Game.SetNumPlayer(GameData.NumPlayerAtOnce);
- SPlayer[] players = CBase.Game.GetPlayers();
- if (players == null)
- return false;
-
- if (players.Length < GameData.NumPlayerAtOnce)
- return false;
-
- CRound c = GameData.Rounds[GameData.CurrentRoundNr - 1];
-
- for (int i = 0; i < GameData.NumPlayerAtOnce; i++)
- {
- //try to fill with the right data
- if (c != null)
- players[i].ProfileID = GameData.ProfileIDs[c.Players[i]];
- else
- players[i].ProfileID = -1;
- }
- #endregion PlayerNames
-
- #region SongQueue
- for (int i = 0; i < GameData.NumSongs; i++)
- {
- if (GameData.Songs.Count == 0)
- _UpdateSongList();
- CBase.Game.AddSong(GameData.Songs[0], EGameMode.TR_GAMEMODE_MEDLEY);
- GameData.Songs.RemoveAt(0);
- }
- return true;
- #endregion SongQueue
- }
-
- private void _UpdateSongList()
- {
- if (GameData.Songs.Count > 0)
- return;
-
- switch (GameData.SongSource)
- {
- case ESongSource.TR_PLAYLIST:
- for (int i = 0; i < CBase.Playlist.GetSongCount(GameData.PlaylistID); i++)
- {
- int id = CBase.Playlist.GetSong(GameData.PlaylistID, i).SongID;
- if (CBase.Songs.GetSongByID(id).AvailableGameModes.Contains(EGameMode.TR_GAMEMODE_MEDLEY))
- GameData.Songs.Add(id);
- }
- break;
-
- case ESongSource.TR_ALLSONGS:
- ReadOnlyCollection avSongs = CBase.Songs.GetSongs();
- GameData.Songs.AddRange(avSongs.Where(song => song.AvailableGameModes.Contains(EGameMode.TR_GAMEMODE_MEDLEY)).Select(song => song.ID));
- break;
-
- case ESongSource.TR_CATEGORY:
- CBase.Songs.SetCategory(GameData.CategoryIndex);
- avSongs = CBase.Songs.GetVisibleSongs();
- GameData.Songs.AddRange(avSongs.Where(song => song.AvailableGameModes.Contains(EGameMode.TR_GAMEMODE_MEDLEY)).Select(song => song.ID));
-
- CBase.Songs.SetCategory(-1);
- break;
- }
- GameData.Songs.Shuffle();
- }
-
-
- private void _SetTeamNames()
- {
- CProfile[] profiles = CBase.Profiles.GetProfiles();
-
- if (profiles == null)
- {
- _ScreenSongOptions.Selection.TeamNames = new string[] {"foo", "bar"};
- return;
- }
-
- if (GameData.NumPlayerAtOnce < 1 || GameData.ProfileIDs.Count < GameData.NumPlayerAtOnce || profiles.Length < GameData.NumPlayerAtOnce)
- {
- _ScreenSongOptions.Selection.TeamNames = new string[] {"foo", "bar"};
- return;
- }
-
- _ScreenSongOptions.Selection.TeamNames = new string[GameData.NumPlayerAtOnce];
- CRound c = GameData.Rounds[GameData.CurrentRoundNr - 1];
-
- for (int i = 0; i < GameData.NumPlayerAtOnce; i++)
- {
- if (c != null)
- {
- if (GameData.ProfileIDs[c.Players[i]] < profiles.Length)
- _ScreenSongOptions.Selection.TeamNames[i] = profiles[GameData.ProfileIDs[c.Players[i]]].PlayerName;
- else
- _ScreenSongOptions.Selection.TeamNames[i] = "foobar";
- }
- else
- _ScreenSongOptions.Selection.TeamNames[i] = "foobar";
- }
- }
-
- private void _UpdateScores()
- {
- if (GameData.ResultTable.Count == 0)
- {
- for (int i = 0; i < GameData.NumPlayer; i++)
- {
- CResultTableRow row = new CResultTableRow {PlayerID = GameData.ProfileIDs[i], NumPlayed = 0, NumWon = 0, NumSingPoints = 0, NumGamePoints = 0};
- GameData.ResultTable.Add(row);
- }
-
- GameData.Results = new int[GameData.NumRounds,GameData.NumPlayerAtOnce];
- for (int i = 0; i < GameData.NumRounds; i++)
- {
- for (int j = 0; j < GameData.NumPlayerAtOnce; j++)
- GameData.Results[i, j] = 0;
- }
- }
-
- CPoints gamePoints = CBase.Game.GetPoints();
- if (gamePoints == null || gamePoints.NumPlayer < GameData.NumPlayerAtOnce)
- return;
-
- SPlayer[] results = gamePoints.GetPlayer(0, GameData.NumPlayerAtOnce);
- if (results == null)
- return;
-
- if (results.Length < GameData.NumPlayerAtOnce)
- return;
-
- if (gamePoints.NumRounds == 0)
- return;
-
- for (int i = 1; i < gamePoints.NumRounds; i++)
- {
- SPlayer[] temp = gamePoints.GetPlayer(i, GameData.NumPlayerAtOnce);
- for (int p = 0; p < GameData.NumPlayerAtOnce; p++)
- results[p].Points += temp[p].Points;
- }
-
- for (int j = 0; j < GameData.NumPlayerAtOnce; j++)
- {
- results[j].Points = results[j].Points / gamePoints.NumRounds;
- GameData.Results[GameData.CurrentRoundNr - 2, j] = (int)Math.Round(results[j].Points);
- }
-
- List points = _GetPointsForPlayer(results);
-
- for (int i = 0; i < GameData.NumPlayerAtOnce; i++)
- {
- int index = -1;
- for (int j = 0; j < GameData.ResultTable.Count; j++)
- {
- if (points[i].ProfileID == GameData.ResultTable[j].PlayerID)
- {
- index = j;
- break;
- }
- }
-
- if (index != -1)
- {
- CResultTableRow row = GameData.ResultTable[index];
-
- row.NumPlayed++;
- row.NumWon += points[i].Won;
- row.NumSingPoints += points[i].SingPoints;
- row.NumGamePoints += points[i].GamePoints;
-
- GameData.ResultTable[index] = row;
- }
- }
-
- GameData.ResultTable.Sort();
-
- //Update position-number
- int pos = 1;
- int lastPoints = 0;
- int lastSingPoints = 0;
- foreach (CResultTableRow resultRow in GameData.ResultTable)
- {
- if (lastPoints > resultRow.NumGamePoints || lastSingPoints > resultRow.NumSingPoints)
- pos++;
- resultRow.Position = pos;
- lastPoints = resultRow.NumGamePoints;
- lastSingPoints = resultRow.NumSingPoints;
- }
- }
-
- private List _GetPointsForPlayer(SPlayer[] results)
- {
- var result = new List();
- for (int i = 0; i < GameData.NumPlayerAtOnce; i++)
- {
- var stat = new SStats {ProfileID = results[i].ProfileID, SingPoints = (int)Math.Round(results[i].Points), Won = 0, GamePoints = 0};
- result.Add(stat);
- }
-
- result.Sort((s1, s2) => s1.SingPoints.CompareTo(s2.SingPoints));
-
- int current = result[result.Count - 1].SingPoints;
- int points = result.Count;
- bool wonset = false;
-
- for (int i = result.Count - 1; i >= 0; i--)
- {
- SStats res = result[i];
-
- if (i < result.Count - 1)
- {
- if (current > res.SingPoints)
- {
- res.GamePoints = i * 2;
- wonset = true;
- points = res.GamePoints;
- }
- else
- {
- if (!wonset)
- res.Won = 1;
- res.GamePoints = points;
- }
- }
- else
- {
- res.GamePoints = i * 2;
- res.Won = 1;
- }
-
- current = res.SingPoints;
-
- result[i] = res;
- }
-
-
- return result;
- }
-
- private void _CreateCatSongIndices()
- {
- if (GameData.CatSongIndices == null && CBase.Songs.GetNumCategories() > 0 && _ScreenSongOptions.Sorting.Tabs == EOffOn.TR_CONFIG_ON)
- {
- GameData.CatSongIndices = new int[CBase.Songs.GetNumCategories()];
- for (int i = 0; i < GameData.CatSongIndices.Length; i++)
- GameData.CatSongIndices[i] = -1;
- }
-
- if (CBase.Songs.GetNumCategories() == 0 || _ScreenSongOptions.Sorting.Tabs == EOffOn.TR_CONFIG_OFF)
- GameData.CatSongIndices = null;
- }
- }
-}
\ No newline at end of file
diff --git a/PartyModes/PartyModeChallengeMedley/CPartyScreenChallengeMedleyConfig.cs b/PartyModes/PartyModeChallengeMedley/CPartyScreenChallengeMedleyConfig.cs
deleted file mode 100644
index 88c5e688..00000000
--- a/PartyModes/PartyModeChallengeMedley/CPartyScreenChallengeMedleyConfig.cs
+++ /dev/null
@@ -1,290 +0,0 @@
-#region license
-// This file is part of Vocaluxe.
-//
-// Vocaluxe is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// Vocaluxe is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with Vocaluxe. If not, see .
-#endregion
-
-using System;
-using System.Linq;
-using System.Collections.Generic;
-using System.Windows.Forms;
-using VocaluxeLib.Songs;
-
-namespace VocaluxeLib.PartyModes.ChallengeMedley
-{
- // ReSharper disable UnusedMember.Global
- public class CPartyScreenChallengeMedleyConfig : CPartyScreenChallengeMedley
- // ReSharper restore UnusedMember.Global
- {
- // Version number for theme files. Increment it, if you've changed something on the theme files!
- protected override int _ScreenVersion
- {
- get { return 2; }
- }
-
- private const string _SelectSlideNumPlayers = "SelectSlideNumPlayers";
- private const string _SelectSlideNumMics = "SelectSlideNumMics";
- private const string _SelectSlideNumRounds = "SelectSlideNumRounds";
- private const string _SelectSlideNumSongs = "SelectSlideNumSongs";
- private const string _SelectSlideSongSource = "SelectSlideSongSource";
- private const string _SelectSlidePlaylist = "SelectSlidePlaylist";
- private const string _SelectSlideCategory = "SelectSlideCategory";
- private const string _ButtonNext = "ButtonNext";
- private const string _ButtonBack = "ButtonBack";
-
- private const int _MaxNumRounds = 100;
- private int _RoundSteps = 1;
- private bool _ConfigOk;
-
- public override void Init()
- {
- base.Init();
-
- _ThemeSelectSlides = new string[] {_SelectSlideNumPlayers, _SelectSlideNumMics, _SelectSlideNumRounds, _SelectSlideNumSongs, _SelectSlideSongSource, _SelectSlidePlaylist, _SelectSlideCategory};
- _ThemeButtons = new string[] {_ButtonNext, _ButtonBack};
- }
-
- public override bool HandleInput(SKeyEvent keyEvent)
- {
- base.HandleInput(keyEvent);
-
- if (keyEvent.KeyPressed) {}
- else
- {
- switch (keyEvent.Key)
- {
- case Keys.Back:
- case Keys.Escape:
- _PartyMode.Back();
- break;
-
- case Keys.Enter:
- _UpdateSlides();
-
- if (_Buttons[_ButtonBack].Selected)
- _PartyMode.Back();
-
- if (_Buttons[_ButtonNext].Selected)
- _PartyMode.Next();
- break;
-
- case Keys.Left:
- _UpdateSlides();
- break;
-
- case Keys.Right:
- _UpdateSlides();
- break;
- }
- }
- return true;
- }
-
- public override bool HandleMouse(SMouseEvent mouseEvent)
- {
- base.HandleMouse(mouseEvent);
-
- if (mouseEvent.LB && _IsMouseOverCurSelection(mouseEvent))
- {
- _UpdateSlides();
- if (_Buttons[_ButtonBack].Selected)
- _PartyMode.Back();
-
- if (_Buttons[_ButtonNext].Selected)
- _PartyMode.Next();
- }
-
- if (mouseEvent.RB)
- _PartyMode.Back();
-
- return true;
- }
-
- public override void OnShow()
- {
- base.OnShow();
-
- _RebuildSlides();
- _UpdateSlides();
- }
-
- public override bool UpdateGame()
- {
- _Buttons[_ButtonNext].Visible = _ConfigOk;
- return true;
- }
-
- private void _RebuildSlides()
- {
- // build num player slide (min player ... max player);
- _SelectSlides[_SelectSlideNumPlayers].Clear();
- for (int i = _PartyMode.MinPlayers; i <= _PartyMode.MaxPlayers; i++)
- _SelectSlides[_SelectSlideNumPlayers].AddValue(i.ToString());
- _SelectSlides[_SelectSlideNumPlayers].Selection = _PartyMode.GameData.NumPlayer - _PartyMode.MinPlayers;
-
- _SelectSlides[_SelectSlideNumSongs].Clear();
- for (int i = _PartyMode.MinSongs; i <= _PartyMode.MaxSongs; i++)
- _SelectSlides[_SelectSlideNumSongs].AddValue(i.ToString());
- _SelectSlides[_SelectSlideNumSongs].Selection = _PartyMode.GameData.NumSongs - _PartyMode.MinSongs;
-
- _SelectSlides[_SelectSlideSongSource].Clear();
- _SelectSlides[_SelectSlideSongSource].SetValues((int)_PartyMode.GameData.SongSource);
-
- List playlists = CBase.Playlist.GetNames();
- _SelectSlides[_SelectSlidePlaylist].Clear();
- for (int i = 0; i < playlists.Count; i++)
- {
- string value = playlists[i] + " (" + CBase.Playlist.GetSongCount(i) + " " + CBase.Language.Translate("TR_SONGS", PartyModeID) + ")";
- _SelectSlides[_SelectSlidePlaylist].AddValue(value);
- }
- _SelectSlides[_SelectSlidePlaylist].Selection = _PartyMode.GameData.PlaylistID;
- _SelectSlides[_SelectSlidePlaylist].Visible = _PartyMode.GameData.SongSource == ESongSource.TR_PLAYLIST;
-
- _SelectSlides[_SelectSlideCategory].Clear();
- for (int i = 0; i < CBase.Songs.GetNumCategories(); i++)
- {
- CCategory cat = CBase.Songs.GetCategory(i);
- string value = cat.Name + " (" + cat.GetNumSongsNotSung() + " " + CBase.Language.Translate("TR_SONGS", PartyModeID) + ")";
- _SelectSlides[_SelectSlideCategory].AddValue(value);
- }
- _SelectSlides[_SelectSlideCategory].Selection = _PartyMode.GameData.CategoryIndex;
- _SelectSlides[_SelectSlideCategory].Visible = _PartyMode.GameData.SongSource == ESongSource.TR_CATEGORY;
-
- _UpdateMicsAtOnce();
- _SetRoundSteps();
- _UpdateSlideRounds();
- }
-
- private void _UpdateSlides()
- {
- int player = _PartyMode.GameData.NumPlayer;
- int mics = _PartyMode.GameData.NumPlayerAtOnce;
- _PartyMode.GameData.NumPlayer = _SelectSlides[_SelectSlideNumPlayers].Selection + _PartyMode.MinPlayers;
- _PartyMode.GameData.NumPlayerAtOnce = _SelectSlides[_SelectSlideNumMics].Selection + _PartyMode.MinPlayers;
- _PartyMode.GameData.NumRounds = (_SelectSlides[_SelectSlideNumRounds].Selection + 1) * _RoundSteps;
- _PartyMode.GameData.NumSongs = _SelectSlides[_SelectSlideNumSongs].Selection + _PartyMode.MinSongs;
- _PartyMode.GameData.SongSource = (ESongSource)_SelectSlides[_SelectSlideSongSource].Selection;
- _PartyMode.GameData.PlaylistID = _SelectSlides[_SelectSlidePlaylist].Selection;
- _PartyMode.GameData.CategoryIndex = _SelectSlides[_SelectSlideCategory].Selection;
-
- _UpdateMicsAtOnce();
- _SetRoundSteps();
-
- if (player != _PartyMode.GameData.NumPlayer || mics != _PartyMode.GameData.NumPlayerAtOnce)
- {
- int num = CHelper.CombinationCount(_PartyMode.GameData.NumPlayer, _PartyMode.GameData.NumPlayerAtOnce);
- while (num > _MaxNumRounds)
- num -= _RoundSteps;
- _PartyMode.GameData.NumRounds = num;
- }
-
- if (_PartyMode.GameData.SongSource == ESongSource.TR_PLAYLIST)
- {
- if (CBase.Playlist.GetNumPlaylists() > 0)
- {
- if (CBase.Playlist.GetSongCount(_PartyMode.GameData.PlaylistID) > 0)
- {
- _ConfigOk = false;
- for (int i = 0; i < CBase.Playlist.GetSongCount(_PartyMode.GameData.PlaylistID); i++)
- {
- int id = CBase.Playlist.GetSong(_PartyMode.GameData.PlaylistID, i).SongID;
- _ConfigOk = CBase.Songs.GetSongByID(id).AvailableGameModes.Any(mode => mode == EGameMode.TR_GAMEMODE_MEDLEY);
- if (_ConfigOk)
- break;
- }
- }
- else
- _ConfigOk = false;
- }
- else
- _ConfigOk = false;
- }
- if (_PartyMode.GameData.SongSource == ESongSource.TR_CATEGORY)
- {
- if (CBase.Songs.GetNumCategories() == 0)
- _ConfigOk = false;
- else if (CBase.Songs.GetNumSongsNotSungInCategory(_PartyMode.GameData.CategoryIndex) <= 0)
- _ConfigOk = false;
- else
- {
- CBase.Songs.SetCategory(_PartyMode.GameData.CategoryIndex);
- _ConfigOk = false;
- foreach (CSong song in CBase.Songs.GetVisibleSongs())
- {
- _ConfigOk = song.AvailableGameModes.Any(mode => mode == EGameMode.TR_GAMEMODE_MEDLEY);
- if (_ConfigOk)
- break;
- }
- CBase.Songs.SetCategory(-1);
- }
- }
- if (_PartyMode.GameData.SongSource == ESongSource.TR_ALLSONGS)
- {
- if (CBase.Songs.GetNumSongs() > 0)
- {
- for (int i = 0; i < CBase.Songs.GetNumSongs(); i++)
- {
- _ConfigOk = CBase.Songs.GetSongByID(i).AvailableGameModes.Any(mode => mode == EGameMode.TR_GAMEMODE_MEDLEY);
- if (_ConfigOk)
- break;
- }
- }
- else
- _ConfigOk = false;
- }
-
- _SelectSlides[_SelectSlideCategory].Visible = _PartyMode.GameData.SongSource == ESongSource.TR_CATEGORY;
- _SelectSlides[_SelectSlidePlaylist].Visible = _PartyMode.GameData.SongSource == ESongSource.TR_PLAYLIST;
-
- _UpdateSlideRounds();
- }
-
- private void _UpdateMicsAtOnce()
- {
- int maxNum = Math.Min(_PartyMode.MaxMics, _PartyMode.GameData.NumPlayer);
-
- if (_PartyMode.GameData.NumPlayerAtOnce > maxNum)
- _PartyMode.GameData.NumPlayerAtOnce = maxNum;
-
- // build mics at once slide
- _SelectSlides[_SelectSlideNumMics].Clear();
- for (int i = 1; i <= maxNum; i++)
- _SelectSlides[_SelectSlideNumMics].AddValue(i.ToString());
- _SelectSlides[_SelectSlideNumMics].Selection = _PartyMode.GameData.NumPlayerAtOnce - _PartyMode.MinPlayers;
- }
-
- private void _UpdateSlideRounds()
- {
- // build num rounds slide
- _SelectSlides[_SelectSlideNumRounds].Clear();
- for (int i = _RoundSteps; i <= _MaxNumRounds; i += _RoundSteps)
- _SelectSlides[_SelectSlideNumRounds].AddValue(i.ToString());
- _SelectSlides[_SelectSlideNumRounds].Selection = _PartyMode.GameData.NumRounds / _RoundSteps - 1;
- }
-
- private void _SetRoundSteps()
- {
- if (_PartyMode.GameData.NumPlayerAtOnce < 1 || _PartyMode.GameData.NumPlayer < 1 || _PartyMode.GameData.NumPlayerAtOnce > _PartyMode.GameData.NumPlayer)
- {
- _RoundSteps = 1;
- return;
- }
-
- int res = _PartyMode.GameData.NumPlayer / _PartyMode.GameData.NumPlayerAtOnce;
- int mod = _PartyMode.GameData.NumPlayer % _PartyMode.GameData.NumPlayerAtOnce;
-
- _RoundSteps = mod == 0 ? res : _PartyMode.GameData.NumPlayer;
- }
- }
-}
\ No newline at end of file
diff --git a/PartyModes/PartyModeChallengeMedley/CPartyScreenChallengeMedleyMain.cs b/PartyModes/PartyModeChallengeMedley/CPartyScreenChallengeMedleyMain.cs
deleted file mode 100644
index 8e2841b1..00000000
--- a/PartyModes/PartyModeChallengeMedley/CPartyScreenChallengeMedleyMain.cs
+++ /dev/null
@@ -1,630 +0,0 @@
-#region license
-// This file is part of Vocaluxe.
-//
-// Vocaluxe is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// Vocaluxe is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with Vocaluxe. If not, see .
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Windows.Forms;
-using VocaluxeLib.Menu;
-
-namespace VocaluxeLib.PartyModes.ChallengeMedley
-{
- struct STableRow
- {
- public CText Pos;
- public CText Name;
- public CText Rounds;
- public CText Won;
- public CText SingPoints;
- public CText GamePoints;
- }
-
- class CRoundsTableRow
- {
- public CText Number;
- public List TextPlayer;
- public List TextScores;
- }
-
- // ReSharper disable UnusedMember.Global
- public class CPartyScreenChallengeMedleyMain : CPartyScreenChallengeMedley
- // ReSharper restore UnusedMember.Global
- {
- // Version number for theme files. Increment it, if you've changed something on the theme files!
- protected override int _ScreenVersion
- {
- get { return 1; }
- }
-
- private const string _TextPosition = "TextPosition";
- private const string _TextPlayerName = "TextPlayerName";
- private const string _TextNumPlayed = "TextNumPlayed";
- private const string _TextWon = "TextWon";
- private const string _TextSingPoints = "TextSingPoints";
- private const string _TextGamePoints = "TextGamePoints";
- private const string _TextNextPlayer = "TextNextPlayer";
- private const string _TextPopupReallyExit = "TextPopupReallyExit";
- private const string _TextRoundPlayer = "TextRoundPlayer";
- private const string _TextRoundScore = "TextRoundScore";
- private const string _TextRoundNumber = "TextRoundNumber";
- private const string _TextFinishMessage = "TextFinishMessage";
- private const string _TextFinishPlayerWin = "TextFinishPlayerWin";
- private const string _TextNextPlayerMessage = "TextNextPlayerMessage";
-
- private const string _ButtonNextRound = "ButtonNextRound";
- private const string _ButtonBack = "ButtonBack";
- private const string _ButtonExit = "ButtonExit";
- private const string _ButtonPopupYes = "ButtonPopupYes";
- private const string _ButtonPopupNo = "ButtonPopupNo";
- private const string _ButtonPlayerScrollUp = "ButtonPlayerScrollUp";
- private const string _ButtonPlayerScrollDown = "ButtonPlayerScrollDown";
- private const string _ButtonRoundsScrollUp = "ButtonRoundsScrollUp";
- private const string _ButtonRoundsScrollDown = "ButtonRoundsScrollDown";
-
- private const string _StaticPopupBG = "StaticPopupBG";
- private const string _StaticNextPlayer = "StaticNextPlayer";
-
- private bool _ExitPopupVisible;
-
- private List _PlayerTable;
- private List _RoundsTable;
-
- private List _NextPlayerTexts;
- private List _NextPlayerStatics;
-
- private SRectF _RoundsTableScrollArea;
- private SRectF _PlayerTableScrollArea;
- private int _RoundsTableOffset;
- private int _PlayerTableOffset;
- private const int _NumPlayerVisible = 10;
- private int _NumRoundsVisible = 3;
-
- public override void Init()
- {
- base.Init();
-
- _ThemeTexts = new string[]
- {
- _TextPosition, _TextPlayerName, _TextNumPlayed, _TextWon, _TextSingPoints, _TextGamePoints, _TextNextPlayer, _TextPopupReallyExit, _TextRoundNumber,
- _TextRoundPlayer,
- _TextRoundScore, _TextFinishMessage, _TextFinishPlayerWin, _TextNextPlayerMessage
- };
- _ThemeButtons = new string[]
- {
- _ButtonNextRound, _ButtonBack, _ButtonExit, _ButtonPopupYes, _ButtonPopupNo, _ButtonPlayerScrollDown, _ButtonPlayerScrollUp, _ButtonRoundsScrollDown,
- _ButtonRoundsScrollUp
- };
- _ThemeStatics = new string[] {_StaticPopupBG, _StaticNextPlayer};
- }
-
- public override void LoadTheme(string xmlPath)
- {
- base.LoadTheme(xmlPath);
-
- _BuildPlayerTable();
- _CreateRoundsTable();
- _NextPlayerTexts = new List();
- _NextPlayerStatics = new List();
-
- for (int i = 0; i < _PartyMode.MaxPlayers; i++)
- {
- _NextPlayerTexts.Add(GetNewText(_Texts[_TextNextPlayer]));
- _AddText(_NextPlayerTexts[_NextPlayerTexts.Count - 1]);
- _NextPlayerStatics.Add(GetNewStatic(_Statics[_StaticNextPlayer]));
- _AddStatic(_NextPlayerStatics[_NextPlayerStatics.Count - 1]);
- }
- _Statics[_StaticNextPlayer].Visible = false;
- }
-
- public override bool HandleInput(SKeyEvent keyEvent)
- {
- base.HandleInput(keyEvent);
-
- if (keyEvent.KeyPressed) {}
- else
- {
- switch (keyEvent.Key)
- {
- case Keys.Back:
- case Keys.Escape:
- if (!_ExitPopupVisible)
- {
- if (_PartyMode.GameData.CurrentRoundNr == 1)
- _PartyMode.Back();
- else
- _ShowPopup(true);
- }
- else
- _ShowPopup(false);
- break;
-
- case Keys.Enter:
- if (!_ExitPopupVisible)
- {
- if (_Buttons[_ButtonNextRound].Selected)
- _PartyMode.Next();
- if (_Buttons[_ButtonBack].Selected && _PartyMode.GameData.CurrentRoundNr == 1)
- _PartyMode.Back();
- if (_Buttons[_ButtonExit].Selected && _PartyMode.GameData.CurrentRoundNr > 1)
- _ShowPopup(true);
- if (_Buttons[_ButtonPlayerScrollUp].Selected)
- _ScrollPlayerTable(-1);
- if (_Buttons[_ButtonPlayerScrollDown].Selected)
- _ScrollPlayerTable(1);
- if (_Buttons[_ButtonRoundsScrollUp].Selected)
- _ScrollRoundsTable(-1);
- if (_Buttons[_ButtonRoundsScrollDown].Selected)
- _ScrollRoundsTable(1);
- }
- else
- {
- if (_Buttons[_ButtonPopupYes].Selected)
- _EndParty();
- if (_Buttons[_ButtonPopupNo].Selected)
- _ShowPopup(false);
- }
- break;
- }
- }
- return true;
- }
-
- public override bool HandleMouse(SMouseEvent mouseEvent)
- {
- base.HandleMouse(mouseEvent);
-
- if (mouseEvent.LB && _IsMouseOverCurSelection(mouseEvent))
- {
- if (!_ExitPopupVisible)
- {
- if (_Buttons[_ButtonNextRound].Selected)
- _PartyMode.Next();
- if (_Buttons[_ButtonBack].Selected && _PartyMode.GameData.CurrentRoundNr == 1)
- _PartyMode.Back();
- if (_Buttons[_ButtonExit].Selected && _PartyMode.GameData.CurrentRoundNr > 1)
- _ShowPopup(true);
- if (_Buttons[_ButtonPlayerScrollUp].Selected)
- _ScrollPlayerTable(-1);
- if (_Buttons[_ButtonPlayerScrollDown].Selected)
- _ScrollPlayerTable(1);
- if (_Buttons[_ButtonRoundsScrollUp].Selected)
- _ScrollRoundsTable(-1);
- if (_Buttons[_ButtonRoundsScrollDown].Selected)
- _ScrollRoundsTable(1);
- }
- else
- {
- if (_Buttons[_ButtonPopupYes].Selected)
- _EndParty();
- if (_Buttons[_ButtonPopupNo].Selected)
- _ShowPopup(false);
- }
- }
-
- if (mouseEvent.RB)
- {
- if (!_ExitPopupVisible)
- {
- if (_PartyMode.GameData.CurrentRoundNr == 1)
- _PartyMode.Back();
- else
- _ShowPopup(true);
- }
- else
- _ShowPopup(false);
- }
-
- if (mouseEvent.Wheel != 0)
- {
- if (CHelper.IsInBounds(_RoundsTableScrollArea, mouseEvent))
- _ScrollRoundsTable(mouseEvent.Wheel);
- if (CHelper.IsInBounds(_PlayerTableScrollArea, mouseEvent))
- _ScrollPlayerTable(mouseEvent.Wheel);
- }
-
- return true;
- }
-
- public override void OnShow()
- {
- base.OnShow();
-
- _PlayerTableOffset = 0;
- _RoundsTableOffset = 0;
-
- _UpdatePlayerTable();
- _UpdateNextPlayerPositions();
- _UpdateNextPlayerContents();
- if (_PartyMode.GameData.CurrentRoundNr == 1)
- _BuildRoundsTable();
- else
- _ScrollRoundsTable(_PartyMode.GameData.CurrentRoundNr - 2);
- _UpdateRoundsTable();
-
- if (_PartyMode.GameData.CurrentRoundNr == 1)
- {
- _Buttons[_ButtonBack].Visible = true;
- _Buttons[_ButtonExit].Visible = false;
- }
- else
- {
- _Buttons[_ButtonBack].Visible = false;
- _Buttons[_ButtonExit].Visible = true;
- }
-
- if (_PartyMode.GameData.CurrentRoundNr <= _PartyMode.GameData.Rounds.Count)
- {
- _Buttons[_ButtonNextRound].Visible = true;
- _Texts[_TextFinishMessage].Visible = false;
- _Texts[_TextFinishPlayerWin].Visible = false;
- _SelectElement(_Buttons[_ButtonNextRound]);
- }
- else
- {
- _Buttons[_ButtonNextRound].Visible = false;
- _Texts[_TextFinishMessage].Visible = true;
- _Texts[_TextFinishPlayerWin].Visible = true;
- _Texts[_TextFinishPlayerWin].Text = _GetPlayerWinString();
- _SelectElement(_Buttons[_ButtonExit]);
- }
-
- _ShowPopup(false);
- }
-
- public override bool UpdateGame()
- {
- return true;
- }
-
- private void _EndParty()
- {
- CBase.Graphics.FadeTo(EScreen.Party);
- }
-
- private void _ShowPopup(bool visible)
- {
- _ExitPopupVisible = visible;
-
- _Statics[_StaticPopupBG].Visible = _ExitPopupVisible;
- _Texts[_TextPopupReallyExit].Visible = _ExitPopupVisible;
- _Buttons[_ButtonPopupYes].Visible = _ExitPopupVisible;
- _Buttons[_ButtonPopupNo].Visible = _ExitPopupVisible;
-
- if (_ExitPopupVisible)
- _SelectElement(_Buttons[_ButtonPopupNo]);
- }
-
- private void _UpdateNextPlayerPositions()
- {
- float x = (float)CBase.Settings.GetRenderW() / 2 -
- ((_PartyMode.GameData.NumPlayerAtOnce * _Statics[_StaticNextPlayer].Rect.W) + ((_PartyMode.GameData.NumPlayerAtOnce - 1) * 15)) / 2;
- const float staticY = 590;
- const float textY = 550;
- for (int i = 0; i < _PartyMode.GameData.NumPlayerAtOnce; i++)
- {
- //static
- _NextPlayerStatics[i].X = x;
- _NextPlayerStatics[i].Y = staticY;
- _NextPlayerStatics[i].Visible = true;
- //text
- _NextPlayerTexts[i].X = x + _Statics[_StaticNextPlayer].Rect.W / 2;
- _NextPlayerTexts[i].Y = textY;
- _NextPlayerTexts[i].Visible = true;
-
- x += _Statics[_StaticNextPlayer].Rect.W + 15;
- }
- for (int i = _PartyMode.GameData.NumPlayerAtOnce; i < _PartyMode.MaxPlayers; i++)
- {
- _NextPlayerStatics[i].Visible = false;
- _NextPlayerTexts[i].Visible = false;
- }
- }
-
- private void _UpdateNextPlayerContents()
- {
- if (_PartyMode.GameData.CurrentRoundNr <= _PartyMode.GameData.Rounds.Count)
- {
- _Texts[_TextNextPlayerMessage].Visible = true;
- for (int i = 0; i < _PartyMode.GameData.NumPlayerAtOnce; i++)
- {
- int id = _PartyMode.GameData.ProfileIDs[_PartyMode.GameData.Rounds[_PartyMode.GameData.CurrentRoundNr - 1].Players[i]];
- _NextPlayerStatics[i].Texture = CBase.Profiles.GetAvatar(id);
- _NextPlayerTexts[i].Text = CBase.Profiles.GetPlayerName(id);
- _NextPlayerTexts[i].Color = CBase.Themes.GetPlayerColor(i + 1);
- }
- }
- else
- {
- _Texts[_TextNextPlayerMessage].Visible = false;
- for (int i = 0; i < _PartyMode.GameData.NumPlayerAtOnce; i++)
- {
- _NextPlayerStatics[i].Visible = false;
- _NextPlayerTexts[i].Visible = false;
- }
- }
- }
-
- private void _CreateRoundsTable()
- {
- //Create lists
- _RoundsTable = new List();
- for (int i = 0; i < 5; i++)
- {
- var rtr = new CRoundsTableRow {TextPlayer = new List(), TextScores = new List()};
- _RoundsTable.Add(rtr);
- }
- //Create statics and texts for rounds
- foreach (CRoundsTableRow roundRow in _RoundsTable)
- {
- //Round-number
- CText text = GetNewText(_Texts[_TextRoundNumber]);
- _AddText(text);
- roundRow.Number = text;
- for (int row = 0; row < 2; row++)
- {
- for (int column = 0; column < 3; column++)
- {
- //Player
- text = GetNewText(_Texts[_TextRoundPlayer]);
- _AddText(text);
- roundRow.TextPlayer.Add(text);
- //Score
- text = GetNewText(_Texts[_TextRoundScore]);
- _AddText(text);
- roundRow.TextScores.Add(text);
- }
- }
- }
- }
-
- private void _BuildRoundsTable()
- {
- _RoundsTableScrollArea = new SRectF();
-
- const int numPlayerInOneRow = 3;
- _NumRoundsVisible = _PartyMode.GameData.NumPlayerAtOnce <= numPlayerInOneRow ? 5 : 3;
-
- if (_NumRoundsVisible > _PartyMode.GameData.Rounds.Count)
- _NumRoundsVisible = _PartyMode.GameData.Rounds.Count;
-
- float numberX = _Texts[_TextRoundNumber].X;
- float numberY = _Texts[_TextRoundNumber].Y;
-
- _RoundsTableScrollArea.X = numberX;
- _RoundsTableScrollArea.Y = numberY;
- _RoundsTableScrollArea.W = CBase.Settings.GetRenderW() - _Texts[_TextRoundNumber].X - 20;
-
- float delta = _Texts[_TextRoundNumber].Rect.H;
-
- //Update statics and texts for rounds
- foreach (CRoundsTableRow roundRow in _RoundsTable)
- {
- //Round-number
- roundRow.Number.X = numberX;
- roundRow.Number.Y = numberY;
- var numInnerRows = (int)Math.Ceiling(_PartyMode.GameData.NumPlayerAtOnce / ((double)numPlayerInOneRow));
- for (int row = 0; row < numInnerRows; row++)
- {
- int num = (row + 1) * numPlayerInOneRow;
- int numPlayerInThisRow = numPlayerInOneRow;
- if (num > _PartyMode.GameData.NumPlayerAtOnce)
- {
- num = _PartyMode.GameData.NumPlayerAtOnce;
- numPlayerInThisRow = _PartyMode.GameData.NumPlayerAtOnce - (row * numPlayerInOneRow);
- }
- for (int column = row * numPlayerInOneRow; column < num; column++)
- {
- //Player
- float x = numberX + 15 + (CBase.Settings.GetRenderW() - _Texts[_TextRoundNumber].X - 20) / numPlayerInThisRow * (column - row * numPlayerInOneRow) +
- ((CBase.Settings.GetRenderW() - _Texts[_TextRoundNumber].X - 20) / numPlayerInThisRow) / 2;
- float maxw = ((CBase.Settings.GetRenderW() - _Texts[_TextRoundNumber].X - 20) / numPlayerInThisRow) / 2 - 5;
- roundRow.TextPlayer[column].X = x;
- roundRow.TextPlayer[column].Y = numberY;
- roundRow.TextPlayer[column].W = maxw;
- //Score
- roundRow.TextScores[column].X = x;
- roundRow.TextScores[column].Y = numberY + delta;
- roundRow.TextScores[column].W = maxw;
- }
- numberY = numberY + 2 * delta;
- }
- numberY = numberY + delta / 2;
- }
- _RoundsTableScrollArea.H = numberY - _RoundsTableScrollArea.Y;
- }
-
- private void _UpdateRoundsTable()
- {
- for (int i = 0; i < _RoundsTable.Count; i++)
- {
- for (int p = 0; p < _RoundsTable[i].TextPlayer.Count; p++)
- {
- if (_PartyMode.GameData.Rounds.Count > i + _RoundsTableOffset && _PartyMode.GameData.Rounds[i + _RoundsTableOffset].Players.Count > p)
- {
- _RoundsTable[i].Number.Visible = true;
- _RoundsTable[i].TextPlayer[p].Visible = true;
- _RoundsTable[i].TextScores[p].Visible = true;
- _RoundsTable[i].Number.Text = (i + 1 + _RoundsTableOffset) + ")";
- _RoundsTable[i].TextPlayer[p].Text =
- CBase.Profiles.GetPlayerName(_PartyMode.GameData.ProfileIDs[_PartyMode.GameData.Rounds[i + _RoundsTableOffset].Players[p]]);
- // ReSharper disable ConvertIfStatementToConditionalTernaryExpression
- if ((_PartyMode.GameData.CurrentRoundNr - 1) > i + _RoundsTableOffset)
- // ReSharper restore ConvertIfStatementToConditionalTernaryExpression
- _RoundsTable[i].TextScores[p].Text = _PartyMode.GameData.Results[i + _RoundsTableOffset, p].ToString();
- else
- _RoundsTable[i].TextScores[p].Text = "";
- }
- else
- {
- _RoundsTable[i].TextPlayer[p].Visible = false;
- _RoundsTable[i].TextScores[p].Visible = false;
- }
- }
- if (_PartyMode.GameData.Rounds.Count < i + _RoundsTableOffset || i + 1 > _NumRoundsVisible)
- {
- _RoundsTable[i].Number.Visible = false;
- for (int p = 0; p < _RoundsTable[i].TextPlayer.Count; p++)
- {
- _RoundsTable[i].TextPlayer[p].Visible = false;
- _RoundsTable[i].TextScores[p].Visible = false;
- }
- }
- }
-
- _Buttons[_ButtonRoundsScrollUp].Visible = _RoundsTableOffset > 0;
- _Buttons[_ButtonRoundsScrollDown].Visible = _PartyMode.GameData.Rounds.Count - _NumRoundsVisible - _RoundsTableOffset > 0;
- }
-
- private void _BuildPlayerTable()
- {
- _PlayerTableScrollArea = new SRectF {X = _Texts[_TextPosition].X, Y = _Texts[_TextPosition].Y, W = _Texts[_TextGamePoints].X - _Texts[_TextPosition].X};
-
- _PlayerTable = new List();
- float delta = _Texts[_TextPosition].Rect.H * 1.2f;
-
- float h = 0;
-
- for (int i = 0; i < 10; i++)
- {
- var row = new STableRow
- {
- Pos = GetNewText(_Texts[_TextPosition]),
- Name = GetNewText(_Texts[_TextPlayerName]),
- Rounds = GetNewText(_Texts[_TextNumPlayed]),
- Won = GetNewText(_Texts[_TextWon]),
- SingPoints = GetNewText(_Texts[_TextSingPoints]),
- GamePoints = GetNewText(_Texts[_TextGamePoints])
- };
-
- row.Pos.Y += delta * (i + 1);
- row.Name.Y += delta * (i + 1);
- row.Rounds.Y += delta * (i + 1);
- row.Won.Y += delta * (i + 1);
- row.SingPoints.Y += delta * (i + 1);
- row.GamePoints.Y += delta * (i + 1);
-
- row.Pos.Text = (i + 1) + ".";
-
- row.Pos.Visible = false;
- row.Name.Visible = false;
- row.Rounds.Visible = false;
- row.Won.Visible = false;
- row.SingPoints.Visible = false;
- row.GamePoints.Visible = false;
-
- _AddText(row.Pos);
- _AddText(row.Name);
- _AddText(row.Rounds);
- _AddText(row.Won);
- _AddText(row.SingPoints);
- _AddText(row.GamePoints);
-
- _PlayerTable.Add(row);
-
- h = delta * (i + 1);
- }
- _PlayerTableScrollArea.H = h + delta;
- }
-
- private void _UpdatePlayerTable()
- {
- for (int i = 0; i < _PlayerTable.Count; i++)
- {
- STableRow row = _PlayerTable[i];
-
- if (i + _PlayerTableOffset < _PartyMode.GameData.ResultTable.Count)
- {
- row.Pos.Visible = true;
- row.Name.Visible = true;
- row.Rounds.Visible = true;
- row.Won.Visible = true;
- row.SingPoints.Visible = true;
- row.GamePoints.Visible = true;
-
- row.Pos.Text = _PartyMode.GameData.ResultTable[i + _PlayerTableOffset].Position + ".";
- row.Name.Text = CBase.Profiles.GetPlayerName(_PartyMode.GameData.ResultTable[i + _PlayerTableOffset].PlayerID);
- row.Rounds.Text = _PartyMode.GameData.ResultTable[i + _PlayerTableOffset].NumPlayed.ToString();
- row.Won.Text = _PartyMode.GameData.ResultTable[i + _PlayerTableOffset].NumWon.ToString();
- row.SingPoints.Text = _PartyMode.GameData.ResultTable[i + _PlayerTableOffset].NumSingPoints.ToString();
- row.GamePoints.Text = _PartyMode.GameData.ResultTable[i + _PlayerTableOffset].NumGamePoints.ToString();
- }
- else
- {
- row.Pos.Visible = false;
- row.Name.Visible = false;
- row.Rounds.Visible = false;
- row.Won.Visible = false;
- row.SingPoints.Visible = false;
- row.GamePoints.Visible = false;
- }
- }
-
- _Buttons[_ButtonPlayerScrollUp].Visible = _PlayerTableOffset > 0;
- _Buttons[_ButtonPlayerScrollDown].Visible = _PartyMode.GameData.ProfileIDs.Count - _NumPlayerVisible - _PlayerTableOffset > 0;
- }
-
- private void _ScrollPlayerTable(int offset)
- {
- if (_PartyMode.GameData.ProfileIDs.Count <= _NumPlayerVisible)
- _PlayerTableOffset = 0;
- else if (offset < 0 && _PlayerTableOffset + offset >= 0)
- _PlayerTableOffset += offset;
- else if (offset < 0 && _PlayerTableOffset + offset < 0)
- _PlayerTableOffset = 0;
- else if (offset > 0 && _PlayerTableOffset + offset <= _PartyMode.GameData.ProfileIDs.Count - _NumPlayerVisible)
- _PlayerTableOffset += offset;
- else if (offset > 0 && _PlayerTableOffset + offset > _PartyMode.GameData.ProfileIDs.Count - _NumPlayerVisible)
- _PlayerTableOffset = _PartyMode.GameData.ProfileIDs.Count - _NumPlayerVisible;
-
- _UpdatePlayerTable();
- }
-
- private void _ScrollRoundsTable(int offset)
- {
- if (_PartyMode.GameData.Rounds.Count <= _NumRoundsVisible)
- _RoundsTableOffset = 0;
- else if (offset < 0 && _RoundsTableOffset + offset >= 0)
- _RoundsTableOffset += offset;
- else if (offset < 0 && _RoundsTableOffset + offset < 0)
- _RoundsTableOffset = 0;
- else if (offset > 0 && _RoundsTableOffset + offset <= _PartyMode.GameData.Rounds.Count - _NumRoundsVisible)
- _RoundsTableOffset += offset;
- else if (offset > 0 && _RoundsTableOffset + offset > _PartyMode.GameData.Rounds.Count - _NumRoundsVisible)
- _RoundsTableOffset = _PartyMode.GameData.Rounds.Count - _NumRoundsVisible;
-
- _UpdateRoundsTable();
- }
-
- private string _GetPlayerWinString()
- {
- string s = "";
-
- for (int i = 0; i < _PartyMode.GameData.ResultTable.Count; i++)
- {
- if (_PartyMode.GameData.ResultTable[i].Position == 1)
- {
- if (i > 0)
- s += ", ";
- s += CBase.Profiles.GetPlayerName(_PartyMode.GameData.ResultTable[i].PlayerID);
- }
- else
- break;
- }
-
- return s;
- }
- }
-}
\ No newline at end of file
diff --git a/PartyModes/PartyModeChallengeMedley/CPartyScreenChallengeMedleyNames.cs b/PartyModes/PartyModeChallengeMedley/CPartyScreenChallengeMedleyNames.cs
deleted file mode 100644
index a95bfc53..00000000
--- a/PartyModes/PartyModeChallengeMedley/CPartyScreenChallengeMedleyNames.cs
+++ /dev/null
@@ -1,68 +0,0 @@
-#region license
-// This file is part of Vocaluxe.
-//
-// Vocaluxe is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// Vocaluxe is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with Vocaluxe. If not, see .
-#endregion
-
-using System.Collections.Generic;
-using VocaluxeLib.Menu;
-
-namespace VocaluxeLib.PartyModes.ChallengeMedley
-{
- // ReSharper disable UnusedMember.Global
- public class CPartyScreenChallengeMedleyNames : CMenuPartyNameSelection
- // ReSharper restore UnusedMember.Global
- {
- // Version number for theme files. Increment it, if you've changed something on the theme files!
- protected override int _ScreenVersion
- {
- get { return 1; }
- }
-
- private new CPartyModeChallengeMedley _PartyMode;
-
- public override void Init()
- {
- base.Init();
- _PartyMode = (CPartyModeChallengeMedley)base._PartyMode;
- _AllowChangePlayerNum = false;
- _Teams = false;
- }
-
- public override void OnShow()
- {
- base.OnShow();
- SetPartyModeData(_PartyMode.GameData.NumPlayer);
- while (_PartyMode.GameData.ProfileIDs.Count > _NumPlayer)
- _PartyMode.GameData.ProfileIDs.RemoveAt(_PartyMode.GameData.ProfileIDs.Count - 1);
-
- List[] ids = new List[] {_PartyMode.GameData.ProfileIDs};
- SetPartyModeProfiles(ids);
- }
-
- public override void Back()
- {
- if (_TeamList.Length == 1)
- _PartyMode.GameData.ProfileIDs = _TeamList[0];
- _PartyMode.Back();
- }
-
- public override void Next()
- {
- if (_TeamList.Length == 1)
- _PartyMode.GameData.ProfileIDs = _TeamList[0];
- _PartyMode.Next();
- }
- }
-}
\ No newline at end of file
diff --git a/PartyModes/PartyModeChallengeMedley/GlobalSuppressions.cs b/PartyModes/PartyModeChallengeMedley/GlobalSuppressions.cs
deleted file mode 100644
index e661ff03..00000000
Binary files a/PartyModes/PartyModeChallengeMedley/GlobalSuppressions.cs and /dev/null differ
diff --git a/PartyModes/PartyModeChallengeMedley/PartyModeChallengeMedley.csproj b/PartyModes/PartyModeChallengeMedley/PartyModeChallengeMedley.csproj
deleted file mode 100644
index d4ddbb68..00000000
--- a/PartyModes/PartyModeChallengeMedley/PartyModeChallengeMedley.csproj
+++ /dev/null
@@ -1,112 +0,0 @@
-
-
-
- DebugWin
- AnyCPU
- 8.0.30703
- 2.0
- {6F3E1874-F28A-40E9-AFBD-31934D593678}
- Library
- Properties
- VocaluxeLib.PartyModes.ChallengeMedley
- ChallengeMedley
- v4.0
- Client
- 512
-
-
- AnyCPU
- true
- full
- false
- bin
- TRACE;DEBUG;WIN
- prompt
- 4
- Off
- ..\..\CheckingRules.ruleset
-
-
- AnyCPU
- none
- true
- bin
- prompt
- 4
- false
- WIN
- Off
-
-
- AnyCPU
- true
- full
- false
- bin
- TRACE;DEBUG;LINUX
- prompt
- 4
- Off
-
-
- AnyCPU
- none
- true
- bin
- prompt
- 4
- false
- LINUX
- Off
-
-
- bin
- WIN
- true
- AnyCPU
- false
- Off
- prompt
- ManagedMinimumRules.ruleset
-
-
-
-
-
-
-
-
-
-
-
- {D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC}
- VocaluxeLib
- False
-
-
-
-
-
-
-
-
-
-
-
- if exist "$(SolutionDir)Output\PartyModes\$(TargetName)\Code" rd "$(SolutionDir)Output\PartyModes\$(TargetName)\Code" /S /Q
-cd $(SolutionDir)Partymodes\
-xcopy "$(ProjectDir)*.cs" "$(SolutionDir)Output\PartyModes\$(TargetName)\Code\" /EXCLUDE:Excludes.txt /I /Y
- rm -rf "$(SolutionDir)Output\PartyModes\$(TargetName)\Code"
-mkdir -p "$(SolutionDir)Output\PartyModes\$(TargetName)\Code\"
-cp -R $(ProjectDir)*.cs "$(SolutionDir)Output\PartyModes\$(TargetName)\Code\"
-rm -f "$(SolutionDir)Output\PartyModes\$(TargetName)\Code\GlobalSuppressions.cs"
-
-
-
-
diff --git a/PartyModes/PartyModeChallengeMedley/Settings.StyleCop b/PartyModes/PartyModeChallengeMedley/Settings.StyleCop
deleted file mode 100644
index 72ed49f9..00000000
--- a/PartyModes/PartyModeChallengeMedley/Settings.StyleCop
+++ /dev/null
@@ -1,809 +0,0 @@
-
-
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
-
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
-
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
-
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
-
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
-
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
-
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
- False
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/PartyModes/PartyModeTicTacToe/CPartyModeTicTacToe.cs b/PartyModes/PartyModeTicTacToe/CPartyModeTicTacToe.cs
index 636e3cfe..fa99918c 100644
--- a/PartyModes/PartyModeTicTacToe/CPartyModeTicTacToe.cs
+++ b/PartyModes/PartyModeTicTacToe/CPartyModeTicTacToe.cs
@@ -27,18 +27,9 @@ using VocaluxeLib.Songs;
namespace VocaluxeLib.PartyModes.TicTacToe
{
- public enum ESongSource
- {
- // ReSharper disable InconsistentNaming
- TR_ALLSONGS,
- TR_CATEGORY,
- TR_PLAYLIST
- // ReSharper restore InconsistentNaming
- }
-
public class CRound
{
- public int SongID;
+ public int[] SongIDs;
public int SingerTeam1;
public int SingerTeam2;
public int PointsTeam1;
@@ -101,6 +92,7 @@ namespace VocaluxeLib.PartyModes.TicTacToe
private enum EStage
{
Config,
+ Songs,
Names,
Main,
Singing
@@ -118,10 +110,12 @@ namespace VocaluxeLib.PartyModes.TicTacToe
public List PlayerTeam2;
public ESongSource SongSource;
+ public ESongSorting Sorting;
public int CategoryIndex;
public int PlaylistID;
- public int GameMode;
+ public EGameMode GameMode;
+ public int NumMedleySongs;
public List Rounds;
public List Songs;
@@ -131,6 +125,7 @@ namespace VocaluxeLib.PartyModes.TicTacToe
public int[] NumJokerRandom;
public int[] NumJokerRetry;
+ public EOffOn RefillJokers;
}
public SData GameData;
@@ -159,14 +154,17 @@ namespace VocaluxeLib.PartyModes.TicTacToe
PlayerTeam2 = new List(),
CurrentRoundNr = 0,
FieldNr = 0,
- SongSource = ESongSource.TR_ALLSONGS,
+ Sorting = CBase.Config.GetSongSorting(),
+ SongSource = ESongSource.TR_SONGSOURCE_ALLSONGS,
PlaylistID = 0,
CategoryIndex = 0,
- GameMode = 0,
+ GameMode = EGameMode.TR_GAMEMODE_NORMAL,
+ NumMedleySongs = 5,
Rounds = new List(),
Songs = new List(),
NumJokerRandom = new int[2],
- NumJokerRetry = new int[2]
+ NumJokerRetry = new int[2],
+ RefillJokers = EOffOn.TR_CONFIG_OFF
};
}
@@ -212,6 +210,8 @@ namespace VocaluxeLib.PartyModes.TicTacToe
{
case EStage.Config:
return _Screens["CPartyScreenTicTacToeConfig"];
+ case EStage.Songs:
+ return _Screens["CPartyScreenTicTacToeSongs"];
case EStage.Names:
return _Screens["CPartyScreenTicTacToeNames"];
case EStage.Main:
@@ -234,6 +234,9 @@ namespace VocaluxeLib.PartyModes.TicTacToe
switch (_Stage)
{
case EStage.Config:
+ _Stage = EStage.Songs;
+ break;
+ case EStage.Songs:
_Stage = EStage.Names;
break;
case EStage.Names:
@@ -253,6 +256,8 @@ namespace VocaluxeLib.PartyModes.TicTacToe
_Stage = EStage.Main;
GameData.Team = GameData.Team == 1 ? 0 : 1;
_UpdatePlayerList();
+ if (GameData.RefillJokers == EOffOn.TR_CONFIG_ON)
+ _SetNumJokers();
break;
default:
throw new ArgumentException("Invalid stage: " + _Stage);
@@ -267,9 +272,12 @@ namespace VocaluxeLib.PartyModes.TicTacToe
case EStage.Config:
CBase.Graphics.FadeTo(EScreen.Party);
return;
- case EStage.Names:
+ case EStage.Songs:
_Stage = EStage.Config;
break;
+ case EStage.Names:
+ _Stage = EStage.Songs;
+ break;
case EStage.Main:
_Stage = EStage.Names;
break;
@@ -430,24 +438,25 @@ namespace VocaluxeLib.PartyModes.TicTacToe
switch (GameData.SongSource)
{
- case ESongSource.TR_PLAYLIST:
+ case ESongSource.TR_SONGSOURCE_PLAYLIST:
for (int i = 0; i < CBase.Playlist.GetSongCount(GameData.PlaylistID); i++)
{
int id = CBase.Playlist.GetSong(GameData.PlaylistID, i).SongID;
- if (CBase.Songs.GetSongByID(id).AvailableGameModes.Contains(AvailableGameModes[GameData.GameMode]))
+ if (CBase.Songs.GetSongByID(id).AvailableGameModes.Contains(GameData.GameMode))
GameData.Songs.Add(id);
}
break;
- case ESongSource.TR_ALLSONGS:
+ case ESongSource.TR_SONGSOURCE_ALLSONGS:
ReadOnlyCollection avSongs = CBase.Songs.GetSongs();
- GameData.Songs.AddRange(avSongs.Where(song => song.AvailableGameModes.Contains(AvailableGameModes[GameData.GameMode])).Select(song => song.ID));
+ GameData.Songs.AddRange(avSongs.Where(song => song.AvailableGameModes.Contains(GameData.GameMode)).Select(song => song.ID));
break;
- case ESongSource.TR_CATEGORY:
+ case ESongSource.TR_SONGSOURCE_CATEGORY:
+ CBase.Songs.SortSongs(GameData.Sorting, EOffOn.TR_CONFIG_ON, CBase.Config.GetIgnoreArticles(), "", EDuetOptions.All, -1);
CBase.Songs.SetCategory(GameData.CategoryIndex);
avSongs = CBase.Songs.GetVisibleSongs();
- GameData.Songs.AddRange(avSongs.Where(song => song.AvailableGameModes.Contains(AvailableGameModes[GameData.GameMode])).Select(song => song.ID));
+ GameData.Songs.AddRange(avSongs.Where(song => song.AvailableGameModes.Contains(GameData.GameMode)).Select(song => song.ID));
CBase.Songs.SetCategory(-1);
break;
@@ -478,7 +487,6 @@ namespace VocaluxeLib.PartyModes.TicTacToe
return;
CRound round = GameData.Rounds[roundNr];
- bool isDuet = CBase.Songs.GetSongByID(round.SongID).IsDuet;
for (int i = 0; i < 2; i++)
{
@@ -488,14 +496,10 @@ namespace VocaluxeLib.PartyModes.TicTacToe
//try to fill with the right data
players[0].ProfileID = GameData.ProfileIDsTeam1[round.SingerTeam1];
- if (isDuet)
- players[0].VoiceNr = 0;
-
players[1].ProfileID = GameData.ProfileIDsTeam2[round.SingerTeam2];
- if (isDuet)
- players[1].VoiceNr = 1;
- CBase.Game.AddSong(round.SongID, AvailableGameModes[GameData.GameMode]);
+ foreach(int song in round.SongIDs)
+ CBase.Game.AddSong(song, GameData.GameMode);
}
private void _SetNumJokers()
diff --git a/PartyModes/PartyModeTicTacToe/CPartyScreenTicTacToeConfig.cs b/PartyModes/PartyModeTicTacToe/CPartyScreenTicTacToeConfig.cs
index feeda81b..640fffbf 100644
--- a/PartyModes/PartyModeTicTacToe/CPartyScreenTicTacToeConfig.cs
+++ b/PartyModes/PartyModeTicTacToe/CPartyScreenTicTacToeConfig.cs
@@ -15,6 +15,7 @@
// along with Vocaluxe. If not, see .
#endregion
+using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
@@ -30,14 +31,12 @@ namespace VocaluxeLib.PartyModes.TicTacToe
// Version number for theme files. Increment it, if you've changed something on the theme files!
protected override int _ScreenVersion
{
- get { return 1; }
+ get { return 2; }
}
private const string _SelectSlideNumFields = "SelectSlideNumFields";
- private const string _SelectSlideSongSource = "SelectSlideSongSource";
- private const string _SelectSlidePlaylist = "SelectSlidePlaylist";
- private const string _SelectSlideCategory = "SelectSlideCategory";
- private const string _SelectSlideGameMode = "SelectSlideGameMode";
+ private const string _SelectSlideRefillJokers = "SelectSlideRefillJokers";
+
private const string _ButtonNext = "ButtonNext";
private const string _ButtonBack = "ButtonBack";
@@ -47,10 +46,7 @@ namespace VocaluxeLib.PartyModes.TicTacToe
{
base.Init();
- _ThemeSelectSlides = new string[]
- {
- _SelectSlideNumFields, _SelectSlideSongSource, _SelectSlidePlaylist, _SelectSlideCategory, _SelectSlideGameMode
- };
+ _ThemeSelectSlides = new string[] { _SelectSlideNumFields };
_ThemeButtons = new string[] {_ButtonNext, _ButtonBack};
}
@@ -135,102 +131,14 @@ namespace VocaluxeLib.PartyModes.TicTacToe
_SelectSlides[_SelectSlideNumFields].SelectedTag = _PartyMode.GameData.NumFields;
- _SelectSlides[_SelectSlideSongSource].Clear();
- _SelectSlides[_SelectSlideSongSource].SetValues((int)_PartyMode.GameData.SongSource);
-
- List playlists = CBase.Playlist.GetNames();
- _SelectSlides[_SelectSlidePlaylist].Clear();
- for (int i = 0; i < playlists.Count; i++)
- {
- string value = playlists[i] + " (" + CBase.Playlist.GetSongCount(i) + " " + CBase.Language.Translate("TR_SONGS", PartyModeID) + ")";
- _SelectSlides[_SelectSlidePlaylist].AddValue(value);
- }
- _SelectSlides[_SelectSlidePlaylist].Selection = _PartyMode.GameData.PlaylistID;
- _SelectSlides[_SelectSlidePlaylist].Visible = _PartyMode.GameData.SongSource == ESongSource.TR_PLAYLIST;
-
- _SelectSlides[_SelectSlideCategory].Clear();
- for (int i = 0; i < CBase.Songs.GetNumCategories(); i++)
- {
- CCategory cat = CBase.Songs.GetCategory(i);
- string value = cat.Name + " (" + cat.GetNumSongsNotSung() + " " + CBase.Language.Translate("TR_SONGS", PartyModeID) + ")";
- _SelectSlides[_SelectSlideCategory].AddValue(value);
- }
- _SelectSlides[_SelectSlideCategory].Selection = _PartyMode.GameData.CategoryIndex;
- _SelectSlides[_SelectSlideCategory].Visible = _PartyMode.GameData.SongSource == ESongSource.TR_CATEGORY;
-
- _SelectSlides[_SelectSlideGameMode].Visible = true;
- _SelectSlides[_SelectSlideGameMode].Clear();
- _SelectSlides[_SelectSlideGameMode].AddValues(_PartyMode.AvailableGameModes.Select(gm => gm.ToString()));
- _SelectSlides[_SelectSlideGameMode].Selection = _PartyMode.GameData.GameMode;
+ _SelectSlides[_SelectSlideRefillJokers].AddValues(Enum.GetNames(typeof(EOffOn)));
+ _SelectSlides[_SelectSlideRefillJokers].Selection = (int)_PartyMode.GameData.RefillJokers;
}
private void _UpdateSlides()
{
_PartyMode.GameData.NumFields = _SelectSlides[_SelectSlideNumFields].SelectedTag;
-
- _PartyMode.GameData.SongSource = (ESongSource)_SelectSlides[_SelectSlideSongSource].Selection;
- _PartyMode.GameData.PlaylistID = _SelectSlides[_SelectSlidePlaylist].Selection;
- _PartyMode.GameData.CategoryIndex = _SelectSlides[_SelectSlideCategory].Selection;
- _PartyMode.GameData.GameMode = _SelectSlides[_SelectSlideGameMode].Selection;
-
- EGameMode gm = _PartyMode.AvailableGameModes[_PartyMode.GameData.GameMode];
-
- if (_PartyMode.GameData.SongSource == ESongSource.TR_PLAYLIST)
- {
- if (CBase.Playlist.GetNumPlaylists() > 0)
- {
- if (CBase.Playlist.GetSongCount(_PartyMode.GameData.PlaylistID) > 0)
- {
- _ConfigOk = false;
- for (int i = 0; i < CBase.Playlist.GetSongCount(_PartyMode.GameData.PlaylistID); i++)
- {
- int id = CBase.Playlist.GetSong(_PartyMode.GameData.PlaylistID, i).SongID;
- _ConfigOk = CBase.Songs.GetSongByID(id).AvailableGameModes.Any(mode => mode == gm);
- if (_ConfigOk)
- break;
- }
- }
- else
- _ConfigOk = false;
- }
- else
- _ConfigOk = false;
- }
- if (_PartyMode.GameData.SongSource == ESongSource.TR_CATEGORY)
- {
- if (CBase.Songs.GetNumCategories() == 0)
- _ConfigOk = false;
- else if (CBase.Songs.GetNumSongsNotSungInCategory(_PartyMode.GameData.CategoryIndex) <= 0)
- _ConfigOk = false;
- else
- {
- CBase.Songs.SetCategory(_PartyMode.GameData.CategoryIndex);
- _ConfigOk = false;
- foreach (CSong song in CBase.Songs.GetVisibleSongs())
- {
- _ConfigOk = song.AvailableGameModes.Any(mode => mode == gm);
- if (_ConfigOk)
- break;
- }
- CBase.Songs.SetCategory(-1);
- }
- }
- if (_PartyMode.GameData.SongSource == ESongSource.TR_ALLSONGS)
- {
- if (CBase.Songs.GetNumSongs() > 0)
- {
- for (int i = 0; i < CBase.Songs.GetNumSongs(); i++)
- {
- _ConfigOk = CBase.Songs.GetSongByID(i).AvailableGameModes.Any(mode => mode == gm);
- if (_ConfigOk)
- break;
- }
- }
- else
- _ConfigOk = false;
- }
- _SelectSlides[_SelectSlideCategory].Visible = _PartyMode.GameData.SongSource == ESongSource.TR_CATEGORY;
- _SelectSlides[_SelectSlidePlaylist].Visible = _PartyMode.GameData.SongSource == ESongSource.TR_PLAYLIST;
+ _PartyMode.GameData.RefillJokers = (EOffOn)_SelectSlides[_SelectSlideRefillJokers].Selection;
}
}
}
\ No newline at end of file
diff --git a/PartyModes/PartyModeTicTacToe/CPartyScreenTicTacToeMain.cs b/PartyModes/PartyModeTicTacToe/CPartyScreenTicTacToeMain.cs
index 35f45351..6f7eab3c 100644
--- a/PartyModes/PartyModeTicTacToe/CPartyScreenTicTacToeMain.cs
+++ b/PartyModes/PartyModeTicTacToe/CPartyScreenTicTacToeMain.cs
@@ -394,13 +394,13 @@ namespace VocaluxeLib.PartyModes.TicTacToe
if (_PartyMode.GameData.Rounds[i].Finished)
{
_Fields[i].Selectable = false;
- _Fields[i].Texture = CBase.Songs.GetSongByID(_PartyMode.GameData.Rounds[i].SongID).CoverTextureBig;
+ _Fields[i].Texture = CBase.Songs.GetSongByID(_PartyMode.GameData.Rounds[i].SongIDs[0]).CoverTextureBig;
_Fields[i].Color = CBase.Themes.GetPlayerColor(_PartyMode.GameData.Rounds[i].Winner);
_Fields[i].SelColor = CBase.Themes.GetPlayerColor(_PartyMode.GameData.Rounds[i].Winner);
}
if (_Status == EStatus.FieldSelected && _PartyMode.GameData.FieldNr == i)
{
- _Fields[i].Texture = CBase.Songs.GetSongByID(_PartyMode.GameData.Rounds[i].SongID).CoverTextureBig;
+ _Fields[i].Texture = CBase.Songs.GetSongByID(_PartyMode.GameData.Rounds[i].SongIDs[0]).CoverTextureBig;
_Fields[i].Color = new SColorF(1, 1, 1, 1);
_Fields[i].SelColor = new SColorF(1, 1, 1, 1);
_Fields[i].Selectable = false;
@@ -441,12 +441,16 @@ namespace VocaluxeLib.PartyModes.TicTacToe
_UpdatePlayerInformation();
}
_PartyMode.UpdateSongList();
- int songID = _PartyMode.GameData.Songs[0];
- _PartyMode.GameData.Songs.RemoveAt(0);
+ int[] songIDs = new int[_PartyMode.GameData.GameMode == EGameMode.TR_GAMEMODE_MEDLEY ? _PartyMode.GameData.NumMedleySongs : 1];
+ for(int i = 0; i < songIDs.Length; i++)
+ {
+ songIDs[i] = _PartyMode.GameData.Songs[0];
+ _PartyMode.GameData.Songs.RemoveAt(0);
+ }
- _StartPreview(songID);
+ _StartPreview(songIDs[0]);
_Status = EStatus.FieldSelected;
- _PartyMode.GameData.Rounds[_PartyMode.GameData.FieldNr].SongID = songID;
+ _PartyMode.GameData.Rounds[_PartyMode.GameData.FieldNr].SongIDs = songIDs;
_UpdateFieldContents();
_UpdateJokerButtons();
@@ -459,10 +463,10 @@ namespace VocaluxeLib.PartyModes.TicTacToe
private void _FieldSelectedAgain()
{
- int songID = _PartyMode.GameData.Rounds[_OldSelectedField].SongID;
- _StartPreview(songID);
+ int[] songIDs = _PartyMode.GameData.Rounds[_OldSelectedField].SongIDs;
+ _StartPreview(songIDs[0]);
_Status = EStatus.FieldSelected;
- _PartyMode.GameData.Rounds[_PartyMode.GameData.FieldNr].SongID = songID;
+ _PartyMode.GameData.Rounds[_PartyMode.GameData.FieldNr].SongIDs = songIDs;
_PartyMode.GameData.Rounds[_PartyMode.GameData.FieldNr].SingerTeam1 = _PartyMode.GameData.Rounds[_OldSelectedField].SingerTeam1;
_PartyMode.GameData.Rounds[_PartyMode.GameData.FieldNr].SingerTeam2 = _PartyMode.GameData.Rounds[_OldSelectedField].SingerTeam2;
_UpdateFieldContents();
diff --git a/PartyModes/PartyModeTicTacToe/CPartyScreenTicTacToeSongs.cs b/PartyModes/PartyModeTicTacToe/CPartyScreenTicTacToeSongs.cs
new file mode 100644
index 00000000..a899cc61
--- /dev/null
+++ b/PartyModes/PartyModeTicTacToe/CPartyScreenTicTacToeSongs.cs
@@ -0,0 +1,84 @@
+#region license
+// This file is part of Vocaluxe.
+//
+// Vocaluxe is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Vocaluxe is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Vocaluxe. If not, see .
+#endregion
+
+using System.Collections.Generic;
+using VocaluxeLib.Menu;
+
+namespace VocaluxeLib.PartyModes.TicTacToe
+{
+ class CPartyScreenTicTacToeSongs : CMenuPartySongSelection
+ {
+ protected override int _ScreenVersion
+ {
+ get { return 1; }
+ }
+
+ private new CPartyModeTicTacToe _PartyMode;
+
+ public override void Init()
+ {
+ base.Init();
+ _PartyMode = (CPartyModeTicTacToe)base._PartyMode;
+ }
+
+ public override void OnShow()
+ {
+ Source = _PartyMode.GameData.SongSource;
+ Sorting = _PartyMode.GameData.Sorting;
+ Category = _PartyMode.GameData.CategoryIndex;
+ Playlist = _PartyMode.GameData.PlaylistID;
+ SongMode = _PartyMode.GameData.GameMode;
+ NumMedleySongs = _PartyMode.GameData.NumMedleySongs;
+
+ base.OnShow();
+ }
+
+ public override void Back()
+ {
+ _SaveConfig();
+ _PartyMode.Back();
+ }
+
+ public override void Next()
+ {
+ _SaveConfig();
+ _PartyMode.Next();
+ }
+
+ public override bool UpdateGame()
+ {
+ return true;
+ }
+
+ protected override void _SetAllowedOptions()
+ {
+ base._SetAllowedOptions();
+
+ AllowedSongModes = new EGameMode[] { EGameMode.TR_GAMEMODE_NORMAL, EGameMode.TR_GAMEMODE_SHORTSONG, EGameMode.TR_GAMEMODE_MEDLEY };
+ }
+
+ private void _SaveConfig()
+ {
+ _PartyMode.GameData.SongSource = Source;
+ _PartyMode.GameData.Sorting = Sorting;
+ _PartyMode.GameData.CategoryIndex = Category;
+ _PartyMode.GameData.PlaylistID = Playlist;
+ _PartyMode.GameData.GameMode = SongMode;
+ _PartyMode.GameData.NumMedleySongs = NumMedleySongs;
+ }
+ }
+}
diff --git a/PartyModes/PartyModeTicTacToe/PartyModeTicTacToe.csproj b/PartyModes/PartyModeTicTacToe/PartyModeTicTacToe.csproj
index 599cfeec..2c6f46d4 100644
--- a/PartyModes/PartyModeTicTacToe/PartyModeTicTacToe.csproj
+++ b/PartyModes/PartyModeTicTacToe/PartyModeTicTacToe.csproj
@@ -70,6 +70,7 @@
ManagedMinimumRules.ruleset
+
@@ -108,4 +109,4 @@ rm -f "$(SolutionDir)Output\PartyModes\$(TargetName)\Code\GlobalSuppressions.cs"
-->
-
+
\ No newline at end of file
diff --git a/Vocaluxe.sln b/Vocaluxe.sln
index 3a32f864..a9b3384d 100644
--- a/Vocaluxe.sln
+++ b/Vocaluxe.sln
@@ -1,10 +1,10 @@
Microsoft Visual Studio Solution File, Format Version 12.00
-VisualStudioVersion = 12.0.31101.0
+# Visual Studio 15
+VisualStudioVersion = 15.0.26730.10
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Vocaluxe", "Vocaluxe\Vocaluxe.csproj", "{2A1E0F2D-5392-4BB7-B0A1-A9DFA13E79FF}"
ProjectSection(ProjectDependencies) = postProject
{55F89808-4E79-4FFE-BC13-48258913F5C9} = {55F89808-4E79-4FFE-BC13-48258913F5C9}
- {6F3E1874-F28A-40E9-AFBD-31934D593678} = {6F3E1874-F28A-40E9-AFBD-31934D593678}
{6F3E1874-F28A-40E9-AFBD-31934D593679} = {6F3E1874-F28A-40E9-AFBD-31934D593679}
{D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC} = {D2B6DDEF-E0E1-4DDF-A73A-E6ACEF5C95EC}
{5A4053F1-5AD5-441F-B254-D97A088127B6} = {5A4053F1-5AD5-441F-B254-D97A088127B6}
@@ -17,8 +17,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PartyModeTicTacToe", "Party
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PartyModeChallenge", "PartyModes\PartyModeChallenge\PartyModeChallenge.csproj", "{5A4053F1-5AD5-441F-B254-D97A088127B6}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PartyModeChallengeMedley", "PartyModes\PartyModeChallengeMedley\PartyModeChallengeMedley.csproj", "{6F3E1874-F28A-40E9-AFBD-31934D593678}"
-EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebserverInitalConfig", "WebserverInitalConfig\WebserverInitalConfig.csproj", "{55F89808-4E79-4FFE-BC13-48258913F5C9}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PitchTracker", "PitchTracker\PitchTracker.vcxproj", "{54A48AF7-515C-4EDD-B395-2BFFA096050A}"
@@ -124,26 +122,6 @@ Global
{5A4053F1-5AD5-441F-B254-D97A088127B6}.ReleaseWin|x64.Build.0 = ReleaseWin|Any CPU
{5A4053F1-5AD5-441F-B254-D97A088127B6}.ReleaseWin|x86.ActiveCfg = ReleaseWin|Any CPU
{5A4053F1-5AD5-441F-B254-D97A088127B6}.ReleaseWin|x86.Build.0 = ReleaseWin|Any CPU
- {6F3E1874-F28A-40E9-AFBD-31934D593678}.DebugLinux|x64.ActiveCfg = DebugLinux|Any CPU
- {6F3E1874-F28A-40E9-AFBD-31934D593678}.DebugLinux|x64.Build.0 = DebugLinux|Any CPU
- {6F3E1874-F28A-40E9-AFBD-31934D593678}.DebugLinux|x86.ActiveCfg = DebugLinux|Any CPU
- {6F3E1874-F28A-40E9-AFBD-31934D593678}.DebugLinux|x86.Build.0 = DebugLinux|Any CPU
- {6F3E1874-F28A-40E9-AFBD-31934D593678}.DebugWin|x64.ActiveCfg = DebugWin|Any CPU
- {6F3E1874-F28A-40E9-AFBD-31934D593678}.DebugWin|x64.Build.0 = DebugWin|Any CPU
- {6F3E1874-F28A-40E9-AFBD-31934D593678}.DebugWin|x86.ActiveCfg = DebugWin|Any CPU
- {6F3E1874-F28A-40E9-AFBD-31934D593678}.DebugWin|x86.Build.0 = DebugWin|Any CPU
- {6F3E1874-F28A-40E9-AFBD-31934D593678}.InstallerWin|x64.ActiveCfg = InstallerWin|Any CPU
- {6F3E1874-F28A-40E9-AFBD-31934D593678}.InstallerWin|x64.Build.0 = InstallerWin|Any CPU
- {6F3E1874-F28A-40E9-AFBD-31934D593678}.InstallerWin|x86.ActiveCfg = InstallerWin|Any CPU
- {6F3E1874-F28A-40E9-AFBD-31934D593678}.InstallerWin|x86.Build.0 = InstallerWin|Any CPU
- {6F3E1874-F28A-40E9-AFBD-31934D593678}.ReleaseLinux|x64.ActiveCfg = ReleaseLinux|Any CPU
- {6F3E1874-F28A-40E9-AFBD-31934D593678}.ReleaseLinux|x64.Build.0 = ReleaseLinux|Any CPU
- {6F3E1874-F28A-40E9-AFBD-31934D593678}.ReleaseLinux|x86.ActiveCfg = ReleaseLinux|Any CPU
- {6F3E1874-F28A-40E9-AFBD-31934D593678}.ReleaseLinux|x86.Build.0 = ReleaseLinux|Any CPU
- {6F3E1874-F28A-40E9-AFBD-31934D593678}.ReleaseWin|x64.ActiveCfg = ReleaseWin|Any CPU
- {6F3E1874-F28A-40E9-AFBD-31934D593678}.ReleaseWin|x64.Build.0 = ReleaseWin|Any CPU
- {6F3E1874-F28A-40E9-AFBD-31934D593678}.ReleaseWin|x86.ActiveCfg = ReleaseWin|Any CPU
- {6F3E1874-F28A-40E9-AFBD-31934D593678}.ReleaseWin|x86.Build.0 = ReleaseWin|Any CPU
{55F89808-4E79-4FFE-BC13-48258913F5C9}.DebugLinux|x64.ActiveCfg = Debug|Any CPU
{55F89808-4E79-4FFE-BC13-48258913F5C9}.DebugLinux|x86.ActiveCfg = Debug|Any CPU
{55F89808-4E79-4FFE-BC13-48258913F5C9}.DebugWin|x64.ActiveCfg = Debug|Any CPU
@@ -204,4 +182,7 @@ Global
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {5545CBA7-F7A7-4E72-B230-F6A6C3AD0A09}
+ EndGlobalSection
EndGlobal
diff --git a/Vocaluxe/Base/CConfig.cs b/Vocaluxe/Base/CConfig.cs
index 3cc7d685..f39398f9 100644
--- a/Vocaluxe/Base/CConfig.cs
+++ b/Vocaluxe/Base/CConfig.cs
@@ -186,7 +186,6 @@ namespace Vocaluxe.Base
}
public static SConfig Config;
- public static bool LoadOldThemeFiles;
public static event OnSongMenuChanged SongMenuChanged;
//Folders
@@ -705,11 +704,6 @@ namespace Vocaluxe.Base
ProfileFolders.Clear();
ProfileFolders.Add(value);
break;
-
- case "oldtheme":
- if (value == "yes")
- LoadOldThemeFiles = true;
- break;
}
}
}
diff --git a/Vocaluxe/Base/CMain.cs b/Vocaluxe/Base/CMain.cs
index 3a131649..dc0167dc 100644
--- a/Vocaluxe/Base/CMain.cs
+++ b/Vocaluxe/Base/CMain.cs
@@ -156,11 +156,6 @@ namespace Vocaluxe.Base
return CConfig.GetMaxNumMics();
}
- public bool GetLoadOldThemeFiles()
- {
- return CConfig.LoadOldThemeFiles;
- }
-
public void AddSongMenuListener(OnSongMenuChanged onSongMenuChanged)
{
CConfig.SongMenuChanged += onSongMenuChanged;
@@ -782,9 +777,9 @@ namespace Vocaluxe.Base
CSongs.ResetPartySongSung(catIndex);
}
- public void SortSongs(ESongSorting sorting, EOffOn tabs, EOffOn ignoreArticles, String searchString, EDuetOptions duetOptions)
+ public void SortSongs(ESongSorting sorting, EOffOn tabs, EOffOn ignoreArticles, String searchString, EDuetOptions duetOptions, int playlistID)
{
- CSongs.Sort(sorting, tabs, ignoreArticles, searchString, duetOptions);
+ CSongs.Sort(sorting, tabs, ignoreArticles, searchString, duetOptions, playlistID);
}
public void NextCategory()
@@ -1014,5 +1009,10 @@ namespace Vocaluxe.Base
{
return CPlaylists.GetSong(playlistID, songIndex);
}
+
+ public bool ContainsSong(int playlistID, int songID)
+ {
+ return CPlaylists.ContainsSong(playlistID, songID);
+ }
}
}
\ No newline at end of file
diff --git a/Vocaluxe/Base/CPlaylists.cs b/Vocaluxe/Base/CPlaylists.cs
index 9cc3201a..881d3ccb 100644
--- a/Vocaluxe/Base/CPlaylists.cs
+++ b/Vocaluxe/Base/CPlaylists.cs
@@ -204,6 +204,12 @@ namespace Vocaluxe.Base
return pl.Songs[songIndex];
}
+ public static bool ContainsSong(int playlistID, int songID)
+ {
+ CPlaylistFile pl = Get(playlistID);
+ return pl != null && pl.Songs.Find((x) => x.SongID == songID) != null;
+ }
+
#region private methods
private static void _SortByName()
{
diff --git a/Vocaluxe/Base/CSongFilter.cs b/Vocaluxe/Base/CSongFilter.cs
index 4c4f014e..20596803 100644
--- a/Vocaluxe/Base/CSongFilter.cs
+++ b/Vocaluxe/Base/CSongFilter.cs
@@ -29,6 +29,7 @@ namespace Vocaluxe.Base
private String _SearchString = String.Empty;
private EDuetOptions _DuetOptions = EDuetOptions.All;
+ private int _PlaylistID = -1;
public List FilteredSongs
{
@@ -67,10 +68,16 @@ namespace Vocaluxe.Base
public void SetOptions(String searchString, EDuetOptions duetOptions)
{
- if (searchString != _SearchString || duetOptions != _DuetOptions)
+ SetOptions(searchString, duetOptions, -1);
+ }
+
+ public void SetOptions(String searchString, EDuetOptions duetOptions, int playlistID)
+ {
+ if (searchString != _SearchString || duetOptions != _DuetOptions || playlistID != _PlaylistID)
{
_SearchString = searchString;
_DuetOptions = duetOptions;
+ _PlaylistID = playlistID;
_SetChanged();
}
}
@@ -88,6 +95,9 @@ namespace Vocaluxe.Base
foreach (CSong song in CSongs.Songs)
{
+ if (_PlaylistID != -1 && !CBase.Playlist.ContainsSong(_PlaylistID, song.ID))
+ continue;
+
if ((song.IsDuet && _DuetOptions != EDuetOptions.NoDuets) || (!song.IsDuet && _DuetOptions != EDuetOptions.Duets))
{
if (searchStrings == null)
diff --git a/Vocaluxe/Base/CSongs.cs b/Vocaluxe/Base/CSongs.cs
index 3216d620..ce0fbb66 100644
--- a/Vocaluxe/Base/CSongs.cs
+++ b/Vocaluxe/Base/CSongs.cs
@@ -324,9 +324,9 @@ namespace Vocaluxe.Base
_CategoriesForRandom.Clear();
}
- public static void Sort(ESongSorting sorting, EOffOn tabs, EOffOn ignoreArticles, String searchString, EDuetOptions duetOptions)
+ public static void Sort(ESongSorting sorting, EOffOn tabs, EOffOn ignoreArticles, String searchString, EDuetOptions duetOptions, int playlistID)
{
- Filter.SetOptions(searchString, duetOptions);
+ Filter.SetOptions(searchString, duetOptions, playlistID);
Sorter.SetOptions(sorting, ignoreArticles);
Categorizer.Tabs = tabs;
}
diff --git a/Vocaluxe/Screens/CScreenSong.cs b/Vocaluxe/Screens/CScreenSong.cs
index ad8c73d0..6d2d8be6 100644
--- a/Vocaluxe/Screens/CScreenSong.cs
+++ b/Vocaluxe/Screens/CScreenSong.cs
@@ -643,7 +643,12 @@ namespace Vocaluxe.Screens
_SelectedCategoryIndex = -2;
_Sso = CParty.GetSongSelectionOptions();
- CSongs.Sort(_Sso.Sorting.SongSorting, _Sso.Sorting.Tabs, _Sso.Sorting.IgnoreArticles, _Sso.Sorting.SearchString, _Sso.Sorting.DuetOptions);
+ CSongs.Sort(_Sso.Sorting.SongSorting, _Sso.Sorting.Tabs, _Sso.Sorting.IgnoreArticles, _Sso.Sorting.SearchString, _Sso.Sorting.DuetOptions, _Sso.Sorting.FilterPlaylistID);
+ if (_Sso.Selection.CategoryIndex != CBase.Songs.GetCurrentCategoryIndex())
+ {
+ _SelectedCategoryIndex = _Sso.Selection.CategoryIndex;
+ _SongMenu.EnterSelectedCategory();
+ }
_SearchActive = _Sso.Sorting.SearchActive;
_SearchText = _Sso.Sorting.SearchString;
@@ -774,7 +779,7 @@ namespace Vocaluxe.Screens
if (_Sso.Selection.PartyMode)
{
- CSongs.Sort(_Sso.Sorting.SongSorting, _Sso.Sorting.Tabs, _Sso.Sorting.IgnoreArticles, _Sso.Sorting.SearchString, _Sso.Sorting.DuetOptions);
+ CSongs.Sort(_Sso.Sorting.SongSorting, _Sso.Sorting.Tabs, _Sso.Sorting.IgnoreArticles, _Sso.Sorting.SearchString, _Sso.Sorting.DuetOptions, _Sso.Sorting.FilterPlaylistID);
_SearchActive = _Sso.Sorting.SearchActive;
_SearchText = _Sso.Sorting.SearchString;
@@ -1134,7 +1139,7 @@ namespace Vocaluxe.Screens
refresh = true;
}
- CSongs.Sort(_Sso.Sorting.SongSorting, _Sso.Sorting.Tabs, _Sso.Sorting.IgnoreArticles, newFilterString, _Sso.Sorting.DuetOptions);
+ CSongs.Sort(_Sso.Sorting.SongSorting, _Sso.Sorting.Tabs, _Sso.Sorting.IgnoreArticles, newFilterString, _Sso.Sorting.DuetOptions, _Sso.Sorting.FilterPlaylistID);
if (songID == -1 || CSongs.NumSongsVisible <= songIndex || CSongs.GetVisibleSongByIndex(songIndex).ID != songID)
refresh = true;
diff --git a/VocaluxeLib/Enums.cs b/VocaluxeLib/Enums.cs
index 39e8399f..8ba2a416 100644
--- a/VocaluxeLib/Enums.cs
+++ b/VocaluxeLib/Enums.cs
@@ -214,6 +214,13 @@ namespace VocaluxeLib
NoDuets
}
+ public enum ESongSource
+ {
+ TR_SONGSOURCE_ALLSONGS,
+ TR_SONGSOURCE_CATEGORY,
+ TR_SONGSOURCE_PLAYLIST
+ }
+
public enum ESongSorting
{
// ReSharper disable InconsistentNaming
diff --git a/VocaluxeLib/IBasic.cs b/VocaluxeLib/IBasic.cs
index 0e35883e..1ec80d1f 100644
--- a/VocaluxeLib/IBasic.cs
+++ b/VocaluxeLib/IBasic.cs
@@ -61,7 +61,6 @@ namespace VocaluxeLib
bool IsMicConfigured(int playerNr);
int GetMaxNumMics();
- bool GetLoadOldThemeFiles();
void AddSongMenuListener(OnSongMenuChanged onSongMenuChanged);
void RemoveSongMenuListener(OnSongMenuChanged onSongMenuChanged);
}
@@ -251,7 +250,7 @@ namespace VocaluxeLib
void AddPartySongSung(int songID);
void ResetSongSung(int catIndex = -1);
- void SortSongs(ESongSorting sorting, EOffOn tabs, EOffOn ignoreArticles, String searchString, EDuetOptions duetOptions);
+ void SortSongs(ESongSorting sorting, EOffOn tabs, EOffOn ignoreArticles, String searchString, EDuetOptions duetOptions, int playlistID);
void NextCategory();
void PrevCategory();
@@ -325,6 +324,7 @@ namespace VocaluxeLib
int GetSongCount(int playlistID);
CPlaylistSong GetSong(int playlistID, int songIndex);
+ bool ContainsSong(int playlistID, int songIndex);
}
public interface IPreviewPlayer
diff --git a/VocaluxeLib/Menu/CBackground.cs b/VocaluxeLib/Menu/CBackground.cs
index 611aa382..2035612e 100644
--- a/VocaluxeLib/Menu/CBackground.cs
+++ b/VocaluxeLib/Menu/CBackground.cs
@@ -20,7 +20,6 @@ using System.Xml.Serialization;
using System.Diagnostics;
using System.Collections.Generic;
using VocaluxeLib.Draw;
-using VocaluxeLib.Xml;
namespace VocaluxeLib.Menu
{
@@ -88,51 +87,6 @@ namespace VocaluxeLib.Menu
#endregion Constructors
#region public
- public bool LoadTheme(string xmlPath, string elementName, CXmlReader xmlReader)
- {
- string item = xmlPath + "/" + elementName;
- ThemeLoaded = true;
-
- ThemeLoaded &= xmlReader.TryGetEnumValue(item + "/Type", ref _Theme.Type);
-
- bool vid = xmlReader.GetValue(item + "/Video", out _Theme.VideoName, String.Empty);
- bool tex = xmlReader.GetValue(item + "/Skin", out _Theme.Skin, String.Empty);
- ThemeLoaded &= vid || tex || _Theme.Type == EBackgroundTypes.None;
-
- if (xmlReader.GetValue(item + "/Color", out _Theme.Color.Name, String.Empty))
- ThemeLoaded &= _Theme.Color.Get(_PartyModeID, out Color);
- else
- {
- bool success = true;
- success &= xmlReader.TryGetFloatValue(item + "/R", ref Color.R);
- success &= xmlReader.TryGetFloatValue(item + "/G", ref Color.G);
- success &= xmlReader.TryGetFloatValue(item + "/B", ref Color.B);
- success &= xmlReader.TryGetFloatValue(item + "/A", ref Color.A);
-
- if (_Theme.Type != EBackgroundTypes.None)
- ThemeLoaded &= success;
- }
-
- _Theme.Color.Color = Color;
-
- int i = 1;
-
- while (xmlReader.ItemExists(item + "/SlideShow" + i))
- {
- string slideShow;
- xmlReader.GetValue(item + "/SlideShow" + i, out slideShow, String.Empty);
- if (slideShow != "")
- _Theme.SlideShowTextures.Add(slideShow);
- i++;
- }
-
- if (ThemeLoaded)
- {
- _Theme.Name = elementName;
- LoadSkin();
- }
- return ThemeLoaded;
- }
public void Resume()
{
diff --git a/VocaluxeLib/Menu/CButton.cs b/VocaluxeLib/Menu/CButton.cs
index b0ca4a48..19c62d98 100644
--- a/VocaluxeLib/Menu/CButton.cs
+++ b/VocaluxeLib/Menu/CButton.cs
@@ -15,11 +15,9 @@
// along with Vocaluxe. If not, see .
#endregion
-using System;
using System.Diagnostics;
using System.Xml.Serialization;
using VocaluxeLib.Draw;
-using VocaluxeLib.Xml;
namespace VocaluxeLib.Menu
{
@@ -154,92 +152,6 @@ namespace VocaluxeLib.Menu
_SelReflectionSpace = button._SelReflectionSpace;
}
- public bool LoadTheme(string xmlPath, string elementName, CXmlReader xmlReader)
- {
- string item = xmlPath + "/" + elementName;
- ThemeLoaded = true;
-
- ThemeLoaded &= xmlReader.GetValue(item + "/Skin", out _Theme.Skin, String.Empty);
- ThemeLoaded &= xmlReader.GetValue(item + "/SkinSelected", out _Theme.SkinSelected, String.Empty);
-
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/X", ref _Theme.Rect.X);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Y", ref _Theme.Rect.Y);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Z", ref _Theme.Rect.Z);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/W", ref _Theme.Rect.W);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/H", ref _Theme.Rect.H);
-
- if (xmlReader.GetValue(item + "/Color", out _Theme.Color.Name, String.Empty))
- ThemeLoaded &= _Theme.Color.Get(_PartyModeID, out Color);
- else
- {
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/R", ref Color.R);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/G", ref Color.G);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/B", ref Color.B);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/A", ref Color.A);
- }
-
- if (xmlReader.GetValue(item + "/SColor", out _Theme.SelColor.Name, String.Empty))
- ThemeLoaded &= _Theme.SelColor.Get(_PartyModeID, out SelColor);
- else
- {
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/SR", ref SelColor.R);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/SG", ref SelColor.G);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/SB", ref SelColor.B);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/SA", ref SelColor.A);
- }
-
- ThemeLoaded &= Text.LoadTheme(item, "Text", xmlReader, true);
- Text.Z = Rect.Z;
- if (xmlReader.ItemExists(item + "/SText"))
- {
- ThemeLoaded &= _SelText.LoadTheme(item, "SText", xmlReader, true);
- _SelText.Z = Rect.Z;
- }
- else
- _SelText = null;
-
-
- //Reflections
- if (xmlReader.ItemExists(item + "/Reflection"))
- {
- _Reflection = true;
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Reflection/Space", ref _ReflectionSpace);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Reflection/Height", ref _ReflectionHeight);
-
- _Theme.Reflection = new SReflection(_ReflectionHeight, _ReflectionSpace);
- }
- else
- {
- _Reflection = false;
- _Theme.Reflection = null;
- }
-
- if (xmlReader.ItemExists(item + "/SReflection"))
- {
- _SelReflection = true;
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/SReflection/Space", ref _SelReflectionSpace);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/SReflection/Height", ref _SelReflectionHeight);
-
- _Theme.SelReflection = new SReflection(_SelReflectionHeight, _SelReflectionSpace);
- }
- else
- {
- _SelReflection = false;
- _Theme.SelReflection = null;
- }
-
- if (ThemeLoaded)
- {
- _Theme.Name = elementName;
- _Theme.Color.Color = Color;
- _Theme.SelColor.Color = SelColor;
- _ReadSubThemeElements();
-
- LoadSkin();
- }
- return ThemeLoaded;
- }
-
private void _ReadSubThemeElements()
{
_Theme.Text = (SThemeText)Text.GetTheme();
diff --git a/VocaluxeLib/Menu/CEqualizer.cs b/VocaluxeLib/Menu/CEqualizer.cs
index 6b14778d..cb4f6afe 100644
--- a/VocaluxeLib/Menu/CEqualizer.cs
+++ b/VocaluxeLib/Menu/CEqualizer.cs
@@ -15,10 +15,8 @@
// along with Vocaluxe. If not, see .
#endregion
-using System;
using System.Diagnostics;
using System.Xml.Serialization;
-using VocaluxeLib.Xml;
namespace VocaluxeLib.Menu
{
@@ -97,72 +95,6 @@ namespace VocaluxeLib.Menu
ThemeLoaded = true;
}
- public bool LoadTheme(string xmlPath, string elementName, CXmlReader xmlReader)
- {
- string item = xmlPath + "/" + elementName;
- ThemeLoaded = true;
-
- ThemeLoaded &= xmlReader.GetValue(item + "/Skin", out _Theme.Skin, String.Empty);
-
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/X", ref _Theme.Rect.X);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Y", ref _Theme.Rect.Y);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Z", ref _Theme.Rect.Z);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/W", ref _Theme.Rect.W);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/H", ref _Theme.Rect.H);
-
- ThemeLoaded &= xmlReader.TryGetIntValue(item + "/NumBars", ref _Theme.NumBars);
-
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Space", ref _Theme.Space);
-
- ThemeLoaded &= xmlReader.TryGetEnumValue(item + "/Style", ref _Theme.Style);
-
- ThemeLoaded &= xmlReader.TryGetEnumValue(item + "/DrawNegative", ref _Theme.DrawNegative);
-
- if (xmlReader.GetValue(item + "/Color", out _Theme.Color.Name, String.Empty))
- ThemeLoaded &= _Theme.Color.Get(_PartyModeID, out Color);
- else
- {
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/R", ref Color.R);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/G", ref Color.G);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/B", ref Color.B);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/A", ref Color.A);
- }
-
- if (xmlReader.GetValue(item + "/MaxColor", out _Theme.MaxColor.Name, String.Empty))
- ThemeLoaded &= _Theme.MaxColor.Get(_PartyModeID, out MaxColor);
- else
- {
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/MaxR", ref MaxColor.R);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/MaxG", ref MaxColor.G);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/MaxB", ref MaxColor.B);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/MaxA", ref MaxColor.A);
- }
-
- //Reflection
- if (xmlReader.ItemExists(item + "/Reflection"))
- {
- Reflection = true;
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Reflection/Space", ref ReflectionSpace);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Reflection/Height", ref ReflectionHeight);
-
- _Theme.Reflection = new SReflection(ReflectionHeight, ReflectionSpace);
- }
- else
- {
- Reflection = false;
- _Theme.Reflection = null;
- }
-
- if (ThemeLoaded)
- {
- _Theme.Name = elementName;
- _Theme.Color.Color = Color;
- _Theme.MaxColor.Color = MaxColor;
- LoadSkin();
- }
- return ThemeLoaded;
- }
-
public void Update(float[] weights, float volume)
{
if (weights == null || weights.Length == 0 || _Bars == null)
diff --git a/VocaluxeLib/Menu/CLyric.cs b/VocaluxeLib/Menu/CLyric.cs
index 1fa29533..97a5e60a 100644
--- a/VocaluxeLib/Menu/CLyric.cs
+++ b/VocaluxeLib/Menu/CLyric.cs
@@ -18,7 +18,6 @@
using System;
using System.Xml.Serialization;
using VocaluxeLib.Songs;
-using VocaluxeLib.Xml;
namespace VocaluxeLib.Menu
{
@@ -105,47 +104,6 @@ namespace VocaluxeLib.Menu
ThemeLoaded = true;
}
- public bool LoadTheme(string xmlPath, string elementName, CXmlReader xmlReader)
- {
- string item = xmlPath + "/" + elementName;
- ThemeLoaded = true;
-
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/X", ref _Theme.Rect.X);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Y", ref _Theme.Rect.Y);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Z", ref _Theme.Rect.Z);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/W", ref _Theme.Rect.W);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/H", ref _Theme.Rect.H);
-
- if (xmlReader.GetValue(item + "/Color", out _Theme.Color.Name, String.Empty))
- ThemeLoaded &= _Theme.Color.Get(_PartyModeID, out _Color);
- else
- {
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/R", ref _Color.R);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/G", ref _Color.G);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/B", ref _Color.B);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/A", ref _Color.A);
- }
-
- if (xmlReader.GetValue(item + "/SColor", out _Theme.ProcessedColor.Name, String.Empty))
- ThemeLoaded &= _Theme.ProcessedColor.Get(_PartyModeID, out _ColorProcessed);
- else
- {
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/SR", ref _ColorProcessed.R);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/SG", ref _ColorProcessed.G);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/SB", ref _ColorProcessed.B);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/SA", ref _ColorProcessed.A);
- }
-
- if (ThemeLoaded)
- {
- _Theme.Name = elementName;
- _Theme.Color.Color = _Color;
- _Theme.ProcessedColor.Color = _ColorProcessed;
- LoadSkin();
- }
- return ThemeLoaded;
- }
-
public void SetLine(CSongLine line)
{
_Line = line;
diff --git a/VocaluxeLib/Menu/CMenu.cs b/VocaluxeLib/Menu/CMenu.cs
index 1dd7d049..3ea5af46 100644
--- a/VocaluxeLib/Menu/CMenu.cs
+++ b/VocaluxeLib/Menu/CMenu.cs
@@ -141,20 +141,6 @@ namespace VocaluxeLib.Menu
private delegate void AddElementHandler(T element, String key);
- private void _LoadThemeElement(IEnumerable elements, AddElementHandler addElementHandler, CXmlReader xmlReader) where T : IThemeable
- {
- if (elements != null)
- {
- foreach (string elName in elements)
- {
- var element = (T)Activator.CreateInstance(typeof(T), PartyModeID);
- if (element.LoadTheme("//root/" + ThemeName, elName, xmlReader))
- addElementHandler(element, elName);
- else
- CBase.Log.LogError("Can't load " + typeof(T).Name.Substring(1) + " \"" + elName + "\" in screen " + ThemeName);
- }
- }
- }
private class CLoadThemeErrorHandler : CXmlDeserializer.CXmlDefaultErrorHandler
{
@@ -178,12 +164,6 @@ namespace VocaluxeLib.Menu
public virtual void LoadTheme(string xmlPath)
{
- if (CBase.Config.GetLoadOldThemeFiles())
- {
- LoadThemeOld(xmlPath);
- return;
- }
-
ThemePath = xmlPath;
string file = Path.Combine(xmlPath, ThemeName + ".xml");
@@ -268,61 +248,6 @@ namespace VocaluxeLib.Menu
_ScreenSettings.Add(name, screenSetting);
}
- public void LoadThemeOld(string xmlPath)
- {
- string file = Path.Combine(xmlPath, ThemeName + ".xml");
-
- CXmlReader xmlReader = CXmlReader.OpenFile(file);
- if (xmlReader == null)
- return;
-
- bool versionCheck = _CheckVersion(_ScreenVersion, xmlReader);
-
- if (versionCheck)
- {
- ThemePath = xmlPath;
- _LoadThemeBasics(xmlReader);
-
- _LoadThemeElement(_ThemeBackgrounds, _AddBackground, xmlReader);
- _LoadThemeElement(_ThemeStatics, _AddStatic, xmlReader);
- _LoadThemeElement(_ThemeTexts, _AddText, xmlReader);
- _LoadThemeElement(_ThemeButtons, _AddButton, xmlReader);
- _LoadThemeElement(_ThemeSelectSlides, _AddSelectSlide, xmlReader);
- foreach (string elName in _ThemeSongMenus)
- {
- ISongMenu element = CSongMenuFactory.CreateSongMenu(PartyModeID);
- if (element.LoadTheme("//root/" + ThemeName, elName, xmlReader))
- _AddSongMenu(element, elName);
- else
- CBase.Log.LogError("Can't load songmenu \"" + elName + "\" in screen " + ThemeName);
- }
- _LoadThemeElement(_ThemeSongMenus, _AddSongMenu, xmlReader);
- _LoadThemeElement(_ThemeLyrics, _AddLyric, xmlReader);
- _LoadThemeElement(_ThemeSingNotes, _AddSingNote, xmlReader);
- _LoadThemeElement(_ThemeNameSelections, _AddNameSelection, xmlReader);
- _LoadThemeElement(_ThemeEqualizers, _AddEqualizer, xmlReader);
- _LoadThemeElement(_ThemePlaylists, _AddPlaylist, xmlReader);
- _LoadThemeElement(_ThemeParticleEffects, _AddParticleEffect, xmlReader);
- _LoadThemeElement(_ThemeScreenSettings, _AddScreenSetting, xmlReader);
- }
-
- Theme.Informations.ScreenName = ThemeName;
- Theme.Informations.ScreenVersion = _ScreenVersion;
- Theme.Backgrounds = new List();
- Theme.Statics = new List();
- Theme.Texts = new List();
- Theme.Buttons = new List();
- Theme.SongMenus = new List();
- Theme.Lyrics = new List();
- Theme.SelectSlides = new List();
- Theme.SingNotes = new List();
- Theme.NameSelections = new List();
- Theme.Equalizers = new List();
- Theme.Playlists = new List();
- Theme.ParticleEffects = new List();
- Theme.ScreenSettings = new List();
- }
-
private static void _AddThemeablesToList(ICollection themeList, IEnumerable objects) where T : IThemeable
{
themeList.Clear();
@@ -553,67 +478,6 @@ namespace VocaluxeLib.Menu
}
#region Theme Handling
- private bool _CheckVersion(int reqVersion, CXmlReader xmlReader)
- {
- int actualVersion = 0;
- xmlReader.TryGetIntValue("//root/" + ThemeName + "/ScreenVersion", ref actualVersion);
-
- if (actualVersion == reqVersion)
- return true;
- string msg = "Can't load screen file of screen \"" + ThemeName + "\", ";
- if (actualVersion < reqVersion)
- msg += "the file ist outdated! ";
- else
- msg += "the file is for newer program versions! ";
-
- msg += "Current screen version is " + reqVersion;
- CBase.Log.LogError(msg);
- return false;
- }
-
- private void _LoadThemeBasics(CXmlReader xmlReader)
- {
- // Backgrounds
- var background = new CBackground(PartyModeID);
- int i = 1;
- while (background.LoadTheme("//root/" + ThemeName, "Background" + i, xmlReader))
- {
- _AddBackground(background);
- background = new CBackground(PartyModeID);
- i++;
- }
-
- // Statics
- var stat = new CStatic(PartyModeID);
- i = 1;
- while (stat.LoadTheme("//root/" + ThemeName, "Static" + i, xmlReader))
- {
- _AddStatic(stat);
- stat = new CStatic(PartyModeID);
- i++;
- }
-
- // Texts
- var text = new CText(PartyModeID);
- i = 1;
- while (text.LoadTheme("//root/" + ThemeName, "Text" + i, xmlReader))
- {
- _AddText(text);
- text = new CText(PartyModeID);
- i++;
- }
-
- // ParticleEffects
- var partef = new CParticleEffect(PartyModeID);
- i = 1;
- while (partef.LoadTheme("//root/" + ThemeName, "ParticleEffect" + i, xmlReader))
- {
- _AddParticleEffect(partef);
- partef = new CParticleEffect(PartyModeID);
- i++;
- }
- }
-
private void _ReloadThemeEditMode()
{
CBase.Themes.Reload();
diff --git a/VocaluxeLib/Menu/CMenuPartySongSelection.cs b/VocaluxeLib/Menu/CMenuPartySongSelection.cs
new file mode 100644
index 00000000..815d4ded
--- /dev/null
+++ b/VocaluxeLib/Menu/CMenuPartySongSelection.cs
@@ -0,0 +1,262 @@
+#region license
+// This file is part of Vocaluxe.
+//
+// Vocaluxe is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Vocaluxe is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Vocaluxe. If not, see .
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Windows.Forms;
+using VocaluxeLib.Draw;
+using VocaluxeLib.Songs;
+
+namespace VocaluxeLib.Menu
+{
+ public abstract class CMenuPartySongSelection : CMenuParty
+ {
+ private const string _ButtonNext = "ButtonNext";
+ private const string _ButtonBack = "ButtonBack";
+
+ private const string _SelectSlideSongMode = "SelectSlideSongMode";
+ private const string _SelectSlideSource = "SelectSlideSource";
+ private const string _SelectSlidePlaylist = "SelectSlidePlaylist";
+ private const string _SelectSlideSorting = "SelectSlideSorting";
+ private const string _SelectSlideCategory = "SelectSlideCategory";
+ private const string _SelectSlideNumMedleySongs = "SelectSlideNumMedleySongs";
+
+ protected int Playlist;
+ protected EGameMode SongMode
+ {
+ get { return AllowedSongModes[_SongMode]; }
+ set
+ {
+ _SongMode = 0;
+ for (int i = 0; i < AllowedSongModes.Length; i++)
+ {
+ if (AllowedSongModes[i] == value)
+ {
+ _SongMode = i;
+ break;
+ }
+ }
+ }
+ }
+ private int _SongMode;
+
+ protected ESongSource Source
+ {
+ get { return AllowedSongSources[_Source]; }
+ set
+ {
+ _Source = 0;
+ for (int i = 0; i < AllowedSongSources.Length; i++)
+ {
+ if (AllowedSongSources[i] == value)
+ {
+ _Source = i;
+ break;
+ }
+ }
+ }
+ }
+ private int _Source;
+
+ protected ESongSorting Sorting
+ {
+ get { return AllowedSongSorting[_Sorting]; }
+ set
+ {
+ _Sorting = 0;
+ for (int i = 0; i < AllowedSongSorting.Length; i++)
+ {
+ if (AllowedSongSorting[i] == value)
+ {
+ _Sorting = i;
+ break;
+ }
+ }
+ }
+ }
+ private int _Sorting;
+
+ protected int Category;
+
+ protected EGameMode[] AllowedSongModes;
+ protected ESongSource[] AllowedSongSources;
+ protected ESongSorting[] AllowedSongSorting;
+
+ protected int NumMedleySongs = 5;
+ protected int NumMinMedleySongs = 3;
+ protected int NumMaxMedleySongs = 10;
+
+ public override void Init()
+ {
+ base.Init();
+
+ _ThemeButtons = new string[]{ _ButtonNext, _ButtonBack};
+ _ThemeSelectSlides = new string[] { _SelectSlideSongMode, _SelectSlideSource, _SelectSlidePlaylist, _SelectSlideSorting, _SelectSlideCategory, _SelectSlideNumMedleySongs };
+
+ _SetAllowedOptions();
+ }
+
+ public override bool HandleInput(SKeyEvent keyEvent)
+ {
+ base.HandleInput(keyEvent);
+
+ switch (keyEvent.Key)
+ {
+ case Keys.Back:
+ case Keys.Escape:
+ Back();
+ break;
+ case Keys.Enter:
+ if (_Buttons[_ButtonNext].Selected)
+ Next();
+ else if (_Buttons[_ButtonBack].Selected)
+ Back();
+ break;
+
+ case Keys.Left:
+ case Keys.Right:
+ _GetSelectedOptions();
+ _UpdateSelectSlideVisibility();
+ break;
+ }
+
+ return true;
+ }
+
+ public override bool HandleMouse(SMouseEvent mouseEvent)
+ {
+ base.HandleMouse(mouseEvent);
+
+ if (mouseEvent.LB && _IsMouseOverCurSelection(mouseEvent))
+ {
+ if (_Buttons[_ButtonBack].Selected)
+ Back();
+ else if (_Buttons[_ButtonNext].Selected)
+ Next();
+ else
+ {
+ _GetSelectedOptions();
+ _UpdateSelectSlideVisibility();
+ }
+ }
+ else if (mouseEvent.RB)
+ Back();
+
+ return true;
+ }
+
+ public abstract void Back();
+ public abstract void Next();
+
+ public override void OnShow()
+ {
+ base.OnShow();
+
+ CBase.Songs.SortSongs(Sorting, EOffOn.TR_CONFIG_ON, CBase.Config.GetIgnoreArticles(), "", EDuetOptions.All, -1);
+
+ _FillSlides();
+ _SetSelectedOptions();
+ _UpdateSelectSlideVisibility();
+ }
+
+ private void _FillSlides()
+ {
+ _SelectSlides[_SelectSlideSongMode].Clear();
+ foreach (EGameMode gm in AllowedSongModes)
+ _SelectSlides[_SelectSlideSongMode].AddValue(gm.ToString());
+
+ _SelectSlides[_SelectSlideSource].Clear();
+ foreach (ESongSource ss in AllowedSongSources)
+ _SelectSlides[_SelectSlideSource].AddValue(ss.ToString());
+
+ _SelectSlides[_SelectSlideSorting].Clear();
+ foreach (ESongSorting ss in AllowedSongSorting)
+ _SelectSlides[_SelectSlideSorting].AddValue(ss.ToString());
+
+ _SelectSlides[_SelectSlidePlaylist].Clear();
+ List playlists = CBase.Playlist.GetNames();
+ for (int i = 0; i < playlists.Count; i++)
+ {
+ string value = playlists[i] + " (" + CBase.Playlist.GetSongCount(i) + " " + CBase.Language.Translate("TR_SONGS", PartyModeID) + ")";
+ _SelectSlides[_SelectSlidePlaylist].AddValue(value);
+ }
+
+ _SelectSlides[_SelectSlideNumMedleySongs].Clear();
+ for(int num = NumMinMedleySongs; num <= NumMaxMedleySongs; num++)
+ {
+ _SelectSlides[_SelectSlideNumMedleySongs].AddValue(num + " " + CBase.Language.Translate("TR_SONGS", PartyModeID));
+ }
+
+ _FillCategorySlide();
+ }
+
+ private void _FillCategorySlide()
+ {
+ _SelectSlides[_SelectSlideCategory].Clear();
+ for (int i = 0; i < CBase.Songs.GetNumCategories(); i++)
+ {
+ CCategory cat = CBase.Songs.GetCategory(i);
+ string value = cat.Name + " (" + cat.GetNumSongsNotSung() + " " + CBase.Language.Translate("TR_SONGS", PartyModeID) + ")";
+ _SelectSlides[_SelectSlideCategory].AddValue(value);
+ }
+ }
+
+ private void _GetSelectedOptions()
+ {
+ _SongMode = _SelectSlides[_SelectSlideSongMode].Selection;
+ _Source = _SelectSlides[_SelectSlideSource].Selection;
+ NumMedleySongs = NumMinMedleySongs + _SelectSlides[_SelectSlideNumMedleySongs].Selection;
+ Playlist = _SelectSlides[_SelectSlidePlaylist].Selection;
+
+ if (_SelectSlides[_SelectSlideSorting].Selection != _Sorting)
+ {
+ _Sorting = _SelectSlides[_SelectSlideSorting].Selection;
+ CBase.Songs.SortSongs(Sorting, EOffOn.TR_CONFIG_ON, CBase.Config.GetIgnoreArticles(), "", EDuetOptions.All, -1);
+ _FillCategorySlide();
+
+ _SelectSlides[_SelectSlideCategory].Selection = 0;
+ }
+
+ Category = _SelectSlides[_SelectSlideCategory].Selection;
+ }
+
+ private void _SetSelectedOptions()
+ {
+ _SelectSlides[_SelectSlideSongMode].Selection = _SongMode;
+ _SelectSlides[_SelectSlideSource].Selection = _Source;
+ _SelectSlides[_SelectSlideNumMedleySongs].Selection = NumMedleySongs - NumMinMedleySongs;
+ _SelectSlides[_SelectSlidePlaylist].Selection = Playlist;
+ _SelectSlides[_SelectSlideSorting].Selection = _Sorting;
+ _SelectSlides[_SelectSlideCategory].Selection = Category;
+ }
+
+ private void _UpdateSelectSlideVisibility()
+ {
+ _SelectSlides[_SelectSlideNumMedleySongs].Visible = SongMode == EGameMode.TR_GAMEMODE_MEDLEY;
+ _SelectSlides[_SelectSlidePlaylist].Visible = Source == ESongSource.TR_SONGSOURCE_PLAYLIST;
+ _SelectSlides[_SelectSlideSorting].Visible = Source == ESongSource.TR_SONGSOURCE_CATEGORY;
+ _SelectSlides[_SelectSlideCategory].Visible = Source == ESongSource.TR_SONGSOURCE_CATEGORY;
+ }
+
+ protected virtual void _SetAllowedOptions()
+ {
+ AllowedSongModes = (EGameMode[])Enum.GetValues(typeof(EGameMode));
+ AllowedSongSources = (ESongSource[])Enum.GetValues(typeof(ESongSource));
+ AllowedSongSorting = (ESongSorting[])Enum.GetValues(typeof(ESongSorting));
+ }
+ }
+}
diff --git a/VocaluxeLib/Menu/CNameSelection.cs b/VocaluxeLib/Menu/CNameSelection.cs
index 1718d047..dae50da6 100644
--- a/VocaluxeLib/Menu/CNameSelection.cs
+++ b/VocaluxeLib/Menu/CNameSelection.cs
@@ -15,13 +15,11 @@
// along with Vocaluxe. If not, see .
#endregion
-using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Xml.Serialization;
using VocaluxeLib.Draw;
using VocaluxeLib.Profile;
-using VocaluxeLib.Xml;
namespace VocaluxeLib.Menu
{
@@ -152,64 +150,6 @@ namespace VocaluxeLib.Menu
UpdateList(0);
}
- public bool LoadTheme(string xmlPath, string elementName, CXmlReader xmlReader)
- {
- string item = xmlPath + "/" + elementName;
- ThemeLoaded = true;
-
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/X", ref _Theme.Rect.X);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Y", ref _Theme.Rect.Y);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Z", ref _Theme.Rect.Z);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/W", ref _Theme.Rect.W);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/H", ref _Theme.Rect.H);
-
- ThemeLoaded &= xmlReader.GetValue(item + "/SkinEmptyTile", out _Theme.SkinEmptyTile, String.Empty);
-
- if (xmlReader.GetValue(item + "/ColorEmptyTile", out _Theme.ColorEmptyTile.Name, String.Empty))
- ThemeLoaded &= _Theme.ColorEmptyTile.Get(_PartyModeID, out _ColorEmptyTile);
- else
- {
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/R", ref _ColorEmptyTile.R);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/G", ref _ColorEmptyTile.G);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/B", ref _ColorEmptyTile.B);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/A", ref _ColorEmptyTile.A);
- }
-
- ThemeLoaded &= xmlReader.GetValue(item + "/SkinTileSelected", out _Theme.SkinTileSelected, String.Empty);
-
- ThemeLoaded &= xmlReader.TryGetIntValue(item + "/Tiles/W", ref _Theme.Tiles.W);
- ThemeLoaded &= xmlReader.TryGetIntValue(item + "/Tiles/H", ref _Theme.Tiles.H);
- ThemeLoaded &= xmlReader.TryGetIntValue(item + "/Tiles/NumW", ref _Theme.Tiles.NumW);
- ThemeLoaded &= xmlReader.TryGetIntValue(item + "/Tiles/NumH", ref _Theme.Tiles.NumH);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Tiles/SpaceW", ref _Theme.Tiles.SpaceW);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Tiles/SpaceH", ref _Theme.Tiles.SpaceH);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Tiles/Name/Space", ref _Theme.Tiles.Name.Space);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Tiles/Name/H", ref _Theme.Tiles.Name.Height);
- ThemeLoaded &= xmlReader.GetValue(item + "/Tiles/Name/Font", out _Theme.Tiles.Name.Font, "Normal");
- ThemeLoaded &= xmlReader.TryGetEnumValue(item + "/Tiles/Name/Style", ref _Theme.Tiles.Name.Style);
- if (xmlReader.GetValue(item + "/Tiles/Name/Color", out _Theme.Tiles.Name.Color.Name, String.Empty))
- ThemeLoaded &= _Theme.Tiles.Name.Color.Get(_PartyModeID, out _ColorNameTile);
- else
- {
- if (xmlReader.TryGetFloatValue(item + "/Tiles/Name/R", ref _ColorNameTile.R))
- {
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Tiles/Name/G", ref _ColorNameTile.G);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Tiles/Name/B", ref _ColorNameTile.B);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Tiles/Name/A", ref _ColorNameTile.A);
- }
- }
-
-
- if (ThemeLoaded)
- {
- _Theme.Name = elementName;
- _Theme.Tiles.Name.Color.Color = _ColorNameTile;
- _Theme.ColorEmptyTile.Color = _ColorEmptyTile;
- LoadSkin();
- }
- return ThemeLoaded;
- }
-
public void Draw()
{
int i = 0;
diff --git a/VocaluxeLib/Menu/CParticleEffect.cs b/VocaluxeLib/Menu/CParticleEffect.cs
index 0638db52..e7ca4ae0 100644
--- a/VocaluxeLib/Menu/CParticleEffect.cs
+++ b/VocaluxeLib/Menu/CParticleEffect.cs
@@ -20,7 +20,6 @@ using System.Collections.Generic;
using System.Diagnostics;
using System.Xml.Serialization;
using VocaluxeLib.Draw;
-using VocaluxeLib.Xml;
namespace VocaluxeLib.Menu
{
@@ -127,42 +126,6 @@ namespace VocaluxeLib.Menu
ThemeLoaded = true;
}
- public bool LoadTheme(string xmlPath, string elementName, CXmlReader xmlReader)
- {
- string item = xmlPath + "/" + elementName;
- ThemeLoaded = true;
-
- ThemeLoaded &= xmlReader.GetValue(item + "/Skin", out _Theme.Skin, String.Empty);
-
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/X", ref _Theme.Rect.X);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Y", ref _Theme.Rect.Y);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Z", ref _Theme.Rect.Z);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/W", ref _Theme.Rect.W);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/H", ref _Theme.Rect.H);
-
- if (xmlReader.GetValue(item + "/Color", out _Theme.Color.Name, String.Empty))
- ThemeLoaded &= _Theme.Color.Get(_PartyModeID, out Color);
- else
- {
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/R", ref Color.R);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/G", ref Color.G);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/B", ref Color.B);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/A", ref Color.A);
- }
-
- ThemeLoaded &= xmlReader.TryGetEnumValue(item + "/Type", ref _Theme.Type);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Size", ref _Theme.Size);
- ThemeLoaded &= xmlReader.TryGetIntValue(item + "/MaxNumber", ref _Theme.MaxNumber);
-
- if (ThemeLoaded)
- {
- _Theme.Name = elementName;
- _Theme.Color.Color = Color;
- LoadSkin();
- }
- return ThemeLoaded;
- }
-
public void Update()
{
bool doSpawn = false;
diff --git a/VocaluxeLib/Menu/CPlaylist.cs b/VocaluxeLib/Menu/CPlaylist.cs
index 96a411cb..0a523d21 100644
--- a/VocaluxeLib/Menu/CPlaylist.cs
+++ b/VocaluxeLib/Menu/CPlaylist.cs
@@ -20,7 +20,6 @@ using System.Collections.Generic;
using System.Windows.Forms;
using System.Xml.Serialization;
using VocaluxeLib.Songs;
-using VocaluxeLib.Xml;
namespace VocaluxeLib.Menu
{
@@ -270,67 +269,6 @@ namespace VocaluxeLib.Menu
ThemeLoaded = true;
}
- public bool LoadTheme(string xmlPath, string elementName, CXmlReader xmlReader)
- {
- string item = xmlPath + "/" + elementName;
- ThemeLoaded = true;
-
- ThemeLoaded &= xmlReader.GetValue(item + "/SkinBackground", out _Theme.SkinBackground, String.Empty);
- ThemeLoaded &= xmlReader.GetValue(item + "/SkinBackgroundSelected", out _Theme.SkinBackgroundSelected, String.Empty);
-
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/X", ref _Theme.Rect.X);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Y", ref _Theme.Rect.Y);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Z", ref _Theme.Rect.Z);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/W", ref _Theme.Rect.W);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/H", ref _Theme.Rect.H);
- if (xmlReader.GetValue(item + "/ColorBackground", out _Theme.ColorBackground.Name, String.Empty))
- ThemeLoaded &= _Theme.ColorBackground.Get(_PartyModeID, out _BackgroundColor);
- else
- {
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/BackgroundR", ref _BackgroundColor.R);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/BackgroundG", ref _BackgroundColor.G);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/BackgroundB", ref _BackgroundColor.B);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/BackgroundA", ref _BackgroundColor.A);
- }
- if (xmlReader.GetValue(item + "/SColorBackground", out _Theme.SelColorBackground.Name, String.Empty))
- ThemeLoaded &= _Theme.SelColorBackground.Get(_PartyModeID, out _BackgroundSelColor);
- else
- {
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/SBackgroundR", ref _BackgroundSelColor.R);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/SBackgroundG", ref _BackgroundSelColor.G);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/SBackgroundB", ref _BackgroundSelColor.B);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/SBackgroundA", ref _BackgroundSelColor.A);
- }
-
- ThemeLoaded &= _Text1.LoadTheme(item, "TextPart1", xmlReader);
-
- CStatic tmpStatic = new CStatic(_PartyModeID);
- ThemeLoaded &= tmpStatic.LoadTheme(item, "StaticCover", xmlReader);
- ThemeLoaded &= _StaticPlaylistHeader.LoadTheme(item, "StaticPlaylistHeader", xmlReader);
- ThemeLoaded &= _StaticPlaylistFooter.LoadTheme(item, "StaticPlaylistFooter", xmlReader);
-
- ThemeLoaded &= _ButtonPlaylistName.LoadTheme(item, "ButtonPlaylistName", xmlReader);
- ThemeLoaded &= _ButtonPlaylistSing.LoadTheme(item, "ButtonPlaylistSing", xmlReader);
- ThemeLoaded &= _ButtonPlaylistClose.LoadTheme(item, "ButtonPlaylistClose", xmlReader);
- ThemeLoaded &= _ButtonPlaylistSave.LoadTheme(item, "ButtonPlaylistSave", xmlReader);
- ThemeLoaded &= _ButtonPlaylistDelete.LoadTheme(item, "ButtonPlaylistDelete", xmlReader);
-
- ThemeLoaded &= _SelectSlideGameMode.LoadTheme(item, "SelectSlideGameMode", xmlReader);
-
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/EntryHeight", ref _Theme.EntryHeight);
- if (ThemeLoaded)
- {
- _Theme.Name = elementName;
- _Theme.ColorBackground.Color = _BackgroundColor;
- _Theme.SelColorBackground.Color = _BackgroundSelColor;
- _Theme.StaticCover = (SThemeStatic)tmpStatic.GetTheme();
- _ReadSubThemeElements();
-
- LoadSkin();
- }
- return ThemeLoaded;
- }
-
private void _ReadSubThemeElements()
{
_Theme.Text1 = (SThemeText)_Text1.GetTheme();
diff --git a/VocaluxeLib/Menu/CProgressBar.cs b/VocaluxeLib/Menu/CProgressBar.cs
index f7cbf6fd..476ca29f 100644
--- a/VocaluxeLib/Menu/CProgressBar.cs
+++ b/VocaluxeLib/Menu/CProgressBar.cs
@@ -191,12 +191,6 @@ namespace VocaluxeLib.Menu
_AnimTimer = new Stopwatch();
}
- public bool LoadTheme(string xmlPath, string elementName, CXmlReader xmlReader)
- {
- //Will be removed
- return false;
- }
-
public void Reset(bool animateInit = false)
{
_Animate = animateInit;
diff --git a/VocaluxeLib/Menu/CScreenSetting.cs b/VocaluxeLib/Menu/CScreenSetting.cs
index 35148cf7..56dfc7c7 100644
--- a/VocaluxeLib/Menu/CScreenSetting.cs
+++ b/VocaluxeLib/Menu/CScreenSetting.cs
@@ -18,7 +18,6 @@
using System;
using System.Xml.Serialization;
using VocaluxeLib.Draw;
-using VocaluxeLib.Xml;
namespace VocaluxeLib.Menu
{
@@ -71,19 +70,6 @@ namespace VocaluxeLib.Menu
_Theme = theme;
}
- public bool LoadTheme(string xmlPath, string elementName, CXmlReader xmlReader)
- {
- string item = xmlPath + "/" + elementName;
- _ThemeLoaded = true;
-
- _ThemeLoaded &= xmlReader.GetValue(item + "/Value", out _Theme.Value, String.Empty);
- _ThemeLoaded &= xmlReader.TryGetEnumValue(item + "/Type", ref _Theme.Type);
-
- if (_ThemeLoaded)
- _Theme.Name = elementName;
- return _ThemeLoaded;
- }
-
public object GetValue()
{
switch (_Theme.Type)
diff --git a/VocaluxeLib/Menu/CSelectSlide.cs b/VocaluxeLib/Menu/CSelectSlide.cs
index fa6310b2..ee1765fc 100644
--- a/VocaluxeLib/Menu/CSelectSlide.cs
+++ b/VocaluxeLib/Menu/CSelectSlide.cs
@@ -22,7 +22,6 @@ using System.Diagnostics;
using System.Drawing;
using System.Xml.Serialization;
using VocaluxeLib.Draw;
-using VocaluxeLib.Xml;
namespace VocaluxeLib.Menu
{
@@ -270,122 +269,6 @@ namespace VocaluxeLib.Menu
ThemeLoaded = true;
}
- public bool LoadTheme(string xmlPath, string elementName, CXmlReader xmlReader)
- {
- string item = xmlPath + "/" + elementName;
- ThemeLoaded = true;
-
- ThemeLoaded &= xmlReader.GetValue(item + "/Skin", out _Theme.Skin, String.Empty);
- ThemeLoaded &= xmlReader.GetValue(item + "/SkinArrowLeft", out _Theme.SkinArrowLeft, String.Empty);
- ThemeLoaded &= xmlReader.GetValue(item + "/SkinArrowRight", out _Theme.SkinArrowRight, String.Empty);
-
- ThemeLoaded &= xmlReader.GetValue(item + "/SkinSelected", out _Theme.SkinSelected, String.Empty);
- ThemeLoaded &= xmlReader.GetValue(item + "/SkinArrowLeftSelected", out _Theme.SkinArrowLeftSelected, String.Empty);
- ThemeLoaded &= xmlReader.GetValue(item + "/SkinArrowRightSelected", out _Theme.SkinArrowRightSelected, String.Empty);
-
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/X", ref _Theme.Rect.X);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Y", ref _Theme.Rect.Y);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Z", ref _Theme.Rect.Z);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/W", ref _Theme.Rect.W);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/H", ref _Theme.Rect.H);
-
- if (xmlReader.GetValue(item + "/Color", out _Theme.Color.Name, String.Empty))
- ThemeLoaded &= _Theme.Color.Get(_PartyModeID, out _Color);
- else
- {
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/R", ref _Color.R);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/G", ref _Color.G);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/B", ref _Color.B);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/A", ref _Color.A);
- }
-
- if (xmlReader.GetValue(item + "/SColor", out _Theme.SelColor.Name, String.Empty))
- ThemeLoaded &= _Theme.SelColor.Get(_PartyModeID, out _SelColor);
- else
- {
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/SR", ref _SelColor.R);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/SG", ref _SelColor.G);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/SB", ref _SelColor.B);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/SA", ref _SelColor.A);
- }
-
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/ArrowLeftX", ref RectArrowLeft.X);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/ArrowLeftY", ref RectArrowLeft.Y);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/ArrowLeftZ", ref RectArrowLeft.Z);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/ArrowLeftW", ref RectArrowLeft.W);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/ArrowLeftH", ref RectArrowLeft.H);
-
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/ArrowRightX", ref RectArrowRight.X);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/ArrowRightY", ref RectArrowRight.Y);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/ArrowRightZ", ref RectArrowRight.Z);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/ArrowRightW", ref RectArrowRight.W);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/ArrowRightH", ref RectArrowRight.H);
-
- if (xmlReader.GetValue(item + "/ArrowColor", out _Theme.ArrowColor.Name, String.Empty))
- ThemeLoaded &= _Theme.ArrowColor.Get(_PartyModeID, out _ColorArrow);
- else
- {
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/ArrowR", ref _ColorArrow.R);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/ArrowG", ref _ColorArrow.G);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/ArrowB", ref _ColorArrow.B);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/ArrowA", ref _ColorArrow.A);
- }
-
- if (xmlReader.GetValue(item + "/ArrowSColor", out _Theme.ArrowSelColor.Name, String.Empty))
- ThemeLoaded &= _Theme.ArrowSelColor.Get(_PartyModeID, out _SelColorArrow);
- else
- {
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/ArrowSR", ref _SelColorArrow.R);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/ArrowSG", ref _SelColorArrow.G);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/ArrowSB", ref _SelColorArrow.B);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/ArrowSA", ref _SelColorArrow.A);
- }
-
- if (xmlReader.GetValue(item + "/TextColor", out _Theme.TextColor.Name, String.Empty))
- ThemeLoaded &= _Theme.TextColor.Get(_PartyModeID, out _TextColor);
- else
- {
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/TextR", ref _TextColor.R);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/TextG", ref _TextColor.G);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/TextB", ref _TextColor.B);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/TextA", ref _TextColor.A);
- }
-
- if (xmlReader.GetValue(item + "/TextSColor", out _Theme.TextSelColor.Name, String.Empty))
- ThemeLoaded &= _Theme.TextSelColor.Get(_PartyModeID, out _SelTextColor);
- else
- {
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/TextSR", ref _SelTextColor.R);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/TextSG", ref _SelTextColor.G);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/TextSB", ref _SelTextColor.B);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/TextSA", ref _SelTextColor.A);
- }
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/TextH", ref _Theme.TextH);
- xmlReader.TryGetFloatValue(item + "/TextRelativeX", ref _Theme.TextRelativeX);
- xmlReader.TryGetFloatValue(item + "/TextRelativeY", ref _Theme.TextRelativeY);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/TextMaxW", ref _Theme.TextMaxW);
-
- ThemeLoaded &= xmlReader.GetValue(item + "/TextFont", out _Theme.TextFont, "Normal");
- ThemeLoaded &= xmlReader.TryGetEnumValue(item + "/TextStyle", ref _Theme.TextStyle);
-
- ThemeLoaded &= xmlReader.TryGetIntValue(item + "/NumVisible", ref _Theme.NumVisible);
-
- if (ThemeLoaded)
- {
- _Theme.Name = elementName;
- _Theme.ArrowColor.Color = _ColorArrow;
- _Theme.ArrowSelColor.Color = _SelColorArrow;
- _Theme.Color.Color = _Color;
- _Theme.RectArrowLeft = RectArrowLeft;
- _Theme.RectArrowRight = RectArrowRight;
- _Theme.SelColor.Color = _SelColor;
- _Theme.TextColor.Color = _TextColor;
- _Theme.TextSelColor.Color = _SelTextColor;
- LoadSkin();
- }
- return ThemeLoaded;
- }
-
private void _Invalidate()
{
_NeedsRevalidate = true;
diff --git a/VocaluxeLib/Menu/CStatic.cs b/VocaluxeLib/Menu/CStatic.cs
index 9f7ca429..66091e98 100644
--- a/VocaluxeLib/Menu/CStatic.cs
+++ b/VocaluxeLib/Menu/CStatic.cs
@@ -15,11 +15,9 @@
// along with Vocaluxe. If not, see .
#endregion
-using System;
using System.Diagnostics;
using System.Xml.Serialization;
using VocaluxeLib.Draw;
-using VocaluxeLib.Xml;
namespace VocaluxeLib.Menu
{
@@ -122,52 +120,6 @@ namespace VocaluxeLib.Menu
ThemeLoaded = true;
}
- public bool LoadTheme(string xmlPath, string elementName, CXmlReader xmlReader)
- {
- string item = xmlPath + "/" + elementName;
- ThemeLoaded = true;
-
- ThemeLoaded &= xmlReader.GetValue(item + "/Skin", out _Theme.Skin, String.Empty);
-
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/X", ref _Theme.Rect.X);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Y", ref _Theme.Rect.Y);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Z", ref _Theme.Rect.Z);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/W", ref _Theme.Rect.W);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/H", ref _Theme.Rect.H);
-
- if (xmlReader.GetValue(item + "/Color", out _Theme.Color.Name, String.Empty))
- ThemeLoaded &= _Theme.Color.Get(_PartyModeID, out Color);
- else
- {
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/R", ref Color.R);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/G", ref Color.G);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/B", ref Color.B);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/A", ref Color.A);
- }
-
- _Theme.Color.Color = Color;
-
- if (xmlReader.ItemExists(item + "/Reflection"))
- {
- Reflection = true;
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Reflection/Space", ref ReflectionSpace);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Reflection/Height", ref ReflectionHeight);
- _Theme.Reflection = new SReflection(ReflectionHeight, ReflectionSpace);
- }
- else
- {
- Reflection = false;
- _Theme.Reflection = null;
- }
-
- if (ThemeLoaded)
- {
- _Theme.Name = elementName;
- LoadSkin();
- }
- return ThemeLoaded;
- }
-
public void Draw()
{
Draw(Aspect);
diff --git a/VocaluxeLib/Menu/CText.cs b/VocaluxeLib/Menu/CText.cs
index 3a923a6d..5f162da6 100644
--- a/VocaluxeLib/Menu/CText.cs
+++ b/VocaluxeLib/Menu/CText.cs
@@ -18,7 +18,6 @@
using System;
using System.Drawing;
using System.Xml.Serialization;
-using VocaluxeLib.Xml;
namespace VocaluxeLib.Menu
{
@@ -294,79 +293,6 @@ namespace VocaluxeLib.Menu
ThemeLoaded = true;
}
- public bool LoadTheme(string xmlPath, string elementName, CXmlReader xmlReader)
- {
- return LoadTheme(xmlPath, elementName, xmlReader, false);
- }
-
- public bool LoadTheme(string xmlPath, string elementName, CXmlReader xmlReader, bool buttonText)
- {
- string item = xmlPath + "/" + elementName;
- ThemeLoaded = true;
-
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/X", ref _Theme.X);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Y", ref _Theme.Y);
-
- if (!buttonText)
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Z", ref _Theme.Z);
-
- xmlReader.TryGetFloatValue(item + "/MaxW", ref _Theme.MaxWidth);
-
- if (xmlReader.GetValue(item + "/Color", out _Theme.Color.Name, String.Empty))
- ThemeLoaded &= _Theme.Color.Get(_PartyModeID, out Color);
- else
- {
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/R", ref Color.R);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/G", ref Color.G);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/B", ref Color.B);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/A", ref Color.A);
- }
-
- if (xmlReader.GetValue(item + "/SColor", out _Theme.SelColor.Name, String.Empty))
- ThemeLoaded &= _Theme.SelColor.Get(_PartyModeID, out SelColor);
- else
- {
- if (xmlReader.TryGetFloatValue(item + "/SR", ref SelColor.R))
- {
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/SG", ref SelColor.G);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/SB", ref SelColor.B);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/SA", ref SelColor.A);
- }
- }
-
- ThemeLoaded &= xmlReader.TryGetEnumValue(item + "/Align", ref _Align);
- xmlReader.TryGetEnumValue(item + "/ResizeAlign", ref _ResizeAlign);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/H", ref _Theme.FontHeight);
- ThemeLoaded &= xmlReader.TryGetEnumValue(item + "/Style", ref _Theme.FontStyle);
- ThemeLoaded &= xmlReader.GetValue(item + "/Font", out _Theme.FontFamily);
-
- ThemeLoaded &= xmlReader.GetValue(item + "/Text", out _Theme.Text);
-
- if (xmlReader.ItemExists(item + "/Reflection") && !buttonText)
- {
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Reflection/Space", ref _ReflectionSpace);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/Reflection/Height", ref _ReflectionHeight);
- _Theme.Reflection = new SReflection(_ReflectionHeight, _ReflectionSpace);
- }
- else
- _Theme.Reflection = null;
-
-
- // Set values
- _Theme.Name = elementName;
- _Theme.Align = _Align;
- _Theme.Color.Color = Color;
- _Theme.ResizeAlign = _ResizeAlign;
- _Theme.SelColor.Color = SelColor;
-
- _ButtonText = buttonText;
- _PositionNeedsUpdate = true;
-
- if (ThemeLoaded)
- LoadSkin();
- return ThemeLoaded;
- }
-
public void Draw()
{
_Draw(false);
diff --git a/VocaluxeLib/Menu/IThemeable.cs b/VocaluxeLib/Menu/IThemeable.cs
index 8576904d..3039bb9c 100644
--- a/VocaluxeLib/Menu/IThemeable.cs
+++ b/VocaluxeLib/Menu/IThemeable.cs
@@ -25,8 +25,6 @@ namespace VocaluxeLib.Menu
object GetTheme();
bool ThemeLoaded { get; }
- bool LoadTheme(string xmlPath, string elementName, CXmlReader xmlReader);
-
void UnloadSkin();
void LoadSkin();
void ReloadSkin();
diff --git a/VocaluxeLib/Menu/SingNotes/CSingNotes.cs b/VocaluxeLib/Menu/SingNotes/CSingNotes.cs
index 5dee6b02..2f9f7d60 100644
--- a/VocaluxeLib/Menu/SingNotes/CSingNotes.cs
+++ b/VocaluxeLib/Menu/SingNotes/CSingNotes.cs
@@ -20,7 +20,6 @@ using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Xml.Serialization;
-using VocaluxeLib.Xml;
namespace VocaluxeLib.Menu.SingNotes
{
@@ -105,55 +104,6 @@ namespace VocaluxeLib.Menu.SingNotes
public bool ThemeLoaded { get; private set; }
- public bool LoadTheme(string xmlPath, string elementName, CXmlReader xmlReader)
- {
- string item = xmlPath + "/" + elementName;
- ThemeLoaded = true;
-
- ThemeLoaded &= xmlReader.GetValue(item + "/SkinLeft", out _Theme.SkinLeft, String.Empty);
- ThemeLoaded &= xmlReader.GetValue(item + "/SkinMiddle", out _Theme.SkinMiddle, String.Empty);
- ThemeLoaded &= xmlReader.GetValue(item + "/SkinRight", out _Theme.SkinRight, String.Empty);
-
- ThemeLoaded &= xmlReader.GetValue(item + "/SkinFillLeft", out _Theme.SkinLeft, String.Empty);
- ThemeLoaded &= xmlReader.GetValue(item + "/SkinFillMiddle", out _Theme.SkinMiddle, String.Empty);
- ThemeLoaded &= xmlReader.GetValue(item + "/SkinFillRight", out _Theme.SkinRight, String.Empty);
-
- ThemeLoaded &= xmlReader.GetValue(item + "/SkinBackgroundLeft", out _Theme.SkinBackgroundLeft, String.Empty);
- ThemeLoaded &= xmlReader.GetValue(item + "/SkinBackgroundMiddle", out _Theme.SkinBackgroundMiddle, String.Empty);
- ThemeLoaded &= xmlReader.GetValue(item + "/SkinBackgroundRight", out _Theme.SkinBackgroundRight, String.Empty);
-
- ThemeLoaded &= xmlReader.GetValue(item + "/SkinGoldenStar", out _Theme.SkinGoldenStar, String.Empty);
- ThemeLoaded &= xmlReader.GetValue(item + "/SkinToneHelper", out _Theme.SkinToneHelper, String.Empty);
- ThemeLoaded &= xmlReader.GetValue(item + "/SkinPerfectNoteStar", out _Theme.SkinPerfectNoteStart, String.Empty);
-
- int i = 0;
- _BarPos = new SRectF[CBase.Settings.GetMaxNumPlayer(),CBase.Settings.GetMaxNumPlayer()];
- for (int numplayer = 0; numplayer < CBase.Settings.GetMaxNumPlayer(); numplayer++)
- {
- for (int player = 0; player <= numplayer; player++)
- {
- _BarPos[player, numplayer] = new SRectF();
- string target = "/BarPositions/P" + (player + 1) + "N" + (numplayer + 1);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + target + "X", ref _BarPos[player, numplayer].X);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + target + "Y", ref _BarPos[player, numplayer].Y);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + target + "Z", ref _BarPos[player, numplayer].Z);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + target + "W", ref _BarPos[player, numplayer].W);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + target + "H", ref _BarPos[player, numplayer].H);
- _Theme.BarPos[i].Name = "P" + (player + 1) + "N" + (numplayer + 1);
- _Theme.BarPos[i].Rect = _BarPos[player, numplayer];
- i++;
- }
- }
-
- if (ThemeLoaded)
- {
- _Theme.Name = elementName;
- LoadSkin();
- }
-
- return ThemeLoaded;
- }
-
public void Init(int numPlayers)
{
PlayerNotes.Clear();
diff --git a/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs b/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs
index 21e66baf..d4328025 100644
--- a/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs
+++ b/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs
@@ -15,12 +15,10 @@
// along with Vocaluxe. If not, see .
#endregion
-using System;
using System.Diagnostics;
using System.Xml.Serialization;
using VocaluxeLib.PartyModes;
using VocaluxeLib.Songs;
-using VocaluxeLib.Xml;
namespace VocaluxeLib.Menu.SongMenu
{
@@ -201,80 +199,6 @@ namespace VocaluxeLib.Menu.SongMenu
{
return _Theme;
}
-
- public virtual bool LoadTheme(string xmlPath, string elementName, CXmlReader xmlReader)
- {
- string item = xmlPath + "/" + elementName;
- ThemeLoaded = true;
-
- ThemeLoaded &= xmlReader.GetValue(item + "/CoverBackground", out _Theme.CoverBackground, String.Empty);
- ThemeLoaded &= xmlReader.GetValue(item + "/CoverBigBackground", out _Theme.CoverBigBackground, String.Empty);
- ThemeLoaded &= xmlReader.GetValue(item + "/DuetIcon", out _Theme.DuetIcon, String.Empty);
- ThemeLoaded &= xmlReader.GetValue(item + "/VideoIcon", out _Theme.VideoIcon, String.Empty);
- ThemeLoaded &= xmlReader.GetValue(item + "/MedleyCalcIcon", out _Theme.MedleyCalcIcon, String.Empty);
- ThemeLoaded &= xmlReader.GetValue(item + "/MedleyTagIcon", out _Theme.MedleyTagIcon, String.Empty);
-
- if (xmlReader.GetValue(item + "/Color", out _Theme.Color.Name, String.Empty))
- ThemeLoaded &= _Theme.Color.Get(_PartyModeID, out _ColorInternal);
- else
- {
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/R", ref _ColorInternal.R);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/G", ref _ColorInternal.G);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/B", ref _ColorInternal.B);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/A", ref _ColorInternal.A);
- }
- _Theme.Color.Color = _ColorInternal;
-
- #region SongMenuTileBoard
- ThemeLoaded &= xmlReader.TryGetIntValue(item + "/SongMenuTileBoard/NumW", ref _Theme.SongMenuTileBoard.NumW);
- ThemeLoaded &= xmlReader.TryGetIntValue(item + "/SongMenuTileBoard/NumH", ref _Theme.SongMenuTileBoard.NumH);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/SongMenuTileBoard/SpaceW", ref _Theme.SongMenuTileBoard.SpaceW);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/SongMenuTileBoard/SpaceH", ref _Theme.SongMenuTileBoard.SpaceH);
-
- ThemeLoaded &= xmlReader.TryGetIntValue(item + "/SongMenuTileBoard/NumWsmall", ref _Theme.SongMenuTileBoard.NumWsmall);
- ThemeLoaded &= xmlReader.TryGetIntValue(item + "/SongMenuTileBoard/NumHsmall", ref _Theme.SongMenuTileBoard.NumHsmall);
-
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/SongMenuTileBoard/TileRectX", ref _Theme.SongMenuTileBoard.TileRect.X);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/SongMenuTileBoard/TileRectY", ref _Theme.SongMenuTileBoard.TileRect.Y);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/SongMenuTileBoard/TileRectZ", ref _Theme.SongMenuTileBoard.TileRect.Z);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/SongMenuTileBoard/TileRectW", ref _Theme.SongMenuTileBoard.TileRect.W);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/SongMenuTileBoard/TileRectH", ref _Theme.SongMenuTileBoard.TileRect.H);
-
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/SongMenuTileBoard/TileRectSmallX", ref _Theme.SongMenuTileBoard.TileRectSmall.X);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/SongMenuTileBoard/TileRectSmallY", ref _Theme.SongMenuTileBoard.TileRectSmall.Y);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/SongMenuTileBoard/TileRectSmallZ", ref _Theme.SongMenuTileBoard.TileRectSmall.Z);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/SongMenuTileBoard/TileRectSmallW", ref _Theme.SongMenuTileBoard.TileRectSmall.W);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/SongMenuTileBoard/TileRectSmallH", ref _Theme.SongMenuTileBoard.TileRectSmall.H);
- #endregion SongMenuTileBoard
-
- #region SongMenuList
- ThemeLoaded &= xmlReader.TryGetIntValue(item + "/SongMenuList/ListLength", ref _Theme.SongMenuList.ListLength);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/SongMenuList/SpaceW", ref _Theme.SongMenuList.SpaceW);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/SongMenuList/SpaceH", ref _Theme.SongMenuList.SpaceH);
-
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/SongMenuList/TileRect/X", ref _Theme.SongMenuList.TileRect.X);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/SongMenuList/TileRect/Y", ref _Theme.SongMenuList.TileRect.Y);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/SongMenuList/TileRect/Z", ref _Theme.SongMenuList.TileRect.Z);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/SongMenuList/TileRect/W", ref _Theme.SongMenuList.TileRect.W);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/SongMenuList/TileRect/H", ref _Theme.SongMenuList.TileRect.H);
-
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/SongMenuList/TileRectSmall/X", ref _Theme.SongMenuList.TileRectSmall.X);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/SongMenuList/TileRectSmall/Y", ref _Theme.SongMenuList.TileRectSmall.Y);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/SongMenuList/TileRectSmall/Z", ref _Theme.SongMenuList.TileRectSmall.Z);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/SongMenuList/TileRectSmall/W", ref _Theme.SongMenuList.TileRectSmall.W);
- ThemeLoaded &= xmlReader.TryGetFloatValue(item + "/SongMenuList/TileRectSmall/H", ref _Theme.SongMenuList.TileRectSmall.H);
- #endregion SongMenuList
-
- if (ThemeLoaded)
- {
- _Theme.Name = elementName;
-
- LoadSkin();
- Init();
- }
-
- return ThemeLoaded;
- }
#endregion Theme
public virtual void Init()
diff --git a/VocaluxeLib/Menu/SongMenu/CSongMenuList.cs b/VocaluxeLib/Menu/SongMenu/CSongMenuList.cs
index 8bbd810a..771854e1 100644
--- a/VocaluxeLib/Menu/SongMenu/CSongMenuList.cs
+++ b/VocaluxeLib/Menu/SongMenu/CSongMenuList.cs
@@ -22,7 +22,6 @@ using System.Windows.Forms;
using VocaluxeLib.Draw;
using VocaluxeLib.PartyModes;
using VocaluxeLib.Songs;
-using VocaluxeLib.Xml;
namespace VocaluxeLib.Menu.SongMenu
{
@@ -128,39 +127,6 @@ namespace VocaluxeLib.Menu.SongMenu
_SubElements.AddRange(new IMenuElement[] {_Artist, _Title, _SongLength, _DuetIcon, _VideoIcon, _MedleyCalcIcon, _MedleyTagIcon});
}
- public override bool LoadTheme(string xmlPath, string elementName, CXmlReader xmlReader)
- {
- string item = xmlPath + "/" + elementName;
-
- bool themeLoaded = true;
- themeLoaded &= base.LoadTheme(xmlPath, elementName, xmlReader);
-
-
- themeLoaded &= _Artist.LoadTheme(item + "/SongMenuList", "TextArtist", xmlReader);
- themeLoaded &= _Title.LoadTheme(item + "/SongMenuList", "TextTitle", xmlReader);
- themeLoaded &= _SongLength.LoadTheme(item + "/SongMenuList", "TextSongLength", xmlReader);
-
- themeLoaded &= _CoverBig.LoadTheme(item + "/SongMenuList", "StaticCoverBig", xmlReader);
- themeLoaded &= _TextBG.LoadTheme(item + "/SongMenuList", "StaticTextBG", xmlReader);
- themeLoaded &= _DuetIcon.LoadTheme(item + "/SongMenuList", "StaticDuetIcon", xmlReader);
- themeLoaded &= _VideoIcon.LoadTheme(item + "/SongMenuList", "StaticVideoIcon", xmlReader);
- themeLoaded &= _MedleyCalcIcon.LoadTheme(item + "/SongMenuList", "StaticMedleyCalcIcon", xmlReader);
- themeLoaded &= _MedleyTagIcon.LoadTheme(item + "/SongMenuList", "StaticMedleyTagIcon", xmlReader);
-
- if (themeLoaded)
- {
- _Theme.Name = elementName;
-
- _ReadSubTheme();
- _SubElements.Clear();
- _SubElements.AddRange(new IMenuElement[] { _Artist, _Title, _SongLength, _DuetIcon, _VideoIcon, _MedleyCalcIcon, _MedleyTagIcon });
- LoadSkin();
- Init();
- }
-
- return themeLoaded;
- }
-
private void _ReadSubTheme()
{
_Theme.SongMenuList.TextArtist = (SThemeText)_Artist.GetTheme();
diff --git a/VocaluxeLib/Menu/SongMenu/CSongMenuTileBoard.cs b/VocaluxeLib/Menu/SongMenu/CSongMenuTileBoard.cs
index f74e81f9..4dc50faf 100644
--- a/VocaluxeLib/Menu/SongMenu/CSongMenuTileBoard.cs
+++ b/VocaluxeLib/Menu/SongMenu/CSongMenuTileBoard.cs
@@ -22,7 +22,6 @@ using System.Windows.Forms;
using VocaluxeLib.Draw;
using VocaluxeLib.PartyModes;
using VocaluxeLib.Songs;
-using VocaluxeLib.Xml;
namespace VocaluxeLib.Menu.SongMenu
{
@@ -132,39 +131,6 @@ namespace VocaluxeLib.Menu.SongMenu
_Tiles[tileNr].Selected = true;
}
- public override bool LoadTheme(string xmlPath, string elementName, CXmlReader xmlReader)
- {
- string item = xmlPath + "/" + elementName;
-
- bool themeLoaded = true;
- themeLoaded &= base.LoadTheme(xmlPath, elementName, xmlReader);
-
-
- themeLoaded &= _Artist.LoadTheme(item + "/SongMenuTileBoard", "TextArtist", xmlReader);
- themeLoaded &= _Title.LoadTheme(item + "/SongMenuTileBoard", "TextTitle", xmlReader);
- themeLoaded &= _SongLength.LoadTheme(item + "/SongMenuTileBoard", "TextSongLength", xmlReader);
-
- themeLoaded &= _CoverBig.LoadTheme(item + "/SongMenuTileBoard", "StaticCoverBig", xmlReader);
- themeLoaded &= _TextBG.LoadTheme(item + "/SongMenuTileBoard", "StaticTextBG", xmlReader);
- themeLoaded &= _DuetIcon.LoadTheme(item + "/SongMenuTileBoard", "StaticDuetIcon", xmlReader);
- themeLoaded &= _VideoIcon.LoadTheme(item + "/SongMenuTileBoard", "StaticVideoIcon", xmlReader);
- themeLoaded &= _MedleyCalcIcon.LoadTheme(item + "/SongMenuTileBoard", "StaticMedleyCalcIcon", xmlReader);
- themeLoaded &= _MedleyTagIcon.LoadTheme(item + "/SongMenuTileBoard", "StaticMedleyTagIcon", xmlReader);
-
- if (themeLoaded)
- {
- _Theme.Name = elementName;
-
- _ReadSubTheme();
- _SubElements.Clear();
- _SubElements.AddRange(new IMenuElement[] {_Artist, _Title, _SongLength, _DuetIcon, _VideoIcon, _MedleyCalcIcon, _MedleyTagIcon});
- LoadSkin();
- Init();
- }
-
- return themeLoaded;
- }
-
private void _ReadSubTheme()
{
_Theme.SongMenuTileBoard.TextArtist = (SThemeText)_Artist.GetTheme();
diff --git a/VocaluxeLib/PartyModes/CPartyModeNormal.cs b/VocaluxeLib/PartyModes/CPartyModeNormal.cs
index a84ecb73..6d01ff74 100644
--- a/VocaluxeLib/PartyModes/CPartyModeNormal.cs
+++ b/VocaluxeLib/PartyModes/CPartyModeNormal.cs
@@ -67,6 +67,7 @@ namespace VocaluxeLib.PartyModes
_ScreenSongOptions.Sorting.SearchString = String.Empty;
_ScreenSongOptions.Sorting.SearchActive = false;
_ScreenSongOptions.Sorting.DuetOptions = EDuetOptions.All;
+ _ScreenSongOptions.Sorting.FilterPlaylistID = -1;
}
public override bool Init()
diff --git a/VocaluxeLib/PartyModes/IPartyMode.cs b/VocaluxeLib/PartyModes/IPartyMode.cs
index c2c431a2..a4bad99e 100644
--- a/VocaluxeLib/PartyModes/IPartyMode.cs
+++ b/VocaluxeLib/PartyModes/IPartyMode.cs
@@ -34,6 +34,7 @@ namespace VocaluxeLib.PartyModes
public EOffOn IgnoreArticles;
public string SearchString;
public bool SearchActive;
+ public int FilterPlaylistID; //show only songs that are in this playlist, -1 for all songs
public EDuetOptions DuetOptions;
}
@@ -47,6 +48,11 @@ namespace VocaluxeLib.PartyModes
///
public int SongIndex;
+ ///
+ /// If != -1, the SongMenu should enter show category based on provided category index if possible
+ ///
+ public int CategoryIndex;
+
///
/// If true, the SongMenu should perform the select random song method
///
diff --git a/VocaluxeLib/Structs.cs b/VocaluxeLib/Structs.cs
index 9c1d4a0b..5dbd582b 100644
--- a/VocaluxeLib/Structs.cs
+++ b/VocaluxeLib/Structs.cs
@@ -137,23 +137,6 @@ namespace VocaluxeLib
get { return A.HasValue; }
}
- ///
- /// Use only for old code! Remove when removing old LoadTheme()
- ///
- [XmlIgnore]
- public SColorF Color
- {
- set
- {
- if (NameSpecified)
- return;
- R = value.R;
- G = value.G;
- B = value.B;
- A = value.A;
- }
- }
-
public bool Get(int partyModeId, out SColorF color)
{
bool ok;
diff --git a/VocaluxeLib/VocaluxeLib.csproj b/VocaluxeLib/VocaluxeLib.csproj
index 2950a6ed..fd9b3302 100644
--- a/VocaluxeLib/VocaluxeLib.csproj
+++ b/VocaluxeLib/VocaluxeLib.csproj
@@ -96,6 +96,7 @@
+
@@ -115,8 +116,6 @@
-
-
diff --git a/VocaluxeLib/Xml/CXMLReader.cs b/VocaluxeLib/Xml/CXMLReader.cs
deleted file mode 100644
index 6ff2f612..00000000
--- a/VocaluxeLib/Xml/CXMLReader.cs
+++ /dev/null
@@ -1,137 +0,0 @@
-#region license
-// This file is part of Vocaluxe.
-//
-// Vocaluxe is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// Vocaluxe is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with Vocaluxe. If not, see .
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Xml.XPath;
-
-namespace VocaluxeLib.Xml
-{
- public class CXmlReader : CXmlReaderBase
- {
- private readonly XPathNavigator _Navigator;
- private readonly String _FilePath;
-
- public string FilePath
- {
- get { return _FilePath; }
- }
-
- //Private method. Use OpenFile factory method to get an instance
- private CXmlReader(string uri)
- {
- _FilePath = uri;
- var xmlDoc = new XPathDocument(uri);
- _Navigator = xmlDoc.CreateNavigator();
- }
-
- public XPathNavigator Navigator
- {
- get { return _Navigator; }
- }
-
- public static CXmlReader OpenFile(string fileName)
- {
- try
- {
- return new CXmlReader(fileName);
- }
- catch (Exception e)
- {
- CBase.Log.LogError("Can't open XML file: " + fileName + ": " + e.Message);
- return null;
- }
- }
-
- public override bool GetValue(string xPath, out string value, string defaultValue = "")
- {
- int resultCt = 0;
- string val = string.Empty;
-
- _Navigator.MoveToRoot();
- XPathNodeIterator iterator = _Navigator.Select(xPath);
-
- while (iterator.MoveNext())
- {
- val = iterator.Current.Value;
- resultCt++;
- }
-
- if (resultCt != 1)
- {
- value = defaultValue;
- return false;
- }
- value = val;
- return true;
- }
-
- public override bool GetAttribute(string xPath, string attribute, out string value)
- {
- _Navigator.MoveToRoot();
- XPathNodeIterator iterator = _Navigator.Select(xPath);
- if (iterator.MoveNext())
- {
- value = iterator.Current.GetAttribute(attribute, "");
- return true;
- }
- value = null;
- return false;
- }
-
- public List GetNames(string xPath)
- {
- var values = new List();
-
- _Navigator.MoveToRoot();
- XPathNodeIterator iterator = _Navigator.Select(xPath);
- while (iterator.MoveNext())
- values.Add(iterator.Current.LocalName);
-
- return values;
- }
-
- public IEnumerable GetAttributes(string xPath, string attribute)
- {
- var values = new List();
-
- _Navigator.MoveToRoot();
- XPathNodeIterator iterator = _Navigator.Select(xPath);
- while (iterator.MoveNext())
- values.Add(iterator.Current.GetAttribute(attribute, ""));
-
- return values;
- }
-
- public bool GetValues(string xPath, ref List values)
- {
- _Navigator.MoveToRoot();
- XPathNodeIterator iterator = _Navigator.Select(xPath);
- while (iterator.MoveNext())
- values.Add(iterator.Current.Value);
-
- return true;
- }
-
- public bool ItemExists(string xPath)
- {
- _Navigator.MoveToRoot();
-
- return _Navigator.Select(xPath).MoveNext();
- }
- }
-}
\ No newline at end of file
diff --git a/VocaluxeLib/Xml/CXmlReaderBase.cs b/VocaluxeLib/Xml/CXmlReaderBase.cs
deleted file mode 100644
index 739abd2f..00000000
--- a/VocaluxeLib/Xml/CXmlReaderBase.cs
+++ /dev/null
@@ -1,78 +0,0 @@
-#region license
-// This file is part of Vocaluxe.
-//
-// Vocaluxe is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// Vocaluxe is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with Vocaluxe. If not, see .
-#endregion
-
-using System;
-
-namespace VocaluxeLib.Xml
-{
- ///
- /// Base class that provides basic methods for reading xml, while the actual XML implementation is still abstract to allow different implementations
- ///
- public abstract class CXmlReaderBase
- {
- public abstract bool GetValue(string xPath, out string value, string defaultValue = "");
- public abstract bool GetAttribute(string xPath, string attribute, out string value);
-
- public bool TryGetBoolValue(string xPath, out bool value, bool defaultValue = false)
- {
- value = defaultValue;
- string val;
- return GetValue(xPath, out val) && bool.TryParse(val, out value);
- }
-
- public bool TryGetIntValue(string xPath, ref int value, int? defaultValue = null)
- {
- string val;
- bool ok = GetValue(xPath, out val) && int.TryParse(val, out value);
- if (!ok && defaultValue.HasValue)
- value = defaultValue.Value;
- return ok;
- }
-
- public bool TryGetFloatValue(string xPath, ref float value)
- {
- string val;
- return GetValue(xPath, out val, value.ToString()) && CHelper.TryParse(val, out value);
- }
-
- public bool TryGetEnumValue(string xPath, ref T value) where T : struct
- {
- string val;
- return GetValue(xPath, out val, Enum.GetName(typeof(T), value)) && CHelper.TryParse(val, out value, true);
- }
-
- public bool TryGetIntValueRange(string xPath, ref int value, int min = 0, int max = 100)
- {
- return TryGetIntValue(xPath, ref value) && value.IsInRange(min, max);
- }
-
- ///
- /// Gets a normalized (0<=x<=1) float value
- ///
- ///
- ///
- ///
- /// True if exists and is normalized
- public bool TryGetNormalizedFloatValue(string xPath, ref float value, float defaultValue = 0)
- {
- bool ok = TryGetFloatValue(xPath, ref value) && value.IsInRange(0f, 1f);
- if (!ok)
- value = defaultValue;
- return ok;
- }
- }
-}
\ No newline at end of file