Skip to content

Commit cd1ea4b

Browse files
author
Builder
committed
Merge branch 'endscreenmodule-more-than-2-players' into 'master'
[FIX][SDK] EndscreenModule for more than 2 players See merge request codingame/game-engine!198
2 parents 15ab41d + 7137604 commit cd1ea4b

File tree

2 files changed

+53
-15
lines changed

2 files changed

+53
-15
lines changed

engine/modules/endscreen/src/main/resources/view/endscreen-module/EndScreenModule.js

Lines changed: 45 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -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

playground/misc/misc-3-release-notes.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,17 @@
22

33
The CodinGame SDK is regularly updated and improved. This document lets you know what changed in the latest releases.
44

5-
## 3.4.2
5+
6+
## Next release
67

78
### 🐞 Bug fix
89

10+
- The `EndScreenModule` now properly handles more than two players.
11+
12+
## 3.4.2
13+
14+
### 🐞 Bug fixes
15+
916
- `Circle` entities now displayed again
1017
- Included missing `setLeagueLevel` method in the `GameRunner`
1118

0 commit comments

Comments
 (0)