React-Oberfläche mit Übersicht, Match-Erstellung, Beitritt über Team- und Zuschauercodes, Teamkarten, visuellem Map-Veto, Serie und Serverpanel. README beschreibt Einrichtung, Umgebungsvariablen, Rollen, Veto-Abläufe, Serveradapter und CSTV-Zuschauerzugang. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
52 lines
1.9 KiB
JavaScript
52 lines
1.9 KiB
JavaScript
export const FORMAT_LABEL = { bo1: 'Best of 1', bo3: 'Best of 3', bo5: 'Best of 5' };
|
|
|
|
export const ROLE_LABEL = {
|
|
organizer: 'Organisator',
|
|
captain: 'Captain',
|
|
player: 'Spieler',
|
|
spectator: 'Zuschauer',
|
|
public: 'Gast',
|
|
};
|
|
|
|
/** Serverstatus in Worte fassen. Simulierte Server werden nie als laufend bezeichnet. */
|
|
export function serverLabel(server) {
|
|
if (!server) return { text: 'Kein Server', tone: 'muted' };
|
|
const sim = server.simulated;
|
|
switch (server.status) {
|
|
case 'starting':
|
|
return { text: sim ? 'Demo: Start wird simuliert' : 'Server startet', tone: 'pending' };
|
|
case 'ready':
|
|
return { text: sim ? 'Demo: simuliert bereit' : 'Server bereit', tone: sim ? 'demo' : 'ok' };
|
|
case 'configuring':
|
|
return { text: sim ? 'Demo: Konfiguration simuliert' : 'Server wird konfiguriert', tone: 'pending' };
|
|
case 'configured':
|
|
return { text: sim ? 'Demo: simuliert konfiguriert' : 'Server läuft', tone: sim ? 'demo' : 'ok' };
|
|
case 'start_failed':
|
|
return { text: 'Serverstart fehlgeschlagen', tone: 'error' };
|
|
case 'config_failed':
|
|
return { text: 'Konfiguration fehlgeschlagen', tone: 'error' };
|
|
case 'failed':
|
|
return { text: 'Server ausgefallen', tone: 'error' };
|
|
case 'stopped':
|
|
return { text: 'Server gestoppt', tone: 'muted' };
|
|
default:
|
|
return { text: server.status, tone: 'muted' };
|
|
}
|
|
}
|
|
|
|
export const STEP_VERB = { ban: 'bannt eine Map', pick: 'wählt eine Map', side: 'wählt die Startseite', decider: 'Entscheidungsmap' };
|
|
|
|
export function timeAgo(ts) {
|
|
const s = Math.round((Date.now() - ts) / 1000);
|
|
if (s < 60) return 'gerade eben';
|
|
const m = Math.round(s / 60);
|
|
if (m < 60) return `vor ${m} Min.`;
|
|
const h = Math.round(m / 60);
|
|
if (h < 24) return `vor ${h} Std.`;
|
|
return new Date(ts).toLocaleDateString('de-DE');
|
|
}
|
|
|
|
export function clock(ts) {
|
|
return new Date(ts).toLocaleTimeString('de-DE', { hour: '2-digit', minute: '2-digit', second: '2-digit' });
|
|
}
|