fix alot of shit for webrtc to work
This commit is contained in:
133
WEBRTC_SETUP.md
Normal file
133
WEBRTC_SETUP.md
Normal file
@@ -0,0 +1,133 @@
|
||||
# WebRTC Multiplayer Setup
|
||||
|
||||
The game now supports WebRTC multiplayer for WebAssembly (browser) builds!
|
||||
|
||||
## How It Works
|
||||
|
||||
The `NetworkManager` automatically detects the platform:
|
||||
- **Native builds** (Windows, Linux, Mac): Uses **ENet** (traditional UDP networking)
|
||||
- **Web builds**: Uses **WebRTC** (peer-to-peer browser networking)
|
||||
|
||||
## Important Note About WebRTC
|
||||
|
||||
WebRTC requires a **signaling mechanism** to establish connections between peers. This is different from ENet which uses direct IP:port connections.
|
||||
|
||||
### Current Implementation Status
|
||||
|
||||
✅ **Done:**
|
||||
- Auto-detection of web platform
|
||||
- WebRTCMultiplayerPeer creation for host and client
|
||||
- Basic connection setup
|
||||
- **STUN server configured** (`stun:ruinborn.thefirstboss.com:3578`) for NAT traversal
|
||||
|
||||
⚠️ **Requires Additional Setup:**
|
||||
- **Signaling server** to exchange connection info between peers
|
||||
- Session Description Protocol (SDP) offer/answer exchange
|
||||
- ICE candidate exchange
|
||||
|
||||
## Quick Setup Options
|
||||
|
||||
### Option 1: Use a Public Signaling Server (Easiest)
|
||||
|
||||
Use a service like:
|
||||
- [peerjs-server](https://github.com/peers/peerjs-server)
|
||||
- [Matchbox](https://github.com/johanhelsing/matchbox) (Godot-specific)
|
||||
- Roll your own simple WebSocket server
|
||||
|
||||
### Option 2: Manual Connection (For Testing)
|
||||
|
||||
For local testing, you can manually exchange connection strings:
|
||||
1. Host creates a game
|
||||
2. Host copies their connection info
|
||||
3. Joiner pastes host's connection info
|
||||
4. Joiner generates their own connection info
|
||||
5. Host pastes joiner's connection info
|
||||
|
||||
### Option 3: Implement Signaling Server (Recommended for Production)
|
||||
|
||||
Create a simple WebSocket signaling server that:
|
||||
1. Maintains a list of active lobbies
|
||||
2. Relays SDP offers/answers between peers
|
||||
3. Relays ICE candidates between peers
|
||||
|
||||
## Example: Using Matchbox (Recommended)
|
||||
|
||||
Matchbox is a simple signaling server specifically for Godot WebRTC:
|
||||
|
||||
```bash
|
||||
# Install matchbox server
|
||||
cargo install matchbox_server
|
||||
|
||||
# Run the server
|
||||
matchbox_server
|
||||
```
|
||||
|
||||
Then update the code to connect to your matchbox server when in web mode.
|
||||
|
||||
## Testing WebRTC Locally
|
||||
|
||||
1. **Export for HTML5**:
|
||||
- Project -> Export -> Add -> HTML5 (WebAssembly)
|
||||
- Export the project
|
||||
|
||||
2. **Run a local web server**:
|
||||
```bash
|
||||
# Python 3
|
||||
python -m http.server 8000
|
||||
|
||||
# Or use any web server
|
||||
```
|
||||
|
||||
3. **Open in browsers**:
|
||||
- Host: `http://localhost:8000`
|
||||
- Client: `http://localhost:8000` (in another browser tab/window)
|
||||
|
||||
4. **Connect**:
|
||||
- One browser hosts
|
||||
- Other browser joins
|
||||
- (Requires signaling server to be running)
|
||||
|
||||
## Alternative: WebSocket Multiplayer
|
||||
|
||||
If WebRTC setup is too complex, you can use WebSocketMultiplayerPeer instead:
|
||||
|
||||
```gdscript
|
||||
# In network_manager.gd, replace WebRTCMultiplayerPeer with:
|
||||
var peer = WebSocketMultiplayerPeer.new()
|
||||
|
||||
# For host:
|
||||
peer.create_server(port)
|
||||
|
||||
# For client:
|
||||
peer.create_client("ws://your-server:port")
|
||||
```
|
||||
|
||||
WebSocket is simpler but requires a dedicated server (can't be P2P like WebRTC).
|
||||
|
||||
## Production Deployment
|
||||
|
||||
For production, you'll need:
|
||||
1. A signaling server (for WebRTC) or game server (for WebSocket)
|
||||
2. HTTPS hosting (required for WebRTC in browsers)
|
||||
3. Proper CORS configuration
|
||||
4. STUN/TURN servers for NAT traversal (optional but recommended)
|
||||
|
||||
## Current Status
|
||||
|
||||
The game will:
|
||||
- ✅ Detect web platform automatically
|
||||
- ✅ Create WebRTC peers
|
||||
- ⚠️ Require signaling server setup to actually connect
|
||||
|
||||
**To complete the setup**, implement one of the options above based on your needs.
|
||||
|
||||
## Quick Recommendation
|
||||
|
||||
**For Testing**: Use Matchbox (Option 3)
|
||||
**For Production**: Implement a proper signaling server with lobby/matchmaking
|
||||
|
||||
## Resources
|
||||
|
||||
- [Godot WebRTC Documentation](https://docs.godotengine.org/en/stable/tutorials/networking/webrtc.html)
|
||||
- [Matchbox Server](https://github.com/johanhelsing/matchbox)
|
||||
- [WebRTC for Godot Tutorial](https://docs.godotengine.org/en/stable/tutorials/networking/high_level_multiplayer.html#webrtc)
|
||||
Reference in New Issue
Block a user