@@ -7,11 +7,26 @@ import {noop} from '../../modules/helper.js'
7
7
8
8
const t = i18n . context ( 'WinrateGraph' )
9
9
const setting = remote . require ( './setting' )
10
- const blunderThreshold = setting . get ( 'view.winrategraph_blunderthreshold' )
10
+ const blunderThresholdWinrate = setting . get (
11
+ 'view.winrategraph_blunderthreshold'
12
+ )
13
+ const blunderThresholdScoreLead = setting . get (
14
+ 'view.winrategraph_blunderthreshold_scorelead'
15
+ )
16
+
17
+ const formatAnalysisValue = ( value , analysisType ) => {
18
+ if ( analysisType === 'winrate' ) return `${ i18n . formatNumber ( value ) } %`
19
+ return `${ value >= 0 ? '+' : '' } ${ i18n . formatNumber ( value ) } `
20
+ }
21
+
22
+ const transformAnalysisValue = ( value , analysisType , dataMax ) => {
23
+ if ( analysisType === 'winrate' ) return value
24
+ return ( value / Math . max ( 20 , dataMax ) ) * 50 + 50
25
+ }
11
26
12
27
class WinrateStrip extends Component {
13
28
render ( ) {
14
- let { player, winrate, change} = this . props
29
+ let { player, winrate, change, analysisType , blunderThreshold } = this . props
15
30
16
31
return h (
17
32
'section' ,
@@ -28,7 +43,7 @@ class WinrateStrip extends Component {
28
43
h (
29
44
'span' ,
30
45
{ class : 'main' } ,
31
- winrate == null ? '–' : ` ${ i18n . formatNumber ( winrate ) } %`
46
+ winrate == null ? '–' : formatAnalysisValue ( winrate , analysisType )
32
47
) ,
33
48
34
49
h (
@@ -102,23 +117,38 @@ export default class WinrateGraph extends Component {
102
117
}
103
118
104
119
render ( ) {
105
- let { lastPlayer, width, currentIndex, data} = this . props
120
+ let { lastPlayer, width, currentIndex, data, analysisType } = this . props
106
121
let { invert} = this . state
122
+ let blunderThreshold =
123
+ analysisType === 'winrate'
124
+ ? blunderThresholdWinrate
125
+ : blunderThresholdScoreLead
126
+ let metricString = analysisType === 'winrate' ? 'Winrate' : 'Score Lead'
107
127
128
+ let dataMax = Math . max ( ...data . map ( x => ( isFinite ( x ) ? Math . abs ( x ) : 0 ) ) )
108
129
let dataDiff = data . map ( ( x , i ) =>
109
130
i === 0 || x == null || ( data [ i - 1 ] == null && data [ i - 2 ] == null )
110
131
? null
111
132
: x - data [ data [ i - 1 ] != null ? i - 1 : i - 2 ]
112
133
)
113
- let dataDiffMax = Math . max ( ...dataDiff . map ( Math . abs ) , 25 )
134
+ let dataDiffMax = Math . max (
135
+ ...dataDiff . map ( Math . abs ) ,
136
+ analysisType === 'winrate' ? 25 : 10
137
+ )
114
138
115
139
let round2 = x => Math . round ( x * 100 ) / 100
116
140
let blackWinrate =
117
141
data [ currentIndex ] == null ? null : round2 ( data [ currentIndex ] )
118
142
let blackWinrateDiff =
119
143
dataDiff [ currentIndex ] == null ? null : round2 ( dataDiff [ currentIndex ] )
120
144
let whiteWinrate =
121
- data [ currentIndex ] == null ? null : round2 ( 100 - data [ currentIndex ] )
145
+ data [ currentIndex ] == null
146
+ ? null
147
+ : round2 (
148
+ analysisType === 'winrate'
149
+ ? 100 - data [ currentIndex ]
150
+ : - data [ currentIndex ]
151
+ )
122
152
let whiteWinrateDiff =
123
153
dataDiff [ currentIndex ] == null ? null : - round2 ( dataDiff [ currentIndex ] )
124
154
@@ -132,8 +162,10 @@ export default class WinrateGraph extends Component {
132
162
. map (
133
163
( [ winrate , diff ] , i ) =>
134
164
`${
135
- i === 0 ? t ( 'Black Winrate:' ) : t ( 'White Winrate:' )
136
- } ${ i18n . formatNumber ( winrate ) } %${
165
+ i === 0
166
+ ? t ( `Black ${ metricString } :` )
167
+ : t ( `White ${ metricString } :` )
168
+ } ${ formatAnalysisValue ( winrate , analysisType ) } ${
137
169
diff == null
138
170
? ''
139
171
: ` (${ diff >= 0 ? '+' : '-' } ${ i18n . formatNumber (
@@ -156,7 +188,9 @@ export default class WinrateGraph extends Component {
156
188
h ( WinrateStrip , {
157
189
player : lastPlayer ,
158
190
winrate : lastPlayer > 0 ? blackWinrate : whiteWinrate ,
159
- change : lastPlayer > 0 ? blackWinrateDiff : whiteWinrateDiff
191
+ change : lastPlayer > 0 ? blackWinrateDiff : whiteWinrateDiff ,
192
+ analysisType,
193
+ blunderThreshold
160
194
} ) ,
161
195
162
196
h (
@@ -215,7 +249,10 @@ export default class WinrateGraph extends Component {
215
249
let instructions = data
216
250
. map ( ( x , i ) => {
217
251
if ( x == null ) return i === 0 ? [ i , 50 ] : null
218
- return [ i , x ]
252
+ return [
253
+ i ,
254
+ transformAnalysisValue ( x , analysisType , dataMax )
255
+ ]
219
256
} )
220
257
. filter ( x => x != null )
221
258
@@ -309,7 +346,11 @@ export default class WinrateGraph extends Component {
309
346
if ( x == null ) return ''
310
347
311
348
let command = i === 0 || data [ i - 1 ] == null ? 'M' : 'L'
312
- return `${ command } ${ i } ,${ x } `
349
+ return `${ command } ${ i } ,${ transformAnalysisValue (
350
+ x ,
351
+ analysisType ,
352
+ dataMax
353
+ ) } `
313
354
} )
314
355
. join ( ' ' )
315
356
} ) ,
@@ -326,9 +367,18 @@ export default class WinrateGraph extends Component {
326
367
if ( i === 0 ) return 'M 0,50'
327
368
328
369
if ( x == null && data [ i - 1 ] != null )
329
- return `M ${ i - 1 } ,${ data [ i - 1 ] } `
330
-
331
- if ( x != null && data [ i - 1 ] == null ) return `L ${ i } ,${ x } `
370
+ return `M ${ i - 1 } ,${ transformAnalysisValue (
371
+ data [ i - 1 ] ,
372
+ analysisType ,
373
+ dataMax
374
+ ) } `
375
+
376
+ if ( x != null && data [ i - 1 ] == null )
377
+ return `L ${ i } ,${ transformAnalysisValue (
378
+ x ,
379
+ analysisType ,
380
+ dataMax
381
+ ) } `
332
382
333
383
return ''
334
384
} )
@@ -343,7 +393,20 @@ export default class WinrateGraph extends Component {
343
393
class : 'marker' ,
344
394
style : {
345
395
left : `${ ( currentIndex * 100 ) / width } %` ,
346
- top : `${ ! invert ? data [ currentIndex ] : 100 - data [ currentIndex ] } %`
396
+ top : `${
397
+ ! invert
398
+ ? transformAnalysisValue (
399
+ data [ currentIndex ] ,
400
+ analysisType ,
401
+ dataMax
402
+ )
403
+ : 100 -
404
+ transformAnalysisValue (
405
+ data [ currentIndex ] ,
406
+ analysisType ,
407
+ dataMax
408
+ )
409
+ } %`
347
410
}
348
411
} )
349
412
)
0 commit comments