From ffbf75e60d8854e5cec21f9c8ad98d3d8ee2f836 Mon Sep 17 00:00:00 2001 From: Carlos Date: Thu, 4 Jun 2026 03:42:34 +0000 Subject: [PATCH] feat: add background music support and static files mount Co-Authored-By: Claude Sonnet 4.6 --- docker-compose.yml | 1 + main.py | 2 ++ templates/player.html | 20 ++++++++++++++++++++ 3 files changed, 23 insertions(+) diff --git a/docker-compose.yml b/docker-compose.yml index 80e9b55..ed59d08 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -9,6 +9,7 @@ services: - DB_PATH=/data/rr.db volumes: - route_rush_data:/data + - ./static:/app/static networks: - web-net diff --git a/main.py b/main.py index 16a9803..dd85850 100644 --- a/main.py +++ b/main.py @@ -1,4 +1,5 @@ from fastapi import FastAPI, WebSocket, WebSocketDisconnect, Request +from fastapi.staticfiles import StaticFiles from fastapi.templating import Jinja2Templates from fastapi.responses import HTMLResponse, JSONResponse import json, time, random, sqlite3, os @@ -6,6 +7,7 @@ from datetime import datetime DB_PATH = os.environ.get("DB_PATH", "/data/rr.db") app = FastAPI() +app.mount("/static", StaticFiles(directory="static"), name="static") templates = Jinja2Templates(directory="templates") # ── SCORING CONSTANTS ───────────────────────────────────────────────────────── diff --git a/templates/player.html b/templates/player.html index 2882da0..deb1989 100644 --- a/templates/player.html +++ b/templates/player.html @@ -660,6 +660,7 @@ function handle(msg) { else showRoundResults(msg); } else if (msg.type === 'podium') { + stopBGM(); showPodium(msg.leaderboard); } } @@ -685,6 +686,7 @@ document.getElementById('join-btn').addEventListener('click', () => { } const display = `${fn} ${ln}`; + startBGM(); ws.send(JSON.stringify({type: 'join', name: display, dept, display})); }); @@ -787,6 +789,23 @@ function showPodium(lb) { // ── INIT ────────────────────────────────────────────────────────────────────── +// ── BACKGROUND MUSIC ───────────────────────────────────────────────────────── + +let bgmStarted = false; +function startBGM() { + const bgm = document.getElementById('bgm'); + if (bgmStarted) return; + bgmStarted = true; + bgm.volume = 0.20; + bgm.play().catch(() => {}); +} +function stopBGM() { + const bgm = document.getElementById('bgm'); + bgm.pause(); + bgm.currentTime = 0; + bgmStarted = false; +} + window.addEventListener('resize', () => { if (grid) { setupCanvas(); drawGrid(); }}); connectWS(); @@ -800,5 +819,6 @@ connectWS(); + \ No newline at end of file