@@ -59,14 +59,25 @@ public bool SetProfilePicture(SetPictureCommand cmd)
59
59
{
60
60
bool isValid = false ;
61
61
62
- if ( cmd . avatarCategory == AvatarCategory . Special )
62
+ switch ( cmd . avatarCategory )
63
63
{
64
- isValid = SpecialPictures == null ? false : SpecialPictures . Any ( x => x . PictureId == cmd . pictureId ) ;
65
- }
66
- else
67
- {
68
- var winsPerRace = RaceWins ? . GetWinsPerRace ( ( Race ) cmd . avatarCategory ) ;
69
- isValid = winsPerRace >= PictureRange . FirstOrDefault ( p => p . PictureId == cmd . pictureId ) ? . NeededWins ;
64
+ case AvatarCategory . Starter :
65
+ isValid = true ;
66
+ break ;
67
+
68
+ case AvatarCategory . Special :
69
+ isValid = SpecialPictures == null ? false : SpecialPictures . Any ( x => x . PictureId == cmd . pictureId ) ;
70
+ break ;
71
+
72
+ case AvatarCategory . Total :
73
+ var totalWins = RaceWins ? . GetTotalWins ( ) ;
74
+ isValid = totalWins >= TotalPicturerange . FirstOrDefault ( p => p . PictureId == cmd . pictureId ) ? . NeededWins ;
75
+ break ;
76
+
77
+ default :
78
+ var winsPerRace = RaceWins ? . GetWinsPerRace ( ( Race ) cmd . avatarCategory ) ;
79
+ isValid = winsPerRace >= RacePictureRange . FirstOrDefault ( p => p . PictureId == cmd . pictureId ) ? . NeededWins ;
80
+ break ;
70
81
}
71
82
72
83
if ( isValid )
@@ -87,35 +98,34 @@ public void UpdateSpecialPictures(SpecialPicture[] specialPictures)
87
98
SpecialPictures = specialPictures ;
88
99
}
89
100
90
- public List < RaceToMaxPicture > PickablePictures => new List < RaceToMaxPicture >
101
+ public List < AvatarCategoryToMaxPictureId > PickablePictures => new List < AvatarCategoryToMaxPictureId >
91
102
{
92
- new RaceToMaxPicture ( Race . HU , GetMaxOf ( RaceWins . GetWinsPerRace ( Race . HU ) ) ) ,
93
- new RaceToMaxPicture ( Race . OC , GetMaxOf ( RaceWins . GetWinsPerRace ( Race . OC ) ) ) ,
94
- new RaceToMaxPicture ( Race . NE , GetMaxOf ( RaceWins . GetWinsPerRace ( Race . NE ) ) ) ,
95
- new RaceToMaxPicture ( Race . UD , GetMaxOf ( RaceWins . GetWinsPerRace ( Race . UD ) ) ) ,
96
- new RaceToMaxPicture ( Race . RnD , GetMaxOf ( RaceWins . GetWinsPerRace ( Race . RnD ) ) )
103
+ new AvatarCategoryToMaxPictureId ( AvatarCategory . HU , GetMaxPictureIdForRace ( Race . HU ) ) ,
104
+ new AvatarCategoryToMaxPictureId ( AvatarCategory . OC , GetMaxPictureIdForRace ( Race . OC ) ) ,
105
+ new AvatarCategoryToMaxPictureId ( AvatarCategory . NE , GetMaxPictureIdForRace ( Race . NE ) ) ,
106
+ new AvatarCategoryToMaxPictureId ( AvatarCategory . UD , GetMaxPictureIdForRace ( Race . UD ) ) ,
107
+ new AvatarCategoryToMaxPictureId ( AvatarCategory . RnD , GetMaxPictureIdForRace ( Race . RnD ) ) ,
108
+ new AvatarCategoryToMaxPictureId ( AvatarCategory . Total , GetMaxPictureIdForAllWins ( ) ) ,
97
109
} ;
98
110
99
- private long GetMaxOf ( long getWinsPerRace )
111
+ private long GetMaxPictureIdForRace ( Race race )
100
112
{
101
- return PictureRange . Where ( r => r . NeededWins <= getWinsPerRace ) . Max ( r => r . PictureId ) ;
113
+ var minimumWinsNeededForRaceIcon = RacePictureRange . First ( ) . NeededWins ;
114
+ var raceWinsForRace = RaceWins . GetWinsPerRace ( race ) ;
115
+
116
+ if ( raceWinsForRace < minimumWinsNeededForRaceIcon ) return 0 ;
117
+
118
+ return RacePictureRange
119
+ . Where ( r => r . NeededWins <= raceWinsForRace )
120
+ . Max ( r => r . PictureId ) ;
102
121
}
103
122
104
- [ BsonIgnore ]
105
- public List < WinsToPictureId > PictureRange => new List < WinsToPictureId >
123
+ private long GetMaxPictureIdForAllWins ( )
106
124
{
107
- new WinsToPictureId ( 0 , 0 ) ,
108
- new WinsToPictureId ( 1 , 5 ) ,
109
- new WinsToPictureId ( 2 , 20 ) ,
110
- new WinsToPictureId ( 3 , 70 ) ,
111
- new WinsToPictureId ( 4 , 150 ) ,
112
- new WinsToPictureId ( 5 , 250 ) ,
113
- new WinsToPictureId ( 6 , 400 ) ,
114
- new WinsToPictureId ( 7 , 600 ) ,
115
- new WinsToPictureId ( 8 , 900 ) ,
116
- new WinsToPictureId ( 9 , 1200 ) ,
117
- new WinsToPictureId ( 10 , 1500 )
118
- } ;
125
+ return TotalPicturerange
126
+ . Where ( r => r . NeededWins <= RaceWins . GetTotalWins ( ) )
127
+ . Max ( r => r . PictureId ) ;
128
+ }
119
129
120
130
public void Update ( PersonalSettingsDTO dto )
121
131
{
@@ -132,5 +142,75 @@ public void Update(PersonalSettingsDTO dto)
132
142
}
133
143
134
144
public DateTimeOffset LastUpdated { get ; set ; }
145
+
146
+ [ BsonIgnore ]
147
+ public List < WinsToPictureId > RacePictureRange => new List < WinsToPictureId >
148
+ {
149
+ new WinsToPictureId ( 1 , 5 ) ,
150
+ new WinsToPictureId ( 2 , 10 ) ,
151
+ new WinsToPictureId ( 3 , 25 ) ,
152
+ new WinsToPictureId ( 4 , 50 ) ,
153
+ new WinsToPictureId ( 5 , 100 ) ,
154
+ new WinsToPictureId ( 6 , 150 ) ,
155
+ new WinsToPictureId ( 7 , 250 ) ,
156
+ new WinsToPictureId ( 8 , 350 ) ,
157
+ new WinsToPictureId ( 9 , 500 ) ,
158
+ new WinsToPictureId ( 10 , 750 ) ,
159
+ new WinsToPictureId ( 11 , 1000 ) ,
160
+ new WinsToPictureId ( 12 , 1250 ) ,
161
+ new WinsToPictureId ( 13 , 1500 ) ,
162
+ new WinsToPictureId ( 14 , 1750 ) ,
163
+ new WinsToPictureId ( 15 , 2000 ) ,
164
+ new WinsToPictureId ( 16 , 2500 ) ,
165
+ new WinsToPictureId ( 17 , 3500 ) ,
166
+ new WinsToPictureId ( 18 , 5000 )
167
+ } ;
168
+
169
+ [ BsonIgnore ]
170
+ public List < WinsToPictureId > TotalPicturerange => new List < WinsToPictureId >
171
+ {
172
+ new WinsToPictureId ( 1 , 15 ) ,
173
+ new WinsToPictureId ( 2 , 30 ) ,
174
+ new WinsToPictureId ( 3 , 75 ) ,
175
+ new WinsToPictureId ( 4 , 150 ) ,
176
+ new WinsToPictureId ( 5 , 300 ) ,
177
+ new WinsToPictureId ( 6 , 450 ) ,
178
+ new WinsToPictureId ( 7 , 750 ) ,
179
+ new WinsToPictureId ( 8 , 1000 ) ,
180
+ new WinsToPictureId ( 9 , 1500 ) ,
181
+ new WinsToPictureId ( 10 , 2250 ) ,
182
+ new WinsToPictureId ( 11 , 3000 ) ,
183
+ new WinsToPictureId ( 12 , 3750 ) ,
184
+ new WinsToPictureId ( 13 , 4500 ) ,
185
+ new WinsToPictureId ( 14 , 5250 ) ,
186
+ new WinsToPictureId ( 15 , 6000 ) ,
187
+ new WinsToPictureId ( 16 , 7500 ) ,
188
+ new WinsToPictureId ( 17 , 10000 ) ,
189
+ new WinsToPictureId ( 18 , 15000 )
190
+ } ;
191
+
192
+ [ BsonIgnore ]
193
+ public List < WinsToPictureId > TournamentPicturerange => new List < WinsToPictureId >
194
+ // for future use with autotours
195
+ {
196
+ new WinsToPictureId ( 1 , 1 ) ,
197
+ new WinsToPictureId ( 2 , 5 ) ,
198
+ new WinsToPictureId ( 3 , 10 ) ,
199
+ new WinsToPictureId ( 4 , 20 ) ,
200
+ new WinsToPictureId ( 5 , 30 ) ,
201
+ new WinsToPictureId ( 6 , 50 ) ,
202
+ new WinsToPictureId ( 7 , 75 ) ,
203
+ new WinsToPictureId ( 8 , 100 ) ,
204
+ new WinsToPictureId ( 9 , 125 ) ,
205
+ new WinsToPictureId ( 10 , 150 ) ,
206
+ new WinsToPictureId ( 11 , 200 ) ,
207
+ new WinsToPictureId ( 12 , 300 ) ,
208
+ new WinsToPictureId ( 13 , 400 ) ,
209
+ new WinsToPictureId ( 14 , 500 ) ,
210
+ new WinsToPictureId ( 15 , 750 ) ,
211
+ new WinsToPictureId ( 16 , 1000 ) ,
212
+ new WinsToPictureId ( 17 , 1250 ) ,
213
+ new WinsToPictureId ( 18 , 1500 )
214
+ } ;
135
215
}
136
216
}
0 commit comments