@@ -85,10 +85,16 @@ function PlayerCtrl ($scope, $timeout, $interval, $element) {
8585
8686 function onParsedGameInfo ( gameInfo ) {
8787 $scope . playerColors = { }
88+ ctrl . parsedGameInfo = gameInfo
8889 gameInfo . agents . forEach ( function ( agent ) {
8990 $scope . playerColors [ agent . index ] = agent . color
9091 } )
9192 cgPlayer . off ( 'parsedGameInfo' , onParsedGameInfo )
93+ $timeout ( ( ) => {
94+ const frameData = gameInfo . frames [ 0 ]
95+ $scope . referee = { ...frameData . referee }
96+ $scope . summary = frameData . gameSummary
97+ } )
9298 }
9399
94100 async function loadGame ( ) {
@@ -113,7 +119,7 @@ function PlayerCtrl ($scope, $timeout, $interval, $element) {
113119 }
114120
115121 function onUpdate ( frame , progress , playing , isSubFrame , isTurnBased , atEnd ) {
116- if ( ctrl . gameInfo . frames [ frame ] . keyframe && frame !== currentFrame ) {
122+ if ( frame !== currentFrame ) {
117123 $timeout ( ( ) => {
118124 currentFrame = frame
119125 onFrameChange ( frame )
@@ -122,33 +128,28 @@ function PlayerCtrl ($scope, $timeout, $interval, $element) {
122128 }
123129
124130 function onFrameChange ( frame ) {
125- let startFrame = frame
126- while ( startFrame > 0 && ! ctrl . gameInfo . frames [ startFrame - 1 ] . keyframe ) {
127- startFrame --
128- }
129-
130131 for ( let i in ctrl . data . ids ) {
131132 $scope . agents [ i ] . stdout = null
132133 $scope . agents [ i ] . stderr = null
133- $scope . referee = { }
134134 }
135135
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
136+ $scope . referee = { }
137+ const frameData = ctrl . parsedGameInfo . frames [ frame ]
138+ for ( let i in ctrl . data . ids ) {
139+ const subframe = frameData . subframes [ i ]
140+ if ( subframe ) {
141+ if ( subframe . stdout ) {
142+ $scope . agents [ i ] . stdout = subframe . stdout
141143 }
142- const stderr = ctrl . data . errors [ i ] [ startFrame ]
143- if ( stderr ) {
144- $scope . agents [ i ] . stderr = stderr
144+
145+ if ( subframe . stderr ) {
146+ $scope . agents [ i ] . stderr = subframe . stderr
145147 }
146148 }
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 ++
151149 }
150+ $scope . referee . stdout = frameData . referee . stdout
151+ $scope . referee . stderr = frameData . referee . stderr
152+ $scope . summary = frameData . gameSummary
152153 }
153154
154155 function convertFrameFormat ( data ) {
@@ -158,8 +159,18 @@ function PlayerCtrl ($scope, $timeout, $interval, $element) {
158159
159160 return { view : v . replace ( / ^ ( K E Y _ F R A M E ) | ( I N T E R M E D I A T E _ F R A M E ) / , '' ) , keyframe : header [ 0 ] === 'KEY_FRAME' }
160161 } )
162+ const refereeKeysMap = { 'errors' : 'stderr' , 'outputs' : 'stdout' }
161163 for ( let i = 0 ; i < frames . length ; i ++ ) {
162164 frames [ i ] . gameSummary = data . summaries [ i ]
165+ frames [ i ] . referee = { }
166+
167+ for ( const key in refereeKeysMap ) {
168+ const newKey = refereeKeysMap [ key ]
169+ if ( data [ key ] . referee [ i ] && data [ key ] . referee [ i ] . length ) {
170+ frames [ i ] . referee [ newKey ] = data [ key ] . referee [ i ]
171+ }
172+ }
173+
163174 for ( let pi in data . ids ) {
164175 frames [ i ] . stderr = frames [ i ] . stderr || data . errors [ pi ] [ i ]
165176 frames [ i ] . stdout = frames [ i ] . stdout || data . outputs [ pi ] [ i ]
0 commit comments