traduccion del juego al español 100%
This commit is contained in:
@@ -16,7 +16,7 @@
|
|||||||
{{ activeFilters?.dataSource === 'active-rooms' ? '🔴 Tiempo Real' : '📁 Agregado' }}
|
{{ activeFilters?.dataSource === 'active-rooms' ? '🔴 Tiempo Real' : '📁 Agregado' }}
|
||||||
</span>
|
</span>
|
||||||
<span class="filter-tag" v-if="activeFilters?.round !== 'all'">
|
<span class="filter-tag" v-if="activeFilters?.round !== 'all'">
|
||||||
Round {{ activeFilters?.round }}
|
Ronda {{ activeFilters?.round }}
|
||||||
</span>
|
</span>
|
||||||
<span class="filter-tag" v-if="activeFilters?.game !== 'all'">
|
<span class="filter-tag" v-if="activeFilters?.game !== 'all'">
|
||||||
{{ activeFilters?.game }}
|
{{ activeFilters?.game }}
|
||||||
@@ -68,7 +68,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="hint small">Basado en mensajes disponibles por sala. Click jugador para comparar.</div>
|
<div class="hint small">Basado en mensajes disponibles por sala. Haz clic en un jugador para comparar.</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -113,7 +113,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="hint small">
|
<div class="hint small">
|
||||||
{{ selectedPlayerUuid ? 'Ratios del jugador seleccionado' : 'Ratios globales' }}.
|
{{ selectedPlayerUuid ? 'Proporciones del jugador seleccionado' : 'Proporciones globales' }}.
|
||||||
Los segmentos muestran la proporción relativa dentro de cada categoría.
|
Los segmentos muestran la proporción relativa dentro de cada categoría.
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="filters-container glass light">
|
<div class="filters-container glass light">
|
||||||
<div class="filter-group">
|
<div class="filter-group">
|
||||||
<label class="filter-label">Round:</label>
|
<label class="filter-label">Ronda:</label>
|
||||||
<div class="filter-buttons">
|
<div class="filter-buttons">
|
||||||
<button
|
<button
|
||||||
class="filter-btn"
|
class="filter-btn"
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
class="filter-btn"
|
class="filter-btn"
|
||||||
:class="{ active: roundFilter?.includes(r) }"
|
:class="{ active: roundFilter?.includes(r) }"
|
||||||
@click="$emit('update:roundFilter', roundFilter?.includes(r) ? roundFilter.filter(x=>x!==r) : [...(roundFilter||[]), r])"
|
@click="$emit('update:roundFilter', roundFilter?.includes(r) ? roundFilter.filter(x=>x!==r) : [...(roundFilter||[]), r])"
|
||||||
:title="`Mostrar solo Round ${r}`"
|
:title="`Mostrar solo Ronda ${r}`"
|
||||||
>
|
>
|
||||||
R{{ r }}
|
R{{ r }}
|
||||||
</button>
|
</button>
|
||||||
@@ -25,7 +25,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="filter-group">
|
<div class="filter-group">
|
||||||
<label class="filter-label">Game:</label>
|
<label class="filter-label">Juego:</label>
|
||||||
<div class="filter-buttons">
|
<div class="filter-buttons">
|
||||||
<button
|
<button
|
||||||
class="filter-btn"
|
class="filter-btn"
|
||||||
|
|||||||
@@ -6,24 +6,24 @@
|
|||||||
<button @click="goToSelector" class="btn btn-back">
|
<button @click="goToSelector" class="btn btn-back">
|
||||||
← UUIDs
|
← UUIDs
|
||||||
</button>
|
</button>
|
||||||
<h1>🎛️ Admin Dashboard</h1>
|
<h1>🎛️ Panel de Administración</h1>
|
||||||
</div>
|
</div>
|
||||||
<div class="connection-status">
|
<div class="connection-status">
|
||||||
<div :class="['status-indicator', { 'connected': isSSEConnected, 'disconnected': !isSSEConnected }]"></div>
|
<div :class="['status-indicator', { 'connected': isSSEConnected, 'disconnected': !isSSEConnected }]"></div>
|
||||||
<span class="status-text">{{ isSSEConnected ? 'Real-time' : 'Polling' }}</span>
|
<span class="status-text">{{ isSSEConnected ? 'Tiempo real' : 'Sondeo' }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="stats-summary">
|
<div class="stats-summary">
|
||||||
<div class="stat-card">
|
<div class="stat-card">
|
||||||
<span class="stat-label">Total CCU</span>
|
<span class="stat-label">CCU Total</span>
|
||||||
<span class="stat-value">{{ globalStats?.globalCCU || 0 }}</span>
|
<span class="stat-value">{{ globalStats?.globalCCU || 0 }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="stat-card">
|
<div class="stat-card">
|
||||||
<span class="stat-label">Active Rooms</span>
|
<span class="stat-label">Salas Activas</span>
|
||||||
<span class="stat-value">{{ rooms.length }}</span>
|
<span class="stat-value">{{ rooms.length }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="stat-card">
|
<div class="stat-card">
|
||||||
<span class="stat-label">Total Players</span>
|
<span class="stat-label">Jugadores Totales</span>
|
||||||
<span class="stat-value">{{ totalPlayers }}</span>
|
<span class="stat-value">{{ totalPlayers }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -60,73 +60,73 @@
|
|||||||
<!-- Global Controls Section -->
|
<!-- Global Controls Section -->
|
||||||
<div class="global-controls-section">
|
<div class="global-controls-section">
|
||||||
<div class="section-header">
|
<div class="section-header">
|
||||||
<h2>🌐 Global Controls</h2>
|
<h2>🌐 Controles Globales</h2>
|
||||||
</div>
|
</div>
|
||||||
<div class="global-controls-grid">
|
<div class="global-controls-grid">
|
||||||
<div class="control-group">
|
<div class="control-group">
|
||||||
<h3>Game State</h3>
|
<h3>Estado del Juego</h3>
|
||||||
<div class="control-buttons">
|
<div class="control-buttons">
|
||||||
<button
|
<button
|
||||||
@click="pauseAllGames"
|
@click="pauseAllGames"
|
||||||
class="btn btn-pause"
|
class="btn btn-pause"
|
||||||
:disabled="isLoadingGlobal"
|
:disabled="isLoadingGlobal"
|
||||||
>
|
>
|
||||||
⏸️ Pause All Games
|
⏸️ Pausar Todos los Juegos
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
@click="resumeAllGames"
|
@click="resumeAllGames"
|
||||||
class="btn btn-resume"
|
class="btn btn-resume"
|
||||||
:disabled="isLoadingGlobal"
|
:disabled="isLoadingGlobal"
|
||||||
>
|
>
|
||||||
▶️ Resume All Games
|
▶️ Reanudar Todos los Juegos
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
@click="restartAllGames"
|
@click="restartAllGames"
|
||||||
class="btn btn-restart"
|
class="btn btn-restart"
|
||||||
:disabled="isLoadingGlobal"
|
:disabled="isLoadingGlobal"
|
||||||
>
|
>
|
||||||
🔄 Restart All Games
|
🔄 Reiniciar Todos los Juegos
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="control-group">
|
<div class="control-group">
|
||||||
<h3>Game Variant</h3>
|
<h3>Variante del Juego</h3>
|
||||||
<div class="variant-controls">
|
<div class="variant-controls">
|
||||||
<select v-model="selectedGlobalVariant" class="variant-selector">
|
<select v-model="selectedGlobalVariant" class="variant-selector">
|
||||||
<option value="">Select Variant</option>
|
<option value="">Seleccionar Variante</option>
|
||||||
<option value="G1">G1 - Basic Game</option>
|
<option value="G1">G1 - Juego Básico</option>
|
||||||
<option value="G2">G2 - Forced Offers</option>
|
<option value="G2">G2 - Ofertas Forzadas</option>
|
||||||
<option value="G3">G3 - Shame Tokens</option>
|
<option value="G3">G3 - Fichas de Vergüenza</option>
|
||||||
<option value="G4">G4 - Judge System</option>
|
<option value="G4">G4 - Sistema de Juez</option>
|
||||||
<option value="G5">G5 - Advanced</option>
|
<option value="G5">G5 - Avanzado</option>
|
||||||
</select>
|
</select>
|
||||||
<button
|
<button
|
||||||
@click="changeGlobalVariant"
|
@click="changeGlobalVariant"
|
||||||
class="btn btn-variant"
|
class="btn btn-variant"
|
||||||
:disabled="!selectedGlobalVariant || isLoadingGlobal"
|
:disabled="!selectedGlobalVariant || isLoadingGlobal"
|
||||||
>
|
>
|
||||||
🎮 Change All to {{ selectedGlobalVariant }}
|
🎮 Cambiar Todo a {{ selectedGlobalVariant }}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="control-group">
|
<div class="control-group">
|
||||||
<h3>Player Management</h3>
|
<h3>Gestión de Jugadores</h3>
|
||||||
<div class="control-buttons">
|
<div class="control-buttons">
|
||||||
<button
|
<button
|
||||||
@click="shufflePlayers"
|
@click="shufflePlayers"
|
||||||
class="btn btn-shuffle"
|
class="btn btn-shuffle"
|
||||||
:disabled="isLoadingGlobal"
|
:disabled="isLoadingGlobal"
|
||||||
>
|
>
|
||||||
🎲 Shuffle Players
|
🎲 Mezclar Jugadores
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
@click="sendAllToLobby"
|
@click="sendAllToLobby"
|
||||||
class="btn btn-lobby-all"
|
class="btn btn-lobby-all"
|
||||||
:disabled="isLoadingGlobal"
|
:disabled="isLoadingGlobal"
|
||||||
>
|
>
|
||||||
🏠 Send All to Lobby
|
🏠 Enviar Todos al Lobby
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
@click="resetAllUuidProfiles"
|
@click="resetAllUuidProfiles"
|
||||||
@@ -134,7 +134,7 @@
|
|||||||
:disabled="isLoadingGlobal"
|
:disabled="isLoadingGlobal"
|
||||||
title="Borrar nombre, color y vergüenza de todos los UUIDs"
|
title="Borrar nombre, color y vergüenza de todos los UUIDs"
|
||||||
>
|
>
|
||||||
🧹 Reset All UUID Profiles
|
🧹 Resetear Todos los Perfiles UUID
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -144,25 +144,25 @@
|
|||||||
<div class="rooms-section">
|
<div class="rooms-section">
|
||||||
<DashboardActions :rooms="rooms" :room-details="roomDetails" />
|
<DashboardActions :rooms="rooms" :room-details="roomDetails" />
|
||||||
<div class="section-header">
|
<div class="section-header">
|
||||||
<h2>Active Game Rooms</h2>
|
<h2>Salas de Juego Activas</h2>
|
||||||
<div class="view-controls">
|
<div class="view-controls">
|
||||||
<button
|
<button
|
||||||
@click="viewMode = 'table'"
|
@click="viewMode = 'table'"
|
||||||
:class="['btn', 'btn-view-mode', { active: viewMode === 'table' }]"
|
:class="['btn', 'btn-view-mode', { active: viewMode === 'table' }]"
|
||||||
>
|
>
|
||||||
📊 Table View
|
📊 Vista de Tabla
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
@click="viewMode = 'cards'"
|
@click="viewMode = 'cards'"
|
||||||
:class="['btn', 'btn-view-mode', { active: viewMode === 'cards' }]"
|
:class="['btn', 'btn-view-mode', { active: viewMode === 'cards' }]"
|
||||||
>
|
>
|
||||||
🎴 Cards View
|
🎴 Vista de Tarjetas
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div v-if="rooms.length === 0" class="no-rooms">
|
<div v-if="rooms.length === 0" class="no-rooms">
|
||||||
No active game rooms
|
No hay salas de juego activas
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Table View -->
|
<!-- Table View -->
|
||||||
@@ -194,15 +194,15 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="lobby-section">
|
<div class="lobby-section">
|
||||||
<h2>Lobby Rooms</h2>
|
<h2>Salas del Lobby</h2>
|
||||||
<div v-if="lobbyRooms.length === 0" class="no-rooms">
|
<div v-if="lobbyRooms.length === 0" class="no-rooms">
|
||||||
No active lobby rooms
|
No hay salas de lobby activas
|
||||||
</div>
|
</div>
|
||||||
<div v-else class="lobby-grid">
|
<div v-else class="lobby-grid">
|
||||||
<div v-for="room in lobbyRooms" :key="room.roomId" class="lobby-card">
|
<div v-for="room in lobbyRooms" :key="room.roomId" class="lobby-card">
|
||||||
<div class="lobby-header">
|
<div class="lobby-header">
|
||||||
<span class="room-type">🏠 Lobby</span>
|
<span class="room-type">🏠 Lobby</span>
|
||||||
<span class="room-clients">{{ room.clients }} players</span>
|
<span class="room-clients">{{ room.clients }} jugadores</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="room-id-small">{{ room.roomId.slice(0, 8) }}</div>
|
<div class="room-id-small">{{ room.roomId.slice(0, 8) }}</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -212,10 +212,10 @@
|
|||||||
|
|
||||||
<div class="dashboard-footer">
|
<div class="dashboard-footer">
|
||||||
<button @click="refreshData" class="btn btn-refresh">
|
<button @click="refreshData" class="btn btn-refresh">
|
||||||
🔄 Refresh Data
|
🔄 Actualizar Datos
|
||||||
</button>
|
</button>
|
||||||
<button @click="goToLobby" class="btn btn-lobby">
|
<button @click="goToLobby" class="btn btn-lobby">
|
||||||
🎮 Go to Lobby
|
🎮 Ir al Lobby
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -455,7 +455,7 @@ function openTabs() {
|
|||||||
|
|
||||||
// Global control functions
|
// Global control functions
|
||||||
async function pauseAllGames() {
|
async function pauseAllGames() {
|
||||||
if (!confirm('Are you sure you want to pause ALL active games?')) return;
|
if (!confirm('¿Estás seguro de que quieres pausar TODOS los juegos activos?')) return;
|
||||||
|
|
||||||
isLoadingGlobal.value = true;
|
isLoadingGlobal.value = true;
|
||||||
try {
|
try {
|
||||||
@@ -477,7 +477,7 @@ async function pauseAllGames() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function resumeAllGames() {
|
async function resumeAllGames() {
|
||||||
if (!confirm('Are you sure you want to resume ALL paused games?')) return;
|
if (!confirm('¿Estás seguro de que quieres reanudar TODOS los juegos pausados?')) return;
|
||||||
|
|
||||||
isLoadingGlobal.value = true;
|
isLoadingGlobal.value = true;
|
||||||
try {
|
try {
|
||||||
@@ -499,7 +499,7 @@ async function resumeAllGames() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function restartAllGames() {
|
async function restartAllGames() {
|
||||||
if (!confirm('Are you sure you want to RESTART ALL active games? This will reset all progress!')) return;
|
if (!confirm('¿Estás seguro de que quieres REINICIAR TODOS los juegos activos? ¡Esto reiniciará todo el progreso!')) return;
|
||||||
|
|
||||||
isLoadingGlobal.value = true;
|
isLoadingGlobal.value = true;
|
||||||
try {
|
try {
|
||||||
@@ -522,7 +522,7 @@ async function restartAllGames() {
|
|||||||
|
|
||||||
async function changeGlobalVariant() {
|
async function changeGlobalVariant() {
|
||||||
if (!selectedGlobalVariant.value) return;
|
if (!selectedGlobalVariant.value) return;
|
||||||
if (!confirm(`Are you sure you want to change ALL games to variant ${selectedGlobalVariant.value}?`)) return;
|
if (!confirm(`¿Estás seguro de que quieres cambiar TODOS los juegos a la variante ${selectedGlobalVariant.value}?`)) return;
|
||||||
|
|
||||||
isLoadingGlobal.value = true;
|
isLoadingGlobal.value = true;
|
||||||
try {
|
try {
|
||||||
@@ -545,7 +545,7 @@ async function changeGlobalVariant() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function shufflePlayers() {
|
async function shufflePlayers() {
|
||||||
if (!confirm('Are you sure you want to SHUFFLE all players? This will randomly redistribute players between rooms and assign new roles!')) return;
|
if (!confirm('¿Estás seguro de que quieres MEZCLAR todos los jugadores? ¡Esto redistribuirá aleatoriamente a los jugadores entre las salas y asignará nuevos roles!')) return;
|
||||||
|
|
||||||
isLoadingGlobal.value = true;
|
isLoadingGlobal.value = true;
|
||||||
try {
|
try {
|
||||||
@@ -558,7 +558,7 @@ async function shufflePlayers() {
|
|||||||
|
|
||||||
const result = await response.json();
|
const result = await response.json();
|
||||||
console.log('Players shuffled successfully:', result.message);
|
console.log('Players shuffled successfully:', result.message);
|
||||||
alert(`Shuffle completed! ${result.message}`);
|
alert(`¡Mezcla completada! ${result.message}`);
|
||||||
await fetchData();
|
await fetchData();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Failed to shuffle players:', error);
|
console.error('Failed to shuffle players:', error);
|
||||||
@@ -569,7 +569,7 @@ async function shufflePlayers() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function sendAllToLobby() {
|
async function sendAllToLobby() {
|
||||||
if (!confirm('Are you sure you want to send ALL players back to the lobby? This will end all active games!')) return;
|
if (!confirm('¿Estás seguro de que quieres enviar a TODOS los jugadores de vuelta al lobby? ¡Esto terminará todos los juegos activos!')) return;
|
||||||
|
|
||||||
isLoadingGlobal.value = true;
|
isLoadingGlobal.value = true;
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -16,9 +16,9 @@
|
|||||||
<div class="game-header">
|
<div class="game-header">
|
||||||
<h1 @click="onTitleClick" :title="titleUnlockTitle">💼 Sala de negocios</h1>
|
<h1 @click="onTitleClick" :title="titleUnlockTitle">💼 Sala de negocios</h1>
|
||||||
<div class="meta">
|
<div class="meta">
|
||||||
<div>Room: <code>{{ roomId }}</code></div>
|
<div>Sala: <code>{{ roomId }}</code></div>
|
||||||
<div>Round: {{ currentRound }}/3</div>
|
<div>Ronda: {{ currentRound }}/3</div>
|
||||||
<div>Status: <span class="badge">{{ gameStatus }}</span></div>
|
<div>Estado: <span class="badge">{{ gameStatus }}</span></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="variant-selector">
|
<div class="variant-selector">
|
||||||
<button
|
<button
|
||||||
@@ -41,8 +41,8 @@
|
|||||||
<div v-if="gameStatus === 'waiting'" class="waiting-area">
|
<div v-if="gameStatus === 'waiting'" class="waiting-area">
|
||||||
<div class="waiting-message">
|
<div class="waiting-message">
|
||||||
<div class="spinner"></div>
|
<div class="spinner"></div>
|
||||||
<h2>Waiting for opponent...</h2>
|
<h2>Esperando oponente...</h2>
|
||||||
<p>Players in room: {{ players.length }}/2</p>
|
<p>Jugadores en la sala: {{ players.length }}/2</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -61,8 +61,8 @@
|
|||||||
|
|
||||||
<div class="outcome" v-if="outcomeP1 || outcomeP2">
|
<div class="outcome" v-if="outcomeP1 || outcomeP2">
|
||||||
<div class="outcome-box">
|
<div class="outcome-box">
|
||||||
<div>Outcome P1: <strong>{{ outcomeP1 }}</strong></div>
|
<div>Resultado J1: <strong>{{ outcomeP1 }}</strong></div>
|
||||||
<div>Outcome P2: <strong>{{ outcomeP2 }}</strong></div>
|
<div>Resultado J2: <strong>{{ outcomeP2 }}</strong></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -70,7 +70,7 @@
|
|||||||
<ChatWidget />
|
<ChatWidget />
|
||||||
|
|
||||||
<div class="game-footer">
|
<div class="game-footer">
|
||||||
<button @click="leaveGame" class="btn btn-leave">Leave Game</button>
|
<button @click="leaveGame" class="btn btn-leave">Salir del Juego</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<h1 class="title">🎮 Snatch Game</h1>
|
<h1 class="title">🎮 Snatch Game</h1>
|
||||||
<div class="subtitle">Competitive Clicker Battle</div>
|
<div class="subtitle">Batalla Competitiva de Clics</div>
|
||||||
|
|
||||||
<div class="player-section">
|
<div class="player-section">
|
||||||
<div class="name-input-group">
|
<div class="name-input-group">
|
||||||
@@ -15,14 +15,14 @@
|
|||||||
v-model="inputName"
|
v-model="inputName"
|
||||||
@keyup.enter="updateName"
|
@keyup.enter="updateName"
|
||||||
type="text"
|
type="text"
|
||||||
placeholder="Enter your name"
|
placeholder="Ingresa tu nombre"
|
||||||
class="name-input"
|
class="name-input"
|
||||||
maxlength="20"
|
maxlength="20"
|
||||||
/>
|
/>
|
||||||
<button @click="updateName" class="btn btn-secondary">Set Name</button>
|
<button @click="updateName" class="btn btn-secondary">Confirmar Nombre</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="current-name">
|
<div class="current-name">
|
||||||
Playing as: <span class="player-name">{{ playerName || 'guest' }}</span>
|
Jugando como: <span class="player-name">{{ playerName || 'invitado' }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="color-picker">
|
<div class="color-picker">
|
||||||
<label class="color-label">Color:</label>
|
<label class="color-label">Color:</label>
|
||||||
@@ -35,18 +35,18 @@
|
|||||||
|
|
||||||
<div class="main-actions">
|
<div class="main-actions">
|
||||||
<button @click="handleQuickPlay" class="btn btn-primary btn-large" :disabled="isJoining || !nameConfirmed">
|
<button @click="handleQuickPlay" class="btn btn-primary btn-large" :disabled="isJoining || !nameConfirmed">
|
||||||
<span v-if="!isJoining">🧪 Demo Play</span>
|
<span v-if="!isJoining">🧪 Juego Demo</span>
|
||||||
<span v-else>Finding match...</span>
|
<span v-else>Buscando partida...</span>
|
||||||
</button>
|
</button>
|
||||||
<div v-if="!nameConfirmed" class="hint">Antes de jugar, presiona "Set Name" para confirmar tu nombre.</div>
|
<div v-if="!nameConfirmed" class="hint">Antes de jugar, presiona "Confirmar Nombre" para confirmar tu nombre.</div>
|
||||||
<div v-else class="hint ok">Nombre confirmado ✔</div>
|
<div v-else class="hint ok">Nombre confirmado ✔</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="qr-section">
|
<div class="qr-section">
|
||||||
<h2>🎯 Your Game Access</h2>
|
<h2>🎯 Tu Acceso al Juego</h2>
|
||||||
<div class="qr-container">
|
<div class="qr-container">
|
||||||
<div class="qr-header">
|
<div class="qr-header">
|
||||||
<h3>{{ playerName || 'Guest' }}'s Game Link</h3>
|
<h3>Enlace de Juego de {{ playerName || 'Invitado' }}</h3>
|
||||||
<p class="uuid-display">UUID: {{ routeUuid.substring(0, 8) }}...</p>
|
<p class="uuid-display">UUID: {{ routeUuid.substring(0, 8) }}...</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="qr-code-wrapper">
|
<div class="qr-code-wrapper">
|
||||||
@@ -55,8 +55,8 @@
|
|||||||
<div class="qr-footer">
|
<div class="qr-footer">
|
||||||
<p class="url-display">{{ gameUrl }}</p>
|
<p class="url-display">{{ gameUrl }}</p>
|
||||||
<div class="qr-actions">
|
<div class="qr-actions">
|
||||||
<button @click="copyUrl" class="btn btn-copy">📋 Copy Link</button>
|
<button @click="copyUrl" class="btn btn-copy">📋 Copiar Enlace</button>
|
||||||
<button @click="shareQR" class="btn btn-share">📤 Share QR</button>
|
<button @click="shareQR" class="btn btn-share">📤 Compartir QR</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -92,7 +92,7 @@ const nameConfirmed = computed(() => colyseusService.nameConfirmed.value);
|
|||||||
const playerColor = computed(() => colyseusService.playerColor.value);
|
const playerColor = computed(() => colyseusService.playerColor.value);
|
||||||
const previewPlayer = computed(() => ({
|
const previewPlayer = computed(() => ({
|
||||||
sessionId: 'preview',
|
sessionId: 'preview',
|
||||||
name: playerName.value || 'guest',
|
name: playerName.value || 'invitado',
|
||||||
role: 'P1',
|
role: 'P1',
|
||||||
pavoTokens: 10,
|
pavoTokens: 10,
|
||||||
eloteTokens: 0,
|
eloteTokens: 0,
|
||||||
@@ -347,8 +347,8 @@ async function copyUrl() {
|
|||||||
function shareQR() {
|
function shareQR() {
|
||||||
if (navigator.share) {
|
if (navigator.share) {
|
||||||
navigator.share({
|
navigator.share({
|
||||||
title: 'Join my Snatch Game',
|
title: 'Únete a mi Snatch Game',
|
||||||
text: `Join ${playerName.value || 'me'} in Snatch Game!`,
|
text: `Únete a ${playerName.value || 'mí'} en Snatch Game!`,
|
||||||
url: gameUrl.value
|
url: gameUrl.value
|
||||||
}).catch(err => console.log('Error sharing:', err));
|
}).catch(err => console.log('Error sharing:', err));
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -93,7 +93,7 @@ function send() {
|
|||||||
const id = `${Date.now()}-${Math.random().toString(36).slice(2)}`;
|
const id = `${Date.now()}-${Math.random().toString(36).slice(2)}`;
|
||||||
const mine: ChatMsg = {
|
const mine: ChatMsg = {
|
||||||
id,
|
id,
|
||||||
from: colyseusService.playerName.value || "Yo",
|
from: colyseusService.playerName.value || "Tú",
|
||||||
fromId: colyseusService.sessionId.value || "",
|
fromId: colyseusService.sessionId.value || "",
|
||||||
text: t,
|
text: t,
|
||||||
ts: Date.now(),
|
ts: Date.now(),
|
||||||
|
|||||||
@@ -39,7 +39,7 @@
|
|||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div v-else class="round-info clickable" @click="onRoundInfoClick" :title="roundInfoTitle">
|
<div v-else class="round-info clickable" @click="onRoundInfoClick" :title="roundInfoTitle">
|
||||||
(espere a que el administrador continue la partida)
|
(espera a que el administrador continúe la partida)
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<div v-else class="round-info">
|
<div v-else class="round-info">
|
||||||
|
|||||||
@@ -53,7 +53,7 @@
|
|||||||
<span class="th r">Rol</span>
|
<span class="th r">Rol</span>
|
||||||
<span class="th tok">Tokens</span>
|
<span class="th tok">Tokens</span>
|
||||||
<span class="th k">Evento</span>
|
<span class="th k">Evento</span>
|
||||||
<span class="th rnd">Round/Game</span>
|
<span class="th rnd">Ronda/Juego</span>
|
||||||
<span class="th x">Mensaje</span>
|
<span class="th x">Mensaje</span>
|
||||||
<span class="th room">Sala</span>
|
<span class="th room">Sala</span>
|
||||||
</div>
|
</div>
|
||||||
@@ -62,7 +62,7 @@
|
|||||||
<span class="r">{{ (m.role || '') || '—' }}</span>
|
<span class="r">{{ (m.role || '') || '—' }}</span>
|
||||||
<span class="tok">🦃 {{ m.pavoTokens ?? 0 }} · 🌽 {{ m.eloteTokens ?? 0 }} <span v-if="(m.shameTokens ?? 0) > 0">· 😶 {{ m.shameTokens }}</span></span>
|
<span class="tok">🦃 {{ m.pavoTokens ?? 0 }} · 🌽 {{ m.eloteTokens ?? 0 }} <span v-if="(m.shameTokens ?? 0) > 0">· 😶 {{ m.shameTokens }}</span></span>
|
||||||
<span class="k">{{ friendlyKind(m.kind) }}</span>
|
<span class="k">{{ friendlyKind(m.kind) }}</span>
|
||||||
<span class="rnd" :title="`Round ${m.round || '?'} - Game ${m.gameVariant || m.variant || '?'}`">R{{ m.round || '?' }}/{{ (m.gameVariant || m.variant || '?').replace('G', '') }}</span>
|
<span class="rnd" :title="`Ronda ${m.round || '?'} - Juego ${m.gameVariant || m.variant || '?'}`">R{{ m.round || '?' }}/{{ (m.gameVariant || m.variant || '?').replace('G', '') }}</span>
|
||||||
<span class="x">{{ m.text }}</span>
|
<span class="x">{{ m.text }}</span>
|
||||||
<span class="room">{{ (m.roomId || '').slice(0,8) }}</span>
|
<span class="room">{{ (m.roomId || '').slice(0,8) }}</span>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user