Skip to content

v0.9: pewny STOP, kalibracja 9 punktami, drożny spawn, tylko online, lampy w skali - #11

Merged
rejson59 merged 1 commit into
mainfrom
arena/2c20e2d9-rejplay
Nov 5, 2026
Merged

rejson59 merged 1 commit into
mainfrom
arena/2c20e2d9-rejplay

Conversation

@rejson59

@rejson59 rejson59 commented Nov 5, 2026

Copy link
Copy Markdown
Owner

v0.9 — pewny STOP, kalibracja 9 punktami, drożny spawn, tylko online, lampy w skali

Zgłoszone usterki z poprzedniego wydania, punkt po punkcie.

Sterowanie bez klawiatury: koniec samoczynnej jazdy

  • enabled jest tylko stanem sesji. Stary wpis z localStorage jest ignorowany (schemat 2), save() nie zapisuje włączenia, a renderLab() przestał włączać ster automatycznie po testach. Po odświeżeniu strony postać stoi.
  • Pierwsza poprawna klatka twarzy wyznacza zero — surowy pitch wyprostowanej głowy nie jest już traktowany jako stały przechył. Adaptacyjna korekta punktu neutralnego wygasza dryf, ale nie wygasza świadomego przechyłu (chodzenie głową działa).
  • Brak twarzy albo wyłączone sterowanie = natychmiastowe, twarde zero we wszystkich kanałach. CameraRig.tick() wywołuje onControl zawsze, więc world.cameraMove i horror.cameraJoystick nie trzymają ostatniej prędkości.
  • Jeden, zawsze dostępny hamulec: przycisk „Zatrzymaj" w laboratorium i panelu kamerki oraz klawisz C (działa też w grze). stop() wyłącza ster, zeruje prędkości i centruje zero na bieżący odczyt.
  • Nowe przełączniki: odwrócenie kierunku chodzenia głową, odwrócenie osi X i głębokości dłoni; handSignal() podąża za tym samym kierunkiem co dłoń awatara.

Kalibracja oczu — punkty na ekranie

Nowy czysty moduł src/gaze-calibration.ts: siatka 3×3, mediana próbek, dopasowanie afiniczne metodą najmniejszych kwadratów z regularyzacją, ocena jakości i błędu RMS, odrzucenie zdegenerowanych/słabych prób, bezpieczny odczyt zapisu.

Kreator (index.html + main.ts) przeprowadza 14 kroków: punkt neutralny głowy → 9 punktów spojrzenia → 4 próby kierunku dłoni (lewo, prawo, góra, przód). Automatycznie wykrywa odwrócone osie dłoni, pokazuje postęp, pozwala pominąć krok i raportuje jakość. Po kalibracji sterowanie pozostaje wyłączone — gracz włącza je świadomie.

Demonofobia: „deska" i glitchowanie

  • combineMovement() — W/dotyk mają pierwszeństwo przed kanałem z kamerki. Dawniej iy = joystick + cameraJoystick sumowało W (+1) z zatrutą głową (−1) i dawało 0, więc gracz stał mimo wciśniętego klawisza.
  • Ruch próbkuje cały odcinek (pathClear), collidery dostały widoczne rekwizyty podwórka, depenetrate() potrafi wyjść z wnętrza collidera, a watchdog po 0,7 s bez ruchu odcina ster z kamerki i wypycha gracza.
  • Skrzydło drzwi, które stało w osi wejścia i wyglądało jak deska, jest teraz otwarte płasko przy ścianie. freeSpawn() sprawdza pierścień kapsuły i całą drogę do drzwi.

Pozostałe

  • Usunięty tryb offline: status reconnecting, ponawianie połączenia, czat nie udaje wiadomości „tylko u Ciebie", Presence nie pokazuje fikcyjnych graczy. Gra jest wyłącznie online multiplayer.
  • Zmieniony bezsensowny napis na stronie głównej i opisy laboratorium.
  • Lampy w skali: src/scenery-layout.ts + normalizacja z rzeczywistego bbox GLB. Khronos Lantern.glb ma 25,66 m w pliku i przy scale: 2.2 dawał 56 m w parku o promieniu 12 m — teraz ma 1,6 m, a każdy inny obiekt podlega twardemu limitowi 7 m.
  • Wersja raportu v0.9.0, README, 82/82 testów (7 nowych plików, w tym test mierzący prawdziwe bboxy wszystkich GLB).

