Skip to content

Repository files navigation

TFG — Game Server Client

Plataforma de juegos controlados desde el móvil. Los dispositivos móviles actúan como mandos físicos (mediante sensores de movimiento, botones y micrófono) conectados vía WebSocket a juegos Unity.

Arquitectura

[Móvil J1] ──┐                                  ┌── Unity (WiiGames)
              ├── ws://host:3002 ─── java-server ─┤
[Móvil J2] ──┘   (o node-server :3000)            └── (envía eventos de vuelta)
Componente Rol
java-server/ Servidor principal (Javalin, Java 21, puerto 3002). Router WebSocket con cliente web embebido.
node-server/ Servidor alternativo (Node.js, puerto 3000). Mismo protocolo.
WiiGames/ Juego principal — Unity 2D multijugador (plataformas, personaje Berie, monedas, destructibles).
tilt-maze/ Juego heredado — Unity 3D laberinto de bola controlado por inclinación.
merge-game/ Juego adicional.
mobile-app/ App Android nativa (Kotlin + Compose + Hilt). Mando con sensores, botones, micrófono y vibración.
mobile-web/ Cliente web standalone (HTML + CSS + JS). Mismo protocolo que la app.

Inicio Rápido

1. Iniciar el servidor Java (principal)

cd java-server
mvn package -DskipTests
java -jar target/java-server-1.0.jar
# Servidor en http://0.0.0.0:3002

2. Iniciar WiiGames (Unity)

Abrir WiiGames/ en Unity Hub con Unity 6 LTS. Verificar que el campo Server Url en el Inspector de WebScoketClient.cs apunta a:

ws://<IP-DEL-PC>:3002

Presionar Play.

3. Conectar el mando

App Android (mobile-app/ o WiiCell Remote.apk):

  1. Introducir IP del PC y puerto 3002
  2. Tocar Conectar → Activar sensores

Cliente web (cualquier navegador en la misma red):

http://<IP-DEL-PC>:3002

Estructura del Proyecto

TFG-GameServerClient/
├── java-server/             # Servidor principal (Javalin, Java 21)
│   ├── src/main/java/       # server/Main.java, model/ClientStore.java
│   ├── src/main/resources/  # index.html (cliente web embebido)
│   └── pom.xml              # Dependencias + shade plugin (fat JAR)
├── node-server/             # Servidor alternativo (Node.js, ES Modules)
│   └── server.js            # HTTP + WebSocket, puerto 3000
├── WiiGames/                # Juego principal Unity 2D
│   ├── Assets/Scripts/      # WebScoketClient, GameEventManager, PlayerMovements...
│   └── ...
├── tilt-maze/               # Juego heredado Unity 3D (Tilt Maze)
├── merge-game/              # Juego adicional
├── mobile-app/              # App Android nativa (Kotlin + Compose)
│   └── app/src/main/java/com/tfg/motioncontroller/
├── mobile-web/              # Cliente web standalone
│   ├── index.html
│   ├── style.css
│   └── script.js
├── docs/                    # Documentación del proyecto
├── WiiCell Remote.apk       # APK precompilada de la app Android
├── run_server.bat           # Script de inicio para java-server (Windows)
└── README.md

Requisitos

Componente Requisito mínimo
Java JDK 21 (LTS)
Maven 3.9+
Unity 6 LTS
Android 8.0+ (API 26) — para la app nativa
Navegador Chrome 90+ / Safari 15+ — para el cliente web
Red WiFi local compartida entre PC y móvil

Protocolo WebSocket

Todos los clientes (app Android, web) y el servidor comparten el mismo protocolo JSON:

Móvil → Servidor: {"type":"join"}
Servidor → Móvil: {"type":"assignRole","playerId":1}

Móvil → Servidor → Unity:
{
  "type": "input", "gamma": 0.45, "beta": -0.12,
  "dpadX": 0, "dpadY": 0,
  "btnA": false, "btnB": false, "isYelling": false
}

Unity → Servidor → Móvil:
{"type":"collision","playerId":1,"objectName":"Enemy"}
{"type":"pickup","playerId":1,"item":"coin"}
{"type":"death","playerId":1}

Ver documentación completa en docs/- Arquitectura.md.


Mandos disponibles

App Android — mobile-app/

App nativa con Material Design 3. Instalable directamente desde WiiCell Remote.apk.

  • Sensores nativos (TYPE_GAME_ROTATION_VECTOR) con calibración automática
  • Modo Touchpad (área ovalada arrastrable) y Modo Botones (WASD)
  • Detección de soplado por micrófono
  • Vibración haptic con amplitudes variables (Android 8+)
  • Contador de pickups flotante con estilo dorado
  • Configuración de sensibilidad (Bajo/Medio/Alto/Custom)
  • Tema oscuro/claro persistente

Cliente Web — mobile-web/

SPA modular (HTML + CSS + JS). No requiere instalación; abre la URL del servidor en el navegador.

  • Mismas funcionalidades que la app nativa
  • Funciona en Android Chrome y Safari (iOS requiere HTTPS para sensores)
  • Responsive para landscape y portrait
  • Iconos Material Symbols (MD3)

Servidor Alternativo — node-server/

Si no tienes JDK 21 disponible, puedes usar el servidor Node.js con el mismo protocolo:

cd node-server
pnpm install
pnpm start    # http://0.0.0.0:3000

En Unity cambiar Server Url a ws://<IP>:3000.


Juego Heredado — tilt-maze/

El juego original de laberinto 3D (Spring Boot + TCP + HTTPS). Ya no es el proyecto activo. Su documentación de configuración se conserva en docs/ para referencia histórica. Para ejecutarlo, consultar docs/Server README.md.


Documentación

Documento Contenido
docs/- Arquitectura.md Protocolo WebSocket, contratos JSON, estado del servidor, integración Unity
docs/- Configuracion.md Guía paso a paso para levantar todos los componentes
docs/- Pruebas.md Casos de prueba, matriz de compatibilidad, métricas
docs/Mobile App README.md Documentación completa de la app Android
docs/Mobile Web README.md Documentación del cliente web
docs/Arquitectura Juegos.md Documentación detallada de los scripts Unity (WiiGames)
docs/Server README.md Servidor Spring Boot heredado (tilt-maze, solo referencia)
docs/changes/ Registro de cambios por fecha

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages