@@ -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 ( / ^ ( 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' }
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 ]
0 commit comments