feat(loading): redesigned loader with progress bar, task labels, configurable assets

Loading screen overhaul:
- LoadingView: Nitro V3 logo flush top-left, loading.gif at viewport
  centre, large progress bar (max 900px / 90vw, h-8, gradient + glow)
  anchored bottom-centre with the percentage rendered inside the bar in
  Poppins, plus a friendly stage label underneath. Logo + background +
  progress bar colour overridable via renderer-config keys
  (loading.logo.url, loading.background, loading.progress.color).
- App.tsx: wired a real loadingProgress (0->100) + loadingTask driven by
  the boot pipeline: config init (10), renderer (20), per-warmup-task
  bumps for AssetManager/Localization/AvatarRender/SoundManager (25->70),
  session managers (78/85/92), Communication (98), ready (100). Each bump
  carries a task label looked up via a new taskLabel(key, fallback)
  helper so the Italian baseline ("Sto caricando il guardaroba",
  "Connessione al server", ...) can be translated by editing
  renderer-config; fallback keeps current strings if the key is missing.
- AvatarEffectsView: replace raw fetch(url).json() with
  loadGamedata(url) so the effectmap root manifest (JSON5 with
  // comments) parses correctly and supports the core/custom/seasonal
  tier merge.
- fallbackToLogin: respect login.screen.enabled=false. When login is
  disabled (SSO-only deployments), init failures now route to
  showSessionExpired() (home + diagnostic) instead of rendering an empty
  LoginView placeholder.
- scripts/write-asset-loader.mjs: the pre-React shell rendered into
  #root before the JS bundle takes over was a light-blue login skeleton
  (linear gradient + two grey rectangles) producing a visible flash
  before the real loader appeared. Replaced with the same
  radial-gradient the LoadingView paints — the handoff is now invisible.
- renderer-config.example: document the 13 loader keys so operators can
  copy & translate.
This commit is contained in:
medievalshell
2026-05-21 00:22:17 +02:00
parent 3880e3441f
commit c685c997a3
6 changed files with 233 additions and 42 deletions
@@ -48,6 +48,26 @@
"timezone.settings": "Europe/Amsterdam",
"youtube.publish.disabled": false,
"user.badges.group.slot.enabled": true,
"_comment_loading_screen": "Schermata di caricamento — sostituibili per traduzione/branding. Logo, sfondo e colore della barra usano lo standard CSS (URL, gradient, colore esadecimale). Le label compaiono sotto la barra di progresso man mano che ogni fase del boot completa.",
"loading.logo.url": "",
"loading.background": "",
"loading.progress.color": "linear-gradient(90deg,#4f8cff,#2563eb)",
"loading.task.boot": "Avvio in corso...",
"loading.task.session": "Verifica sessione",
"loading.task.renderer": "Inizializzazione renderer",
"loading.task.warmup": "Caricamento contenuti...",
"loading.task.assets": "Sto caricando gli asset di gioco",
"loading.task.localization": "Sto caricando le traduzioni",
"loading.task.avatar": "Sto caricando il guardaroba",
"loading.task.sounds": "Sto caricando i suoni",
"loading.task.startsession": "Avvio sessione",
"loading.task.userdata": "Caricamento dati utente",
"loading.task.rooms": "Caricamento stanze",
"loading.task.engine": "Caricamento engine grafico",
"loading.task.connect": "Connessione al server",
"loading.task.ready": "Pronto!",
"login.screen.enabled": true,
"login.endpoint": "${api.url}/api/auth/login",
"login.register.endpoint": "${api.url}/api/auth/register",