feat: systeme de lobby avec liste de rooms
Backend: - GET /rooms via matchMaker.query() pour lister les salles actives - ArenaRoom: setMetadata avec nom de salle (Salle #<id6>) NetworkManager: - FetchRooms() / OnRoomsRefreshed event (UnityWebRequest GET /rooms) - JoinByRoomId(), CreateRoom() en plus de JoinArena() - Refactoring: PrepareJoin/FinishJoin/HandleJoinError pour eviter duplication LobbyUI: - Redesign: panel 620x520 avec setup perso (gauche) + liste rooms (droite) - Bouton Rejoindre par salle, Creer une salle, Rejoindre n importe - Pseudo pre-rempli depuis PlayerPrefs - Refresh automatique toutes les 4s Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
const cors = require('cors');
|
||||
const { Server } = require('@colyseus/core');
|
||||
const { Server, matchMaker } = require('@colyseus/core');
|
||||
const { WebSocketTransport } = require('@colyseus/ws-transport');
|
||||
const { ArenaRoom } = require('./rooms/ArenaRoom');
|
||||
const Stats = require('./stats/StatsManager');
|
||||
@@ -61,6 +61,21 @@ const gameServer = new Server({
|
||||
res.json({ ok });
|
||||
});
|
||||
|
||||
// ── Rooms ────────────────────────────────────────────────────────────
|
||||
app.get('/rooms', async (_req, res) => {
|
||||
try {
|
||||
const rooms = await matchMaker.query({ name: 'arena' });
|
||||
res.json(rooms.map(r => ({
|
||||
roomId: r.roomId,
|
||||
clients: r.clients,
|
||||
maxClients: r.maxClients,
|
||||
metadata: r.metadata || {},
|
||||
})));
|
||||
} catch (_) {
|
||||
res.json([]);
|
||||
}
|
||||
});
|
||||
|
||||
// ── Chat ─────────────────────────────────────────────────────────────
|
||||
app.get('/chat/history', (req, res) => {
|
||||
res.json(Chat.getHistory(req.query.since));
|
||||
|
||||
@@ -14,6 +14,7 @@ class ArenaRoom extends Room {
|
||||
onCreate(options) {
|
||||
this.setState(new GameState());
|
||||
this.setPatchRate(16); // ~62.5 Hz
|
||||
this.setMetadata({ name: options?.roomName || ('Salle #' + this.roomId.substring(0, 6)) });
|
||||
|
||||
this._phaseTimer = null;
|
||||
this._lobbyTimer = null;
|
||||
|
||||
Reference in New Issue
Block a user