Add taunt button, Tab as Escape alternative, free cam Q/E removal

- OverviewMenu: taunt button (manual ping + close, hider/seek-only), Tab triggers the Escape chain (TypingGuard-gated)
- GameModeManager: LocalPlayerIsHider helper, allow E-ping in free cam (Q/E no longer used for movement)
- FreeCamController: vertical movement only via Space/Ctrl
- Icons: Icon_taunt (wired), Icon_firstperson_paint (unwired, for later)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
adminandClaude Fable 5 committed 2026-07-12 15:22:47 +02:00
1 parent 1054bcd3d6
commit c6a22c1643
7 files changed
+269 -12

No files matched your search

+6 -3
View File
@@ -98,6 +98,9 @@ public class GameModeManager : MonoBehaviour
/// <summary>True while gameplay is suspended for a modal overlay (see <see cref="SetPaused"/>).</summary>
public bool IsPaused => _paused;
/// <summary>True while the bound local avatar is a hider (drives the overview menu's taunt button).</summary>
public bool LocalPlayerIsHider => _localRole == PlayerRole.Hider;
/// <summary>The active mode, or - while paused - the mode that will resume. Null in the no-player state.</summary>
public GameMode EffectiveMode =>
ActiveMode ?? ((_resumeIndex >= 0 && _resumeIndex < _modes.Count) ? _modes[_resumeIndex] : null);
@@ -413,9 +416,9 @@ public class GameModeManager : MonoBehaviour
}
// A hider manually pings itself onto every hunter's radar (same blip as the periodic sweep), on demand.
// Excluded in Free Cam whose fly controls already use this key; the phase/role gate lives in MatchManager
// (RequestManualPing no-ops outside Seek / for a found hider), so a stray press is harmless.
if (_localRole == PlayerRole.Hider && !(ActiveMode is FreeCamMode) &&
// Works in every mode incl. Free Cam (its fly controls no longer use Q/E); the phase/role gate lives in
// MatchManager (RequestManualPing no-ops outside Seek / for a found hider), so a stray press is harmless.
if (_localRole == PlayerRole.Hider &&
InputUtil.GameplayKeyPressed(pingKey) && MatchManager.Instance)
MatchManager.Instance.RequestManualPing();