@@ -125,9 +125,15 @@ export class EndScreenModule {
125125 }
126126 }
127127
128- generateText ( text , size , align , color ) {
128+ fitTextInWidth ( text , width ) {
129+ let currText = text . text
130+ while ( text . width > width ) {
131+ currText = currText . slice ( 0 , - 1 )
132+ text . text = currText + '...'
133+ }
134+ }
135+ generateText ( text , size , align , color , maxWidth = null ) {
129136 var textEl
130-
131137 textEl = new PIXI . Text ( text , {
132138 fontSize : Math . round ( size / 1.2 ) + 'px' ,
133139 fontFamily : 'Lato' ,
@@ -140,6 +146,10 @@ export class EndScreenModule {
140146 } else if ( align === 'center' ) {
141147 textEl . anchor . x = 0.5
142148 }
149+ if ( maxWidth !== null ) {
150+ this . fitTextInWidth ( textEl , maxWidth )
151+ }
152+
143153 return textEl
144154 }
145155
@@ -171,7 +181,11 @@ export class EndScreenModule {
171181 rank . position . y = 56
172182 avatarContainer . addChild ( rank )
173183
174- var rankLetter = this . generateText ( finisher . rank === 1 ? 'ST' : 'ND' . toString ( ) , 34 , 'left' , finisher . player . color )
184+ let rankChars = 'TH'
185+ if ( finisher . rank < 4 ) {
186+ rankChars = [ 'ST' , 'ND' , 'RD' ] [ finisher . rank - 1 ]
187+ }
188+ var rankLetter = this . generateText ( rankChars . toString ( ) , 34 , 'left' , finisher . player . color )
175189 rankLetter . position . x = 184
176190 rankLetter . position . y = 32
177191 avatarContainer . addChild ( rankLetter )
@@ -181,10 +195,16 @@ export class EndScreenModule {
181195
182196 avatarContainer . addChild ( hudAvatar )
183197
184- var name = this . generateText ( finisher . player . name . toUpperCase ( ) , 50 , 'left' , finisher . player . color )
198+ let maxTextWidth
199+ if ( this . globalData . playerCount <= 4 ) {
200+ maxTextWidth = 1500
201+ } else {
202+ maxTextWidth = 500
203+ }
204+ var name = this . generateText ( finisher . player . name . toUpperCase ( ) , 50 , 'left' , finisher . player . color , maxTextWidth )
185205
186206 const scoreText = finisher . text || ( ( finisher . score >= 0 ) ? finisher . score . toString ( ) + ' points' : '-' )
187- var scoreLabel = this . generateText ( scoreText , 64 , 'left' , finisher . player . color )
207+ var scoreLabel = this . generateText ( scoreText , 64 , 'left' , finisher . player . color , maxTextWidth )
188208
189209 name . x = 330
190210 name . y = - 4
@@ -237,22 +257,33 @@ export class EndScreenModule {
237257
238258 this . finishers = [ ]
239259 var finishers = new PIXI . Container ( )
240- var curRank = 1
260+
241261 var elem
242262 for ( i = 0 ; i < podium . length ; ++ i ) {
243- if ( i > 0 && podium [ i - 1 ] . score !== podium [ i ] . score ) {
244- curRank ++
245- }
246-
247- podium [ i ] . rank = curRank
263+ podium [ i ] . rank = podium . filter ( p => p . score > podium [ i ] . score ) . length + 1
248264 elem = this . createFinisher ( podium [ i ] )
249265 finishers . addChild ( elem )
250266 this . finishers . push ( elem )
251267 }
252268
253- for ( i = 0 ; i < this . finishers . length ; ++ i ) {
254- this . finishers [ i ] . position . x = ( WIDTH - this . finishers [ 0 ] . width ) / 2
255- this . finishers [ i ] . position . y = i * 150
269+ if ( this . finishers . length <= 4 ) {
270+ let maxFinisherWidth = Math . max ( ...this . finishers . map ( f => f . width ) )
271+ for ( i = 0 ; i < this . finishers . length ; ++ i ) {
272+ this . finishers [ i ] . position . x = ( WIDTH - maxFinisherWidth ) / 2
273+ this . finishers [ i ] . position . y = i * 150
274+ }
275+ } else {
276+ const margin = 50
277+ const middle = Math . ceil ( this . finishers . length / 2 )
278+ let maxFinisherWidth = Math . max ( ...this . finishers . slice ( 0 , middle ) . map ( f => f . width ) )
279+ for ( i = 0 ; i < this . finishers . length ; ++ i ) {
280+ if ( i < middle ) {
281+ this . finishers [ i ] . position . x = WIDTH / 2 - ( maxFinisherWidth + margin )
282+ } else {
283+ this . finishers [ i ] . position . x = WIDTH / 2 + margin
284+ }
285+ this . finishers [ i ] . position . y = ( i % middle ) * 150
286+ }
256287 }
257288 finishers . y = 400
258289
0 commit comments