106 lines
2.5 KiB
Markdown
106 lines
2.5 KiB
Markdown
# Overlay
|
||
|
||
> Status: Phase 2 — design draft.
|
||
|
||
The VNOX overlay renders a HUD on top of running games and applications,
|
||
showing voice channel state without alt-tabbing.
|
||
|
||
---
|
||
|
||
## What it shows
|
||
|
||
- who is currently speaking (avatar / nickname + audio indicator)
|
||
- your own mic state (active / muted / push-to-talk held)
|
||
- current channel name
|
||
- latency (RTT to node)
|
||
- hotkey state hints
|
||
|
||
---
|
||
|
||
## Architecture
|
||
|
||
The overlay is a separate process that communicates with the main VNOX client
|
||
via a local IPC socket (Unix socket / named pipe).
|
||
|
||
The client pushes state updates to the overlay:
|
||
- user speaking events (`VOICE_STATE`)
|
||
- channel changes
|
||
- mute state changes
|
||
|
||
The overlay renders on top of other applications.
|
||
|
||
### Rendering approach
|
||
|
||
| Platform | Method |
|
||
|----------|--------|
|
||
| Windows | DirectX overlay injection or transparent top-level window |
|
||
| Linux (X11) | Shaped transparent window, always-on-top |
|
||
| Linux (Wayland) | Layer shell protocol (wlr-layer-shell) |
|
||
| macOS | CGWindow overlay |
|
||
|
||
Implementation complexity varies significantly by platform.
|
||
Windows DX injection is the most reliable for full-screen games.
|
||
|
||
---
|
||
|
||
## Game integrations
|
||
|
||
For games that support it, the overlay can receive additional data:
|
||
|
||
### Positional voice (Phase 4)
|
||
|
||
Games that expose player position data can send it to VNOX,
|
||
enabling positional audio — players hear each other based on
|
||
in-game distance and direction.
|
||
|
||
Integration methods:
|
||
|
||
| Game / Engine | Method |
|
||
|---------------|--------|
|
||
| Minecraft | Fabric/Forge mod that sends position via local socket |
|
||
| Source Engine | Client plugin / VScript |
|
||
| Unreal Engine | Plugin exposing position to named pipe |
|
||
| Unity | SDK that writes position to shared memory |
|
||
|
||
Protocol for positional data is TBD (Phase 4 design).
|
||
|
||
### Speaking indicators in-game
|
||
|
||
Some games support custom HUD elements. Where possible, the overlay
|
||
will render directly within the game's UI rather than as an external window.
|
||
|
||
---
|
||
|
||
## Configuration
|
||
|
||
```toml
|
||
[overlay]
|
||
enabled = true
|
||
|
||
# Overlay position on screen
|
||
position = "top-right" # top-left | top-right | bottom-left | bottom-right
|
||
|
||
# Opacity (0.0–1.0)
|
||
opacity = 0.85
|
||
|
||
# Show latency
|
||
show_latency = false
|
||
|
||
# Hotkey to toggle overlay visibility
|
||
toggle_hotkey = "ctrl+shift+o"
|
||
```
|
||
|
||
---
|
||
|
||
## Hotkeys
|
||
|
||
All hotkeys are global (work even when VNOX window is not focused).
|
||
|
||
| Action | Default |
|
||
|--------|---------|
|
||
| Push-to-talk | `mouse4` |
|
||
| Mute toggle | `ctrl+m` |
|
||
| Deafen toggle | `ctrl+d` |
|
||
| Toggle overlay | `ctrl+shift+o` |
|
||
|
||
Configurable in Settings → Keybinds.
|