11/// The scoreboard surface: a vanilla-style sidebar mock, right-anchored the
22/// way the client draws it.
33///
4- /// Fidelity notes, all from `BoardService.java` : the title renders through
5- /// the text pipeline and is cut at 32 characters INCLUDING colour codes
6- /// (`MAX_TITLE_LENGTH` , line 40-41,363-367); at most 15 lines reach the
7- /// client (`MAX_LINES` , line 377-380); every line renders through the same
8- /// pipeline per viewer, so `|animation.<id>|` references play here through
9- /// the workspace-scoped resolver exactly as they would in game. The dimmed
10- /// score column stands in for the vanilla sidebar's row scores.
4+ /// The title renders through Gloss's text pipeline, then VolmLib safely caps
5+ /// it at 32 UTF-16 units including colour codes. At most 15 lines reach the
6+ /// client; VolmLib maps every rendered line into
7+ /// its 16-character team prefix plus 16-character suffix, including carried
8+ /// colour codes. The dimmed score column stands in for the vanilla sidebar's
9+ /// row scores.
1110///
1211/// Owns a playback clock while any rendered line (or the title) plays an
1312/// animation and the store's animations toggle is on. Mounted only while the
@@ -134,7 +133,7 @@ class _ScoreboardViewState extends State<ScoreboardView> {
134133 child: dom.div (classes: 'hui-scoreboard-sidebar' , < Widget > [
135134 dom.div (classes: 'hui-scoreboard-title' , < Widget > [
136135 GlossTextLine (
137- render: renderGlossLine (
136+ render: renderGlossScoreboardTitle (
138137 doc.title,
139138 animations: animations,
140139 emoji: emoji,
@@ -146,7 +145,7 @@ class _ScoreboardViewState extends State<ScoreboardView> {
146145 dom.div (classes: 'hui-scoreboard-row' , < Widget > [
147146 dom.span (classes: 'hui-scoreboard-row-text' , < Widget > [
148147 GlossTextLine (
149- render: renderGlossLine (
148+ render: renderGlossScoreboardLine (
150149 doc.lines[index],
151150 animations: animations,
152151 emoji: emoji,
@@ -181,15 +180,17 @@ class _ScoreboardViewState extends State<ScoreboardView> {
181180 String _readout (GlossScoreboardDoc doc, int clipped, bool titleTruncated) {
182181 final List <String > parts = < String > [
183182 doc.primary ? 'primary' : 'not primary' ,
184- doc.hideNumbers ? 'score numbers hidden' : 'score numbers visible' ,
183+ doc.hideNumbers
184+ ? 'score numbers hidden on supported runtimes'
185+ : 'score numbers visible' ,
185186 doc.permissionGated
186187 ? 'needs $glossBoardPermissionNodePrefix ${doc .effectivePermission }'
187188 : 'everyone' ,
188189 if (doc.effectiveGroups.isNotEmpty)
189190 'groups: ${doc .effectiveGroups .join (', ' )}' ,
190191 if (clipped > 0 )
191192 '$clipped line${clipped == 1 ? '' : 's' } past the 15-line render cap' ,
192- if (titleTruncated) 'title cut at 32 rendered characters in game' ,
193+ if (titleTruncated) 'title exceeds the 32-unit in- game cap ' ,
193194 ];
194195 return parts.join (' · ' );
195196 }
0 commit comments