|
Some checks failed
ship-ci / ci (push) Has been cancelled
* Fix 3D Highway background controls under Venue override When the Venue visualization override is active, the entire Background control group (style dropdown and intensity/reactive knobs) is now disabled since the venue scene owns rendering. The dropdown, intensity, and reactive controls are greyed out with a tooltip explaining the state. Also fixes a cold-load bug where the screen hook subscription could fail to bind if the event bus wasn't ready during renderer init, by re-attempting binding on each retry tick. Includes test coverage for both the Venue override greyout behavior and the cold-load screen hook binding fix. * Add accessibility features and explicit global reads to background control Refactor the player chrome background control to use an explicit `_bgReadGlobal()` function instead of relying on the implicit behavior of `_bgReadSetting(null, ...)`. The control is a single shared instance across splitscreen panels and must always read/write the global slot. Add accessibility improvements: - aria-pressed on toggle buttons to expose state to screen readers - aria-label on select and intensity controls - aria-describedby pointing disabled controls to a visually-hidden reason span - The reason span carries dynamic explanatory text for why a control is greyed out Add comprehensive tests verifying the new `_bgReadGlobal` helper ignores per-panel overrides and that all accessibility attributes are set and updated correctly. * Gate player control slot on v3 UI version Add explicit check for `window.feedBack.uiVersion === 'v3'` in _pcSlot() per docs/plugin-v3-ui.md. This prevents the plugin from attempting to mount player controls on non-v3 hosts (e.g., legacy v2 shell). Complements the existing `playerControlSlot` typeof check and improves compatibility robustness. Updated test mocks to include `uiVersion: 'v3'` and added test case verifying that mounting is skipped when uiVersion is not v3, including a guard to ensure the retry loop terminates properly. * Clarify 3D highway style control behavior Document that the style controls group also greyes out when the Venue scene override is active, since the controls don't apply in that mode. * Restore style dropdown tooltip when Venue override exits The style dropdown's tooltip was cleared whenever the Venue override was inactive, permanently discarding the "Background style" hint set at mount time. Since the sync runs on every settings change, the tooltip was lost on the first sync and never returned. This brings the dropdown in line with the intensity slider and reactive toggle, which already restore their base tooltip when they're re-enabled. Includes a test asserting the tooltip returns after the Venue override exits. * fix(highway_3d): skip player-control retry loop on non-v3 shells _pcAcquire only runs once the renderer is viable inside the v3 player chrome, and player-chrome.js sets uiVersion synchronously as it builds that chrome — so a missing 'v3' at acquire means v2, not a not-yet-ready v3. Bail before scheduling the retry loop instead of spinning it out to the ~3s budget for a slot that will never appear. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Signed-off-by: byrongamatos <xasiklas@gmail.com> --------- Signed-off-by: byrongamatos <xasiklas@gmail.com> Co-authored-by: byrongamatos <xasiklas@gmail.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| assets | ||
| tests | ||
| _plugin.src.css | ||
| build-tailwind.sh | ||
| CLAUDE.md | ||
| FREECAM_BRIDGE.md | ||
| NOTICE | ||
| plugin.json | ||
| README.md | ||
| routes.py | ||
| screen.js | ||
| settings.html | ||
| tailwind.config.js | ||
| tour.json | ||
3D Highway
A 3D note highway visualization for FeedBack — an alternative to the default 2D highway, with a sense of depth and perspective inspired by stage views in modern rhythm games.
What you get
- A camera-perspective highway with notes flying down toward a virtual fretboard at the bottom of the screen
- Glowing strings that pulse and brighten on each hit
- Note Detection feedback, including hit/miss outlines and diagnostic early/late/sharp/flat labels when the note detection plugin emits enriched judgments
- Chord frame-boxes, named-chord labels, and a chord diagram overlay (configurable corner position) so you can read shapes at a glance
- Two complementary barre indicators fire together when a barre chord shape is detected (2+ consecutive strings fretted at the lowest fret, e.g. F
[1,1,2,3,3,1], or an outer-edge full-span barre with every intermediate string fretted, e.g. B majorx24442): a translucent vertical line across the strings on the 3D highway, and a straight bracket drawn inside the first fret space of the chord diagram overlay - A heat-colored fret number row that lights up around your active playing region
- Selectable color palettes for the strings — pick the look you want
- Audio-reactive ambient background animations (particles, silhouettes, stage lights, geometric — pick one or turn it off)
- Lyrics overlay synced to the song
- Works as the main player view or per-panel inside the splitscreen plugin
Install
3D Highway ships bundled with FeedBack — no separate installation needed. Pick 3D Highway from the visualization picker in the player.
Note: The bundled version is preferred over any user-installed copy with the same plugin ID. If you have an old
feedBack-plugin-3dhighwayclone on disk (from before 3D Highway was promoted to core), it will be ignored at startup — a warning in the server log names the path of the discarded copy. You can safely delete the stale clone.Fallback: In the unlikely event that the bundled copy fails to load its routes (e.g., a broken bundled release), FeedBack will automatically fall back to your user-installed copy and show a yellow "Fallback" badge in the Settings panel. Check the server startup log for the root cause in that case.
Settings
Most of the visual controls (background style, intensity, audio reactivity, color palette) live on FeedBack's Settings screen under the 3D Highway section.
Contributing / development
For maintainers and AI assistants working on the codebase, see CLAUDE.md — it's a navigation guide that maps every visual element to where it lives in screen.js, plus the gotchas worth knowing before tweaking.
Perf bench (?h3dbench=1)
Append ?h3dbench=1 to the player URL to enable opt-in console.log reporting of update() self-time, broken into six segments — frame (everything between pbBeg(0) at the top of update() and pbEnd(0) at the bottom; excludes the trailing pbReportTick() logging that fires after pbEnd(0)), state (per-frame state-derivation loop), next (next-note-by-string lookahead), mat (per-string material writes), noteDraw (single-note draw loop), chordDraw (chord draw loop). Reported every 5 seconds with p50 / p95 / max per segment and frame count, so before/after numbers on a target chart are reproducible (feedBack#226). Off-by-default; the bench helpers (pbBeg / pbEnd / pbReportTick) are bound to a shared empty-function literal when the renderer instance is created (each createHighway() panel re-checks the flag), so the hot-path call sites are no-ops with negligible overhead (typically JIT-inlined).