From 5c98f1638ab23ef6fbcfa2d55d86037de96788db Mon Sep 17 00:00:00 2001 From: kerboul Date: Sun, 17 May 2026 18:33:06 +0200 Subject: [PATCH] feat: stats + chat + frontend pages (Stats, Chat, NavBar) Backend: - StatsManager.js: JSON persistence, leaderboard, rate-limit 1/5s - ChatManager.js: 200-msg buffer, JSON persistence - index.js: routes GET/POST /stats, /chat/history, /chat/send (Zod validation) - ArenaRoom.js: chat handler broadcasts to room + persists via ChatManager Unity: - StatsTracker.cs: distance, maxSpeed, jumps, bumps, checkpoints, raceTime tracking - ChatUI.cs: F3 toggle, bottom-right panel, polling 3s, unread badge - NetworkManager.cs: SendChatMessage() + OnMessage(chat) - CheckpointSystem.cs: RegisterCheckpoint/Finish hooks - PlayerController.cs: RegisterJump/Bump hooks, physics rebalance, billboard fix - GameHUD.cs: LocalRaceTimer, SetTotalRounds, OnRoundStart signature fix - GameManager.cs: spectator cam reconnect fix Frontend: - NavBar.jsx: fixed top nav, Accueil/Stats/Chat/Jouer - App.jsx: page state (home/play/stats/chat) + NavBar - StatsPage.jsx: 6-tab leaderboard, auto-refresh 30s - ChatPage.jsx: polling 3s, localStorage name, Enter to send Co-Authored-By: Claude Sonnet 4.6 --- frontend/src/App.jsx | 31 ++- frontend/src/components/NavBar.jsx | 50 ++++ frontend/src/pages/ChatPage.jsx | 185 +++++++++++++ frontend/src/pages/StatsPage.jsx | 139 ++++++++++ game/Assets/PlayerController.cs | 10 +- game/Assets/Scripts/GameManager.cs | 1 - game/Assets/Scripts/Network/NetworkManager.cs | 10 + game/Assets/Scripts/Race/CheckpointSystem.cs | 2 + game/Assets/Scripts/Stats/StatsTracker.cs | 229 ++++++++++++++++ game/Assets/Scripts/UI/ChatUI.cs | 259 ++++++++++++++++++ game/Assets/Scripts/UI/GameHUD.cs | 2 + rolld_backend/game/src/chat/ChatManager.js | 52 ++++ rolld_backend/game/src/index.js | 82 +++++- rolld_backend/game/src/rooms/ArenaRoom.js | 8 + rolld_backend/game/src/stats/StatsManager.js | 101 +++++++ 15 files changed, 1144 insertions(+), 17 deletions(-) create mode 100644 frontend/src/components/NavBar.jsx create mode 100644 frontend/src/pages/ChatPage.jsx create mode 100644 frontend/src/pages/StatsPage.jsx create mode 100644 game/Assets/Scripts/Stats/StatsTracker.cs create mode 100644 game/Assets/Scripts/UI/ChatUI.cs create mode 100644 rolld_backend/game/src/chat/ChatManager.js create mode 100644 rolld_backend/game/src/stats/StatsManager.js diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index f1b1cf5..37e9267 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -1,28 +1,41 @@ import { useState } from 'react' import { IS_DEV } from './env' import DevBanner from './components/DevBanner' +import NavBar from './components/NavBar' import Hero from './components/Hero' import GelShowcase from './components/GelShowcase' import KerboulistanBanner from './components/KerboulistanBanner' import GameCanvas from './components/GameCanvas' import Footer from './components/Footer' +import StatsPage from './pages/StatsPage' +import ChatPage from './pages/ChatPage' function App() { - const [isPlaying, setIsPlaying] = useState(false) + const [page, setPage] = useState('home') - if (isPlaying) { - return setIsPlaying(false)} /> + if (page === 'play') { + return setPage('home')} /> } return (
- {/* Offset content when dev banner is visible */} - {IS_DEV &&
} - setIsPlaying(true)} /> - - -