diff --git a/Output/PartyModes/Challenge/Languages/English.xml b/Output/PartyModes/Challenge/Languages/English.xml
index 98bcb69e..7134cee0 100644
--- a/Output/PartyModes/Challenge/Languages/English.xml
+++ b/Output/PartyModes/Challenge/Languages/English.xml
@@ -15,6 +15,7 @@
Number of mics
Number of rounds
Challenge Mode: Choose Player
+ Select random
Challenge Mode: Overview
Pos
Name
diff --git a/Output/PartyModes/Challenge/Screens/PartyScreenChallengeNames.xml b/Output/PartyModes/Challenge/Screens/PartyScreenChallengeNames.xml
index 42fb5218..1715fc94 100644
--- a/Output/PartyModes/Challenge/Screens/PartyScreenChallengeNames.xml
+++ b/Output/PartyModes/Challenge/Screens/PartyScreenChallengeNames.xml
@@ -57,7 +57,7 @@
-
+
Button
@@ -65,7 +65,7 @@
Button
985
- 600
+ 625
0,00
150
50
@@ -122,7 +122,7 @@
Button
145
- 600
+ 625
0,00
150
50
@@ -172,17 +172,17 @@
26
-
+
- CoverTile
+ Button
- CoverTile
+ Button
- 0
- 0
+ 565
+ 625
0,00
- 100
- 100
+ 150
+ 50
ButtonColor
@@ -191,12 +191,69 @@
ButtonSColor
- 50
- 102
+ 75
+ 10
- 20
+ 27
- 98
+ 142
+
+
+ ButtonTextColor
+
+
+ ButtonTextSColor
+
+ Center
+
+ Center
+
+
+
+ Outline
+
+ TR_SCREENNAMES_BUTTON_RANDOM
+
+
+
+
+
+ 10
+ 26
+
+
+
+
+
+ 10
+ 26
+
+
+
+
+ Plus
+
+ Plus
+
+ 145
+ 1200
+ 0,00
+ 40
+ 40
+
+
+ ButtonColor
+
+
+ ButtonSColor
+
+
+ 75
+ 10
+
+ 27
+
+ 142
ButtonTextColor
@@ -220,18 +277,18 @@
-
-
+
+
- CoverTile
+ Minus
- CoverTile
+ Minus
- 0
- 0
+ 145
+ 1200
0,00
- 100
- 100
+ 40
+ 40
ButtonColor
@@ -240,12 +297,12 @@
ButtonSColor
- 50
- 102
+ 75
+ 10
- 20
+ 27
- 98
+ 142
ButtonTextColor
@@ -269,6 +326,282 @@
-
+
+
+
+ Plus
+
+ Plus
+
+ 145
+ 1200
+ 0,00
+ 40
+ 40
+
+
+ ButtonColor
+
+
+ ButtonSColor
+
+
+ 75
+ 10
+
+ 27
+
+ 142
+
+
+ ButtonTextColor
+
+
+ ButtonTextSColor
+
+ Center
+
+ Center
+
+
+
+ Outline
+
+
+
+
+
+
+
+
+
+
+
+
+ Minus
+
+ Minus
+
+ 145
+ 1200
+ 0,00
+ 40
+ 40
+
+
+ ButtonColor
+
+
+ ButtonSColor
+
+
+ 75
+ 10
+
+ 27
+
+ 142
+
+
+ ButtonTextColor
+
+
+ ButtonTextSColor
+
+ Center
+
+ Center
+
+
+
+ Outline
+
+
+
+
+
+
+
+
+
+
+
+
+ Invisible
+
+ SelectSlideArrowLeft
+
+ SelectSlideArrowRight
+
+ SelectSlide
+
+ SelectSlideArrowLeft
+
+ SelectSlideArrowRight
+
+ SelectSlide
+
+ 40
+ 100
+ 0,00
+ 1200
+ 50
+
+ 45
+ 105
+ 0,00
+ 40
+ 40
+
+ 1170
+ 105
+ 0,00
+ 40
+ 40
+
+
+ SelectSlideColor
+
+
+ SelectSlideSColor
+
+
+ SelectSlideHColor
+
+
+ ArrowColor
+
+
+ ArrowSColor
+
+
+ TextColor
+
+
+ TextSColor
+
+ 27,00
+
+
+
+ 205,33
+
+ Outline
+
+ Bold
+
+ 2
+
+
+
+ Invisible
+
+ SelectSlideArrowLeft
+
+ SelectSlideArrowRight
+
+ SelectSlidePlayer
+
+ SelectSlideArrowLeft
+
+ SelectSlideArrowRight
+
+ SelectSlidePlayer
+
+ 40
+ 160
+ 0,00
+ 1200
+ 150
+
+ 45
+ 210
+ 0,00
+ 40
+ 40
+
+ 1170
+ 210
+ 0,00
+ 40
+ 40
+
+
+ SelectSlideColor
+
+
+ SelectSlideSColor
+
+
+ SelectSlideHColor
+
+
+ ArrowColor
+
+
+ ArrowSColor
+
+
+ TextColor
+
+
+ TextSColor
+
+ 27,00
+
+
+ -5,00
+
+ 205,33
+
+ Outline
+
+ Bold
+
+ 8
+
+
+
+ 42
+ 327
+ 0,00
+ 1200
+ 393
+
+ CoverTile
+
+
+ 1,00
+ 1,00
+ 1,00
+ 0,20
+
+ PlayerSelector
+
+
+
+ 100
+ 100
+
+ 10
+ 2
+
+ 20,71
+ 30,00
+
+
+
+ 2,0
+
+ Outline
+
+ TextColor
+
+
+
+ 17
+
+
+
diff --git a/Output/PartyModes/Challenge/Textures/Minus.png b/Output/PartyModes/Challenge/Textures/Minus.png
new file mode 100644
index 00000000..9bdede57
Binary files /dev/null and b/Output/PartyModes/Challenge/Textures/Minus.png differ
diff --git a/Output/PartyModes/Challenge/Textures/PlayerSelector.png b/Output/PartyModes/Challenge/Textures/PlayerSelector.png
new file mode 100644
index 00000000..c57ab300
Binary files /dev/null and b/Output/PartyModes/Challenge/Textures/PlayerSelector.png differ
diff --git a/Output/PartyModes/Challenge/Textures/Plus.png b/Output/PartyModes/Challenge/Textures/Plus.png
new file mode 100644
index 00000000..5b813c53
Binary files /dev/null and b/Output/PartyModes/Challenge/Textures/Plus.png differ
diff --git a/Output/PartyModes/Challenge/Textures/Skin.xml b/Output/PartyModes/Challenge/Textures/Skin.xml
index 4912e998..b2ea588c 100644
--- a/Output/PartyModes/Challenge/Textures/Skin.xml
+++ b/Output/PartyModes/Challenge/Textures/Skin.xml
@@ -148,8 +148,11 @@
ScrollUp.png
ScrollDown.png
Invisible.png
+ PlayerSelector.png
+ Plus.png
+ Minus.png
[Blue]BG_Video.mp4
-
\ No newline at end of file
+
diff --git a/Output/PartyModes/ChallengeMedley/Languages/English.xml b/Output/PartyModes/ChallengeMedley/Languages/English.xml
index 2d20bb3b..bbe904d3 100644
--- a/Output/PartyModes/ChallengeMedley/Languages/English.xml
+++ b/Output/PartyModes/ChallengeMedley/Languages/English.xml
@@ -15,6 +15,7 @@
Number of mics
Number of rounds
Challenge Medley Mode: Choose Player
+ Select random
Challenge Medley Mode: Overview
Pos
Name
diff --git a/Output/PartyModes/ChallengeMedley/Screens/PartyScreenChallengeMedleyNames.xml b/Output/PartyModes/ChallengeMedley/Screens/PartyScreenChallengeMedleyNames.xml
index e7f55401..e6236e97 100644
--- a/Output/PartyModes/ChallengeMedley/Screens/PartyScreenChallengeMedleyNames.xml
+++ b/Output/PartyModes/ChallengeMedley/Screens/PartyScreenChallengeMedleyNames.xml
@@ -57,7 +57,7 @@
-
+
Button
@@ -65,7 +65,7 @@
Button
985
- 600
+ 625
0,00
150
50
@@ -122,7 +122,7 @@
Button
145
- 600
+ 625
0,00
150
50
@@ -172,17 +172,17 @@
26
-
+
- CoverTile
+ Button
- CoverTile
+ Button
- 0
- 0
+ 565
+ 625
0,00
- 100
- 100
+ 150
+ 50
ButtonColor
@@ -191,12 +191,69 @@
ButtonSColor
- 50
- 102
+ 75
+ 10
- 20
+ 27
- 98
+ 142
+
+
+ ButtonTextColor
+
+
+ ButtonTextSColor
+
+ Center
+
+ Center
+
+
+
+ Outline
+
+ TR_SCREENNAMES_BUTTON_RANDOM
+
+
+
+
+
+ 10
+ 26
+
+
+
+
+
+ 10
+ 26
+
+
+
+
+ Plus
+
+ Plus
+
+ 145
+ 1200
+ 0,00
+ 40
+ 40
+
+
+ ButtonColor
+
+
+ ButtonSColor
+
+
+ 75
+ 10
+
+ 27
+
+ 142
ButtonTextColor
@@ -220,18 +277,18 @@
-
-
+
+
- CoverTile
+ Minus
- CoverTile
+ Minus
- 0
- 0
+ 145
+ 1200
0,00
- 100
- 100
+ 40
+ 40
ButtonColor
@@ -240,12 +297,12 @@
ButtonSColor
- 50
- 102
+ 75
+ 10
- 20
+ 27
- 98
+ 142
ButtonTextColor
@@ -269,6 +326,282 @@
-
+
+
+
+ Plus
+
+ Plus
+
+ 145
+ 1200
+ 0,00
+ 40
+ 40
+
+
+ ButtonColor
+
+
+ ButtonSColor
+
+
+ 75
+ 10
+
+ 27
+
+ 142
+
+
+ ButtonTextColor
+
+
+ ButtonTextSColor
+
+ Center
+
+ Center
+
+
+
+ Outline
+
+
+
+
+
+
+
+
+
+
+
+
+ Minus
+
+ Minus
+
+ 145
+ 1200
+ 0,00
+ 40
+ 40
+
+
+ ButtonColor
+
+
+ ButtonSColor
+
+
+ 75
+ 10
+
+ 27
+
+ 142
+
+
+ ButtonTextColor
+
+
+ ButtonTextSColor
+
+ Center
+
+ Center
+
+
+
+ Outline
+
+
+
+
+
+
+
+
+
+
+
+
+ Invisible
+
+ SelectSlideArrowLeft
+
+ SelectSlideArrowRight
+
+ SelectSlide
+
+ SelectSlideArrowLeft
+
+ SelectSlideArrowRight
+
+ SelectSlide
+
+ 40
+ 100
+ 0,00
+ 1200
+ 50
+
+ 45
+ 105
+ 0,00
+ 40
+ 40
+
+ 1170
+ 105
+ 0,00
+ 40
+ 40
+
+
+ SelectSlideColor
+
+
+ SelectSlideSColor
+
+
+ SelectSlideHColor
+
+
+ ArrowColor
+
+
+ ArrowSColor
+
+
+ TextColor
+
+
+ TextSColor
+
+ 27,00
+
+
+
+ 205,33
+
+ Outline
+
+ Bold
+
+ 2
+
+
+
+ Invisible
+
+ SelectSlideArrowLeft
+
+ SelectSlideArrowRight
+
+ SelectSlidePlayer
+
+ SelectSlideArrowLeft
+
+ SelectSlideArrowRight
+
+ SelectSlidePlayer
+
+ 40
+ 160
+ 0,00
+ 1200
+ 150
+
+ 45
+ 210
+ 0,00
+ 40
+ 40
+
+ 1170
+ 210
+ 0,00
+ 40
+ 40
+
+
+ SelectSlideColor
+
+
+ SelectSlideSColor
+
+
+ SelectSlideHColor
+
+
+ ArrowColor
+
+
+ ArrowSColor
+
+
+ TextColor
+
+
+ TextSColor
+
+ 27,00
+
+
+ -5,00
+
+ 205,33
+
+ Outline
+
+ Bold
+
+ 8
+
+
+
+ 42
+ 327
+ 0,00
+ 1200
+ 393
+
+ CoverTile
+
+
+ 1,00
+ 1,00
+ 1,00
+ 0,20
+
+ PlayerSelector
+
+
+
+ 100
+ 100
+
+ 10
+ 2
+
+ 20,71
+ 30,00
+
+
+
+ 2,0
+
+ Outline
+
+ TextColor
+
+
+
+ 17
+
+
+
diff --git a/Output/PartyModes/ChallengeMedley/Textures/Minus.png b/Output/PartyModes/ChallengeMedley/Textures/Minus.png
new file mode 100644
index 00000000..9bdede57
Binary files /dev/null and b/Output/PartyModes/ChallengeMedley/Textures/Minus.png differ
diff --git a/Output/PartyModes/ChallengeMedley/Textures/Plus.png b/Output/PartyModes/ChallengeMedley/Textures/Plus.png
new file mode 100644
index 00000000..5b813c53
Binary files /dev/null and b/Output/PartyModes/ChallengeMedley/Textures/Plus.png differ
diff --git a/Output/PartyModes/ChallengeMedley/Textures/Skin.xml b/Output/PartyModes/ChallengeMedley/Textures/Skin.xml
index 4912e998..e89952f1 100644
--- a/Output/PartyModes/ChallengeMedley/Textures/Skin.xml
+++ b/Output/PartyModes/ChallengeMedley/Textures/Skin.xml
@@ -148,8 +148,10 @@
ScrollUp.png
ScrollDown.png
Invisible.png
+ Plus.png
+ Minus.png
[Blue]BG_Video.mp4
-
\ No newline at end of file
+
diff --git a/Output/PartyModes/TicTacToe/Languages/English.xml b/Output/PartyModes/TicTacToe/Languages/English.xml
index fe20f8ea..0f499d1e 100644
--- a/Output/PartyModes/TicTacToe/Languages/English.xml
+++ b/Output/PartyModes/TicTacToe/Languages/English.xml
@@ -24,6 +24,7 @@
Tic-Tac-Toe: Choose Player
Team 1
Team 2
+ Select random
Tic-Tac-Toe
Choose a field.
Next player
diff --git a/Output/PartyModes/TicTacToe/Screens/PartyScreenTicTacToeConfig.xml b/Output/PartyModes/TicTacToe/Screens/PartyScreenTicTacToeConfig.xml
index 282b4c1d..ab0ac65f 100644
--- a/Output/PartyModes/TicTacToe/Screens/PartyScreenTicTacToeConfig.xml
+++ b/Output/PartyModes/TicTacToe/Screens/PartyScreenTicTacToeConfig.xml
@@ -82,7 +82,7 @@
Outline
- TR_SCREENCONFIG_NUMPLAYERST1
+ TR_SCREENCONFIG_NUMFIELDS
@@ -111,41 +111,12 @@
Outline
- TR_SCREENCONFIG_NUMPLAYERST2
+ TR_SCREENCONFIG_SONGSOURCE
-
- 75
- 225
-
- 0,00
-
- 27
-
-
-
- StaticColor
-
-
- TextSColor
-
- Left
-
- Center
-
-
-
- Outline
-
- TR_SCREENCONFIG_NUMFIELDS
-
-
-
-
-
75
285
@@ -169,40 +140,11 @@
Outline
- TR_SCREENCONFIG_SONGSOURCE
-
-
-
-
-
-
- 75
- 405
-
- 0,00
-
- 27
-
-
-
- StaticColor
-
-
- TextSColor
-
- Left
-
- Center
-
-
-
- Outline
-
TR_SCREENCONFIG_GAMEMODE
-
+
Button
@@ -317,7 +259,7 @@
26
-
+
Invisible
@@ -380,9 +322,9 @@
Bold
- 9
-
-
+ 3
+
+
Invisible
@@ -445,9 +387,9 @@
Bold
- 9
-
-
+ 3
+
+
Invisible
@@ -510,9 +452,74 @@
Bold
- 3
-
-
+ 1
+
+
+
+ Invisible
+
+ SelectSlideArrowLeft
+
+ SelectSlideArrowRight
+
+ SelectSlide
+
+ SelectSlideArrowLeft
+
+ SelectSlideArrowRight
+
+ SelectSlide
+
+ 500
+ 220
+ 0,00
+ 700
+ 50
+
+ 505
+ 225
+ 0,00
+ 40
+ 40
+
+ 1170
+ 225
+ 0,00
+ 40
+ 40
+
+
+ SelectSlideColor
+
+
+ SelectSlideSColor
+
+
+ SelectSlideHColor
+
+
+ ArrowColor
+
+
+ ArrowSColor
+
+
+ TextColor
+
+
+ TextSColor
+
+ 27,00
+
+ 205,33
+
+ Outline
+
+ Bold
+
+ 1
+
+
Invisible
@@ -575,201 +582,6 @@
Bold
- 3
-
-
-
- Invisible
-
- SelectSlideArrowLeft
-
- SelectSlideArrowRight
-
- SelectSlide
-
- SelectSlideArrowLeft
-
- SelectSlideArrowRight
-
- SelectSlide
-
- 500
- 340
- 0,00
- 700
- 50
-
- 505
- 345
- 0,00
- 40
- 40
-
- 1170
- 345
- 0,00
- 40
- 40
-
-
- SelectSlideColor
-
-
- SelectSlideSColor
-
-
- SelectSlideHColor
-
-
- ArrowColor
-
-
- ArrowSColor
-
-
- TextColor
-
-
- TextSColor
-
- 27,00
-
- 205,33
-
- Outline
-
- Bold
-
- 1
-
-
-
- Invisible
-
- SelectSlideArrowLeft
-
- SelectSlideArrowRight
-
- SelectSlide
-
- SelectSlideArrowLeft
-
- SelectSlideArrowRight
-
- SelectSlide
-
- 500
- 340
- 0,00
- 700
- 50
-
- 505
- 345
- 0,00
- 40
- 40
-
- 1170
- 345
- 0,00
- 40
- 40
-
-
- SelectSlideColor
-
-
- SelectSlideSColor
-
-
- SelectSlideHColor
-
-
- ArrowColor
-
-
- ArrowSColor
-
-
- TextColor
-
-
- TextSColor
-
- 27,00
-
- 205,33
-
- Outline
-
- Bold
-
- 1
-
-
-
- Invisible
-
- SelectSlideArrowLeft
-
- SelectSlideArrowRight
-
- SelectSlide
-
- SelectSlideArrowLeft
-
- SelectSlideArrowRight
-
- SelectSlide
-
- 500
- 400
- 0,00
- 700
- 50
-
- 505
- 405
- 0,00
- 40
- 40
-
- 1170
- 405
- 0,00
- 40
- 40
-
-
- SelectSlideColor
-
-
- SelectSlideSColor
-
-
- SelectSlideHColor
-
-
- ArrowColor
-
-
- ArrowSColor
-
-
- TextColor
-
-
- TextSColor
-
- 27,00
-
- 205,33
-
- Outline
-
- Bold
-
1
diff --git a/Output/PartyModes/TicTacToe/Screens/PartyScreenTicTacToeNames.xml b/Output/PartyModes/TicTacToe/Screens/PartyScreenTicTacToeNames.xml
index 2e73b1b1..a968b115 100644
--- a/Output/PartyModes/TicTacToe/Screens/PartyScreenTicTacToeNames.xml
+++ b/Output/PartyModes/TicTacToe/Screens/PartyScreenTicTacToeNames.xml
@@ -57,163 +57,7 @@
-
-
-
- 58
- 375
-
- -1,00
-
- 20
-
-
-
- Player1
-
-
- TextSColor
-
- Center
-
- Center
-
-
-
- Outline
-
- TR_SCREENNAMES_TEAM1
-
-
-
-
-
-
- 58
- 500
-
- -1,00
-
- 20
-
-
-
- Player2
-
-
- TextSColor
-
- Center
-
- Center
-
-
-
- Outline
-
- TR_SCREENNAMES_TEAM2
-
-
-
-
-
-
- ScrollUp
-
- ScrollUp
-
- 609
- 90
- -0,01
- 28
- 15
-
-
- ButtonColor
-
-
- ButtonSColor
-
-
- 75
- 10
-
- 27
-
- 142
-
-
- ButtonTextColor
-
-
- ButtonTextSColor
-
- Center
-
- Center
-
-
-
- Outline
-
-
-
-
-
-
-
-
-
-
-
-
- ScrollDown
-
- ScrollDown
-
- 609
- 345
- -0,01
- 28
- 15
-
-
- ButtonColor
-
-
- ButtonSColor
-
-
- 75
- 10
-
- 27
-
- 142
-
-
- ButtonTextColor
-
-
- ButtonTextSColor
-
- Center
-
- Center
-
-
-
- Outline
-
-
-
-
-
-
-
-
-
-
+
Button
@@ -328,17 +172,17 @@
26
-
+
- CoverTile
+ Button
- CoverTile
+ Button
- 0
- 0
+ 565
+ 625
0,00
- 100
- 100
+ 150
+ 50
ButtonColor
@@ -347,12 +191,69 @@
ButtonSColor
- 50
- 102
+ 75
+ 10
- 20
+ 27
- 98
+ 142
+
+
+ ButtonTextColor
+
+
+ ButtonTextSColor
+
+ Center
+
+ Center
+
+
+
+ Outline
+
+ TR_SCREENNAMES_BUTTON_RANDOM
+
+
+
+
+
+ 10
+ 26
+
+
+
+
+
+ 10
+ 26
+
+
+
+
+ Plus
+
+ Plus
+
+ 1210
+ 210
+ 0,00
+ 40
+ 40
+
+
+ ButtonColor
+
+
+ ButtonSColor
+
+
+ 75
+ 10
+
+ 27
+
+ 142
ButtonTextColor
@@ -376,18 +277,18 @@
-
-
+
+
- CoverTile
+ Minus
- CoverTile
+ Minus
- 0
- 0
+ 1160
+ 210
0,00
- 100
- 100
+ 40
+ 40
ButtonColor
@@ -396,12 +297,12 @@
ButtonSColor
- 50
- 102
+ 75
+ 10
- 20
+ 27
- 98
+ 142
ButtonTextColor
@@ -425,6 +326,282 @@
-
+
+
+
+ Plus
+
+ Plus
+
+ 145
+ 1200
+ 0,00
+ 40
+ 40
+
+
+ ButtonColor
+
+
+ ButtonSColor
+
+
+ 75
+ 10
+
+ 27
+
+ 142
+
+
+ ButtonTextColor
+
+
+ ButtonTextSColor
+
+ Center
+
+ Center
+
+
+
+ Outline
+
+
+
+
+
+
+
+
+
+
+
+
+ Minus
+
+ Minus
+
+ 145
+ 1200
+ 0,00
+ 40
+ 40
+
+
+ ButtonColor
+
+
+ ButtonSColor
+
+
+ 75
+ 10
+
+ 27
+
+ 142
+
+
+ ButtonTextColor
+
+
+ ButtonTextSColor
+
+ Center
+
+ Center
+
+
+
+ Outline
+
+
+
+
+
+
+
+
+
+
+
+
+ Invisible
+
+ SelectSlideArrowLeft
+
+ SelectSlideArrowRight
+
+ SelectSlide
+
+ SelectSlideArrowLeft
+
+ SelectSlideArrowRight
+
+ SelectSlide
+
+ 40
+ 100
+ 0,00
+ 1100
+ 50
+
+ 45
+ 105
+ 0,00
+ 40
+ 40
+
+ 1050
+ 105
+ 0,00
+ 40
+ 40
+
+
+ SelectSlideColor
+
+
+ SelectSlideSColor
+
+
+ SelectSlideHColor
+
+
+ ArrowColor
+
+
+ ArrowSColor
+
+
+ TextColor
+
+
+ TextSColor
+
+ 27,00
+
+
+
+ 205,33
+
+ Outline
+
+ Bold
+
+ 2
+
+
+
+ Invisible
+
+ SelectSlideArrowLeft
+
+ SelectSlideArrowRight
+
+ SelectSlidePlayer
+
+ SelectSlideArrowLeft
+
+ SelectSlideArrowRight
+
+ SelectSlidePlayer
+
+ 40
+ 160
+ 0,00
+ 1100
+ 150
+
+ 45
+ 210
+ 0,00
+ 40
+ 40
+
+ 1050
+ 210
+ 0,00
+ 40
+ 40
+
+
+ SelectSlideColor
+
+
+ SelectSlideSColor
+
+
+ SelectSlideHColor
+
+
+ ArrowColor
+
+
+ ArrowSColor
+
+
+ TextColor
+
+
+ TextSColor
+
+ 27,00
+
+
+ -5,00
+
+ 205,33
+
+ Outline
+
+ Bold
+
+ 8
+
+
+
+ 42
+ 327
+ 0,00
+ 1200
+ 393
+
+ CoverTile
+
+
+ 1,00
+ 1,00
+ 1,00
+ 0,20
+
+ PlayerSelector
+
+
+
+ 100
+ 100
+
+ 10
+ 2
+
+ 20,71
+ 30,00
+
+
+
+ 2,0
+
+ Outline
+
+ TextColor
+
+
+
+ 17
+
+
+
diff --git a/Output/PartyModes/TicTacToe/Textures/Minus.png b/Output/PartyModes/TicTacToe/Textures/Minus.png
new file mode 100644
index 00000000..9bdede57
Binary files /dev/null and b/Output/PartyModes/TicTacToe/Textures/Minus.png differ
diff --git a/Output/PartyModes/TicTacToe/Textures/PlayerSelector.png b/Output/PartyModes/TicTacToe/Textures/PlayerSelector.png
new file mode 100644
index 00000000..c57ab300
Binary files /dev/null and b/Output/PartyModes/TicTacToe/Textures/PlayerSelector.png differ
diff --git a/Output/PartyModes/TicTacToe/Textures/Plus.png b/Output/PartyModes/TicTacToe/Textures/Plus.png
new file mode 100644
index 00000000..5b813c53
Binary files /dev/null and b/Output/PartyModes/TicTacToe/Textures/Plus.png differ
diff --git a/Output/PartyModes/TicTacToe/Textures/Skin.xml b/Output/PartyModes/TicTacToe/Textures/Skin.xml
index 4965d2eb..9145b6bf 100644
--- a/Output/PartyModes/TicTacToe/Textures/Skin.xml
+++ b/Output/PartyModes/TicTacToe/Textures/Skin.xml
@@ -222,8 +222,11 @@
ScrollUp.png
ScrollDown.png
Invisible.png
+ PlayerSelector.png
+ Plus.png
+ Minus.png
[Blue]BG_Video.mp4
-
\ No newline at end of file
+
diff --git a/PartyModes/PartyModeChallenge/CPartyScreenChallengeNames.cs b/PartyModes/PartyModeChallenge/CPartyScreenChallengeNames.cs
index 16b275de..d12ff061 100644
--- a/PartyModes/PartyModeChallenge/CPartyScreenChallengeNames.cs
+++ b/PartyModes/PartyModeChallenge/CPartyScreenChallengeNames.cs
@@ -25,7 +25,7 @@ using VocaluxeLib.Profile;
namespace VocaluxeLib.PartyModes.Challenge
{
// ReSharper disable UnusedMember.Global
- public class CPartyScreenChallengeNames : CMenuParty
+ public class CPartyScreenChallengeNames : CMenuPartyNameSelection
// ReSharper restore UnusedMember.Global
{
// Version number for theme files. Increment it, if you've changed something on the theme files!
@@ -34,61 +34,18 @@ namespace VocaluxeLib.PartyModes.Challenge
get { return 1; }
}
- private const string _ButtonNext = "ButtonNext";
- private const string _ButtonBack = "ButtonBack";
- private const string _ButtonPlayerDestination = "ButtonPlayerDestination";
- private const string _ButtonPlayerChoose = "ButtonPlayerChoose";
-
- private List _PlayerChooseButtons;
- private List _PlayerDestinationButtons;
- //PlayerDestinationButtons-Option
- private const int _PlayerDestinationButtonsNumH = 3;
- private const int _PlayerDestinationButtonsFirstX = 900;
- private const int _PlayerDestinationButtonsFirstY = 105;
- private const int _PlayerDestinationButtonsSpaceH = 15;
- private const int _PlayerDestinationButtonsSpaceW = 25;
- //PlayerChooseButtons-Option
- private List _PlayerChooseButtonsVisibleProfiles;
- private const int _PlayerChooseButtonsNumH = 7;
- private const int _PlayerChooseButtonsNumW = 4;
- private const int _PlayerChooseButtonsFirstX = 52;
- private const int _PlayerChooseButtonsFirstY = 105;
- private const int _PlayerChooseButtonsSpaceH = 15;
- private const int _PlayerChooseButtonsSpaceW = 25;
- private const int _PlayerChooseButtonsOffset = 0;
-
- private CStatic _ChooseAvatarStatic;
- private bool _SelectingMouseActive;
- private int _OldMouseX;
- private int _OldMouseY;
- private bool _ButtonsAdded;
-
- private int _NumPlayer = 4;
-
private SDataFromScreen _Data;
- private class CPlayerChooseButton
- {
- public CButton Button;
- public int ProfileID;
- }
-
public override void Init()
{
base.Init();
- _ChooseAvatarStatic = GetNewStatic();
- _ChooseAvatarStatic.Visible = false;
-
- _PlayerChooseButtonsVisibleProfiles = new List();
-
_Data.ScreenNames.ProfileIDs = new List();
-
- _ThemeButtons = new string[] {_ButtonBack, _ButtonNext, _ButtonPlayerDestination, _ButtonPlayerChoose};
-
_Data = new SDataFromScreen();
var names = new SFromScreenNames {FadeBack = false, ProfileIDs = new List()};
_Data.ScreenNames = names;
+
+ _AllowChangePlayerNum = false;
}
public override void DataToScreen(object receivedData)
@@ -98,7 +55,7 @@ namespace VocaluxeLib.PartyModes.Challenge
var config = (SDataToScreenNames)receivedData;
_Data.ScreenNames.ProfileIDs = config.ProfileIDs ?? new List();
- _NumPlayer = config.NumPlayer;
+ SetPartyModeData(config.NumPlayer);
while (_Data.ScreenNames.ProfileIDs.Count > _NumPlayer)
_Data.ScreenNames.ProfileIDs.RemoveAt(_Data.ScreenNames.ProfileIDs.Count - 1);
@@ -109,320 +66,26 @@ namespace VocaluxeLib.PartyModes.Challenge
}
}
- public override bool HandleInput(SKeyEvent keyEvent)
- {
- base.HandleInput(keyEvent);
-
- if (keyEvent.KeyPressed) {}
- else
- {
- switch (keyEvent.Key)
- {
- case Keys.Back:
- case Keys.Escape:
- _Back();
- break;
-
- case Keys.Enter:
- if (_Buttons[_ButtonBack].Selected)
- _Back();
-
- if (_Buttons[_ButtonNext].Selected)
- _Next();
-
- if (!_OnAdd())
- _OnRemove();
- break;
-
- case Keys.Delete:
- _OnRemove();
- break;
- }
- }
- return true;
- }
-
- public override bool HandleMouse(SMouseEvent mouseEvent)
- {
- base.HandleMouse(mouseEvent);
-
- //Check if LeftButton is hold and Select-Mode active
- if (mouseEvent.LBH && _SelectingMouseActive)
- {
- //Update coords for Drag/Drop-Texture
- _ChooseAvatarStatic.Rect.X += mouseEvent.X - _OldMouseX;
- _ChooseAvatarStatic.Rect.Y += mouseEvent.Y - _OldMouseY;
- _OldMouseX = mouseEvent.X;
- _OldMouseY = mouseEvent.Y;
- }
- // LeftButton isn't hold anymore, but Selec-Mode is still active -> "Drop" of Avatar
- else if (_SelectingMouseActive)
- {
- //Reset variables
- _SelectingMouseActive = false;
- _ChooseAvatarStatic.Visible = false;
- }
-
- if (mouseEvent.LB && _IsMouseOver(mouseEvent))
- {
- if (_Buttons[_ButtonBack].Selected)
- _Back();
-
- if (_Buttons[_ButtonNext].Selected)
- _Next();
-
- if (!_OnAdd())
- _OnRemove();
- }
-
- if (mouseEvent.RB)
- _Back();
-
- return true;
- }
-
public override void OnShow()
{
base.OnShow();
-
- if (!_ButtonsAdded)
- {
- _AddButtonPlayerDestination();
- _AddButtonPlayerChoose();
- _ButtonsAdded = true;
- }
-
- _UpdateButtonPlayerDestination();
- _UpdateButtonPlayerChoose();
-
- _UpdateButtonNext();
+ SetPartyModeData(_NumPlayer);
}
- public override bool UpdateGame()
- {
- return true;
- }
-
- public override bool Draw()
- {
- base.Draw();
- if (_ChooseAvatarStatic.Visible)
- _ChooseAvatarStatic.Draw();
- return true;
- }
-
- private void _AddButtonPlayerDestination()
- {
- _Buttons[_ButtonPlayerDestination].Visible = false;
- _PlayerDestinationButtons = new List();
- int row = 0;
- int column = 0;
- for (int i = 1; i <= _PartyMode.GetMaxPlayer(); i++)
- {
- CButton b = GetNewButton(_Buttons[_ButtonPlayerDestination]);
- b.Rect.X = _PlayerDestinationButtonsFirstX + column * (b.Rect.W + _PlayerDestinationButtonsSpaceH);
- b.Rect.Y = _PlayerDestinationButtonsFirstY + row * (b.Rect.H + _PlayerDestinationButtonsSpaceW);
- _PlayerDestinationButtons.Add(b);
- column++;
- if (column >= _PlayerDestinationButtonsNumH)
- {
- row++;
- column = 0;
- }
- b.Visible = true;
- b.Enabled = false;
- _AddButton(b);
- }
- }
-
- private void _AddButtonPlayerChoose()
- {
- _Buttons[_ButtonPlayerChoose].Visible = false;
- _PlayerChooseButtons = new List();
- int row = 0;
- int column = 0;
- for (int i = 1; i <= _PlayerChooseButtonsNumH * _PlayerChooseButtonsNumW; i++)
- {
- CButton b = GetNewButton(_Buttons[_ButtonPlayerChoose]);
- b.Rect.X = _PlayerChooseButtonsFirstX + column * (b.Rect.W + _PlayerChooseButtonsSpaceH);
- b.Rect.Y = _PlayerChooseButtonsFirstY + row * (b.Rect.H + _PlayerChooseButtonsSpaceW);
- var pcb = new CPlayerChooseButton {Button = b, ProfileID = -1};
- _PlayerChooseButtons.Add(pcb);
- column++;
- if (column >= _PlayerChooseButtonsNumH)
- {
- row++;
- column = 0;
- }
- b.Visible = true;
- b.Enabled = false;
- _AddButton(b);
- }
- }
-
- private void _UpdateButtonPlayerChoose()
- {
- _UpdateVisibleProfiles();
- if ((_PlayerChooseButtonsNumW * _PlayerChooseButtonsNumH) * (_PlayerChooseButtonsOffset + 1) - _PlayerChooseButtonsVisibleProfiles.Count >=
- (_PlayerChooseButtonsNumW * _PlayerChooseButtonsNumH) * _PlayerChooseButtonsOffset)
- _UpdateButtonPlayerChoose(_PlayerChooseButtonsOffset - 1);
- else
- _UpdateButtonPlayerChoose(_PlayerChooseButtonsOffset);
- }
-
- private void _UpdateButtonPlayerChoose(int offset)
- {
- const int numButtonPlayerChoose = _PlayerChooseButtonsNumW * _PlayerChooseButtonsNumH;
- if (offset < 0)
- offset = 0;
-
- if (numButtonPlayerChoose * (offset + 1) - _PlayerChooseButtonsVisibleProfiles.Count <= numButtonPlayerChoose)
- {
- for (int i = 0; i < numButtonPlayerChoose; i++)
- {
- if ((i + offset * numButtonPlayerChoose) < _PlayerChooseButtonsVisibleProfiles.Count)
- {
- int id = _PlayerChooseButtonsVisibleProfiles[i + offset * numButtonPlayerChoose];
- _PlayerChooseButtons[i].ProfileID = id;
- _PlayerChooseButtons[i].Button.Text.Text = CBase.Profiles.GetPlayerName(id);
- _PlayerChooseButtons[i].Button.Texture = CBase.Profiles.GetAvatar(id);
- _PlayerChooseButtons[i].Button.SelTexture = CBase.Profiles.GetAvatar(id);
- _PlayerChooseButtons[i].Button.Color = new SColorF(1, 1, 1, 0.6f);
- _PlayerChooseButtons[i].Button.SelColor = new SColorF(1, 1, 1, 1);
- _PlayerChooseButtons[i].Button.Enabled = true;
- }
- else
- {
- _PlayerChooseButtons[i].ProfileID = -1;
- _PlayerChooseButtons[i].Button.Text.Text = String.Empty;
- _PlayerChooseButtons[i].Button.Texture = _Buttons[_ButtonPlayerChoose].Texture;
- _PlayerChooseButtons[i].Button.SelTexture = _Buttons[_ButtonPlayerChoose].SelTexture;
- _PlayerChooseButtons[i].Button.Color = _Buttons[_ButtonPlayerChoose].Color;
- _PlayerChooseButtons[i].Button.SelColor = _Buttons[_ButtonPlayerChoose].SelColor;
- _PlayerChooseButtons[i].Button.Enabled = false;
- }
- }
- }
- }
-
- private void _UpdateVisibleProfiles()
- {
- _PlayerChooseButtonsVisibleProfiles.Clear();
- CProfile[] profiles = CBase.Profiles.GetProfiles();
- foreach (CProfile profile in profiles)
- {
- bool visible = false;
- //Show profile only if active
- if (profile.Active == EOffOn.TR_CONFIG_ON)
- visible = _Data.ScreenNames.ProfileIDs.All(profileID => profileID != profile.ID);
- if (visible)
- _PlayerChooseButtonsVisibleProfiles.Add(profile.ID);
- }
- }
-
- private void _UpdateButtonPlayerDestination()
- {
- for (int i = 0; i < _PlayerDestinationButtons.Count; i++)
- {
- if (_NumPlayer > i)
- {
- _PlayerDestinationButtons[i].Visible = true;
- _PlayerDestinationButtons[i].Enabled = true;
- }
- else
- {
- _PlayerDestinationButtons[i].Visible = false;
- _PlayerDestinationButtons[i].Enabled = false;
- }
- }
- for (int i = 0; i < _NumPlayer; i++)
- {
- if (i < _Data.ScreenNames.ProfileIDs.Count)
- {
- if (_Data.ScreenNames.ProfileIDs[i] != -1)
- {
- int id = _Data.ScreenNames.ProfileIDs[i];
- _PlayerDestinationButtons[i].Color = new SColorF(1, 1, 1, 0.6f);
- _PlayerDestinationButtons[i].SelColor = new SColorF(1, 1, 1, 1);
- _PlayerDestinationButtons[i].Texture = CBase.Profiles.GetAvatar(id);
- _PlayerDestinationButtons[i].SelTexture = CBase.Profiles.GetAvatar(id);
- _PlayerDestinationButtons[i].Text.Text = CBase.Profiles.GetPlayerName(id);
- _PlayerDestinationButtons[i].Enabled = true;
- }
- }
- else
- {
- _PlayerDestinationButtons[i].Color = _Buttons[_ButtonPlayerDestination].Color;
- _PlayerDestinationButtons[i].SelColor = _Buttons[_ButtonPlayerDestination].SelColor;
- _PlayerDestinationButtons[i].Texture = _Buttons[_ButtonPlayerDestination].Texture;
- _PlayerDestinationButtons[i].SelTexture = _Buttons[_ButtonPlayerDestination].SelTexture;
- _PlayerDestinationButtons[i].Text.Text = String.Empty;
- _PlayerDestinationButtons[i].Enabled = false;
- }
- }
- }
-
- private void _UpdateButtonNext()
- {
- if (_Data.ScreenNames.ProfileIDs.Count == _NumPlayer)
- {
- _Buttons[_ButtonNext].Visible = true;
- _SetInteractionToButton(_Buttons[_ButtonNext]);
- }
- else
- _Buttons[_ButtonNext].Visible = false;
- }
-
- private bool _OnAdd()
- {
- foreach (CPlayerChooseButton button in _PlayerChooseButtons)
- {
- int id = button.ProfileID;
- if (!button.Button.Selected || id == -1 || _Data.ScreenNames.ProfileIDs.Count >= _NumPlayer)
- continue;
- _Data.ScreenNames.ProfileIDs.Add(id);
- int added = _Data.ScreenNames.ProfileIDs.Count - 1;
- _UpdateButtonNext();
- //Update texture and name
- _PlayerDestinationButtons[added].Color = new SColorF(1, 1, 1, 0.6f);
- _PlayerDestinationButtons[added].SelColor = new SColorF(1, 1, 1, 1);
- _PlayerDestinationButtons[added].Texture = CBase.Profiles.GetAvatar(id);
- _PlayerDestinationButtons[added].SelTexture = CBase.Profiles.GetAvatar(id);
- _PlayerDestinationButtons[added].Text.Text = CBase.Profiles.GetPlayerName(id);
- _PlayerDestinationButtons[added].Enabled = true;
- //Update Tiles-List
- _UpdateButtonPlayerChoose();
- _CheckInteraction();
- return true;
- }
- return false;
- }
-
- private void _OnRemove()
- {
- for (int i = 0; i < _PlayerDestinationButtons.Count; i++)
- {
- if (!_PlayerDestinationButtons[i].Selected)
- continue;
- if ((i + 1) > _Data.ScreenNames.ProfileIDs.Count)
- continue;
- _Data.ScreenNames.ProfileIDs.RemoveAt(i);
- _UpdateButtonNext();
- _UpdateButtonPlayerDestination();
- _UpdateButtonPlayerChoose();
- _CheckInteraction();
- return;
- }
- }
-
- private void _Back()
+ public override void Back()
{
+ SPartyNameOptions options = GetData();
+ if(options.TeamList.Length == 1)
+ _Data.ScreenNames.ProfileIDs = options.TeamList[0];
_Data.ScreenNames.FadeBack = true;
_PartyMode.DataFromScreen(ThemeName, _Data);
}
- private void _Next()
+ public override void Next()
{
+ SPartyNameOptions options = GetData();
+ if (options.TeamList.Length == 1)
+ _Data.ScreenNames.ProfileIDs = options.TeamList[0];
_Data.ScreenNames.FadeBack = false;
_PartyMode.DataFromScreen(ThemeName, _Data);
}
diff --git a/PartyModes/PartyModeChallengeMedley/CPartyScreenChallengeMedleyNames.cs b/PartyModes/PartyModeChallengeMedley/CPartyScreenChallengeMedleyNames.cs
index 9959e330..2bb5de75 100644
--- a/PartyModes/PartyModeChallengeMedley/CPartyScreenChallengeMedleyNames.cs
+++ b/PartyModes/PartyModeChallengeMedley/CPartyScreenChallengeMedleyNames.cs
@@ -25,7 +25,7 @@ using VocaluxeLib.Profile;
namespace VocaluxeLib.PartyModes.ChallengeMedley
{
// ReSharper disable UnusedMember.Global
- public class CPartyScreenChallengeMedleyNames : CMenuParty
+ public class CPartyScreenChallengeMedleyNames : CMenuPartyNameSelection
// ReSharper restore UnusedMember.Global
{
// Version number for theme files. Increment it, if you've changed something on the theme files!
@@ -34,61 +34,19 @@ namespace VocaluxeLib.PartyModes.ChallengeMedley
get { return 1; }
}
- private const string _ButtonNext = "ButtonNext";
- private const string _ButtonBack = "ButtonBack";
- private const string _ButtonPlayerDestination = "ButtonPlayerDestination";
- private const string _ButtonPlayerChoose = "ButtonPlayerChoose";
-
- private List _PlayerChooseButtons;
- private List _PlayerDestinationButtons;
- //PlayerDestinationButtons-Option
- private const int _PlayerDestinationButtonsNumH = 3;
- private const int _PlayerDestinationButtonsFirstX = 900;
- private const int _PlayerDestinationButtonsFirstY = 105;
- private const int _PlayerDestinationButtonsSpaceH = 15;
- private const int _PlayerDestinationButtonsSpaceW = 25;
- //PlayerChooseButtons-Option
- private List _PlayerChooseButtonsVisibleProfiles;
- private const int _PlayerChooseButtonsNumH = 7;
- private const int _PlayerChooseButtonsNumW = 4;
- private const int _PlayerChooseButtonsFirstX = 52;
- private const int _PlayerChooseButtonsFirstY = 105;
- private const int _PlayerChooseButtonsSpaceH = 15;
- private const int _PlayerChooseButtonsSpaceW = 25;
- private const int _PlayerChooseButtonsOffset = 0;
-
- private CStatic _ChooseAvatarStatic;
- private bool _SelectingMouseActive;
- private int _OldMouseX;
- private int _OldMouseY;
- private bool _ButtonsAdded;
-
- private int _NumPlayer = 4;
-
private SDataFromScreen _Data;
- private class CPlayerChooseButton
- {
- public CButton Button;
- public int ProfileID;
- }
-
public override void Init()
{
base.Init();
- _ChooseAvatarStatic = GetNewStatic();
- _ChooseAvatarStatic.Visible = false;
-
- _PlayerChooseButtonsVisibleProfiles = new List();
-
_Data.ScreenNames.ProfileIDs = new List();
- _ThemeButtons = new string[] {_ButtonBack, _ButtonNext, _ButtonPlayerDestination, _ButtonPlayerChoose};
-
_Data = new SDataFromScreen();
var names = new SFromScreenNames {FadeToConfig = false, ProfileIDs = new List()};
_Data.ScreenNames = names;
+
+ _AllowChangePlayerNum = false;
}
public override void DataToScreen(object receivedData)
@@ -98,7 +56,7 @@ namespace VocaluxeLib.PartyModes.ChallengeMedley
var config = (SDataToScreenNames)receivedData;
_Data.ScreenNames.ProfileIDs = config.ProfileIDs ?? new List();
- _NumPlayer = config.NumPlayer;
+ SetPartyModeData(config.NumPlayer);
while (_Data.ScreenNames.ProfileIDs.Count > _NumPlayer)
_Data.ScreenNames.ProfileIDs.RemoveAt(_Data.ScreenNames.ProfileIDs.Count - 1);
@@ -109,320 +67,21 @@ namespace VocaluxeLib.PartyModes.ChallengeMedley
}
}
- public override bool HandleInput(SKeyEvent keyEvent)
- {
- base.HandleInput(keyEvent);
- if (keyEvent.KeyPressed) {}
- else
- {
- switch (keyEvent.Key)
- {
- case Keys.Back:
- case Keys.Escape:
- _Back();
- break;
-
- case Keys.Enter:
- if (_Buttons[_ButtonBack].Selected)
- _Back();
-
- if (_Buttons[_ButtonNext].Selected)
- _Next();
-
- if (!_OnAdd())
- _OnRemove();
- break;
-
- case Keys.Delete:
- _OnRemove();
- break;
- }
- }
- return true;
- }
-
- public override bool HandleMouse(SMouseEvent mouseEvent)
- {
- base.HandleMouse(mouseEvent);
-
- //Check if LeftButton is hold and Select-Mode active
- if (mouseEvent.LBH && _SelectingMouseActive)
- {
- //Update coords for Drag/Drop-Texture
- _ChooseAvatarStatic.Rect.X += mouseEvent.X - _OldMouseX;
- _ChooseAvatarStatic.Rect.Y += mouseEvent.Y - _OldMouseY;
- _OldMouseX = mouseEvent.X;
- _OldMouseY = mouseEvent.Y;
- }
- // LeftButton isn't hold anymore, but Selec-Mode is still active -> "Drop" of Avatar
- else if (_SelectingMouseActive)
- {
- //Reset variables
- _SelectingMouseActive = false;
- _ChooseAvatarStatic.Visible = false;
- }
-
- if (mouseEvent.LB && _IsMouseOver(mouseEvent))
- {
- if (_Buttons[_ButtonBack].Selected)
- _Back();
-
- if (_Buttons[_ButtonNext].Selected)
- _Next();
-
- if (!_OnAdd())
- _OnRemove();
- }
-
- if (mouseEvent.RB)
- _Back();
-
- return true;
- }
-
- public override void OnShow()
- {
- base.OnShow();
-
- if (!_ButtonsAdded)
- {
- _AddButtonPlayerDestination();
- _AddButtonPlayerChoose();
- _ButtonsAdded = true;
- }
-
- _UpdateButtonPlayerDestination();
- _UpdateButtonPlayerChoose();
-
- _UpdateButtonNext();
- }
-
- public override bool UpdateGame()
- {
- return true;
- }
-
- public override bool Draw()
- {
- base.Draw();
- if (_ChooseAvatarStatic.Visible)
- _ChooseAvatarStatic.Draw();
- return true;
- }
-
- private void _AddButtonPlayerDestination()
- {
- _Buttons[_ButtonPlayerDestination].Visible = false;
- _PlayerDestinationButtons = new List();
- int row = 0;
- int column = 0;
- for (int i = 1; i <= _PartyMode.GetMaxPlayer(); i++)
- {
- CButton b = GetNewButton(_Buttons[_ButtonPlayerDestination]);
- b.Rect.X = _PlayerDestinationButtonsFirstX + column * (b.Rect.W + _PlayerDestinationButtonsSpaceH);
- b.Rect.Y = _PlayerDestinationButtonsFirstY + row * (b.Rect.H + _PlayerDestinationButtonsSpaceW);
- _PlayerDestinationButtons.Add(b);
- column++;
- if (column >= _PlayerDestinationButtonsNumH)
- {
- row++;
- column = 0;
- }
- b.Visible = true;
- b.Enabled = false;
- _AddButton(b);
- }
- }
-
- private void _AddButtonPlayerChoose()
- {
- _Buttons[_ButtonPlayerChoose].Visible = false;
- _PlayerChooseButtons = new List();
- int row = 0;
- int column = 0;
- for (int i = 1; i <= _PlayerChooseButtonsNumH * _PlayerChooseButtonsNumW; i++)
- {
- CButton b = GetNewButton(_Buttons[_ButtonPlayerChoose]);
- b.Rect.X = _PlayerChooseButtonsFirstX + column * (b.Rect.W + _PlayerChooseButtonsSpaceH);
- b.Rect.Y = _PlayerChooseButtonsFirstY + row * (b.Rect.H + _PlayerChooseButtonsSpaceW);
- var pcb = new CPlayerChooseButton {Button = b, ProfileID = -1};
- _PlayerChooseButtons.Add(pcb);
- column++;
- if (column >= _PlayerChooseButtonsNumH)
- {
- row++;
- column = 0;
- }
- b.Visible = true;
- b.Enabled = false;
- _AddButton(b);
- }
- }
-
- private void _UpdateButtonPlayerChoose()
- {
- _UpdateVisibleProfiles();
- if ((_PlayerChooseButtonsNumW * _PlayerChooseButtonsNumH) * (_PlayerChooseButtonsOffset + 1) - _PlayerChooseButtonsVisibleProfiles.Count >=
- (_PlayerChooseButtonsNumW * _PlayerChooseButtonsNumH) * _PlayerChooseButtonsOffset)
- _UpdateButtonPlayerChoose(_PlayerChooseButtonsOffset - 1);
- else
- _UpdateButtonPlayerChoose(_PlayerChooseButtonsOffset);
- }
-
- private void _UpdateButtonPlayerChoose(int offset)
- {
- const int numButtonPlayerChoose = _PlayerChooseButtonsNumW * _PlayerChooseButtonsNumH;
- if (offset < 0)
- offset = 0;
-
- if (numButtonPlayerChoose * (offset + 1) - _PlayerChooseButtonsVisibleProfiles.Count <= numButtonPlayerChoose)
- {
- for (int i = 0; i < numButtonPlayerChoose; i++)
- {
- if ((i + offset * numButtonPlayerChoose) < _PlayerChooseButtonsVisibleProfiles.Count)
- {
- int id = _PlayerChooseButtonsVisibleProfiles[i + offset * numButtonPlayerChoose];
- _PlayerChooseButtons[i].ProfileID = id;
- _PlayerChooseButtons[i].Button.Text.Text = CBase.Profiles.GetPlayerName(id);
- _PlayerChooseButtons[i].Button.Texture = CBase.Profiles.GetAvatar(id);
- _PlayerChooseButtons[i].Button.SelTexture = CBase.Profiles.GetAvatar(id);
- _PlayerChooseButtons[i].Button.Color = new SColorF(1, 1, 1, 0.6f);
- _PlayerChooseButtons[i].Button.SelColor = new SColorF(1, 1, 1, 1);
- _PlayerChooseButtons[i].Button.Enabled = true;
- }
- else
- {
- _PlayerChooseButtons[i].ProfileID = -1;
- _PlayerChooseButtons[i].Button.Text.Text = String.Empty;
- _PlayerChooseButtons[i].Button.Texture = _Buttons[_ButtonPlayerChoose].Texture;
- _PlayerChooseButtons[i].Button.SelTexture = _Buttons[_ButtonPlayerChoose].SelTexture;
- _PlayerChooseButtons[i].Button.Color = _Buttons[_ButtonPlayerChoose].Color;
- _PlayerChooseButtons[i].Button.SelColor = _Buttons[_ButtonPlayerChoose].SelColor;
- _PlayerChooseButtons[i].Button.Enabled = false;
- }
- }
- }
- }
-
- private void _UpdateVisibleProfiles()
- {
- _PlayerChooseButtonsVisibleProfiles.Clear();
- CProfile[] profiles = CBase.Profiles.GetProfiles();
- foreach (CProfile profile in profiles)
- {
- bool visible = false;
- //Show profile only if active
- if (profile.Active == EOffOn.TR_CONFIG_ON)
- visible = _Data.ScreenNames.ProfileIDs.All(profileID => profileID != profile.ID);
- if (visible)
- _PlayerChooseButtonsVisibleProfiles.Add(profile.ID);
- }
- }
-
- private void _UpdateButtonPlayerDestination()
- {
- for (int i = 0; i < _PlayerDestinationButtons.Count; i++)
- {
- if (_NumPlayer > i)
- {
- _PlayerDestinationButtons[i].Visible = true;
- _PlayerDestinationButtons[i].Enabled = true;
- }
- else
- {
- _PlayerDestinationButtons[i].Visible = false;
- _PlayerDestinationButtons[i].Enabled = false;
- }
- }
- for (int i = 0; i < _NumPlayer; i++)
- {
- if (i < _Data.ScreenNames.ProfileIDs.Count)
- {
- if (_Data.ScreenNames.ProfileIDs[i] != -1)
- {
- int id = _Data.ScreenNames.ProfileIDs[i];
- _PlayerDestinationButtons[i].Color = new SColorF(1, 1, 1, 0.6f);
- _PlayerDestinationButtons[i].SelColor = new SColorF(1, 1, 1, 1);
- _PlayerDestinationButtons[i].Texture = CBase.Profiles.GetAvatar(id);
- _PlayerDestinationButtons[i].SelTexture = CBase.Profiles.GetAvatar(id);
- _PlayerDestinationButtons[i].Text.Text = CBase.Profiles.GetPlayerName(id);
- _PlayerDestinationButtons[i].Enabled = true;
- }
- }
- else
- {
- _PlayerDestinationButtons[i].Color = _Buttons[_ButtonPlayerDestination].Color;
- _PlayerDestinationButtons[i].SelColor = _Buttons[_ButtonPlayerDestination].SelColor;
- _PlayerDestinationButtons[i].Texture = _Buttons[_ButtonPlayerDestination].Texture;
- _PlayerDestinationButtons[i].SelTexture = _Buttons[_ButtonPlayerDestination].SelTexture;
- _PlayerDestinationButtons[i].Text.Text = String.Empty;
- _PlayerDestinationButtons[i].Enabled = false;
- }
- }
- }
-
- private void _UpdateButtonNext()
- {
- if (_Data.ScreenNames.ProfileIDs.Count == _NumPlayer)
- {
- _Buttons[_ButtonNext].Visible = true;
- _SetInteractionToButton(_Buttons[_ButtonNext]);
- }
- else
- _Buttons[_ButtonNext].Visible = false;
- }
-
- private bool _OnAdd()
- {
- foreach (CPlayerChooseButton button in _PlayerChooseButtons)
- {
- int id = button.ProfileID;
- if (!button.Button.Selected || id == -1 || _Data.ScreenNames.ProfileIDs.Count >= _NumPlayer)
- continue;
- _Data.ScreenNames.ProfileIDs.Add(id);
- int added = _Data.ScreenNames.ProfileIDs.Count - 1;
- _UpdateButtonNext();
- //Update texture and name
- _PlayerDestinationButtons[added].Color = new SColorF(1, 1, 1, 0.6f);
- _PlayerDestinationButtons[added].SelColor = new SColorF(1, 1, 1, 1);
- _PlayerDestinationButtons[added].Texture = CBase.Profiles.GetAvatar(id);
- _PlayerDestinationButtons[added].SelTexture = CBase.Profiles.GetAvatar(id);
- _PlayerDestinationButtons[added].Text.Text = CBase.Profiles.GetPlayerName(id);
- _PlayerDestinationButtons[added].Enabled = true;
- //Update Tiles-List
- _UpdateButtonPlayerChoose();
- _CheckInteraction();
- return true;
- }
- return false;
- }
-
- private void _OnRemove()
- {
- for (int i = 0; i < _PlayerDestinationButtons.Count; i++)
- {
- if (!_PlayerDestinationButtons[i].Selected)
- continue;
- if ((i + 1) > _Data.ScreenNames.ProfileIDs.Count)
- continue;
- _Data.ScreenNames.ProfileIDs.RemoveAt(i);
- _UpdateButtonNext();
- _UpdateButtonPlayerDestination();
- _UpdateButtonPlayerChoose();
- _CheckInteraction();
- return;
- }
- }
-
- private void _Back()
+ public override void Back()
{
+ SPartyNameOptions options = GetData();
+ if (options.TeamList.Length == 1)
+ _Data.ScreenNames.ProfileIDs = options.TeamList[0];
_Data.ScreenNames.FadeToConfig = true;
_PartyMode.DataFromScreen(ThemeName, _Data);
}
- private void _Next()
+ public override void Next()
{
+ SPartyNameOptions options = GetData();
+ if (options.TeamList.Length == 1)
+ _Data.ScreenNames.ProfileIDs = options.TeamList[0];
_Data.ScreenNames.FadeToConfig = false;
_PartyMode.DataFromScreen(ThemeName, _Data);
}
diff --git a/PartyModes/PartyModeTicTacToe/CPartyModeTicTacToe.cs b/PartyModes/PartyModeTicTacToe/CPartyModeTicTacToe.cs
index d3628d3e..c695a1c7 100644
--- a/PartyModes/PartyModeTicTacToe/CPartyModeTicTacToe.cs
+++ b/PartyModes/PartyModeTicTacToe/CPartyModeTicTacToe.cs
@@ -58,8 +58,6 @@ namespace VocaluxeLib.PartyModes.TicTacToe
#region ToScreen
public struct SDataToScreenConfig
{
- public int NumPlayerTeam1;
- public int NumPlayerTeam2;
public int NumFields;
public ESongSource SongSource;
public int CategoryID;
@@ -99,8 +97,6 @@ namespace VocaluxeLib.PartyModes.TicTacToe
public struct SFromScreenConfig
{
- public int NumPlayerTeam1;
- public int NumPlayerTeam2;
public int NumFields;
public ESongSource SongSource;
public int CategoryID;
@@ -111,6 +107,8 @@ namespace VocaluxeLib.PartyModes.TicTacToe
public struct SFromScreenNames
{
public bool FadeToConfig;
+ public int NumPlayerTeam1;
+ public int NumPlayerTeam2;
public List ProfileIDsTeam1;
public List ProfileIDsTeam2;
}
@@ -135,6 +133,8 @@ namespace VocaluxeLib.PartyModes.TicTacToe
private const int _MinPlayer = 2;
private const int _MaxTeams = 2;
private const int _MinTeams = 2;
+ private const int _MinPlayerPerTeam = 1;
+ private const int _MaxPlayerPerTeam = 10;
private const int _NumFields = 9;
private enum EStage
@@ -253,8 +253,6 @@ namespace VocaluxeLib.PartyModes.TicTacToe
try
{
dataFrom = (SDataFromScreen)data;
- _GameData.NumPlayerTeam1 = dataFrom.ScreenConfig.NumPlayerTeam1;
- _GameData.NumPlayerTeam2 = dataFrom.ScreenConfig.NumPlayerTeam2;
_GameData.NumFields = dataFrom.ScreenConfig.NumFields;
_GameData.SongSource = dataFrom.ScreenConfig.SongSource;
_GameData.CategoryID = dataFrom.ScreenConfig.CategoryID;
@@ -279,6 +277,8 @@ namespace VocaluxeLib.PartyModes.TicTacToe
else
{
_GameData.Team = CBase.Game.GetRandom(100) < 50 ? 0 : 1;
+ _GameData.NumPlayerTeam1 = dataFrom.ScreenNames.NumPlayerTeam1;
+ _GameData.NumPlayerTeam2 = dataFrom.ScreenNames.NumPlayerTeam2;
_GameData.ProfileIDsTeam1 = dataFrom.ScreenNames.ProfileIDsTeam1;
_GameData.ProfileIDsTeam2 = dataFrom.ScreenNames.ProfileIDsTeam2;
_Stage = EStage.Names;
@@ -346,8 +346,6 @@ namespace VocaluxeLib.PartyModes.TicTacToe
_Screens.TryGetValue("CPartyScreenTicTacToeConfig", out screen);
if (screen != null)
{
- _ToScreenConfig.NumPlayerTeam1 = _GameData.NumPlayerTeam1;
- _ToScreenConfig.NumPlayerTeam2 = _GameData.NumPlayerTeam2;
_ToScreenConfig.NumFields = _GameData.NumFields;
_ToScreenConfig.SongSource = _GameData.SongSource;
_ToScreenConfig.CategoryID = _GameData.CategoryID;
@@ -480,6 +478,16 @@ namespace VocaluxeLib.PartyModes.TicTacToe
return _MinTeams;
}
+ public override int GetMinPlayerPerTeam()
+ {
+ return _MinPlayerPerTeam;
+ }
+
+ public override int GetMaxPlayerPerTeam()
+ {
+ return _MaxPlayerPerTeam;
+ }
+
public override int GetMaxNumRounds()
{
return _NumFields;
diff --git a/PartyModes/PartyModeTicTacToe/CPartyScreenTicTacToeConfig.cs b/PartyModes/PartyModeTicTacToe/CPartyScreenTicTacToeConfig.cs
index 0e1aab3a..894f6386 100644
--- a/PartyModes/PartyModeTicTacToe/CPartyScreenTicTacToeConfig.cs
+++ b/PartyModes/PartyModeTicTacToe/CPartyScreenTicTacToeConfig.cs
@@ -34,8 +34,6 @@ namespace VocaluxeLib.PartyModes.TicTacToe
get { return 1; }
}
- private const string _SelectSlideNumPlayerTeam1 = "SelectSlideNumPlayerTeam1";
- private const string _SelectSlideNumPlayerTeam2 = "SelectSlideNumPlayerTeam2";
private const string _SelectSlideNumFields = "SelectSlideNumFields";
private const string _SelectSlideSongSource = "SelectSlideSongSource";
private const string _SelectSlidePlaylist = "SelectSlidePlaylist";
@@ -54,8 +52,7 @@ namespace VocaluxeLib.PartyModes.TicTacToe
_ThemeSelectSlides = new string[]
{
- _SelectSlideNumPlayerTeam1, _SelectSlideNumPlayerTeam2, _SelectSlideNumFields, _SelectSlideSongSource, _SelectSlidePlaylist, _SelectSlideCategory,
- _SelectSlideGameMode
+ _SelectSlideNumFields, _SelectSlideSongSource, _SelectSlidePlaylist, _SelectSlideCategory, _SelectSlideGameMode
};
_ThemeButtons = new string[] {_ButtonNext, _ButtonBack};
@@ -64,8 +61,6 @@ namespace VocaluxeLib.PartyModes.TicTacToe
{
PlaylistID = 0,
NumFields = 9,
- NumPlayerTeam1 = 2,
- NumPlayerTeam2 = 2,
GameMode = EPartyGameMode.TR_GAMEMODE_NORMAL,
CategoryID = 0,
SongSource = ESongSource.TR_ALLSONGS
@@ -79,8 +74,6 @@ namespace VocaluxeLib.PartyModes.TicTacToe
{
var config = (SDataToScreenConfig)receivedData;
_Data.ScreenConfig.NumFields = config.NumFields;
- _Data.ScreenConfig.NumPlayerTeam1 = config.NumPlayerTeam1;
- _Data.ScreenConfig.NumPlayerTeam2 = config.NumPlayerTeam2;
_Data.ScreenConfig.PlaylistID = config.PlaylistID;
_Data.ScreenConfig.CategoryID = config.CategoryID;
_Data.ScreenConfig.SongSource = config.SongSource;
@@ -173,17 +166,6 @@ namespace VocaluxeLib.PartyModes.TicTacToe
private void _FillSlides()
{
- // build num player slide (min player ... max player);
- _SelectSlides[_SelectSlideNumPlayerTeam1].Clear();
- for (int i = _PartyMode.GetMinPlayer() / 2; i <= _PartyMode.GetMaxPlayer() / 2; i++)
- _SelectSlides[_SelectSlideNumPlayerTeam1].AddValue(i.ToString());
- _SelectSlides[_SelectSlideNumPlayerTeam1].Selection = _Data.ScreenConfig.NumPlayerTeam1 - (_PartyMode.GetMinPlayer() / 2);
-
- _SelectSlides[_SelectSlideNumPlayerTeam2].Clear();
- for (int i = _PartyMode.GetMinPlayer() / 2; i <= _PartyMode.GetMaxPlayer() / 2; i++)
- _SelectSlides[_SelectSlideNumPlayerTeam2].AddValue(i.ToString());
- _SelectSlides[_SelectSlideNumPlayerTeam2].Selection = _Data.ScreenConfig.NumPlayerTeam2 - (_PartyMode.GetMinPlayer() / 2);
-
_SelectSlides[_SelectSlideNumFields].Clear();
_SelectSlides[_SelectSlideNumFields].AddValue("9");
_SelectSlides[_SelectSlideNumFields].AddValue("16");
@@ -226,9 +208,6 @@ namespace VocaluxeLib.PartyModes.TicTacToe
private void _UpdateSlides()
{
- _Data.ScreenConfig.NumPlayerTeam1 = _SelectSlides[_SelectSlideNumPlayerTeam1].Selection + (_PartyMode.GetMinPlayer() / 2);
- _Data.ScreenConfig.NumPlayerTeam2 = _SelectSlides[_SelectSlideNumPlayerTeam2].Selection + (_PartyMode.GetMinPlayer() / 2);
-
if (_SelectSlides[_SelectSlideNumFields].Selection == 0)
_Data.ScreenConfig.NumFields = 9;
else if (_SelectSlides[_SelectSlideNumFields].Selection == 1)
diff --git a/PartyModes/PartyModeTicTacToe/CPartyScreenTicTacToeNames.cs b/PartyModes/PartyModeTicTacToe/CPartyScreenTicTacToeNames.cs
index 4f8a86cd..9e2e5c05 100644
--- a/PartyModes/PartyModeTicTacToe/CPartyScreenTicTacToeNames.cs
+++ b/PartyModes/PartyModeTicTacToe/CPartyScreenTicTacToeNames.cs
@@ -25,7 +25,7 @@ using VocaluxeLib.Profile;
namespace VocaluxeLib.PartyModes.TicTacToe
{
// ReSharper disable UnusedMember.Global
- public class CPartyScreenTicTacToeNames : CMenuParty
+ public class CPartyScreenTicTacToeNames : CMenuPartyNameSelection
// ReSharper restore UnusedMember.Global
{
// Version number for theme files. Increment it, if you've changed something on the theme files!
@@ -34,63 +34,18 @@ namespace VocaluxeLib.PartyModes.TicTacToe
get { return 1; }
}
- private const string _ButtonNext = "ButtonNext";
- private const string _ButtonBack = "ButtonBack";
- private const string _ButtonPlayerDestination = "ButtonPlayerDestination";
- private const string _ButtonPlayerChoose = "ButtonPlayerChoose";
- private const string _ButtonPlayerChooseScrollUp = "ButtonPlayerChooseScrollUp";
- private const string _ButtonPlayerChooseScrollDown = "ButtonPlayerChooseScrollDown";
-
- private List _PlayerChooseButtons;
- private List _PlayerDestinationButtons;
- //PlayerDestinationButtons-Option
- private const int _PlayerDestinationButtonsNumH = 10;
- private const int _PlayerDestinationButtonsFirstX = 58;
- private const int _PlayerDestinationButtonsFirstY = 380;
- private const int _PlayerDestinationButtonsSpaceH = 15;
- private const int _PlayerDestinationButtonsSpaceW = 25;
- //PlayerChooseButtons-Option
- private List _PlayerChooseButtonsVisibleProfiles;
- private const int _PlayerChooseButtonsNumH = 10;
- private const int _PlayerChooseButtonsNumW = 2;
- private const int _PlayerChooseButtonsFirstX = 58;
- private const int _PlayerChooseButtonsFirstY = 105;
- private const int _PlayerChooseButtonsSpaceH = 15;
- private const int _PlayerChooseButtonsSpaceW = 25;
- private int _PlayerChooseButtonsOffset;
-
- private CStatic _ChooseAvatarStatic;
- private bool _SelectingMouseActive;
- private int _OldMouseX;
- private int _OldMouseY;
- private int _SelectedPlayerNr = -1;
- private bool _ButtonsAdded;
-
private int _NumPlayerTeam1 = 2;
private int _NumPlayerTeam2 = 2;
private SDataFromScreen _Data;
- private class CPlayerChooseButton
- {
- public CButton Button;
- public int ProfileID;
- }
-
public override void Init()
{
base.Init();
- _ChooseAvatarStatic = GetNewStatic();
- _ChooseAvatarStatic.Visible = false;
-
- _PlayerChooseButtonsVisibleProfiles = new List();
-
_Data.ScreenNames.ProfileIDsTeam1 = new List();
_Data.ScreenNames.ProfileIDsTeam2 = new List();
- _ThemeButtons = new string[] {_ButtonBack, _ButtonNext, _ButtonPlayerDestination, _ButtonPlayerChoose, _ButtonPlayerChooseScrollUp, _ButtonPlayerChooseScrollDown};
-
_Data = new SDataFromScreen();
var names = new SFromScreenNames {FadeToConfig = false, ProfileIDsTeam1 = new List(), ProfileIDsTeam2 = new List()};
_Data.ScreenNames = names;
@@ -122,514 +77,43 @@ namespace VocaluxeLib.PartyModes.TicTacToe
}
}
- public override bool HandleInput(SKeyEvent keyEvent)
- {
- base.HandleInput(keyEvent);
-
- if (keyEvent.KeyPressed) {}
- else
- {
- switch (keyEvent.Key)
- {
- case Keys.Back:
- case Keys.Escape:
- _Back();
- break;
-
- case Keys.Enter:
- if (_Buttons[_ButtonBack].Selected)
- _Back();
-
- if (_Buttons[_ButtonNext].Selected)
- _Next();
-
- if (_Buttons[_ButtonPlayerChooseScrollUp].Selected)
- _Scroll(-1);
-
- if (_Buttons[_ButtonPlayerChooseScrollDown].Selected)
- _Scroll(1);
-
- if (!_OnAdd())
- _OnRemove();
- break;
-
- case Keys.Delete:
- _OnRemove();
- break;
- }
- }
- return true;
- }
-
- public override bool HandleMouse(SMouseEvent mouseEvent)
- {
- base.HandleMouse(mouseEvent);
-
- //Check if LeftButton is hold and Select-Mode inactive
- if (mouseEvent.LBH && !_SelectingMouseActive)
- {
- //Save mouse-coords
- _OldMouseX = mouseEvent.X;
- _OldMouseY = mouseEvent.Y;
- //Check if mouse if over tile
- foreach (CPlayerChooseButton chooseButton in _PlayerChooseButtons)
- {
- if (chooseButton.Button.Selected)
- {
- _SelectedPlayerNr = chooseButton.ProfileID;
- if (_SelectedPlayerNr != -1)
- {
- //Activate mouse-selecting
- _SelectingMouseActive = true;
- //Update of Drag/Drop-Texture
- _ChooseAvatarStatic.Visible = true;
- _ChooseAvatarStatic.Rect = chooseButton.Button.Rect;
- _ChooseAvatarStatic.Rect.Z = -100;
- _ChooseAvatarStatic.Color = new SColorF(1, 1, 1, 1);
- _ChooseAvatarStatic.Texture = CBase.Profiles.GetAvatar(_SelectedPlayerNr);
- }
- }
- }
- return true;
- }
-
- //Check if LeftButton is hold and Select-Mode active
- if (mouseEvent.LBH && _SelectingMouseActive)
- {
- //Update coords for Drag/Drop-Texture
- _ChooseAvatarStatic.Rect.X += mouseEvent.X - _OldMouseX;
- _ChooseAvatarStatic.Rect.Y += mouseEvent.Y - _OldMouseY;
- _OldMouseX = mouseEvent.X;
- _OldMouseY = mouseEvent.Y;
-
- return true;
- }
- // LeftButton isn't hold anymore, but Selec-Mode is still active -> "Drop" of Avatar
- if (_SelectingMouseActive)
- {
- //Check if really a player was selected
- if (_SelectedPlayerNr != -1)
- {
- //Foreach Drop-Area
- for (int i = 0; i < _PlayerDestinationButtons.Count; i++)
- {
- //Check first, if area is "active"
- if (_PlayerDestinationButtons[i].Visible)
- {
- //Check if Mouse is in area
- if (CHelper.IsInBounds(_PlayerDestinationButtons[i].Rect, mouseEvent))
- {
- int added = -1;
- //Add Player-ID to list.
- if (i - _PlayerDestinationButtonsNumH < 0)
- {
- if (_Data.ScreenNames.ProfileIDsTeam1.Count < (i + 1))
- {
- _Data.ScreenNames.ProfileIDsTeam1.Add(_SelectedPlayerNr);
- added = _Data.ScreenNames.ProfileIDsTeam1.Count - 1;
- }
- else if (_Data.ScreenNames.ProfileIDsTeam1.Count >= (i + 1))
- {
- _Data.ScreenNames.ProfileIDsTeam1[i] = _SelectedPlayerNr;
- added = i;
- }
- }
- else if (i - _PlayerDestinationButtonsNumH >= 0)
- {
- if (_Data.ScreenNames.ProfileIDsTeam2.Count < ((i - _PlayerDestinationButtonsNumH) + 1))
- {
- _Data.ScreenNames.ProfileIDsTeam2.Add(_SelectedPlayerNr);
- added = _Data.ScreenNames.ProfileIDsTeam2.Count - 1 + _PlayerDestinationButtonsNumH;
- }
- else if (_Data.ScreenNames.ProfileIDsTeam2.Count >= ((i - _PlayerDestinationButtonsNumH) + 1))
- {
- _Data.ScreenNames.ProfileIDsTeam2[i - _PlayerDestinationButtonsNumH] = _SelectedPlayerNr;
- added = i;
- }
- }
- _UpdateButtonNext();
- //Update texture and name
- _PlayerDestinationButtons[added].Color = new SColorF(1, 1, 1, 0.6f);
- _PlayerDestinationButtons[added].SelColor = new SColorF(1, 1, 1, 1);
- _PlayerDestinationButtons[added].Texture = _ChooseAvatarStatic.Texture;
- _PlayerDestinationButtons[added].SelTexture = _ChooseAvatarStatic.Texture;
- _PlayerDestinationButtons[added].Text.Text = CBase.Profiles.GetPlayerName(_SelectedPlayerNr);
- _PlayerDestinationButtons[added].Enabled = true;
- //Update Tiles-List
- _UpdateButtonPlayerChoose();
- }
- }
- }
- _SelectedPlayerNr = -1;
- }
- //Reset variables
- _SelectingMouseActive = false;
- _ChooseAvatarStatic.Visible = false;
- return true;
- }
-
- if (mouseEvent.LB && _IsMouseOver(mouseEvent))
- {
- if (_Buttons[_ButtonBack].Selected)
- _Back();
-
- if (_Buttons[_ButtonNext].Selected)
- _Next();
-
- if (_Buttons[_ButtonPlayerChooseScrollUp].Selected)
- _Scroll(-1);
-
- if (_Buttons[_ButtonPlayerChooseScrollDown].Selected)
- _Scroll(1);
- }
-
- if (mouseEvent.LD && _IsMouseOver(mouseEvent))
- {
- if (!_OnAdd())
- _OnRemove();
- }
-
- if (mouseEvent.RB)
- _Back();
-
- return true;
- }
public override void OnShow()
{
base.OnShow();
-
- if (!_ButtonsAdded)
- {
- _AddButtonPlayerDestination();
- _AddButtonPlayerChoose();
- _ButtonsAdded = true;
- }
-
- _UpdateButtonPlayerDestination();
- _UpdateButtonPlayerChoose();
-
- _UpdateButtonNext();
+ SetPartyModeData(2, _NumPlayerTeam1 + _NumPlayerTeam2, new int[] { _NumPlayerTeam1, _NumPlayerTeam2 });
}
- public override bool UpdateGame()
+ public override void Back()
{
- return true;
- }
-
- public override bool Draw()
- {
- base.Draw();
- if (_ChooseAvatarStatic.Visible)
- _ChooseAvatarStatic.Draw();
- return true;
- }
-
- private void _Scroll(int offset)
- {
- if (offset < 0 && _PlayerChooseButtonsOffset > 0)
+ SPartyNameOptions options = GetData();
+ if(options.TeamList.Length == 2)
{
- _PlayerChooseButtonsOffset += offset;
- _UpdateButtonPlayerChoose();
+ _Data.ScreenNames.ProfileIDsTeam1 = options.TeamList[0];
+ _Data.ScreenNames.ProfileIDsTeam2 = options.TeamList[1];
}
- else if (_PlayerChooseButtonsVisibleProfiles.Count < _PlayerChooseButtons.Count + (_PlayerChooseButtonsOffset + offset) * _PlayerChooseButtonsNumH)
+ if (options.NumPlayerTeams.Length == 2)
{
- _PlayerChooseButtonsOffset += offset;
- _UpdateButtonPlayerChoose();
+ _Data.ScreenNames.NumPlayerTeam1 = options.NumPlayerTeams[0];
+ _Data.ScreenNames.NumPlayerTeam2 = options.NumPlayerTeams[1];
}
- }
-
- private void _AddButtonPlayerDestination()
- {
- _Buttons[_ButtonPlayerDestination].Visible = false;
- _PlayerDestinationButtons = new List();
- int row = 0;
- int column = 0;
- for (int i = 1; i <= _PartyMode.GetMaxPlayer(); i++)
- {
- CButton b = GetNewButton(_Buttons[_ButtonPlayerDestination]);
- b.Rect.X = _PlayerDestinationButtonsFirstX + column * (b.Rect.W + _PlayerDestinationButtonsSpaceH);
- b.Rect.Y = _PlayerDestinationButtonsFirstY + row * (b.Rect.H + _PlayerDestinationButtonsSpaceW);
- _PlayerDestinationButtons.Add(b);
- column++;
- if (column >= _PlayerDestinationButtonsNumH)
- {
- row++;
- column = 0;
- }
- b.Visible = true;
- b.Enabled = false;
- _AddButton(b);
- }
- }
-
- private void _AddButtonPlayerChoose()
- {
- _Buttons[_ButtonPlayerChoose].Visible = false;
- _PlayerChooseButtons = new List();
- int row = 0;
- int column = 0;
- for (int i = 1; i <= _PlayerChooseButtonsNumH * _PlayerChooseButtonsNumW; i++)
- {
- CButton b = GetNewButton(_Buttons[_ButtonPlayerChoose]);
- b.Rect.X = _PlayerChooseButtonsFirstX + column * (b.Rect.W + _PlayerChooseButtonsSpaceH);
- b.Rect.Y = _PlayerChooseButtonsFirstY + row * (b.Rect.H + _PlayerChooseButtonsSpaceW);
- var pcb = new CPlayerChooseButton {Button = b, ProfileID = -1};
- _PlayerChooseButtons.Add(pcb);
- column++;
- if (column >= _PlayerChooseButtonsNumH)
- {
- row++;
- column = 0;
- }
- b.Visible = true;
- b.Enabled = false;
- _AddButton(b);
- }
- }
-
- private void _UpdateButtonPlayerChoose()
- {
- _UpdateVisibleProfiles();
- if ((_PlayerChooseButtonsNumW * _PlayerChooseButtonsNumH) * (_PlayerChooseButtonsOffset + 1) - _PlayerChooseButtonsVisibleProfiles.Count >=
- (_PlayerChooseButtonsNumW * _PlayerChooseButtonsNumH) * _PlayerChooseButtonsOffset)
- _UpdateButtonPlayerChoose(_PlayerChooseButtonsOffset - 1);
- else
- _UpdateButtonPlayerChoose(_PlayerChooseButtonsOffset);
- _Buttons[_ButtonPlayerChooseScrollUp].Enabled = _PlayerChooseButtonsOffset > 0;
- _Buttons[_ButtonPlayerChooseScrollDown].Enabled = _PlayerChooseButtonsVisibleProfiles.Count >
- _PlayerChooseButtons.Count + _PlayerChooseButtonsOffset * _PlayerChooseButtonsNumH;
- }
-
- private void _UpdateButtonPlayerChoose(int offset)
- {
- const int numButtonPlayerChoose = _PlayerChooseButtonsNumW * _PlayerChooseButtonsNumH;
- if (offset < 0)
- offset = 0;
-
- if (numButtonPlayerChoose * (offset + 1) - _PlayerChooseButtonsVisibleProfiles.Count <= numButtonPlayerChoose)
- {
- for (int i = 0; i < numButtonPlayerChoose; i++)
- {
- if ((i + offset * numButtonPlayerChoose) < _PlayerChooseButtonsVisibleProfiles.Count)
- {
- int id = _PlayerChooseButtonsVisibleProfiles[i + offset * numButtonPlayerChoose];
- _PlayerChooseButtons[i].ProfileID = id;
- _PlayerChooseButtons[i].Button.Text.Text = CBase.Profiles.GetPlayerName(id);
- _PlayerChooseButtons[i].Button.Texture = CBase.Profiles.GetAvatar(id);
- _PlayerChooseButtons[i].Button.SelTexture = CBase.Profiles.GetAvatar(id);
- _PlayerChooseButtons[i].Button.Color = new SColorF(1, 1, 1, 0.6f);
- _PlayerChooseButtons[i].Button.SelColor = new SColorF(1, 1, 1, 1);
- _PlayerChooseButtons[i].Button.Enabled = true;
- }
- else
- {
- _PlayerChooseButtons[i].ProfileID = -1;
- _PlayerChooseButtons[i].Button.Text.Text = String.Empty;
- _PlayerChooseButtons[i].Button.Texture = _Buttons[_ButtonPlayerChoose].Texture;
- _PlayerChooseButtons[i].Button.SelTexture = _Buttons[_ButtonPlayerChoose].SelTexture;
- _PlayerChooseButtons[i].Button.Color = _Buttons[_ButtonPlayerChoose].Color;
- _PlayerChooseButtons[i].Button.SelColor = _Buttons[_ButtonPlayerChoose].SelColor;
- _PlayerChooseButtons[i].Button.Enabled = false;
- }
- }
- }
- }
-
- private void _UpdateVisibleProfiles()
- {
- _PlayerChooseButtonsVisibleProfiles.Clear();
- CProfile[] profiles = CBase.Profiles.GetProfiles();
- foreach (CProfile profile in profiles)
- {
- bool visible = false;
- //Show profile only if active
- if (profile.Active == EOffOn.TR_CONFIG_ON)
- {
- visible = _Data.ScreenNames.ProfileIDsTeam1.All(profileID => profileID != profile.ID) &&
- _Data.ScreenNames.ProfileIDsTeam2.All(profileID => profileID != profile.ID);
- }
- if (visible)
- _PlayerChooseButtonsVisibleProfiles.Add(profile.ID);
- }
- }
-
- private void _UpdateButtonPlayerDestination()
- {
- for (int i = 0; i < _PlayerDestinationButtons.Count / 2; i++)
- {
- if (_NumPlayerTeam1 > i)
- {
- _PlayerDestinationButtons[i].Visible = true;
- _PlayerDestinationButtons[i].Enabled = true;
- }
- else
- {
- _PlayerDestinationButtons[i].Visible = false;
- _PlayerDestinationButtons[i].Enabled = false;
- }
- }
- for (int i = 0; i < _PlayerDestinationButtons.Count / 2; i++)
- {
- if (_NumPlayerTeam2 > i)
- {
- _PlayerDestinationButtons[i + _PlayerDestinationButtonsNumH].Visible = true;
- _PlayerDestinationButtons[i + _PlayerDestinationButtonsNumH].Enabled = true;
- }
- else
- {
- _PlayerDestinationButtons[i + _PlayerDestinationButtonsNumH].Visible = false;
- _PlayerDestinationButtons[i + _PlayerDestinationButtonsNumH].Enabled = false;
- }
- }
- for (int i = 0; i < _NumPlayerTeam1; i++)
- {
- if (i < _Data.ScreenNames.ProfileIDsTeam1.Count)
- {
- if (_Data.ScreenNames.ProfileIDsTeam1[i] != -1)
- {
- int id = _Data.ScreenNames.ProfileIDsTeam1[i];
- _PlayerDestinationButtons[i].Color = new SColorF(1, 1, 1, 0.6f);
- _PlayerDestinationButtons[i].SelColor = new SColorF(1, 1, 1, 1);
- _PlayerDestinationButtons[i].Texture = CBase.Profiles.GetAvatar(id);
- _PlayerDestinationButtons[i].SelTexture = CBase.Profiles.GetAvatar(id);
- _PlayerDestinationButtons[i].Text.Text = CBase.Profiles.GetPlayerName(id);
- _PlayerDestinationButtons[i].Enabled = true;
- }
- }
- else
- {
- _PlayerDestinationButtons[i].Color = _Buttons[_ButtonPlayerDestination].Color;
- _PlayerDestinationButtons[i].SelColor = _Buttons[_ButtonPlayerDestination].SelColor;
- _PlayerDestinationButtons[i].Texture = _Buttons[_ButtonPlayerDestination].Texture;
- _PlayerDestinationButtons[i].SelTexture = _Buttons[_ButtonPlayerDestination].SelTexture;
- _PlayerDestinationButtons[i].Text.Text = String.Empty;
- _PlayerDestinationButtons[i].Enabled = false;
- }
- }
- for (int i = 0; i < _NumPlayerTeam2; i++)
- {
- if (i < _Data.ScreenNames.ProfileIDsTeam2.Count)
- {
- if (_Data.ScreenNames.ProfileIDsTeam2[i] != -1)
- {
- int id = _Data.ScreenNames.ProfileIDsTeam2[i];
- _PlayerDestinationButtons[i + _PlayerDestinationButtonsNumH].Color = new SColorF(1, 1, 1, 0.6f);
- _PlayerDestinationButtons[i + _PlayerDestinationButtonsNumH].SelColor = new SColorF(1, 1, 1, 1);
- _PlayerDestinationButtons[i].Texture = CBase.Profiles.GetAvatar(id);
- _PlayerDestinationButtons[i].SelTexture = CBase.Profiles.GetAvatar(id);
- _PlayerDestinationButtons[i].Text.Text = CBase.Profiles.GetPlayerName(id);
- _PlayerDestinationButtons[i + _PlayerDestinationButtonsNumH].Enabled = true;
- }
- }
- else
- {
- _PlayerDestinationButtons[i + _PlayerDestinationButtonsNumH].Color = _Buttons[_ButtonPlayerDestination].Color;
- _PlayerDestinationButtons[i + _PlayerDestinationButtonsNumH].SelColor = _Buttons[_ButtonPlayerDestination].SelColor;
- _PlayerDestinationButtons[i + _PlayerDestinationButtonsNumH].Texture = _Buttons[_ButtonPlayerDestination].Texture;
- _PlayerDestinationButtons[i + _PlayerDestinationButtonsNumH].SelTexture = _Buttons[_ButtonPlayerDestination].SelTexture;
- _PlayerDestinationButtons[i + _PlayerDestinationButtonsNumH].Text.Text = String.Empty;
- _PlayerDestinationButtons[i + _PlayerDestinationButtonsNumH].Enabled = false;
- }
- }
- }
-
- private void _UpdateButtonNext()
- {
- if (_Data.ScreenNames.ProfileIDsTeam1.Count == _NumPlayerTeam1 && _Data.ScreenNames.ProfileIDsTeam2.Count == _NumPlayerTeam2)
- {
- _Buttons[_ButtonNext].Visible = true;
- _SetInteractionToButton(_Buttons[_ButtonNext]);
- }
- else
- _Buttons[_ButtonNext].Visible = false;
- }
-
- private bool _OnAdd()
- {
- foreach (CPlayerChooseButton chooseButton in _PlayerChooseButtons.Where(chooseButton => chooseButton.Button.Selected && chooseButton.ProfileID != -1))
- {
- if (_Data.ScreenNames.ProfileIDsTeam1.Count < _NumPlayerTeam1)
- {
- _Data.ScreenNames.ProfileIDsTeam1.Add(chooseButton.ProfileID);
- int added = _Data.ScreenNames.ProfileIDsTeam1.Count - 1;
- _UpdateButtonNext();
- //Update texture and name
- _PlayerDestinationButtons[added].Color = new SColorF(1, 1, 1, 0.6f);
- _PlayerDestinationButtons[added].SelColor = new SColorF(1, 1, 1, 1);
- _PlayerDestinationButtons[added].Texture = CBase.Profiles.GetAvatar(chooseButton.ProfileID);
- _PlayerDestinationButtons[added].SelTexture = CBase.Profiles.GetAvatar(chooseButton.ProfileID);
- _PlayerDestinationButtons[added].Text.Text = CBase.Profiles.GetPlayerName(chooseButton.ProfileID);
- _PlayerDestinationButtons[added].Enabled = true;
- //Update Tiles-List
- _UpdateButtonPlayerChoose();
- _CheckInteraction();
- return true;
- }
- if (_Data.ScreenNames.ProfileIDsTeam2.Count < _NumPlayerTeam2)
- {
- _Data.ScreenNames.ProfileIDsTeam2.Add(chooseButton.ProfileID);
- int added = (_Data.ScreenNames.ProfileIDsTeam2.Count - 1) + _PlayerDestinationButtonsNumH;
- _UpdateButtonNext();
- //Update texture and name
- _PlayerDestinationButtons[added].Color = new SColorF(1, 1, 1, 0.6f);
- _PlayerDestinationButtons[added].SelColor = new SColorF(1, 1, 1, 1);
- _PlayerDestinationButtons[added].Texture = CBase.Profiles.GetAvatar(chooseButton.ProfileID);
- _PlayerDestinationButtons[added].SelTexture = CBase.Profiles.GetAvatar(chooseButton.ProfileID);
- _PlayerDestinationButtons[added].Text.Text = CBase.Profiles.GetPlayerName(chooseButton.ProfileID);
- _PlayerDestinationButtons[added].Enabled = true;
- //Update Tiles-List
- _UpdateButtonPlayerChoose();
- _CheckInteraction();
- return true;
- }
- }
- return false;
- }
-
- private bool _OnRemove()
- {
- for (int i = 0; i < _PlayerDestinationButtonsNumH; i++)
- {
- if (_PlayerDestinationButtons[i].Selected)
- {
- if ((i + 1) <= _Data.ScreenNames.ProfileIDsTeam1.Count)
- {
- _Data.ScreenNames.ProfileIDsTeam1.RemoveAt(i);
- _UpdateButtonNext();
- _UpdateButtonPlayerDestination();
- _UpdateButtonPlayerChoose();
- _CheckInteraction();
- return true;
- }
- }
- }
- for (int i = _PlayerDestinationButtonsNumH; i < _PlayerDestinationButtonsNumH * 2; i++)
- {
- if (_PlayerDestinationButtons[i].Selected)
- {
- if (((i - _PlayerDestinationButtonsNumH) + 1) <= _Data.ScreenNames.ProfileIDsTeam2.Count)
- {
- _Data.ScreenNames.ProfileIDsTeam2.RemoveAt(i - _PlayerDestinationButtonsNumH);
- _UpdateButtonNext();
- _UpdateButtonPlayerDestination();
- _UpdateButtonPlayerChoose();
- _CheckInteraction();
- return true;
- }
- }
- }
- return false;
- }
-
- private void _Back()
- {
_Data.ScreenNames.FadeToConfig = true;
_PartyMode.DataFromScreen(ThemeName, _Data);
}
- private void _Next()
+ public override void Next()
{
+ SPartyNameOptions options = GetData();
+ if (options.TeamList.Length == 2)
+ {
+ _Data.ScreenNames.ProfileIDsTeam1 = options.TeamList[0];
+ _Data.ScreenNames.ProfileIDsTeam2 = options.TeamList[1];
+ }
+ if (options.NumPlayerTeams.Length == 2)
+ {
+ _Data.ScreenNames.NumPlayerTeam1 = options.NumPlayerTeams[0];
+ _Data.ScreenNames.NumPlayerTeam2 = options.NumPlayerTeams[1];
+ }
_Data.ScreenNames.FadeToConfig = false;
_PartyMode.DataFromScreen(ThemeName, _Data);
}
diff --git a/Vocaluxe/Base/CMain.cs b/Vocaluxe/Base/CMain.cs
index df9cf03d..fad6fe07 100644
--- a/Vocaluxe/Base/CMain.cs
+++ b/Vocaluxe/Base/CMain.cs
@@ -595,6 +595,21 @@ namespace Vocaluxe.Base
{
return CProfiles.GetAvatarTextureFromProfile(profileID);
}
+
+ public bool IsProfileIDValid(int profileID)
+ {
+ return CProfiles.IsProfileIDValid(profileID);
+ }
+
+ public bool IsGuest(int profileID)
+ {
+ return CProfiles.IsGuestProfile(profileID);
+ }
+
+ public void AddProfileChangedCallback(ProfileChangedCallback notification)
+ {
+ CProfiles.AddProfileChangedCallback(notification);
+ }
}
class CBrecord : IRecording
diff --git a/Vocaluxe/Base/CProfiles.cs b/Vocaluxe/Base/CProfiles.cs
index 01a05653..a57412a9 100644
--- a/Vocaluxe/Base/CProfiles.cs
+++ b/Vocaluxe/Base/CProfiles.cs
@@ -24,16 +24,6 @@ using VocaluxeLib.Draw;
namespace Vocaluxe.Base
{
- [Flags]
- public enum EProfileChangedFlags
- {
- None = 1,
- Avatar = 2,
- Profile = 4
- }
-
- public delegate void ProfileChangedCallback(EProfileChangedFlags typeChanged);
-
static class CProfiles
{
#region enums and structs
@@ -466,7 +456,7 @@ namespace Vocaluxe.Base
if (!IsProfileIDValid(profileID))
return true; // this will prevent from saving dummy profiles to highscore db
- return !_Profiles[profileID].UserRole.HasFlag(EUserRole.TR_USERROLE_NORMAL);
+ return _Profiles[profileID].UserRole <= EUserRole.TR_USERROLE_GUEST;
}
public static bool IsActive(int profileID)
diff --git a/Vocaluxe/Screens/CScreenNames.cs b/Vocaluxe/Screens/CScreenNames.cs
index e227ceb5..ba83f871 100644
--- a/Vocaluxe/Screens/CScreenNames.cs
+++ b/Vocaluxe/Screens/CScreenNames.cs
@@ -23,6 +23,7 @@ using VocaluxeLib;
using VocaluxeLib.Draw;
using VocaluxeLib.Menu;
using VocaluxeLib.Songs;
+using VocaluxeLib.Profile;
namespace Vocaluxe.Screens
{
@@ -602,6 +603,7 @@ namespace Vocaluxe.Screens
for (int i = 0; i < CSettings.MaxNumPlayer; i++)
{
+ _NameSelections[_NameSelection].UseProfile(CGame.Players[i].ProfileID);
_Statics[_StaticPlayerAvatar[i]].Texture = CProfiles.IsProfileIDValid(CGame.Players[i].ProfileID) ?
CProfiles.GetAvatarTextureFromProfile(CGame.Players[i].ProfileID) :
_OriginalPlayerAvatarTextures[i];
@@ -618,7 +620,7 @@ namespace Vocaluxe.Screens
else
_SelectSlides[_SelectSlideDuetPlayer[i]].Visible = false;
}
-
+ _NameSelections[_NameSelection].UpdateList();
_ProfilesChanged = false;
_AvatarsChanged = false;
}
@@ -675,6 +677,8 @@ namespace Vocaluxe.Screens
private void _UpdateSelectedProfile(int playerNum, int profileId)
{
+ _NameSelections[_NameSelection].RemoveUsedProfile(CGame.Players[playerNum].ProfileID);
+ _NameSelections[_NameSelection].UseProfile(profileId);
//Update Game-infos with new player
CGame.Players[playerNum].ProfileID = profileId;
//Update config for default players.
@@ -693,6 +697,7 @@ namespace Vocaluxe.Screens
{
for (int i = 0; i < CGame.NumPlayer; i++)
{
+ _NameSelections[_NameSelection].RemoveUsedProfile(CGame.Players[i].ProfileID);
CGame.Players[i].ProfileID = -1;
//Update config for default players.
CConfig.Players[i] = String.Empty;
@@ -706,6 +711,7 @@ namespace Vocaluxe.Screens
private void _ResetPlayerSelection(int playerNum)
{
+ _NameSelections[_NameSelection].RemoveUsedProfile(CGame.Players[playerNum].ProfileID);
CGame.Players[playerNum].ProfileID = -1;
//Update config for default players.
CConfig.Players[playerNum] = String.Empty;
diff --git a/VocaluxeLib/IBasic.cs b/VocaluxeLib/IBasic.cs
index ac8ed878..3c3725ad 100644
--- a/VocaluxeLib/IBasic.cs
+++ b/VocaluxeLib/IBasic.cs
@@ -209,6 +209,9 @@ namespace VocaluxeLib
EGameDifficulty GetDifficulty(int profileID);
string GetPlayerName(int profileID, int playerNum = 0);
CTexture GetAvatar(int profileID);
+ bool IsProfileIDValid(int profileID);
+ bool IsGuest(int profileID);
+ void AddProfileChangedCallback(ProfileChangedCallback notification);
}
public interface ISongs
diff --git a/VocaluxeLib/Menu/CBackground.cs b/VocaluxeLib/Menu/CBackground.cs
index 7049bac9..fe0943cf 100644
--- a/VocaluxeLib/Menu/CBackground.cs
+++ b/VocaluxeLib/Menu/CBackground.cs
@@ -191,7 +191,8 @@ namespace VocaluxeLib.Menu
ok = _DrawVideo();
}
- if (_Theme.Type == EBackgroundTypes.SlideShow )
+
+ if (_Theme.Type == EBackgroundTypes.SlideShow && _Theme.SlideShowTextures.Count > 0)
{
ok = _DrawSlideShow();
}
diff --git a/VocaluxeLib/Menu/CMenuPartyNameSelection.cs b/VocaluxeLib/Menu/CMenuPartyNameSelection.cs
new file mode 100644
index 00000000..8f28fcba
--- /dev/null
+++ b/VocaluxeLib/Menu/CMenuPartyNameSelection.cs
@@ -0,0 +1,745 @@
+#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.Linq;
+using System.Windows.Forms;
+using VocaluxeLib.PartyModes;
+using VocaluxeLib.Draw;
+using VocaluxeLib.Profile;
+
+namespace VocaluxeLib.Menu
+{
+ public struct SPartyNameOptions
+ {
+ public int[] NumPlayerTeams;
+ public List[] TeamList;
+ }
+ public abstract class CMenuPartyNameSelection : CMenuParty
+ {
+ private bool _Teams;
+ protected int _NumTeams = -1;
+ protected int _NumPlayer = -1;
+ protected int[] _NumPlayerTeams;
+ protected bool _AllowChangePlayerNum = true;
+ protected bool _AllowChangeTeamNum = true;
+ protected bool _ChangePlayerNumDynamic = true;
+ protected bool _ChangeTeamNumDynamic = true;
+ private int _CurrentTeam = 0;
+
+ private bool _AvatarsChanged;
+ private bool _ProfilesChanged;
+
+ private bool _SelectingKeyboardActive;
+ private bool _SelectingFast;
+ private int _SelectingFastPlayerNr;
+ private int _SelectedProfileID = -1;
+
+ private CStatic _ChooseAvatarStatic;
+ private int _OldMouseX;
+ private int _OldMouseY;
+
+ private const string _ButtonNext = "ButtonNext";
+ private const string _ButtonBack = "ButtonBack";
+ private const string _ButtonRandom = "ButtonRandom";
+ private const string _ButtonIncreaseTeams = "ButtonIncreaseTeams";
+ private const string _ButtonDecreaseTeams = "ButtonDecreaseTeams";
+ private const string _ButtonIncreasePlayer = "ButtonIncreasePlayer";
+ private const string _ButtonDecreasePlayer = "ButtonDecreasePlayer";
+ private const string _SelectSlideTeams = "SelectSlideTeams";
+ private const string _SelectSlidePlayer = "SelectSlidePlayer";
+ private const string _NameSelection = "NameSelection";
+
+ private List[] _TeamList;
+
+ public override void Init()
+ {
+ base.Init();
+ _ThemeButtons = new string[] { _ButtonBack, _ButtonNext, _ButtonRandom, _ButtonIncreaseTeams, _ButtonDecreaseTeams, _ButtonIncreasePlayer, _ButtonDecreasePlayer };
+ _ThemeSelectSlides = new string[] { _SelectSlideTeams, _SelectSlidePlayer };
+ _ThemeNameSelections = new string[] { _NameSelection };
+
+ _ChooseAvatarStatic = GetNewStatic();
+ _ChooseAvatarStatic.Visible = false;
+ _ChooseAvatarStatic.Aspect = EAspect.Crop;
+
+ CBase.Profiles.AddProfileChangedCallback(_OnProfileChanged);
+ }
+
+ public void SetPartyModeData(int numPlayer)
+ {
+ SetPartyModeData(1, numPlayer, new int[] { numPlayer });
+ _CurrentTeam = 0;
+ }
+
+ public void SetPartyModeData(int numTeams, int numPlayer, int[] numPlayerTeams)
+ {
+ _NumTeams = numTeams;
+ _NumPlayer = numPlayer;
+ _NumPlayerTeams = numPlayerTeams;
+
+ if (_NumTeams > 0)
+ _TeamList = new List[_NumTeams];
+ else
+ _TeamList = new List[1];
+
+ if (_NumTeams != _NumPlayerTeams.Length)
+ _NumPlayerTeams = new int[_NumTeams];
+
+ for (int i = 0; i < _TeamList.Length; i++)
+ _TeamList[i] = new List();
+
+ _Teams = _NumTeams > 0;
+
+ _UpdateSlides();
+ _LoadProfiles();
+ _UpdateButtonVisibility();
+ _UpdateButtonState();
+ }
+
+ public override bool HandleInput(SKeyEvent keyEvent)
+ {
+ //Check if selecting with keyboard is active
+ if (_SelectingKeyboardActive)
+ {
+ //Handle left/right/up/down
+ _NameSelections[_NameSelection].HandleInput(keyEvent);
+ int numberPressed = -1;
+ bool resetSelection = false;
+ switch (keyEvent.Key)
+ {
+ case Keys.Enter:
+ //Check, if a player is selected
+ if (_NameSelections[_NameSelection].Selection > -1)
+ {
+ _SelectedProfileID = _NameSelections[_NameSelection].Selection;
+
+ if (!CBase.Profiles.IsProfileIDValid(_SelectedProfileID))
+ return true;
+
+ _AddPlayer(_CurrentTeam, _SelectedProfileID);
+ }
+ //Started selecting with 'P'
+ if (_SelectingFast) {
+ if (!_ChangePlayerNumDynamic && _TeamList[_CurrentTeam].Count == _NumPlayerTeams[_CurrentTeam])
+ resetSelection = true;
+ else if (_TeamList[_CurrentTeam].Count == _PartyMode.GetMaxPlayerPerTeam())
+ resetSelection = true;
+ }
+ else if(!_SelectingFast)
+ resetSelection = true;
+ break;
+
+ case Keys.Escape:
+ case Keys.Back:
+ resetSelection = true;
+ break;
+ }
+ if (numberPressed > 0 || resetSelection)
+ {
+ if (numberPressed == _SelectingFastPlayerNr || resetSelection)
+ {
+ //Reset all values
+ _SelectingFastPlayerNr = 0;
+ _SelectingKeyboardActive = false;
+ _NameSelections[_NameSelection].FastSelection(false, -1);
+ }
+ else if (numberPressed <= _NumPlayerTeams[_CurrentTeam])
+ {
+ _SelectingFastPlayerNr = numberPressed;
+ _NameSelections[_NameSelection].FastSelection(true, numberPressed);
+ }
+ _SelectingFast = false;
+ }
+ }
+ else
+ {
+ base.HandleInput(keyEvent);
+
+ int numPressed = 0;
+
+ switch (keyEvent.Key)
+ {
+ case Keys.Back:
+ case Keys.Escape:
+ Back();
+ break;
+
+ case Keys.Enter:
+ if (_Buttons[_ButtonBack].Selected)
+ Back();
+
+ if (_Buttons[_ButtonNext].Selected)
+ Next();
+
+ if (_Buttons[_ButtonRandom].Selected)
+ _SelectRandom();
+
+ if (_Buttons[_ButtonIncreaseTeams].Selected)
+ IncreaseTeamNum();
+
+ if (_Buttons[_ButtonDecreaseTeams].Selected)
+ DecreaseTeamNum();
+
+ if (_Buttons[_ButtonIncreasePlayer].Selected)
+ IncreasePlayerNum(_CurrentTeam);
+
+ if (_Buttons[_ButtonDecreasePlayer].Selected)
+ DecreasePlayerNum(_CurrentTeam);
+
+ break;
+
+ case Keys.Delete:
+ if (_SelectSlides[_SelectSlidePlayer].Selected && _SelectSlides[_SelectSlidePlayer].NumValues > 0)
+ {
+ int index = _SelectSlides[_SelectSlidePlayer].Selection;
+ _RemovePlayerByIndex(_CurrentTeam, index);
+ _UpdatePlayerSlide();
+ }
+ break;
+
+ case Keys.Left:
+ case Keys.Right:
+ if (_SelectSlides[_SelectSlideTeams].Selected)
+ _OnChangeTeamSlide();
+ break;
+
+ case Keys.P:
+ if (!_SelectingKeyboardActive)
+ {
+ _SelectingFastPlayerNr = (_CurrentTeam + 1);
+ _SelectingFast = true;
+ //_ResetPlayerSelections();
+ }
+ break;
+
+ case Keys.D1:
+ case Keys.NumPad1:
+ numPressed = 1;
+ break;
+
+ case Keys.D2:
+ case Keys.NumPad2:
+ numPressed = 2;
+ break;
+
+ case Keys.D3:
+ case Keys.NumPad3:
+ numPressed = 3;
+ break;
+
+ case Keys.D4:
+ case Keys.NumPad4:
+ numPressed = 4;
+ break;
+
+ case Keys.D5:
+ case Keys.NumPad5:
+ numPressed = 5;
+ break;
+
+ case Keys.D6:
+ case Keys.NumPad6:
+ numPressed = 6;
+ break;
+
+ case Keys.D7:
+ case Keys.NumPad7:
+ numPressed = 7;
+ break;
+
+ case Keys.D8:
+ case Keys.NumPad8:
+ numPressed = 8;
+ break;
+
+ case Keys.D9:
+ case Keys.NumPad9:
+ numPressed = 9;
+ break;
+
+ case Keys.Subtract:
+ if (_SelectSlides[_SelectSlideTeams].Selected)
+ DecreaseTeamNum();
+ else if (_SelectSlides[_SelectSlidePlayer].Selected)
+ DecreasePlayerNum(_CurrentTeam);
+ break;
+
+ case Keys.Add:
+ if (_SelectSlides[_SelectSlideTeams].Selected)
+ IncreaseTeamNum();
+ else if (_SelectSlides[_SelectSlidePlayer].Selected)
+ IncreasePlayerNum(_CurrentTeam);
+ break;
+
+ }
+
+ if (numPressed > 0)
+ {
+ if (_ChangeTeamNumDynamic && numPressed < _PartyMode.GetMaxTeams() && numPressed > _SelectSlides[_SelectSlideTeams].NumValues)
+ while (numPressed < _PartyMode.GetMaxTeams())
+ IncreaseTeamNum();
+ if (numPressed <= _SelectSlides[_SelectSlideTeams].NumValues)
+ _SelectSlides[_SelectSlideTeams].SetSelectionByValueIndex(numPressed - 1);
+ }
+ }
+ if (_SelectingFastPlayerNr > 0 && _SelectingFastPlayerNr <= _NumPlayerTeams[_CurrentTeam])
+ {
+ _SelectingKeyboardActive = true;
+ _NameSelections[_NameSelection].FastSelection(true, _SelectingFastPlayerNr);
+ }
+ return true;
+ }
+
+ public override bool HandleMouse(SMouseEvent mouseEvent)
+ {
+ bool stopSelectingFast = false;
+
+ if (_SelectingFast)
+ _NameSelections[_NameSelection].HandleMouse(mouseEvent);
+ else
+ base.HandleMouse(mouseEvent);
+
+ //Check if LeftButton is hold and Select-Mode inactive
+ if (mouseEvent.LBH && _SelectedProfileID < 0 && !_SelectingFast)
+ {
+ //Save mouse-coords
+ _OldMouseX = mouseEvent.X;
+ _OldMouseY = mouseEvent.Y;
+ //Check if mouse if over tile
+ if (_NameSelections[_NameSelection].IsOverTile(mouseEvent))
+ {
+ //Get player-number of tile
+ _SelectedProfileID = _NameSelections[_NameSelection].TilePlayerNr(mouseEvent);
+ if (_SelectedProfileID != -1)
+ {
+ //Update of Drag/Drop-Texture
+ CStatic selectedPlayer = _NameSelections[_NameSelection].TilePlayerAvatar(mouseEvent);
+ _ChooseAvatarStatic.Visible = true;
+ _ChooseAvatarStatic.Rect = selectedPlayer.Rect;
+ _ChooseAvatarStatic.Rect.Z = CBase.Settings.GetZNear();
+ _ChooseAvatarStatic.Color = new SColorF(1, 1, 1, 1);
+ _ChooseAvatarStatic.Texture = selectedPlayer.Texture;
+ }
+ }
+ }
+ //Check if LeftButton is hold and Select-Mode active
+ if (mouseEvent.LBH && _SelectedProfileID >= 0 && !_SelectingFast)
+ {
+ //Update coords for Drag/Drop-Texture
+ _ChooseAvatarStatic.Rect.X += mouseEvent.X - _OldMouseX;
+ _ChooseAvatarStatic.Rect.Y += mouseEvent.Y - _OldMouseY;
+ _OldMouseX = mouseEvent.X;
+ _OldMouseY = mouseEvent.Y;
+ }
+ // LeftButton isn't hold anymore, but Select-Mode is still active -> "Drop" of Avatar
+ else if (_SelectedProfileID >= 0 && !_SelectingFast)
+ {
+ //Check if mouse is in drop-area
+ if (CHelper.IsInBounds(_SelectSlides[_SelectSlidePlayer].Rect, mouseEvent))
+ {
+ if (!CBase.Profiles.IsProfileIDValid(_SelectedProfileID))
+ return true;
+
+ _AddPlayer(_CurrentTeam, _SelectedProfileID);
+ }
+
+ //Reset variables
+ _SelectedProfileID = -1;
+ _ChooseAvatarStatic.Visible = false;
+ }
+ if (mouseEvent.LB && _SelectingFast)
+ {
+ if (_NameSelections[_NameSelection].IsOverTile(mouseEvent))
+ {
+ //Get player-number of tile
+ _SelectedProfileID = _NameSelections[_NameSelection].TilePlayerNr(mouseEvent);
+ if (_SelectedProfileID != -1)
+ {
+ if (!CBase.Profiles.IsProfileIDValid(_SelectedProfileID))
+ return true;
+
+ _AddPlayer(_CurrentTeam, _SelectedProfileID);
+
+ if (!_ChangePlayerNumDynamic && _TeamList[_CurrentTeam].Count == _NumPlayerTeams[_CurrentTeam])
+ stopSelectingFast = true;
+ else if (_TeamList[_CurrentTeam].Count == _PartyMode.GetMaxPlayerPerTeam())
+ stopSelectingFast = true;
+ }
+ else
+ stopSelectingFast = true;
+ }
+ }
+
+ else if (mouseEvent.LB && _IsMouseOver(mouseEvent))
+ {
+ if (_Buttons[_ButtonBack].Selected)
+ Back();
+
+ if (_Buttons[_ButtonNext].Selected)
+ Next();
+
+ if (_Buttons[_ButtonRandom].Selected)
+ _SelectRandom();
+
+ if (_Buttons[_ButtonIncreaseTeams].Selected)
+ IncreaseTeamNum();
+
+ if (_Buttons[_ButtonDecreaseTeams].Selected)
+ DecreaseTeamNum();
+
+ if (_Buttons[_ButtonIncreasePlayer].Selected)
+ IncreasePlayerNum(_CurrentTeam);
+
+ if (_Buttons[_ButtonDecreasePlayer].Selected)
+ DecreasePlayerNum(_CurrentTeam);
+
+ if (_SelectSlides[_SelectSlideTeams].Selected)
+ _OnChangeTeamSlide();
+
+ //Update Tiles-List
+ _NameSelections[_NameSelection].UpdateList();
+ }
+
+ if (mouseEvent.LD && _NameSelections[_NameSelection].IsOverTile(mouseEvent) && !_SelectingFast)
+ {
+ _SelectedProfileID = _NameSelections[_NameSelection].TilePlayerNr(mouseEvent);
+ if (_SelectedProfileID > -1)
+ {
+ if (!CBase.Profiles.IsProfileIDValid(_SelectedProfileID))
+ return true;
+
+ _AddPlayer(_CurrentTeam, _SelectedProfileID);
+ }
+ }
+
+ if (mouseEvent.RB && _SelectingFast)
+ stopSelectingFast = true;
+ else if (mouseEvent.RB)
+ {
+ bool exit = true;
+ if (_SelectSlides[_SelectSlidePlayer].Selected && _TeamList[_CurrentTeam].Count > 0 )
+ {
+ int currentSelection = _SelectSlides[_SelectSlidePlayer].Selection;
+ int id = _TeamList[_CurrentTeam][currentSelection];
+ _RemovePlayer(_CurrentTeam, id);
+ _UpdatePlayerSlide();
+ exit = false;
+ }
+
+ if (exit)
+ Back();
+ }
+
+ if (mouseEvent.MB && _SelectingFast)
+ {
+ if (!_ChangePlayerNumDynamic && _TeamList[_CurrentTeam].Count == _NumPlayerTeams[_CurrentTeam])
+ stopSelectingFast = true;
+ else if (_TeamList[_CurrentTeam].Count == _PartyMode.GetMaxPlayerPerTeam())
+ stopSelectingFast = true;
+ }
+ else if (mouseEvent.MB)
+ {
+ _SelectingFast = true;
+ _SelectingFastPlayerNr = (_CurrentTeam + 1);
+ _SelectingKeyboardActive = true;
+ _NameSelections[_NameSelection].FastSelection(true, _SelectingFastPlayerNr);
+ }
+
+ //Check mouse-wheel for scrolling
+ if (mouseEvent.Wheel != 0)
+ {
+ if (CHelper.IsInBounds(_NameSelections[_NameSelection].Rect, mouseEvent))
+ {
+ int offset = _NameSelections[_NameSelection].Offset + mouseEvent.Wheel;
+ _NameSelections[_NameSelection].UpdateList(offset);
+ }
+ }
+
+ if (stopSelectingFast)
+ {
+ _SelectingFast = false;
+ _SelectingFastPlayerNr = 0;
+ _SelectingKeyboardActive = false;
+ _NameSelections[_NameSelection].FastSelection(false, -1);
+ }
+ return true;
+ }
+
+ public override void LoadTheme(string xmlPath)
+ {
+ base.LoadTheme(xmlPath);
+ _SelectSlides[_SelectSlidePlayer].WithTextures = true;
+ _SelectSlides[_SelectSlidePlayer].SelectionByHover = true;
+ }
+
+ public override bool UpdateGame()
+ {
+ if (_ProfilesChanged || _AvatarsChanged)
+ _LoadProfiles();
+
+ return true;
+ }
+
+ public override void OnShow()
+ {
+ _NameSelections[_NameSelection].Init();
+
+ base.OnShow();
+
+ _UpdateButtonVisibility();
+ _UpdateButtonState();
+ }
+
+ public override bool Draw()
+ {
+ base.Draw();
+
+ if (_ChooseAvatarStatic.Visible)
+ _ChooseAvatarStatic.Draw();
+
+ return true;
+ }
+
+ public abstract void Back();
+ public abstract void Next();
+
+ public SPartyNameOptions GetData()
+ {
+ SPartyNameOptions option = new SPartyNameOptions();
+ option.NumPlayerTeams = _NumPlayerTeams;
+ option.TeamList = _TeamList;
+ return option;
+ }
+
+ public void IncreaseTeamNum()
+ {
+ if (!_AllowChangeTeamNum)
+ return;
+
+ if (_NumTeams + 1 <= _PartyMode.GetMaxTeams())
+ {
+ _NumTeams++;
+ int[] numPlayerTeams = _NumPlayerTeams;
+ List[] teamList = _TeamList;
+ _NumPlayerTeams = new int[_NumTeams];
+ _TeamList = new List[_NumTeams];
+ for (int i = 0; i < _NumPlayerTeams.Length; i++)
+ {
+ if (i < numPlayerTeams.Length)
+ {
+ _NumPlayerTeams[i] = numPlayerTeams[i];
+ _TeamList[i] = teamList[i];
+ }
+ else
+ {
+ _NumPlayerTeams[i] = _NumPlayer;
+ _TeamList[i] = new List();
+ }
+ }
+ }
+ _UpdateButtonState();
+ }
+
+ public void DecreaseTeamNum()
+ {
+ if (!_AllowChangeTeamNum)
+ return;
+
+ if (_NumTeams - 1 >= _PartyMode.GetMinTeams())
+ {
+ _NumTeams--;
+ }
+ _UpdateButtonState();
+ }
+
+ public void IncreasePlayerNum(int team)
+ {
+ if (!_AllowChangePlayerNum)
+ return;
+ if (_NumPlayerTeams.Length > team)
+ {
+ if (_NumPlayerTeams[team] + 1 <= _PartyMode.GetMaxPlayerPerTeam())
+ _NumPlayerTeams[team]++;
+ _UpdatePlayerSlide();
+ }
+ _UpdateButtonState();
+ }
+
+ public void DecreasePlayerNum(int team)
+ {
+ if (!_AllowChangePlayerNum)
+ return;
+ if (_NumPlayerTeams.Length > team)
+ {
+ if (_NumPlayerTeams[team] - 1 >= _PartyMode.GetMinPlayerPerTeam())
+ _NumPlayerTeams[team]--;
+ if (_TeamList[team].Count > _NumPlayerTeams[team])
+ _RemovePlayerByIndex(team, _NumPlayerTeams[team] - 1);
+ _UpdatePlayerSlide();
+ }
+ _UpdateButtonState();
+ }
+
+ #region private methods
+
+ private void _OnProfileChanged(EProfileChangedFlags flags)
+ {
+ if (EProfileChangedFlags.Avatar == (EProfileChangedFlags.Avatar & flags))
+ _AvatarsChanged = true;
+
+ if (EProfileChangedFlags.Profile == (EProfileChangedFlags.Profile & flags))
+ _ProfilesChanged = true;
+ }
+
+ private void _LoadProfiles()
+ {
+ _NameSelections[_NameSelection].UpdateList();
+
+ _UpdateSlides();
+ _OnChangeTeamSlide();
+
+ _ProfilesChanged = false;
+ _AvatarsChanged = false;
+ }
+
+ private void _UpdateSlides()
+ {
+ _UpdateTeamSlide();
+ _UpdatePlayerSlide();
+ }
+
+ private void _OnChangeTeamSlide()
+ {
+ if (_CurrentTeam == _SelectSlides[_SelectSlideTeams].Selection)
+ return;
+
+ _CurrentTeam = _SelectSlides[_SelectSlideTeams].Selection;
+ _UpdatePlayerSlide();
+ }
+
+ private void _UpdatePlayerSlide()
+ {
+ int selection = _SelectSlides[_SelectSlidePlayer].Selection;
+ _SelectSlides[_SelectSlidePlayer].Clear();
+ for (int i = 0; i < _TeamList[_CurrentTeam].Count; i++)
+ {
+ string name = CBase.Profiles.GetPlayerName(_TeamList[_CurrentTeam][i]);
+ CTexture avatar = CBase.Profiles.GetAvatar(_TeamList[_CurrentTeam][i]);
+ _SelectSlides[_SelectSlidePlayer].AddValue(name, avatar);
+ }
+ for (int i = _TeamList[_CurrentTeam].Count; i < _NumPlayerTeams[_CurrentTeam]; i++)
+ {
+ _SelectSlides[_SelectSlidePlayer].AddValue("", _NameSelections[_NameSelection].TextureEmptyTile);
+ }
+ if (selection >= _TeamList[_CurrentTeam].Count)
+ selection = _TeamList[_CurrentTeam].Count - 1;
+ _SelectSlides[_SelectSlidePlayer].SetSelectionByValueIndex(selection);
+ }
+
+ private void _UpdateTeamSlide()
+ {
+ _SelectSlides[_SelectSlideTeams].Visible = _Teams;
+ _SelectSlides[_SelectSlideTeams].Clear();
+ for (int i = 1; i <= _NumTeams; i++)
+ _SelectSlides[_SelectSlideTeams].AddValue("Team " + i);
+
+ }
+
+ private void _UpdateButtonVisibility()
+ {
+ _Buttons[_ButtonIncreaseTeams].Visible = _AllowChangePlayerNum && _Teams && _PartyMode.GetMinTeams() != _PartyMode.GetMaxTeams();
+ _Buttons[_ButtonDecreaseTeams].Visible = _AllowChangePlayerNum && _Teams && _PartyMode.GetMinTeams() != _PartyMode.GetMaxTeams();
+ _Buttons[_ButtonIncreasePlayer].Visible = _AllowChangePlayerNum;
+ _Buttons[_ButtonDecreasePlayer].Visible = _AllowChangePlayerNum;
+ }
+
+ private void _UpdateButtonState()
+ {
+ _Buttons[_ButtonIncreaseTeams].Enabled = _NumTeams < _PartyMode.GetMaxTeams();
+ _Buttons[_ButtonDecreaseTeams].Enabled = _NumTeams > _PartyMode.GetMinTeams();
+ if (_NumPlayerTeams != null && _NumPlayerTeams.Length > _CurrentTeam)
+ {
+ _Buttons[_ButtonIncreasePlayer].Enabled = _NumPlayerTeams[_CurrentTeam] < _PartyMode.GetMaxPlayerPerTeam();
+ _Buttons[_ButtonDecreasePlayer].Enabled = _NumPlayerTeams[_CurrentTeam] > _PartyMode.GetMinPlayerPerTeam();
+ }
+ else
+ {
+ _Buttons[_ButtonIncreasePlayer].Enabled = false;
+ _Buttons[_ButtonDecreasePlayer].Enabled = false;
+ }
+ }
+
+ private void _AddPlayer(int team, int profileID)
+ {
+ if (_NumPlayerTeams[team] == _TeamList[team].Count && !_ChangePlayerNumDynamic)
+ return;
+ else if (_NumPlayerTeams[team] == _PartyMode.GetMaxPlayerPerTeam())
+ return;
+
+ _NameSelections[_NameSelection].UseProfile(profileID);
+ _TeamList[team].Add(profileID);
+
+ _UpdatePlayerSlide();
+ }
+
+ private void _RemoveAllPlayer()
+ {
+ for (int t = 0; t < _TeamList.Length; t++)
+ {
+ List ids = new List();
+ ids.AddRange(_TeamList[t]);
+ for (int p = 0; p < ids.Count; p++)
+ {
+ _RemovePlayer(t, ids[p]);
+ }
+ }
+ }
+
+ private void _RemovePlayerByIndex(int team, int index)
+ {
+ if (_TeamList[team].Count > index)
+ {
+ int id = _TeamList[team][index];
+ _TeamList[team].RemoveAt(index);
+ _NameSelections[_NameSelection].RemoveUsedProfile(id);
+ }
+ }
+
+ private void _RemovePlayer(int team, int profileID)
+ {
+ _TeamList[team].Remove(profileID);
+ _NameSelections[_NameSelection].RemoveUsedProfile(profileID);
+ }
+
+ private void _SelectRandom()
+ {
+ _RemoveAllPlayer();
+ for (int t = 0; t < _NumPlayerTeams.Length; t++)
+ {
+ for (int p = 0; p < _NumPlayerTeams[t]; p++)
+ {
+ int profileID = _NameSelections[_NameSelection].GetRandomUnusedProfile();
+ _AddPlayer(t, profileID);
+ }
+ }
+ }
+
+ #endregion
+ }
+}
diff --git a/VocaluxeLib/Menu/CNameSelection.cs b/VocaluxeLib/Menu/CNameSelection.cs
index 6314a194..9e08262b 100644
--- a/VocaluxeLib/Menu/CNameSelection.cs
+++ b/VocaluxeLib/Menu/CNameSelection.cs
@@ -71,6 +71,10 @@ namespace VocaluxeLib.Menu
private CTexture _TextureEmptyTile;
private CTexture _TextureTileSelected;
+ public CTexture TextureEmptyTile
+ {
+ get { return _TextureEmptyTile; }
+ }
public SColorF ColorEmptyTile;
@@ -90,6 +94,7 @@ namespace VocaluxeLib.Menu
private int _Player = -1;
private readonly List _VisibleProfiles;
+ private List _UsedProfiles;
private CStatic _PlayerSelector;
@@ -100,6 +105,7 @@ namespace VocaluxeLib.Menu
_Tiles = new List();
_VisibleProfiles = new List();
+ _UsedProfiles = new List();
}
public void Init()
@@ -478,6 +484,46 @@ namespace VocaluxeLib.Menu
_PrepareTiles();
}
+ public void UseProfile(int id)
+ {
+ if(id > -1)
+ if (!_UsedProfiles.Contains(id) && CBase.Profiles.IsProfileIDValid(id) && !CBase.Profiles.IsGuest(id))
+ {
+ _UsedProfiles.Add(id);
+ UpdateList();
+ }
+ }
+
+ public void RemoveUsedProfile(int id)
+ {
+ if (id > -1)
+ {
+ _UsedProfiles.Remove(id);
+ UpdateList();
+ }
+ }
+
+ public int GetRandomUnusedProfile()
+ {
+ int id = -1;
+
+ if (_VisibleProfiles.Count == 0)
+ return id;
+
+ if (_VisibleProfiles.Count == _UsedProfiles.Count)
+ return id;
+
+ while(id == -1)
+ {
+ int rand = CBase.Game.GetRandom(_VisibleProfiles.Count);
+ if (_UsedProfiles.Contains(_VisibleProfiles[rand]))
+ continue;
+ id = _VisibleProfiles[rand];
+ }
+
+ return id;
+ }
+
private void _PrepareTiles()
{
_Tiles.Clear();
@@ -504,14 +550,8 @@ namespace VocaluxeLib.Menu
bool visible = profile.Active == EOffOn.TR_CONFIG_ON;
if (visible)
{
- //Show profile only if active
- for (int p = 0; p < CBase.Game.GetNumPlayer(); p++)
- {
- //Don't show profile if is selected, but if selected and guest
- if (CBase.Game.GetPlayers()[p].ProfileID == profile.ID
- && profile.UserRole >= EUserRole.TR_USERROLE_NORMAL)
- visible = false;
- }
+ if (_UsedProfiles.Contains(profile.ID) && ((int)profile.UserRole) >= ((int)EUserRole.TR_USERROLE_NORMAL))
+ visible = false;
}
if (visible)
_VisibleProfiles.Add(profile.ID);
diff --git a/VocaluxeLib/Menu/CSelectSlide.cs b/VocaluxeLib/Menu/CSelectSlide.cs
index 19d5d924..93d0bea3 100644
--- a/VocaluxeLib/Menu/CSelectSlide.cs
+++ b/VocaluxeLib/Menu/CSelectSlide.cs
@@ -104,6 +104,8 @@ namespace VocaluxeLib.Menu
public bool Visible = true;
public bool Highlighted;
+ public bool SelectionByHover;
+
private bool _ArrowLeftSelected;
private bool _ArrowRightSelected;
@@ -114,7 +116,7 @@ namespace VocaluxeLib.Menu
private readonly List _ValueBounds = new List();
- public readonly bool WithTextures;
+ public bool WithTextures;
private int _Selection = -1;
public int Selection
@@ -654,6 +656,27 @@ namespace VocaluxeLib.Menu
{
_ArrowLeftSelected = CHelper.IsInBounds(RectArrowLeft, x, y) && _Selection > 0;
_ArrowRightSelected = CHelper.IsInBounds(RectArrowRight, x, y) && _Selection < _ValueNames.Count - 1;
+
+ if (SelectionByHover)
+ {
+ for (int i = 0; i < _ValueBounds.Count; i++)
+ {
+ if (CHelper.IsInBounds(_ValueBounds[i], x, y))
+ {
+ int offset = _Selection - _NumVisible / 2;
+
+ if (_ValueNames.Count - _NumVisible - offset < 0)
+ offset = _ValueNames.Count - _NumVisible;
+
+ if (offset < 0)
+ offset = 0;
+
+ Selection = i + offset;
+ _ValueBounds.Clear();
+ break;
+ }
+ }
+ }
}
public void ProcessMouseLBClick(int x, int y)
@@ -748,9 +771,14 @@ namespace VocaluxeLib.Menu
_ValueBounds.Clear();
for (int i = 0; i < numvis; i++)
{
- var text = new CText(0, 0, 0, TextH, MaxW, EAlignment.Center, _Theme.TextStyle, _Theme.TextFont, TextColor, _ValueNames[i + offset],
+ var text = new CText(0, 0, 0, TextH, MaxW, EAlignment.Center, _Theme.TextStyle, _Theme.TextFont, TextColor, "T",
_ValuePartyModeIDs[i + offset]);
+ if (_ValueNames[i + offset] != "")
+ text.Text = _ValueNames[i + offset];
+ else
+ text.Visible = false;
+
var alpha = new SColorF(1f, 1f, 1f, 0.35f);
if (i + offset == _Selection)
{
@@ -773,7 +801,7 @@ namespace VocaluxeLib.Menu
{
float dh = text.Y - Rect.Y - Rect.H * 0.1f;
var rect = new SRectF(text.X - dh / 2, Rect.Y + Rect.H * 0.05f, dh, dh, Rect.Z);
- CBase.Drawing.DrawTexture(_Textures[i + offset], rect, alpha);
+ CBase.Drawing.DrawTexture(_Textures[i + offset], rect, alpha, rect);
_ValueBounds.Add(rect);
}
else
diff --git a/VocaluxeLib/PartyModes/CPartyMode.cs b/VocaluxeLib/PartyModes/CPartyMode.cs
index 370d125a..5ef78a60 100644
--- a/VocaluxeLib/PartyModes/CPartyMode.cs
+++ b/VocaluxeLib/PartyModes/CPartyMode.cs
@@ -95,6 +95,16 @@ namespace VocaluxeLib.PartyModes
return 0;
}
+ public virtual int GetMinPlayerPerTeam()
+ {
+ return GetMinPlayer();
+ }
+
+ public virtual int GetMaxPlayerPerTeam()
+ {
+ return GetMaxPlayer();
+ }
+
public virtual int GetMaxNumRounds()
{
return 1;
diff --git a/VocaluxeLib/PartyModes/IPartyMode.cs b/VocaluxeLib/PartyModes/IPartyMode.cs
index e720d096..d71e8135 100644
--- a/VocaluxeLib/PartyModes/IPartyMode.cs
+++ b/VocaluxeLib/PartyModes/IPartyMode.cs
@@ -101,6 +101,8 @@ namespace VocaluxeLib.PartyModes
int GetMinPlayer();
int GetMaxTeams();
int GetMinTeams();
+ int GetMinPlayerPerTeam();
+ int GetMaxPlayerPerTeam();
int GetMaxNumRounds();
string GetFolder();
void SetFolder(string folder);
diff --git a/VocaluxeLib/Profile/CProfile.cs b/VocaluxeLib/Profile/CProfile.cs
index 21b10e03..4e27614c 100644
--- a/VocaluxeLib/Profile/CProfile.cs
+++ b/VocaluxeLib/Profile/CProfile.cs
@@ -22,6 +22,16 @@ using System.Xml;
namespace VocaluxeLib.Profile
{
+ [Flags]
+ public enum EProfileChangedFlags
+ {
+ None = 1,
+ Avatar = 2,
+ Profile = 4
+ }
+
+ public delegate void ProfileChangedCallback(EProfileChangedFlags typeChanged);
+
public class CProfile
{
public int ID;
diff --git a/VocaluxeLib/VocaluxeLib.csproj b/VocaluxeLib/VocaluxeLib.csproj
index ee8e196f..d44d9b74 100644
--- a/VocaluxeLib/VocaluxeLib.csproj
+++ b/VocaluxeLib/VocaluxeLib.csproj
@@ -142,6 +142,7 @@
+