Skip to content

Commit ba985cf

Browse files
Merge branch 'fix-sdk' into 'master'
fix(SDK): Use player-parsed frames to diplay STDOUT and STDERR streams See merge request codingame/game-engine!237
2 parents d02e771 + bb2b1ae commit ba985cf

File tree

4 files changed

+45
-25
lines changed

4 files changed

+45
-25
lines changed

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

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@ The CodinGame SDK is regularly updated and improved. This document lets you know
1010

1111
### 🐞 Bug fix
1212

13-
- Fix display of error messages
13+
- Referee output now properly displayed
14+
- Player output now properly displayed
15+
- Game Errors now displayed once more
1416

1517
## 3.6.1
1618

@@ -19,12 +21,22 @@ The CodinGame SDK is regularly updated and improved. This document lets you know
1921
- Fix the `stepByStepAnimateSpeed` getting interrupted by clicking in the IDE
2022
- Fix YAML testcases export
2123

24+
### ⚠️ Known issues
25+
26+
- Referee and player output improperly displayed
27+
- Game Errors not displayed
28+
2229
## 3.6.0
2330

2431
### 🎁 New features
2532

2633
- Add `TilingSprite`
2734

35+
### ⚠️ Known issues
36+
37+
- Referee and player output improperly displayed
38+
- Game Errors not displayed
39+
2840
## 3.5.2
2941

3042
### 🐞 Bug fix

runner/src/main/java/com/codingame/gameengine/runner/GameRunner.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,6 @@ private void readInitFrameErrors() {
223223
String id = String.valueOf(i);
224224
gameResult.errors.get(id).add(player.readError());
225225
}
226-
readError(referee);
227226
}
228227

229228
/**

runner/src/main/resources/view/app.js

Lines changed: 30 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -83,12 +83,16 @@ function PlayerCtrl ($scope, $timeout, $interval, $element) {
8383
loadGame()
8484
}
8585

86-
function onParsedGameInfo (gameInfo) {
86+
function onParsedGameInfo (parsedGameInfo) {
8787
$scope.playerColors = {}
88-
gameInfo.agents.forEach(function (agent) {
88+
ctrl.parsedGameInfo = parsedGameInfo
89+
parsedGameInfo.agents.forEach(function (agent) {
8990
$scope.playerColors[agent.index] = agent.color
9091
})
9192
cgPlayer.off('parsedGameInfo', onParsedGameInfo)
93+
const frameData = parsedGameInfo.frames[0]
94+
$scope.referee = { ...frameData.referee }
95+
$scope.summary = frameData.gameSummary
9296
}
9397

9498
async function loadGame () {
@@ -113,7 +117,7 @@ function PlayerCtrl ($scope, $timeout, $interval, $element) {
113117
}
114118

115119
function onUpdate (frame, progress, playing, isSubFrame, isTurnBased, atEnd) {
116-
if (ctrl.gameInfo.frames[frame].keyframe && frame !== currentFrame) {
120+
if (frame !== currentFrame) {
117121
$timeout(() => {
118122
currentFrame = frame
119123
onFrameChange(frame)
@@ -122,33 +126,28 @@ function PlayerCtrl ($scope, $timeout, $interval, $element) {
122126
}
123127

124128
function onFrameChange (frame) {
125-
let startFrame = frame
126-
while (startFrame > 0 && !ctrl.gameInfo.frames[startFrame - 1].keyframe) {
127-
startFrame--
128-
}
129-
130129
for (let i in ctrl.data.ids) {
131130
$scope.agents[i].stdout = null
132131
$scope.agents[i].stderr = null
133-
$scope.referee = {}
134132
}
135133

136-
while (startFrame <= frame) {
137-
for (let i in ctrl.data.ids) {
138-
const stdout = ctrl.data.outputs[i][startFrame]
139-
if (stdout) {
140-
$scope.agents[i].stdout = stdout
134+
$scope.referee = {}
135+
const frameData = ctrl.parsedGameInfo.frames[frame]
136+
for (let i in ctrl.data.ids) {
137+
const subframe = frameData.subframes[i]
138+
if (subframe) {
139+
if (subframe.stdout) {
140+
$scope.agents[i].stdout = subframe.stdout
141141
}
142-
const stderr = ctrl.data.errors[i][startFrame]
143-
if (stderr) {
144-
$scope.agents[i].stderr = stderr
142+
143+
if (subframe.stderr) {
144+
$scope.agents[i].stderr = subframe.stderr
145145
}
146146
}
147-
$scope.referee.stdout = $scope.referee.stdout || ctrl.data.outputs.referee[startFrame]
148-
$scope.referee.stderr = $scope.referee.stderr || ctrl.data.errors.referee[startFrame]
149-
$scope.summary = ctrl.data.summaries[startFrame]
150-
startFrame++
151147
}
148+
$scope.referee.stdout = frameData.referee.stdout
149+
$scope.referee.stderr = frameData.referee.stderr
150+
$scope.summary = frameData.gameSummary
152151
}
153152

154153
function convertFrameFormat (data) {
@@ -158,8 +157,18 @@ function PlayerCtrl ($scope, $timeout, $interval, $element) {
158157

159158
return { view: v.replace(/^(KEY_FRAME)|(INTERMEDIATE_FRAME)/, ''), keyframe: header[0] === 'KEY_FRAME' }
160159
})
160+
const refereeKeysMap = { 'errors': 'stderr', 'outputs': 'stdout' }
161161
for (let i = 0; i < frames.length; i++) {
162162
frames[i].gameSummary = data.summaries[i]
163+
frames[i].referee = {}
164+
165+
for (const key in refereeKeysMap) {
166+
const newKey = refereeKeysMap[key]
167+
if (data[key].referee[i] && data[key].referee[i].length) {
168+
frames[i].referee[newKey] = data[key].referee[i]
169+
}
170+
}
171+
163172
for (let pi in data.ids) {
164173
frames[i].stderr = frames[i].stderr || data.errors[pi][i]
165174
frames[i].stdout = frames[i].stdout || data.outputs[pi][i]

runner/src/main/resources/view/player.html

Lines changed: 2 additions & 2 deletions
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)