uip
This commit is contained in:
parent
e572f0d3a1
commit
fd49572d22
@ -333,7 +333,7 @@ function registerArenaHandlers(io, socket) {
|
||||
});
|
||||
|
||||
socket.on("arena_join", (data) => {
|
||||
const { matchId, slot } = data;
|
||||
const { matchId, slot, playerName } = data;
|
||||
if (!matchId || !slot) return;
|
||||
|
||||
if (!io._arenaRooms) io._arenaRooms = new Map();
|
||||
@ -341,7 +341,13 @@ function registerArenaHandlers(io, socket) {
|
||||
|
||||
const room = io._arenaRooms.get(matchId);
|
||||
room.sockets[slot] = socket.id;
|
||||
room.names[slot] = socket.user || "Spieler";
|
||||
|
||||
// Name aus socket.user (Objekt) oder vom Client mitgesendet
|
||||
const u = socket.user;
|
||||
room.names[slot] = (u && (u.ingame_name || u.username || u.name))
|
||||
|| playerName
|
||||
|| "Spieler";
|
||||
|
||||
socket.join("arena_" + matchId);
|
||||
|
||||
const otherSlot = slot === "player1" ? "player2" : "player1";
|
||||
@ -372,6 +378,28 @@ function registerArenaHandlers(io, socket) {
|
||||
io.to("arena_" + matchId).emit("player_surrendered", { slot });
|
||||
});
|
||||
|
||||
/* ── Zugwechsel ── */
|
||||
socket.on("end_turn", (data) => {
|
||||
const { matchId, slot } = data;
|
||||
if (!matchId || !slot) return;
|
||||
const nextSlot = slot === "player1" ? "player2" : "player1";
|
||||
io.to("arena_" + matchId).emit("turn_change", { activeSlot: nextSlot });
|
||||
console.log(`[1v1] Zug: ${slot} → ${nextSlot} | Match ${matchId}`);
|
||||
});
|
||||
|
||||
socket.on("end_turn_init", (data) => {
|
||||
const { matchId, starterSlot } = data;
|
||||
if (!matchId || !starterSlot) return;
|
||||
// Nur einmal senden (erster Empfang gewinnt)
|
||||
if (!io._turnInit) io._turnInit = new Set();
|
||||
if (io._turnInit.has(matchId)) return;
|
||||
io._turnInit.add(matchId);
|
||||
io.to("arena_" + matchId).emit("turn_change", { activeSlot: starterSlot });
|
||||
console.log(`[1v1] Startzug: ${starterSlot} | Match ${matchId}`);
|
||||
// Cleanup nach 10s
|
||||
setTimeout(() => io._turnInit?.delete(matchId), 10000);
|
||||
});
|
||||
|
||||
/* ── 2v2 & 4v4 ── */
|
||||
registerTeamModeHandlers(io, socket, "2v2");
|
||||
registerTeamModeHandlers(io, socket, "4v4");
|
||||
|
||||
@ -551,34 +551,60 @@
|
||||
|
||||
/* Account-ID laden dann arena_join senden */
|
||||
let myIngameName = null;
|
||||
fetch("/arena/me")
|
||||
.then(r => r.json())
|
||||
.then(me => {
|
||||
// Eigenen Namen sofort im Avatar anzeigen
|
||||
myIngameName = me.ingame_name || me.username || me.name || me.id || "Ich";
|
||||
const myNameEl = document.getElementById(amIPlayer1 ? "nameLeft" : "nameRight");
|
||||
if (myNameEl) myNameEl.textContent = myIngameName;
|
||||
socket.emit("arena_join", { matchId, slot: mySlot, accountId: me.id });
|
||||
})
|
||||
.catch(() => {
|
||||
socket.emit("arena_join", { matchId, slot: mySlot, accountId: null });
|
||||
|
||||
function emitArenaJoin(me) {
|
||||
myIngameName = (me && (me.ingame_name || me.username || me.name || String(me.id))) || "Spieler";
|
||||
const myNameEl = document.getElementById(amIPlayer1 ? "nameLeft" : "nameRight");
|
||||
if (myNameEl) myNameEl.textContent = myIngameName;
|
||||
socket.emit("arena_join", {
|
||||
matchId,
|
||||
slot: mySlot,
|
||||
accountId: me?.id ?? null,
|
||||
playerName: myIngameName,
|
||||
});
|
||||
}
|
||||
|
||||
function fetchAndJoin() {
|
||||
fetch("/arena/me")
|
||||
.then(r => r.json())
|
||||
.then(me => emitArenaJoin(me))
|
||||
.catch(() => emitArenaJoin(null));
|
||||
}
|
||||
|
||||
// Auf Socket-Connect warten – sicherster Zeitpunkt für arena_join
|
||||
socket.on("connect", fetchAndJoin);
|
||||
// Fallback: Socket war bereits verbunden bevor Event registriert wurde
|
||||
if (socket.connected) fetchAndJoin();
|
||||
|
||||
// Fallback: Falls nach 8s kein arena_opponent_joined / arena_ready kommt
|
||||
// → Bereit-Box trotzdem anzeigen
|
||||
const readyFallbackTimer = setTimeout(() => {
|
||||
const connecting = document.getElementById("connecting-overlay");
|
||||
if (connecting) {
|
||||
console.warn("[Arena] Kein Socket-Event nach 8s – zeige Bereit-Box als Fallback");
|
||||
connecting.remove();
|
||||
const lockOverlay = document.getElementById("board-lock-overlay");
|
||||
if (lockOverlay) lockOverlay.style.display = "flex";
|
||||
}
|
||||
}, 8000);
|
||||
|
||||
/* ── Gegner verbunden ───────────────────────────────── */
|
||||
socket.on("arena_opponent_joined", data => {
|
||||
console.log("[Arena] arena_opponent_joined:", data);
|
||||
clearTimeout(readyFallbackTimer);
|
||||
const name = data.name || "Gegner";
|
||||
document.getElementById(amIPlayer1 ? "nameRight" : "nameLeft").textContent = name;
|
||||
document.getElementById("connecting-overlay")?.remove();
|
||||
// Jetzt erst Bereit-Box anzeigen
|
||||
const lockOverlay = document.getElementById("board-lock-overlay");
|
||||
if (lockOverlay) lockOverlay.style.display = "flex";
|
||||
});
|
||||
|
||||
socket.on("arena_ready", data => {
|
||||
console.log("[Arena] arena_ready:", data);
|
||||
clearTimeout(readyFallbackTimer);
|
||||
document.getElementById("connecting-overlay")?.remove();
|
||||
document.getElementById("nameLeft").textContent = data.player1 || "Spieler 1";
|
||||
document.getElementById("nameRight").textContent = data.player2 || "Spieler 2";
|
||||
// Bereit-Box anzeigen
|
||||
const lockOverlay = document.getElementById("board-lock-overlay");
|
||||
if (lockOverlay) lockOverlay.style.display = "flex";
|
||||
});
|
||||
|
||||
Loading…
Reference in New Issue
Block a user