Clarify audience-facing RoadScore reaction labels

This commit is contained in:
firestar5683
2026-09-20 12:48:19 -07:00
parent fdd92bc6d1
commit ebfc9d55f0
2 changed files with 24 additions and 8 deletions
+4 -6
View File
@@ -38,16 +38,16 @@ def gesture_view(state):
return 'Road alert / Percussion', 'active', 'native_alert'
demo = state.get('replay_demo') or {}
signal = demo.get('signal_mode')
if signal in ('left', 'right', 'off'):
if signal in ('left', 'right'):
shaker = state.get('signal_shaker') or {}
description = 'Shaker' if shaker.get('rendered_active') else 'Replay signal' if signal != 'off' else 'Recorded signals muted'
title = f'Simulated {signal}' + (' shaker' if shaker.get('rendered_active') else '')
description = 'Shaker' if shaker.get('rendered_active') else 'Replay signal'
title = f'{signal.title()} signal'
return f'{title} / {description}', 'active', 'simulated_signal'
engagement = state.get('engagement_presentation') or {}
if engagement.get('enabled') and not engagement.get('simulated') and engagement.get('input_fresh') and engagement.get('rendered_state') == 'transition':
return ('Engaged / Opening music' if engagement.get('active') else 'Disengaged / Contained music'), 'active', 'engagement'
if engagement.get('enabled') and engagement.get('simulated'):
return ('Simulated engage / Music opens' if engagement.get('active') else 'Simulated disengage / Music contained'), 'active', 'simulated_engagement'
return ('Music opens' if engagement.get('active') else 'Music contained'), 'active', 'simulated_engagement'
motion = state.get('motion_presentation') or {}
if motion.get('enabled') and motion.get('input_fresh'):
mix, target = motion.get('rendered_open_mix'), motion.get('target_open_mix')
@@ -208,8 +208,6 @@ def draw_panel(rl, font, state, screen_width, screen_height, emphasis_font=None,
text(reserve, 11, 12, font, accent, width - 190, left=190)
text(subtitle, 33, 16, font, muted, width - 64)
else:
if view['event_state'] == 'active':
subtitle = subtitle.replace('Simulated ', 'Demo: ')
def centered(label, top, size, face, tint):
label = fit_text(label, width, lambda value: rl.measure_text_ex(face, value, size, 0).x)
left = (width - rl.measure_text_ex(face, label, size, 0).x) / 2
+20 -2
View File
@@ -9,11 +9,29 @@ from overlay_view import display_text, fit_text, overlay_view, hud_bounds, start
class OverlayTests(unittest.TestCase):
def test_simulation_label_survives_engagement_ramp(self):
def test_simulated_engagement_describes_music_and_preserves_event_metadata(self):
for active in (False, True):
view = overlay_view({'engagement_presentation':dict(enabled=True,simulated=True,active=active,input_fresh=True,rendered_state='transition')})
self.assertEqual(view['event_kind'], 'simulated_engagement')
self.assertTrue(view['event'].startswith('Simulated '))
self.assertEqual(view['event'], 'Music opens' if active else 'Music contained')
def test_manual_signal_off_is_not_a_music_event_or_roadscore_off_state(self):
state = dict(readiness='READY', profile='prism', replay_demo={'signal_mode':'off'})
self.assertEqual(overlay_view(state)['event'], '')
self.assertEqual(overlay_view(state)['activity'], 'READY')
state['curve_reaction'] = dict(enabled=True,input_fresh=True,rendered_phase='build')
self.assertEqual(overlay_view(state)['event'], 'Curve / Building')
state['engagement_presentation'] = dict(enabled=True,simulated=True,active=False)
self.assertEqual(overlay_view(state)['event'], 'Music contained')
def test_manual_signal_names_direction_without_claiming_inaudible_shaker(self):
for signal in ('left', 'right'):
for rendered in (False, True):
state = dict(replay_demo={'signal_mode':signal}, signal_shaker={'rendered_active':rendered})
view = overlay_view(state)
self.assertEqual(view['event'].split(' / ')[0], signal.title() + ' signal')
self.assertEqual('Shaker' in view['event'], rendered)
self.assertEqual(view['event_kind'], 'simulated_signal')
def test_live_reactions_describe_rendered_audio(self):
for phase, label in [('build', 'Curve / Building'), ('apex', 'Curve apex / Music opens')]:
cue = dict(enabled=True, input_fresh=True, rendered_phase=phase)