- PlayerCharacterController: GravityEnabled toggle. When off, hold
vertical velocity at zero and skip steep-slope sliding so a frozen
avatar neither falls nor drifts; true is byte-for-byte the old path.
- GameModeManager: during Loading, additionally disable gravity and
hide the local body (SkinnedMesh + fur shell), re-asserted each frame
to catch the mid-load lobby->match respawn. Restored (body shown,
gravity on) before ActiveMode.Enter() on release to Hide.
- MatchManager: enter Loading *before* SwapScenes so still-bound lobby
avatars are frozen before their floor unloads. Fixes the player
falling into the void during the lobby->map scene swap.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Gate the Lobby-to-world transition on a new MatchSubPhase.Loading before
Hide: movement stays frozen and the Hide countdown does not start until
every connected client has spawned all match avatars and applied their
paintings.
- MatchManager: Loading phase; matchLoadTimeout tunable; Match_BeginLoad
broadcasts the respawned avatar NetworkObjectIds (+ generation tag),
Match_Ready collects per-client ACKs (host self-checks locally); barrier
coroutine in RunMatchPhases before Hide; disconnect/teardown cleanup.
- GameModeManager: freeze local player (movement/paint/tab) during Loading,
restored via ActiveMode.Enter() on transition to Hide (no camera jump).
- NetworkPlayerSetup: treat Loading like Hide in ComputeVisible so a
fast-loading client cannot reveal a hider early.
- MatchHud: "Loading" phase label.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Radar: nur sichtbar bei >=1 Target, in First-Person und in der Seek-Phase
(Overlay-Kamera getoggelt, Blip-Skripte laufen weiter). Singleton fuer
Server-Zugriff. GameModeManager: Kamera + Tab-Moduswechsel erst ab
gebundenem Lobby-Player (Inert-Zustand ohne Player, Orbit-Input geparkt).
MatchManager: Server tickt im Seek alle radarPingInterval (30s) und
broadcastet noch nicht gefundene Hider (NetworkObjectId + radarPingLifetime
3s) nur an Hunter-Clients; jeder Hunter loest lokal auf und spawnt Blips.
Ping-Loop in die Seek-Coroutine gefaltet (EndMatch stoppt ihn mit).
MatchHud: Ping-Countdown lokal aus Seek-Start + Kadenz berechnet, Format
m:ss (0:30..0:01), ausserhalb Seek / bei deaktivierten Pings 0:00.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Laser.shader + HunterLaserBeam: additive HDR beam, fade in/out over opacity
and thickness, code-driven LineRenderer, tunable emission multiplier.
- FirstPersonMode: TryShoot computes world endpoint, fires beam with lateral
muzzle offset (right) so it isn't dead-center from hunter view.
- NetworkPlayerSetup: shot relay RPCs (owner->server->all) + hit-flash RPC
(server->all), flash OR-branch in ComputeXRay.
- MatchManager: hit reveal broadcasts X-ray flash first, delays hider removal
by hitRevealDelay so the glow is visible before the body vanishes.
- MeshPainter reseed: in-place fast path avoids full GPU backend teardown on
snapshot apply (no ~70MB RT churn), fixes spawn/paint-load hitch.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Move scripts under Assets/Scripts/ into Components, GameMode, Helper,
Network, Enum, Struct and ScriptableObject folders. Pure file moves
(plus folder .meta files); no code changes.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>