Weryfikacja

npm run typecheck 0 błędów
npm test 82/82
npm run build OK
Headless QA (WebGL) 0 błędów konsoli, kreator przechodzi wszystkie 14 kroków, C zatrzymuje, W przesuwa kadr, korytarz bez deski, Lobby bez gigantycznych lamp, 0 odpowiedzi 4xx, brak treści „offline"

Niezweryfikowane w sandboxie: realna kamerka, dotyk i dwóch klientów Supabase WSS na fizycznych urządzeniach.

…ampy w skali

Sterowanie bez klawiatury
- `enabled` jest wyłącznie stanem sesji: stary wpis z localStorage jest
  ignorowany (schemat 2), `save()` nie zapisuje włączenia, a `renderLab()`
  przestał włączać ster samoczynnie po testach.
- Pierwsza poprawna klatka twarzy wyznacza zero, więc surowy pitch nie
  pcha postaci w jedną stronę. Adaptacyjna korekta neutralnej likwiduje
  dryf, ale nie wygasza świadomego przechyłu głowy (chodzenie działa).
- Brak twarzy lub wyłączone sterowanie daje natychmiastowe, twarde zero
  we wszystkich kanałach. `CameraRig.tick()` woła `onControl` zawsze,
  więc silnik nie trzyma ostatniej niezerowej prędkości.
- Jeden hamulec: przycisk „Zatrzymaj" i klawisz C (również w grze).
  `CameraControl.stop()` wyłącza ster, zeruje prędkości i centruje zero.
- Przełączniki `invertHeadMove`, osi X/Y/głębokości dłoni; `handSignal()`
  podąża za tym samym kierunkiem co dłoń awatara.

Kalibracja oczu punktami na ekranie (`src/gaze-calibration.ts`)
- Siatka 3×3 (9 punktów), mediana próbek, dopasowanie afiniczne LS
  z regularyzacją, odrzucenie zdegenerowanych/niskiej jakości prób,
  bezpieczny zapis i clamp wyjścia.
- Kreator w `index.html` + `main.ts`: punkt neutralny głowy, oczy,
  cztery próby kierunku dłoni, automatyczne wykrycie odwróconych osi,
  pasek postępu, pomijanie kroku i raport jakości. Po kalibracji ster
  pozostaje wyłączone.

Demonofobia: koniec „deski" i glitchy
- `combineMovement()`: W/dotyk mają pierwszeństwo przed kanałem kamerki
  (W +1 i zepsuta głowa -1 dawały 0). Testy jednostkowe tej reguły.
- Ruch próbkuje cały odcinek (`pathClear`), collidery mają widoczne
  rekwizyty podwórka, `depenetrate()` potrafi wyjść z wnętrza collidera,
  a watchdog odcina ster z kamerki po 0,7 s bez ruchu.
- Skrzydło drzwi odsunięte poza światło przejścia; spawn sprawdza
  pierścień kapsuły i drogę do drzwi.

Pozostałe
- Usunięty tryb offline: status `reconnecting`, czat nie udaje wiadomości
  „tylko u Ciebie", Presence nie pokazuje fikcyjnych graczy.
- Zmieniony bezsensowny napis hero, nowe opisy laboratorium.
- `src/scenery-layout.ts` + normalizacja bbox GLB: Khronos Lantern.glb
  (25,66 m × 2,2 = 56 m) ma teraz 1,6 m; twardy limit 7 m dla reszty.
- Wersja raportu v0.9.0, README, 82/82 testów (7 nowych plików).

Weryfikacja: typecheck 0 błędów, npm test 82/82, build OK, headless QA
(WebGL) — 0 błędów konsoli, kreator przechodzi 14 kroków, C zatrzymuje,
W przesuwa kadr, Lobby bez gigantycznych lamp, brak treści „offline".

Co-authored-by: arena-agent <297053741+arena-agent@users.noreply.github.com>
@rejson59
rejson59 merged commit fc285bf into main Nov 5, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant